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>
This commit is contained in:
parent
62952ba066
commit
6c67e126dd
23 changed files with 9089 additions and 6419 deletions
13
README.md
13
README.md
|
|
@ -17,9 +17,9 @@ daraus ab, und alle Befehle unten werden **hier** ausgeführt.
|
|||
| `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, 715 Seiten |
|
||||
| `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: 73 lauffähige Beispielprogramme |
|
||||
| `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`, …) |
|
||||
|
|
@ -66,8 +66,8 @@ Wer eine schlanke Umgebung möchte, nimmt stattdessen [`pyproject.toml`](pyproje
|
|||
seinen Gruppen — die Grundausstattung trägt den Großteil des Buchs:
|
||||
|
||||
```bash
|
||||
pip install -e . # numpy, scipy, pandas, matplotlib, openpyxl, pydantic, ortools
|
||||
pip install -e ".[finance]" # cvxpy, scikit-learn, yfinance
|
||||
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
|
||||
|
|
@ -76,8 +76,9 @@ 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 nur `pip install -e .` nutzt, kann in den Konflikt gar nicht geraten; `cvxpy`
|
||||
aus `[finance]` zieht ein installiertes `highspy` bei der Solver-Erkennung selbst mit herein.
|
||||
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,
|
||||
|
|
|
|||
Loading…
Reference in a new issue