| Filename | Latest commit message | Latest commit date |
|---|---|---|
Neuer Abschnitt im Kapitel Praxisfallen plus Constraint_Attribution.py (75. Programm). Setzt den fehlenden Teil von Paket 3 aus Verbesserungen_02.md um. Die Luecke, die es schliesst: Erklaerbarkeit.py beantwortet "warum DIESE Zuweisung?", Konfliktsuche.py "warum geht es GAR NICHT?". Der haeufigste Fall der Praxis lag dazwischen und hatte kein Werkzeug - das Modell rechnet, der Plan ist zulaessig, und trotzdem enttaeuschend, nur weiss niemand woran es liegt. Gerechnet wird auf derselben Fabrik wie die Konfliktsuche, nach der Reparatur: Dort war die Lackierkapazitaet von 150 Stunden der Kern des Widerspruchs (2*40 + 3*30 = 170 > 150), eine zweite Schicht bringt sie auf 210. Damit laesst sich dieselbe Instanz ueber zwei Kapitel verfolgen - erst "warum nicht?", dann "was kostet was?". Drei gemessene Befunde: * Bindend heisst nicht teuer: Fuenf Bedingungen binden, "Lackierbudget Schicht 2" mit einem Schattenpreis von 0,00 EUR. * Der Schattenpreis ist eine Momentaufnahme: Fuer die Lackiererei verspricht die Hochrechnung 4,00 * 30 = 120 EUR, gemessen kommen 60 EUR; der Preis gilt exakt bis +15 Stunden. Die Ranglisten drehen sich dabei um - nach Schattenpreis fuehrt der Traegervertrag (18 EUR/Stueck), nach tatsaechlicher Wirkung die Montage-Sonderschicht (450 EUR). * Ein Wunsch kann unmoeglich statt teuer sein: "mindestens 55 Rahmen" ist INFEASIBLE, blockiert von drei Bedingungen gemeinsam. Mit +15 Stunden Lackierkapazitaet wird er erfuellbar und kostet dann nichts - der Plan waehlt diese Menge von sich aus. Der Konflikt bestand nie zwischen Vertrieb und Produktion. Der Managementbericht entsteht aus genau diesen Zahlen; kein Satz enthaelt eine Zahl, die nicht vorher gerechnet wurde. Voraussetzung ist der sprechende Name jeder Bedingung - aus A_ub[7] wird kein Satz. Dazu die Grenze, als Warnkasten und als Uebungsaufgabe: Der Bericht erklaert das Modell, nicht die Wirklichkeit. Steigt der Deckungsbeitrag von Deckel von 9 auf 20 EUR, kippt der Plan (Rahmen auf das Vertragsminimum 40, Deckel auf die Marktgrenze 120), "Kapazitaet Lackieren" hoert auf zu binden, "Liefervertrag Rahmen" faengt damit an - und der Satz "Teuerste Bindung ist Liefervertrag Traeger" steht woertlich unveraendert im Bericht, waehrend die Zahl dahinter von 18 auf 58 EUR springt. Die Zaehlprobe aus 6.1a hat sich sofort bewaehrt: Nach dem Einbau der Uebungsaufgabe meldete --check "6 Loesungen, das Kapitel aber 7 Aufgaben", bevor die Loesung geschrieben war. Mitgezogen: Kapitelkopf, Lernziele, Selbsttest, Zusammenfassung, Vorwort-Programmverzeichnis, Vorwaertsverweis aus Falle 2, Uebungsaufgabe und Loesung in Anhang A. Stand: 294 Abschnitte, 725 Querverweise, 328 Indexmarken, 75 Programme, 139 Aufgaben mit 139 Loesungen, 33 pytest-Tests, PDF 737 Seiten, 68 netzfreie Programme fehlerfrei. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
| .. | ||
| 00_Vorwort_und_Lesehilfe.md | ||
| 01_Notation_und_Abkuerzungen.md | ||
| 10_Einfuehrung_OR.md | ||
| 11_Mathematisches_Fundament.md | ||
| 12_Python_Oekosystem.md | ||
| 13_Vom_Wunsch_zum_Modell.md | ||
| 20_Lineare_Programmierung.md | ||
| 21_MILP.md | ||
| 22_CP_SAT.md | ||
| 23_Graphen_Fluesse_Touren.md | ||
| 24_Metaheuristiken.md | ||
| 25_Spaltengenerierung.md | ||
| 30_QP_und_NLP.md | ||
| 31_Unsicherheit.md | ||
| 32_Dynamische_Programmierung.md | ||
| 33_Mehrziel_und_Pareto.md | ||
| 34_Predict_then_Optimize.md | ||
| 35_Strukturbruecke.md | ||
| 36_Supply_Chain_Energie.md | ||
| 40_Finanzdaten.md | ||
| 41_Markowitz.md | ||
| 42_CVaR.md | ||
| 43_Handelsmaschine.md | ||
| 50_Praxis.md | ||
| 51_Testing_und_Deployment.md | ||
| 59_Projektwerkstatt.md | ||
| 90_Anhang_Loesungen.md | ||
| 91_Anhang_Modellierungsmuster.md | ||
| 92_Anhang_Fehlerdiagnose.md | ||
| 93_Anhang_Spickzettel.md | ||
| 94_Anhang_Glossar_und_Literatur.md | ||
| build_version_04.py | ||
| extract_programme_04.py | ||
| README.md | ||
| README_Programme.md | ||
Optimierte Entscheidungsfindung mit Python
Wegweiser durch diese Ausgabe. Dieses Kompendium verfolgt einen klaren Anspruch: Kursteilnehmerinnen und Kursteilnehmer sollen den Text nicht nur lesen, sondern damit arbeiten, üben und eigene Anwendungen bauen können.
Was dieses Kompendium bietet
| Merkmal | Umfang | Warum |
|---|---|---|
| Formel-Lesehilfen | bei jeder nicht-trivialen Formel | Nicht jede/r liest Formelsprache flüssig |
| Handrechnungen | Simplex, Big-M, Dualität, Bellman, CVaR | Verstehen kommt vor Programmieren |
| Zeile-für-Zeile-Code-Erklärungen | alle Kernprogramme | Code lesen lernen, nicht nur ausführen |
| Erwartete Programmausgaben | alle Programme | Selbstkontrolle: „Läuft es bei mir richtig?“ |
| ~130 Übungsaufgaben mit Lösungen | jedes Kapitel | Aktives Üben statt passives Lesen |
| Selbsttests | jedes Kapitel | Schnelle Wissenskontrolle |
| Codebeispiele durchgängig lauffähig | u. a. Rucksack, Zuordnung, Job-Shop, Monte-Carlo, robuste Optimierung, Min-Cost-Flow | Theorie und Code gehören zusammen |
| Notations- und Abkürzungsverzeichnis | 01_Notation_und_Abkuerzungen.md |
Jede Abkürzung genau einmal sauber eingeführt |
| Projektwerkstatt | 59_Projektwerkstatt.md |
8 vollständige Projektaufträge für eigene Anwendungen |
| Modellierungsmuster-Katalog | 91_Anhang_Modellierungsmuster.md |
Nachschlagewerk: „Wie modelliere ich X?“ |
| Fehlerdiagnose-Handbuch | 92_Anhang_Fehlerdiagnose.md |
Was tun, wenn der Solver INFEASIBLE meldet? |
Aufbau der Dateien
Der Text ist auf mehrere Dateien verteilt, damit er handhabbar bleibt. Die Nummern-Präfixe legen die Lesereihenfolge fest.
Vorspann
| Datei | Inhalt |
|---|---|
00_Vorwort_und_Lesehilfe.md |
Vorwort, Lernpfade, Verzeichnis der Beispielprogramme, Setup, wie die Lernelemente funktionieren |
01_Notation_und_Abkuerzungen.md |
Alle Symbole und Abkürzungen, ausgeschrieben und erklärt |
Teil I — Grundlagen
| Datei | Kapitel |
|---|---|
10_Einfuehrung_OR.md |
1 — Einführung in Operations Research |
11_Mathematisches_Fundament.md |
2 — Vektoren, Matrizen, Konvexität |
12_Python_Oekosystem.md |
3 — Das Python-Ökosystem für OR |
Teil II — Deterministische Kernverfahren
| Datei | Kapitel |
|---|---|
20_Lineare_Programmierung.md |
4 — Lineare Programmierung, Simplex, Dualität |
21_MILP.md |
5 — Gemischt-ganzzahlige Optimierung |
22_CP_SAT.md |
6 — Constraint Programming mit CP-SAT |
23_Graphen_Fluesse_Touren.md |
7 — Graphen, Flüsse, Tourenplanung |
Teil III — Nichtlinearität, Unsicherheit, Dynamik
| Datei | Kapitel |
|---|---|
30_QP_und_NLP.md |
8 — Quadratische und nichtlineare Optimierung, KKT |
31_Unsicherheit.md |
9 — Monte-Carlo, stochastische und robuste Optimierung |
32_Dynamische_Programmierung.md |
10 — Dynamische Programmierung, Bellman |
Teil IV — Operations Research an den Finanzmärkten
| Datei | Kapitel |
|---|---|
40_Finanzdaten.md |
11 — Finanzdaten, Kovarianz, Shrinkage |
41_Markowitz.md |
12 — Markowitz-Portfoliotheorie |
42_CVaR.md |
13 — Tail-Risiko, CVaR, Transaktionskosten |
43_Handelsmaschine.md |
14 — Die vollständige Handelsmaschine |
Teil V — Praxis
| Datei | Kapitel |
|---|---|
50_Praxis.md |
15 — Praxisfallen und produktiver Einsatz |
59_Projektwerkstatt.md |
Projektwerkstatt: 8 eigene Anwendungen |
Anhang
| Datei | Inhalt |
|---|---|
90_Anhang_Loesungen.md |
Lösungen zu allen Übungsaufgaben und Selbsttests |
91_Anhang_Modellierungsmuster.md |
Musterkatalog: 24 wiederkehrende Modellierungstricks |
92_Anhang_Fehlerdiagnose.md |
Diagnose-Handbuch für Solver-Probleme |
94_Anhang_Glossar_und_Literatur.md |
Glossar, Literatur |
Eine Einzeldatei erzeugen
Wer lieber ein einziges Dokument möchte (z. B. zum Drucken oder für die PDF-Erzeugung), baut es aus den Einzeldateien:
cd OR_mit_Python/Version_04 # Wurzel der Version 04
python3 Operations_Research_mit_Python_Version_04/build_version_04.py
Das Skript erzeugt Operations_Research_mit_Python_Version_04.md im übergeordneten
Verzeichnis — in derselben Reihenfolge wie oben, mit Titelblock, automatisch gesetztem
Inhaltsverzeichnis-Platzhalter und entfernten unnötigen Zeilenumbrüchen innerhalb von
Absätzen. Optionen:
python3 .../build_version_03.py --pdf # zusätzlich PDF über pandoc + xelatex
python3 .../build_version_03.py --html # zusätzlich Single-Page-HTML
python3 .../build_version_03.py --check # nur Konsistenzprüfung, schreibt nichts
Empfohlene Reihenfolge für Kursteilnehmer
Vollständiger Lehrgang (empfohlen, ca. 100–140 Stunden): Vorwort → Notation → alle Kapitel der Reihe nach → Projektwerkstatt. Jedes Kapitel endet mit Übungsaufgaben — bearbeiten Sie diese, bevor Sie weiterlesen.
Schnellpfad Planung & Disposition (ca. 25 Stunden): Einführung, Fundament, Vom Wunsch zum Modell, LP, MILP, CP-SAT → Projekt P1 oder P2.
Schnellpfad Logistik (ca. 25 Stunden): Einführung, Fundament, LP, MILP, Graphen → Projekt P3.
Schnellpfad Quantitative Finance (ca. 30 Stunden): Einführung, Fundament, QP/NLP, Finanzdaten, Markowitz, CVaR, Handelsmaschine → Projekt P6 oder P7.
(Ohne Kapitelnummern — die verschieben sich beim Einfügen neuer Kapitel. Die maßgebliche, immer aktuelle Fassung der Lernpfade steht im Vorwort.)
Details zu den Lernpfaden stehen in 00_Vorwort_und_Lesehilfe.md.
Autor / Herausgeber: Dieter Schlüter · Stand: 8. September 2026