Optimierte Entscheidungsfindung mit Python — Version 04
  • HTML 55.6%
  • Python 39.9%
  • CSS 2.5%
  • TeX 0.8%
  • JavaScript 0.6%
  • Other 0.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dschlueter 6c67e126dd Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit"
Neuer Abschnitt im Kapitel Unsicherheit plus Chance_Constraints.py (74.
Programm). Das Kapitel hatte Monte-Carlo, Zweistufigkeit und
Worst-Case-Robustheit; die Wahrscheinlichkeitszusage war die fehlende vierte
Antwort - und die, nach der das Management tatsaechlich fragt. Setzt Paket 4
aus Verbesserungen_02.md um.

Beide Wege an DERSELBEN Instanz (Kraftwerkspark, 500 MW gesicherte Zusage):
analytisch als Second-Order-Cone-Bedingung (CLARABEL) und szenariobasiert als
Big-M-MILP (SciPy/HiGHS) - beides in einem Prozess, ohne ortools- oder
highspy-Import.

Drei gemessene Befunde:

* Der Mittelwertplan haelt 50,08 %. Kein Fehler, sondern die Definition des
  Erwartungswerts.
* Sicherheit ist konvex bepreist: 56.289 EUR je Prozentpunkt auf dem Weg zu
  80 %, 253.848 EUR zwischen 95 und 99 % - das 4,5-fache. Das Programm
  rechnet die Tabelle selbst aus, statt sie zu behaupten.
* Die Zusage gilt nur fuer die unterstellte Verteilung: Der 95-%-Plan haelt
  gemessen 87,44 %, sobald die Testverteilung eine Kaeltewelle mit
  Dunkelflaute enthaelt, in der alles zugleich einbricht - auch das
  Gaskraftwerk. In einer reinen Normalwelt liefert derselbe Plan 94,97 %.

Zwei eigene Fehlgriffe, beide durch Messen aufgefallen und korrigiert: Die
erste Kostentarierung ergab eine entartete Loesung (alles ins Gaskraftwerk),
womit die Kovarianzmatrix wirkungslos war - und gerade sie begruendet die
Kegelform. Und der erste Kaelteeinbruch traf nur Wind und Sonne; der SOC-Plan
hatte die ohnehin herausgehalten und war zufaellig robust, das Argument trug
nicht.

Ehrlich berichtet statt geglaettet: Die Szenariomethode ueberanpasst. Ueber
zwoelf Laeufe (S = 200, 400, 800) lag die tatsaechliche Quote zwischen
93,14 % und 96,71 %, und die Spanne wurde von S = 400 auf 800 wieder
breiter. Beide Solver bestaetigen optimal bei identischen Kosten - echte
Ueberanpassung, kein Solverartefakt. Steht als Warnkasten im Abschnitt.

Die Laufzeitmessung ist aus der Ausgabe entfernt: Eine Wanduhrzeit ist nie
byteidentisch reproduzierbar (2,2 s / 2,3 s zwischen zwei Laeufen) und haette
Regel 4 dauerhaft gebrochen. Danach drei Laeufe zeichengleich, und die
abgedruckte Ausgabe stimmt mit dem Lauf des extrahierten Programms ueberein.

Mitgezogen: Kapitelkopf, Lernziele, Uebersichtstabelle (drei -> vier
Ansaetze), Selbsttest, Zusammenfassung, Vorwort-Programmverzeichnis, eine
neue Uebungsaufgabe und ihre Loesung in Anhang A.

pyproject.toml korrigiert: cvxpy lag in [finance], wird aber von 13
Programmen gebraucht, darunter dreien in diesem Kapitel - jetzt in der
Grundausstattung. Es zieht kein highspy nach, der Solverkonflikt bleibt auf
[large-scale] beschraenkt.

Stand: 293 Abschnitte, 712 Querverweise, 327 Indexmarken, 74 Programme (0
Fehler), 33 pytest-Tests, PDF 725 Seiten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 01:57:19 +02:00
bilder_04 Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
Kritik_und_Verbesserungsvorschlaege Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
Notebooks_04 Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
Operations_Research_mit_Python_Version_04 Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
Operations_Research_mit_Python_Version_04_Programme Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
OR_HTML_04 Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
pandoc Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
.gitignore Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
CLAUDE.md Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
Operations_Research_mit_Python_Version_04.md Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
Operations_Research_mit_Python_Version_04.pdf Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
pandoc-defaults-basis.yaml Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
pandoc-defaults-buch.yaml Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
PLAN.md Version 04 als eigenes Repository 2026-09-08 01:20:09 +02:00
PROGRESS.md Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
pyproject.toml Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00
README.md Phase 6.1: Chance Constraints - die Zusage "mit 95 % Sicherheit" 2026-09-08 01:57:19 +02:00

Optimierte Entscheidungsfindung mit Python — Version 04

Quellen, Build-Werkzeuge und Ausgaben des Lehrbuchs Optimierte Entscheidungsfindung mit Python (Autor: Dieter Schlüter). Dieses Verzeichnis ist die Wurzel: Alle Skripte leiten ihre Pfade daraus ab, und alle Befehle unten werden hier ausgeführt.

Dies ist die Bau-Anleitung für das Repository. Der Wegweiser für Leserinnen und Leser des Buchs — Aufbau, Lernpfade, Voraussetzungen — steht in Operations_Research_mit_Python_Version_04/README.md.


Was hier liegt

