fix: Toleranz bei Relaxationsschranke, Grund bei fehlgeschlagenem Szenario
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
c68a293755
commit
ee9a193cd7
1 changed files with 27 additions and 3 deletions
|
|
@ -396,7 +396,9 @@ def check_sensitivity(run, sense: str) -> list:
|
|||
Die Richtung hängt am Sinn der Restriktion und daran, ob maximiert oder minimiert wird.
|
||||
"""
|
||||
warnings = []
|
||||
besser = (lambda a, b: a > b) if sense == "maximize" else (lambda a, b: a < b)
|
||||
# mit Toleranz: beobachtet Schranke 0.13896862211718014 gegen Lösung ...17 als „schlechter" gemeldet
|
||||
besser = ((lambda a, b: a > b + _tolerance(b)) if sense == "maximize"
|
||||
else (lambda a, b: a < b - _tolerance(b)))
|
||||
by_name = {c.name: c for c in run.constraints}
|
||||
for s in run.sensitivity:
|
||||
constraint = by_name.get(s.name)
|
||||
|
|
@ -566,7 +568,9 @@ def check_multistart(run, sense: str) -> list:
|
|||
if m is None:
|
||||
return []
|
||||
warnings = []
|
||||
besser = (lambda a, b: a > b) if sense == "maximize" else (lambda a, b: a < b)
|
||||
# mit Toleranz: beobachtet Schranke 0.13896862211718014 gegen Lösung ...17 als „schlechter" gemeldet
|
||||
besser = ((lambda a, b: a > b + _tolerance(b)) if sense == "maximize"
|
||||
else (lambda a, b: a < b - _tolerance(b)))
|
||||
if m.converged > m.starts or m.converged < 0:
|
||||
warnings.append(f"Mehrstart: {m.converged} erfolgreiche von {m.starts} Startpunkten ist nicht möglich.")
|
||||
elif m.converged < 2:
|
||||
|
|
@ -685,7 +689,9 @@ def verify_scenarios(run, code: str, timeout: int = 60, data_files=()) -> list:
|
|||
data_files=data_files)
|
||||
szenario.verified_value = nachlauf.objective_value
|
||||
if nachlauf.status == SolverStatus.ERROR:
|
||||
warnings.append(f"Szenario '{szenario.name}' ließ sich nicht nachrechnen: {(nachlauf.error or '')[:120]}")
|
||||
grund = (nachlauf.error or "").strip()[:120] or (
|
||||
"das Programm meldete selbst Status 'error' ohne Fehlertext (z. B. keine Lösung im Zeitlimit)")
|
||||
warnings.append(f"Szenario '{szenario.name}' ließ sich nicht nachrechnen: {grund}")
|
||||
elif (szenario.objective_value is not None and nachlauf.objective_value is not None
|
||||
and abs(szenario.objective_value - nachlauf.objective_value)
|
||||
> 1e-6 * max(1.0, abs(szenario.objective_value))):
|
||||
|
|
|
|||
Loading…
Reference in a new issue