| Filename | Latest commit message | Latest commit date |
|---|---|---|
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>
|
||
| .. | ||
| 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 | ||
| 19_Synthese_Grundlagen.md | ||
| 20_Lineare_Programmierung.md | ||
| 21_MILP.md | ||
| 22_CP_SAT.md | ||
| 23_Graphen_Fluesse_Touren.md | ||
| 24_Metaheuristiken.md | ||
| 25_Spaltengenerierung.md | ||
| 29_Synthese_Kernverfahren.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 | ||
| 39_Synthese_Nichtlinear.md | ||
| 40_Finanzdaten.md | ||
| 41_Markowitz.md | ||
| 42_CVaR.md | ||
| 43_Handelsmaschine.md | ||
| 49_Synthese_Anwendungen.md | ||
| 50_Praxis.md | ||
| 51_Testing_und_Deployment.md | ||
| 52_Synthese_Praxis.md | ||
| 59_Projektwerkstatt.md | ||
| 90_Anhang_Loesungen.md | ||
| 91_Anhang_Modellierungsmuster.md | ||
| 92_Anhang_Fehlerdiagnose.md | ||
| 93_Anhang_Spickzettel.md | ||
| 94_Anhang_Glossar.md | ||
| 95_Anhang_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.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. 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