diff --git a/checks/model_checks.py b/checks/model_checks.py index 083eac5..881e8e7 100644 --- a/checks/model_checks.py +++ b/checks/model_checks.py @@ -233,7 +233,7 @@ def check_figure_readings(first, second) -> List[CheckIssue]: Ein Bildmodell kann eine Pfeilbewertung dem falschen Pfeil zuordnen oder eine Ziffer verlesen; eine einzige Lesung wäre dann ungeprüft die Datengrundlage jeder weiteren Stufe. Verglichen werden die Datenzeilen als Zahlentupel (`_number_rows`). Erster Ansatz – alle Zahlen des Freitexts – schlug im ersten echten Lauf - fälschlich an: eine Lesung zählte zusätzlich „Knoten: 1, 2, 3, 4“ auf (test_Image.md, 17.09.2026). + fälschlich an: eine Lesung zählte zusätzlich „Knoten: 1, 2, 3, 4“ auf (tasks/wegenetz_mit_abbildung.md, 17.09.2026). Eine vertauschte Pfeilrichtung (2 → 3 statt 3 → 2) fällt auf; eine in BEIDEN Lesungen gleich falsche nicht. """ from understanding.figures import canonical_figure_id diff --git a/tasks/wegenetz_mit_abbildung.md b/tasks/wegenetz_mit_abbildung.md new file mode 100644 index 0000000..f082435 --- /dev/null +++ b/tasks/wegenetz_mit_abbildung.md @@ -0,0 +1,10 @@ +## Reisekosten in einem Wegenetz (Graphentheorie) + +Die Abbildung unten zeigt ein gerichtetes Netz G = (V, E, c) aus vier Orten. Jeder Pfeil (i,j) trägt eine Bewertung c_ij: die Kosten einer Fahrt von Ort i zu Ort j. + +- a) Stellen Sie ein lineares Programm auf, das in diesem Netz die günstigsten Fahrtkosten von Ort 1 zu Ort 4 bestimmt. Führen Sie dazu für jeden Ort j eine Variable u_j ein; u_4 soll am Ende die gesuchte Entfernung angeben. +- b) Wie lautet das duale Problem zum LP aus a)? Welcher besondere LP-Typ liegt dabei vor? +- c) Berechnen Sie die Lösung des LP aus a) mit dem Simplex-Verfahren, das obere Schranken für Variablen implizit berücksichtigt. +- d) Prüfen Sie mit dem Satz vom komplementären Schlupf, ob der Weg (1,3,4) ein kürzester Weg von Ort 1 zu Ort 4 ist. + +![Image](data:image/png;base64,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) diff --git a/tests/test_figures.py b/tests/test_figures.py index 99b12c5..f619e6f 100644 --- a/tests/test_figures.py +++ b/tests/test_figures.py @@ -14,7 +14,7 @@ from understanding.understand import understand_task PNG = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==" AUFGABE = f"Gesucht sind die minimalen Fahrtkosten von Knoten 1 nach Knoten 4.\n\n![Image](data:image/png;base64,{PNG})\n" -# Graph aus test_Image.md +# Graph aus tasks/wegenetz_mit_abbildung.md GRAPH = FigureTranscription(id="Abbildung 1", shows="gerichteter Graph mit 4 Knoten", transcription="Pfeil 1 → 2: 3\nPfeil 1 → 3: 1\nPfeil 3 → 2: 1\nPfeil 2 → 4: 3\nPfeil 3 → 4: 5") VERLESEN = GRAPH.model_copy(update={"transcription": GRAPH.transcription.replace("2 → 4: 3", "2 → 4: 5")})