operations_research/Operations_Research_mit_Python_Version_04
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dschlueter 567bfa799a Statische Website-Assets in die Quelle web_04/ holen
site.css, site.js, icons.svg, plotly.min.js und die 22 KaTeX-Dateien lagen in
OR_HTML_04/, obwohl kein Skript sie je geschrieben hat. Die Falle daran: Wer
eine CSS-Regel suchte, suchte sie in den Quellen und fand nichts - genau das
ist beim Einruecken des ZIP-Menuepunkts passiert. Und wer OR_HTML_04/ geloescht
und neu gebaut haette, haette eine Website ohne Stil, ohne Symbole und ohne
Formelsatz bekommen.

Jetzt liegen sie in web_04/, dessen Aufbau (assets/, katex/) das Ziel spiegelt.
spiegle_statische_assets() kopiert sie bei JEDEM Lauf.
kopiere_plotly_bibliothek() fuellt die Quelle statt des Ziels.
_lade_icon_sprite_inline() und die beiden KaTeX-Pruefungen lesen die Quelle,
haengen also nicht mehr vom eigenen Ergebnis ab.

Zwei Waechter, weil genau diese Verwechslung schon vorgekommen ist:

* Wurde die Kopie in OR_HTML_04/ von Hand geaendert (Inhalt weicht ab UND
  Zeitstempel ist neuer), bricht der Bau ab und nennt den mv-Befehl, der es
  richtigstellt - kein stilles Ueberschreiben.
* pruefe_assets() liest die href=/src=-Literale aus dem Quelltext des
  Bauskripts und verlangt fuer jedes einen Erzeuger: entweder web_04/ oder die
  Liste ERZEUGTE_ASSETS (highlight.css, search-index.js, programme.js).

Probe: rm -rf OR_HTML_04 && --html baut alle 213 Dateien wieder auf,
Dateiliste identisch zur Sicherung.

Fund dabei: Das Stichwortverzeichnis war nicht byte-reproduzierbar

ziel_links() sortierte nach (seite, kontext) - und kontext ist der
Kapiteltitel, fuer alle Marken einer Datei also derselbe. Bei zwei Fundstellen
im selben Kapitel war der Schluessel gleich, und die Reihenfolge fiel auf die
eines set() zurueck, also auf den je Prozess zufaelligen PYTHONHASHSEED. Zwei
Laeufe erzeugten unterschiedliche Bytes ohne Quellaenderung.

Derselbe Fehler war auch sichtbar: vier {idx:Branch-and-Bound} in Kapitel 6
ergaben vier optisch identische Links nebeneinander; zehn Registereintraege
waren betroffen. Behoben durch einen Link je Kapitel (erste Fundstelle in
Dokumentreihenfolge, dict statt set) - das macht die Sortierung zugleich
eindeutig.

Gegenprobe: drei Laeufe mit PYTHONHASHSEED=random liefern dieselbe Pruefsumme.
219 Fachbegriffe und 328 Indexmarken unveraendert.

Nachtrag zum vorigen Commit: highlight.css gehoert NICHT zu den Handdateien -
erzeuge_highlight_css() erzeugt sie aus pandoc --print-highlight-style. Die
Notiz in PROGRESS.md ist korrigiert.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 16:24:56 +02:00
..
00_Vorwort_und_Lesehilfe.md Phase 7.3: Glossar "Deutsch - OR" - und die Gegenrichtung 2026-09-08 11:46:17 +02:00
01_Notation_und_Abkuerzungen.md Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
10_Einfuehrung_OR.md Aufgeraeumt: 33 PNG-Zweitfassungen, Bau-Ueberbleibsel, Ausgabepfade 2026-09-08 14:22:26 +02:00
11_Mathematisches_Fundament.md Sechster und siebter Fund: die letzten handgeschriebenen Nummern 2026-09-08 09:52:41 +02:00
12_Python_Oekosystem.md Phase 8.2: Solver-Isolation ohne subprocess-Codestrings 2026-09-08 12:39:34 +02:00
13_Vom_Wunsch_zum_Modell.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
19_Synthese_Grundlagen.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
20_Lineare_Programmierung.md Achter Fund (Uebung-Verweise) und Phase 8.3: Dockerfile 2026-09-08 13:18:05 +02:00
21_MILP.md Phase 6.3: Parallelitaet und Determinismus - gemessen statt behauptet 2026-09-08 11:19:53 +02:00
22_CP_SAT.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
23_Graphen_Fluesse_Touren.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
24_Metaheuristiken.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
25_Spaltengenerierung.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
29_Synthese_Kernverfahren.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
30_QP_und_NLP.md Achter Fund (Uebung-Verweise) und Phase 8.3: Dockerfile 2026-09-08 13:18:05 +02:00
31_Unsicherheit.md Achter Fund (Uebung-Verweise) und Phase 8.3: Dockerfile 2026-09-08 13:18:05 +02:00
32_Dynamische_Programmierung.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
33_Mehrziel_und_Pareto.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
34_Predict_then_Optimize.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
35_Strukturbruecke.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
36_Supply_Chain_Energie.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
39_Synthese_Nichtlinear.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
40_Finanzdaten.md Achter Fund (Uebung-Verweise) und Phase 8.3: Dockerfile 2026-09-08 13:18:05 +02:00
41_Markowitz.md Sechster und siebter Fund: die letzten handgeschriebenen Nummern 2026-09-08 09:52:41 +02:00
42_CVaR.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
43_Handelsmaschine.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
49_Synthese_Anwendungen.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
50_Praxis.md Achter Fund (Uebung-Verweise) und Phase 8.3: Dockerfile 2026-09-08 13:18:05 +02:00
51_Testing_und_Deployment.md Phase 8.2: Solver-Isolation ohne subprocess-Codestrings 2026-09-08 12:39:34 +02:00
52_Synthese_Praxis.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
59_Projektwerkstatt.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
90_Anhang_Loesungen.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
91_Anhang_Modellierungsmuster.md Phase 8.1: Synthese-Seiten je Teil - und die gebrochene Lesekette 2026-09-08 12:10:02 +02:00
92_Anhang_Fehlerdiagnose.md Phase 8.2: Solver-Isolation ohne subprocess-Codestrings 2026-09-08 12:39:34 +02:00
93_Anhang_Spickzettel.md Glossar und Literatur trennen, Menue um Glossar und ZIP-Download ergaenzen 2026-09-08 15:48:57 +02:00
94_Anhang_Glossar.md Glossar und Literatur trennen, Menue um Glossar und ZIP-Download ergaenzen 2026-09-08 15:48:57 +02:00
95_Anhang_Literatur.md Glossar und Literatur trennen, Menue um Glossar und ZIP-Download ergaenzen 2026-09-08 15:48:57 +02:00
build_version_04.py Statische Website-Assets in die Quelle web_04/ holen 2026-09-08 16:24:56 +02:00
extract_programme_04.py Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
README.md Glossar und Literatur trennen, Menue um Glossar und ZIP-Download ergaenzen 2026-09-08 15:48:57 +02:00
README_Programme.md Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00

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.md Glossar der Fachbegriffe
95_Anhang_Literatur.md Literaturverzeichnis

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. 100140 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