commit b7af2f1d9a6f0c973837ac0fbcdec768877de98a Author: dschlueter Date: Tue Sep 8 01:20:09 2026 +0200 Version 04 als eigenes Repository Erster Commit des Strangs "Optimierte Entscheidungsfindung mit Python" (Version 04). Die Historie der 71 Commits bis zur Trennung bleibt im uebergeordneten Repository OR_mit_Python liegen, das ab jetzt nur noch Version_03 (eingefroren) verwaltet und Version_04/ ignoriert. Bewusst kein "git subtree split": Der Pfad Version_04/ existiert erst seit der Verzeichnistrennung, ein Split braechte daher nur 7 der 41 einschlaegigen Commits - eine Teilhistorie, die vollstaendig aussieht und es nicht ist. Stand: 5 Teile, 23 Kapitel, 5 Anhaenge, 292 Abschnitte, 703 Querverweise, 325 Indexmarken, 73 Beispielprogramme, 32 SVGs, 4 Plotly-Figuren, 25 Notebooks, PDF mit 715 Seiten. Zusaetzlich in diesem Commit: * pyproject.toml mit Abhaengigkeitsgruppen finance, large-scale, api, figures, dev, empfehlungen. Die abgedruckte requirements.txt bleibt unveraendert daneben bestehen. ortools steht in der Grundausstattung, highspy erst in [large-scale] - so kann der HiGHS-Symbolkonflikt bei der schlanken Installation gar nicht erst auftreten. * Dabei zwei Funde: graphviz wird von erzeuge_architektur_diagramme.py importiert, fehlt aber in requirements.txt (jetzt in [figures]); pymoo steht in requirements.txt, wird aber von keinem Programm importiert, sondern nur im Kapitel Metaheuristiken empfohlen (jetzt in [empfehlungen]). * NEUER_TITEL.md nach Kritik_und_Verbesserungsvorschlaege/ verschoben - es ist die Vorlage des Titelblatts, kein Bestandteil des Werks. Die beiden Fundstellen in PROGRESS.md und erzeuge_titelseite.py nachgezogen. * PROGRESS.md nannte noch den Untertitel der ersten Fassung; auf den tatsaechlichen aus erzeuge_titelseite.py korrigiert. Co-Authored-By: Claude Opus 5 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b18dc3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Gilt fuer die Version 04. Alle Pfade sind relativ zu diesem Verzeichnis - +# damit funktioniert die Datei unveraendert weiter, sobald Version_04 die +# Wurzel eines eigenen Repositorys ist. + +__pycache__/ +*.pyc +venv/ +.venv/ + +# LaTeX/xelatex-Nebenprodukte des PDF-Baus (build_version_04.py --pdf) +build_v04.log +build_v04.tex +build_v04.aux +build_v04.toc +build_v04.out +build_v04.idx +build_v04.ilg +build_v04.ind +svg-inkscape/ + +# Von den Beispielprogrammen beim Lauf erzeugte Dateien +Operations_Research_mit_Python_Version_04_Programme/output/ +produktionsmix.xlsx +produktionsmix_ergebnis.xlsx diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..4a6c31e --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,147 @@ +# CLAUDE.md + +Kontext zum Repository *Optimierte Entscheidungsfindung mit Python*, Version 04. + +## Vor jeder Arbeit zuerst lesen + +* **`PLAN.md`** — das Ziel und der Weg dorthin: alle sechs Phasen, die Zielstruktur, der + Kapitel-Baukasten, die dreizehn verbindlichen Regeln, die Verifikationsschritte. Ändert + sich nur bei einem Kurswechsel. +* **`PROGRESS.md`** — der erreichte Stand: eine Checkliste zur Wiederaufnahme, die + Referenzwerte zum Gegenprüfen, was erledigt ist, welche Funde es unterwegs gab und **was + der konkret nächste Schritt ist**. Wird nach jedem Arbeitsschritt fortgeschrieben. + +Ohne diese beiden Dateien fehlt der Kontext, um sinnvoll weiterzuarbeiten — die Kapiteltexte +allein verraten weder den Stand noch die Konventionen. Alle sechs Phasen sind abgeschlossen; +`PROGRESS.md` Abschnitt 7 nennt, was bewusst offen geblieben ist und warum. + +--- + +## Struktur + +Dieses Verzeichnis ist die Wurzel; alle Skripte leiten ihre Pfade daraus ab +(`BASIS = dirname(dirname(__file__))` bzw. `dirname(HIER)`). + +``` +Operations_Research_mit_Python_Version_04/ Quelle: 31 Kapiteldateien + Build-Skripte +bilder_04/ Quelle: Diagramme + erzeuge_*.py-Generatoren +Operations_Research_mit_Python_Version_04.md generiert: Gesamtdokument +Operations_Research_mit_Python_Version_04.pdf generiert: PDF (xelatex) +OR_HTML_04/ generiert: Mehrseiten-Website +Operations_Research_mit_Python_Version_04_Programme/ generiert: Beispielprogramme +Notebooks_04/ generiert: ein .ipynb je Kapitel +Kritik_und_Verbesserungsvorschlaege/ Quelle: Rezension, Verbesserungsvorschläge, + NEUER_TITEL.md (Vorlage des Titelblatts) +pyproject.toml Quelle: Abhängigkeiten in Gruppen +pandoc-defaults-basis.yaml, pandoc/, pandoc-defaults-buch.yaml PDF-Konfiguration +``` + +Nur die als **Quelle** markierten Verzeichnisse werden von Hand bearbeitet. + +Dieses Verzeichnis ist seit dem 08.09.2026 ein **eigenes Git-Repository** (`main`). Das +übergeordnete `OR_mit_Python/` ist nur noch das Archiv der Historie bis zur Trennung und +verwaltet aktiv allein `Version_03`; es trägt `Version_04/` in seiner `.gitignore`. Commits +gehören ab jetzt hierher. + +## Build + +```bash +cd Version_04 +python3 Operations_Research_mit_Python_Version_04/build_version_04.py --check # nur prüfen +python3 Operations_Research_mit_Python_Version_04/build_version_04.py --pdf --html +python3 Operations_Research_mit_Python_Version_04/extract_programme_04.py +``` + +`--check` prüft mehr als die Struktur: fehlende Codezäune, Links auf nicht existierende +Dateien und **harte Kapitel-/Abschnitts-/Aufgabennummern im Quelltext**. Es meldet Datei und +Zeile. Der Suchausdruck erlaubt beliebigen Zwischenraum — der letzte gefundene Fall war ein +`Handrechnung\n12.1` über zwei Zeilen, an dem jede zeilenweise Suche vorbeiläuft. + +`build_version_04.py` fasst nicht notwendige harte Zeilenumbrüche innerhalb von Absätzen +zusammen (`reflow_markdown()`) — viele Markdown-Renderer stellen einen einzelnen Umbruch +sonst fälschlich als sichtbaren Umbruch dar. + +--- + +## Die wichtigsten Konventionen + +**Keine abgeleiteten Zahlen im Quelltext.** Das ist die Regel, an der dieses Projekt am +häufigsten gescheitert ist — sie wurde vier Mal an verschiedenen Stellen verletzt gefunden +(Anhang A, 66 Programm-Docstrings, die Übersichtstabellen der Anhänge, `CLAUDE.md` selbst). +Konkret: + +* Überschriften: `# Kapitel: {#kap: