feat: Szenario ohne Ergebnis nicht mehr zuverlässig; Schlupf aus dem Solver-Prompt

check_scenarios_solved meldet Szenarien ohne Zielwert, die nicht belegt unlösbar
sind (beobachtet: SCIP-Zeitlimit ohne Lösung als 'keine Lösung' gemeldet);
Befund löst Solver-Reparatur aus, bleibt er, reliable=False. Solver-Prompt:
timelimit ohne Lösung ist keine Unlösbarkeit, Warmstart über createSol/addSol.
Der Fachbegriff Schlupf kam aus dem Prompt selbst und ist entfernt.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Dieter Schlüter 2026-09-17 14:41:54 +02:00
commit 4bd701c87e

View file

@ -583,3 +583,25 @@ def test_rejected_result_cannot_be_continued_and_counts_as_failure(tmp_path, mon
zeile = benchmark.run_case({"name": "gleichung", "task": "x! = 120", "expected": {}}, "fake", 1)
assert zeile["solver_status"] == "abgelehnt" and zeile["task_ok"] is False
benchmark.print_table([zeile]) # die Ergebnistabelle verkraftet die Zeile
def _mit_szenario(wert):
return STRUCTURED_CODE.replace(
" )\n\n\nif __name__",
' scenarios=[{"name": "Ausgewogen", "description": "-", "data_override": {"faktor": 2}, '
f'"objective_value": {wert}}}],\n )\n\n\nif __name__')
def test_scenario_without_result_is_repaired():
# beobachtet (Portfolio Nr. 2): Zeitlimit ohne Lösung wurde als „keine Lösung" gemeldet
session = FakeSession([GOOD], [OK], [SolverCode(code=_mit_szenario(None)), SolverCode(code=_mit_szenario(8.0))])
result = run_pipeline("Minimiere die Kosten.", session=session, max_revisions=0, max_restarts=0, solver_retries=1)
assert session.calls[SolverCode] == 2 # der Befund hat eine Reparatur ausgelöst
assert result.reliable and result.solver_run.unsolved_scenarios == []
def test_persistent_scenario_without_result_is_unreliable():
session = FakeSession([GOOD], [OK], [SolverCode(code=_mit_szenario(None))] * 2)
result = run_pipeline("Minimiere die Kosten.", session=session, max_revisions=0, max_restarts=0, solver_retries=1)
assert not result.reliable
assert any(p.startswith("Szenario ohne Ergebnis") for p in result.reliability_issues)