Pfad Rolle
Operations_Research_mit_Python_Version_04/ Quelle: 31 Kapiteldateien + Build-Skripte
bilder_04/ Quelle: Diagramme (SVG/PNG) + erzeuge_*.py-Generatoren
Operations_Research_mit_Python_Version_04.md generiert: Gesamtdokument (Pandoc-Eingabe)
Operations_Research_mit_Python_Version_04.pdf generiert: PDF, 725 Seiten
OR_HTML_04/ generiert: Mehrseiten-Website — dieser Ordner wird veröffentlicht
Operations_Research_mit_Python_Version_04_Programme/ generiert: 74 lauffähige Beispielprogramme
Notebooks_04/ generiert: ein Jupyter-Notebook je Kapitel
PLAN.md / PROGRESS.md das Ziel des Umbaus und der erreichte Stand
pyproject.toml Abhängigkeiten in Gruppen (finance, large-scale, api, …)
pandoc-defaults-*.yaml, pandoc/ Konfiguration des PDF-Baus

Nur die als Quelle markierten Verzeichnisse werden von Hand bearbeitet. Alles andere wird erzeugt und bei jeder inhaltlichen Änderung neu gebaut — insbesondere gehören Programmänderungen in den Kapitel-Codeblock, nicht in das Programme-Verzeichnis.


Bauen

cd Version_04

# nur prüfen: Struktur, Querverweise, Codezäune, harte Nummern
python3 Operations_Research_mit_Python_Version_04/build_version_04.py --check

# Gesamtdokument, PDF und Website
python3 Operations_Research_mit_Python_Version_04/build_version_04.py --pdf --html

# Beispielprogramme aus den Kapiteln extrahieren
python3 Operations_Research_mit_Python_Version_04/extract_programme_04.py

Die Website ist danach in OR_HTML_04/ vollständig und selbstgenügsam — alle Verweise zeigen auf Unterverzeichnisse (assets/, bilder_04/, katex/, Notebooks_04/). Der Ordner lässt sich unverändert auf einen Webserver kopieren.


Voraussetzungen

Python-Pakete — alles auf einen Schlag, wie im Buch abgedruckt (requirements.txt):

python3 -m venv .venv && source .venv/bin/activate
pip install -r Operations_Research_mit_Python_Version_04_Programme/requirements.txt

Wer eine schlanke Umgebung möchte, nimmt stattdessen pyproject.toml mit seinen Gruppen — die Grundausstattung trägt den Großteil des Buchs:

pip install -e .                  # numpy, scipy, pandas, matplotlib, openpyxl, pydantic, ortools, cvxpy
pip install -e ".[finance]"       # scikit-learn, yfinance
pip install -e ".[large-scale]"   # highspy, Pyomo, linopy, polars
pip install -e ".[api]"           # fastapi, uvicorn, httpx
pip install -e ".[figures]"       # plotly, graphviz — nur zum Neuerzeugen der Diagramme
pip install -e ".[dev]"           # pytest

ortools steht in der Grundausstattung, highspy erst in [large-scale]. Das ist Absicht: Beide bringen eine eigene HiGHS-Kopie mit und vertragen sich nicht im selben Prozess. Wer die Grundausstattung installiert, kann in den Konflikt gar nicht geraten — cvxpy zieht highspy nicht nach, erkennt es aber, sobald [large-scale] es mitgebracht hat.

graphviz fehlt in der requirements.txt — es wird allein von bilder_04/erzeuge_architektur_diagramme.py gebraucht, nicht von den Beispielprogrammen, und steht darum nur in [figures].

Externe Werkzeuge, je nachdem, was gebaut werden soll:

Werkzeug wofür ohne es
pandoc (≥ 3.0) PDF und Website --pdf/--html scheitern; --check läuft
xelatex + texindy PDF kein PDF; Website unberührt
inkscape SVG-Grafiken im PDF LaTeX bricht bei \includesvg ab
dot (Graphviz) 5 der 15 Bildgeneratoren nur beim Neuerzeugen dieser Diagramme nötig

OR_HTML_04/katex/ ist externes Material und wird von keinem Skript erzeugt. Fehlt es, bleiben die Formeln auf der Website ungesetzt.


Zwei Werte, die beim Veröffentlichen zu setzen sind

  1. COLAB_BASIS_URL in Operations_Research_mit_Python_Version_04/build_version_04.py. Sie trägt Kontoname und Repository-Name; die 25 Colab-Badges auf den Kapitelseiten hängen daran. Der Pfadteil Notebooks_04/… wird relativ zur Repository-Wurzel aufgelöst und stimmt bereits. Ein Leerstring schaltet die Badges ab.
  2. Nichts weiter. Alle übrigen Pfade sind relativ.

Warum die PDF-Konfiguration doppelt vorliegt

pandoc-defaults-basis.yaml ist eine Kopie der Benutzerdatei ~/.config/pandoc/defaults.yaml (Schriften, Geometrie, Seitenlayout) — mit relativem Pfad auf pandoc/header-includes.tex statt des absoluten, der dort steht. Ohne diese Kopie könnte ein frischer Klon kein PDF bauen. build_version_04.py bevorzugt sie und fällt auf die Benutzerdatei zurück, falls sie fehlt.

pandoc-defaults-buch.yaml enthält die projektspezifischen Überschreibungen (Inhaltsverzeichnis und Nummerierung werden im Markdown selbst erzeugt, -shell-escape für \includesvg). Die eigentliche Buchtypografie steht in bilder_04/or_pdf_header.tex.


Verlauf

Version 04 baut das Werk vom Nachschlagewerk zum Kursbegleiter um; alle sechs Phasen sind abgeschlossen. Was geplant war, steht in PLAN.md; was erreicht ist und woran man das nachprüft, in PROGRESS.md — einschließlich der Funde unterwegs und der Regeln, die sich daraus ergeben haben. Wer hier weiterarbeitet, liest beide zuerst.