operations_research/OR_HTML_04/index.html

144 lines
32 KiB
HTML
Raw Normal View History

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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Start · Optimierte Entscheidungsfindung mit Python</title>
<script>
(function () {
try {
var t = localStorage.getItem("or-theme");
if (t) document.documentElement.setAttribute("data-theme", t);
} catch (e) {}
})();
</script>
<link rel="stylesheet" href="assets/highlight.css" />
<link rel="stylesheet" href="katex/katex.min.css" />
<script defer="" src="katex/katex.min.js"></script>
<script>document.addEventListener("DOMContentLoaded", function () {
var mathElements = document.getElementsByClassName("math");
var macros = [];
for (var i = 0; i < mathElements.length; i++) {
var texText = mathElements[i].firstChild;
if (mathElements[i].tagName == "SPAN") {
katex.render(texText.data, mathElements[i], {
displayMode: mathElements[i].classList.contains('display'),
throwOnError: false,
macros: macros,
fleqn: false
});
}}
// Der Browser springt zu einem #anker in der URL schon beim ersten Rendern
// an, BEVOR die KaTeX-Formeln oben im Text ihre finale Hoehe bekommen -
// durch den Reflow landet der Anker danach zu weit unten. Nach dem
// Formel-Rendering hier erneut zum Anker springen, das behebt es.
if (location.hash) {
var ziel = document.getElementById(decodeURIComponent(location.hash.slice(1)));
if (ziel) ziel.scrollIntoView({behavior: "instant", block: "start"});
}
});
</script>
<link rel="stylesheet" href="assets/site.css" />
</head>
<body>
<svg style="display:none" aria-hidden="true"><symbol id="icon-menu" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
<line x1="3" y1="6" x2="21" y2="6"/><line x1="3" y1="12" x2="21" y2="12"/><line x1="3" y1="18" x2="21" y2="18"/>
</symbol>
<symbol id="icon-search" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
<circle cx="11" cy="11" r="7"/><line x1="21" y1="21" x2="16.2" y2="16.2"/>
</symbol>
<symbol id="icon-sun" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round">
<circle cx="12" cy="12" r="4.5"/>
<line x1="12" y1="1.5" x2="12" y2="4"/><line x1="12" y1="20" x2="12" y2="22.5"/>
<line x1="1.5" y1="12" x2="4" y2="12"/><line x1="20" y1="12" x2="22.5" y2="12"/>
<line x1="4.5" y1="4.5" x2="6.2" y2="6.2"/><line x1="17.8" y1="17.8" x2="19.5" y2="19.5"/>
<line x1="19.5" y1="4.5" x2="17.8" y2="6.2"/><line x1="6.2" y1="17.8" x2="4.5" y2="19.5"/>
</symbol>
<symbol id="icon-moon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M20 14.5A8.5 8.5 0 1 1 9.5 4a6.8 6.8 0 0 0 10.5 10.5z"/>
</symbol>
<symbol id="icon-chevron-left" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="15 4 7 12 15 20"/>
</symbol>
<symbol id="icon-chevron-right" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="9 4 17 12 9 20"/>
</symbol>
<symbol id="icon-check" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<polyline points="4 13 9.5 18.5 20 6"/>
</symbol>
<symbol id="icon-external-link" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M18 13.5V19a1.5 1.5 0 0 1-1.5 1.5H5A1.5 1.5 0 0 1 3.5 19V7A1.5 1.5 0 0 1 5 5.5h5.5"/>
<polyline points="14.5 3.5 20.5 3.5 20.5 9.5"/><line x1="11" y1="13" x2="20" y2="4"/>
</symbol>
<symbol id="icon-book" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M4 5.5A2 2 0 0 1 6 4h6v16H6a2 2 0 0 0-2 1.5z"/>
<path d="M20 5.5A2 2 0 0 0 18 4h-6v16h6a2 2 0 0 1 2 1.5z"/>
</symbol>
<symbol id="icon-copy" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/>
</symbol>
<symbol id="icon-download" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M12 3v12"/><polyline points="7 10 12 15 17 10"/><path d="M4 19.5h16"/>
</symbol></svg>
<header class="site-header">
<button type="button" class="icon-btn" id="sidebar-toggle" aria-label="Menü öffnen"><svg class="icon" aria-hidden="true"><use href="#icon-menu"></use></svg></button>
<a class="brand" href="index.html"><svg class="icon" aria-hidden="true"><use href="#icon-book"></use></svg> <span>Optimierte Entscheidungsfindung mit Python</span></a>
<div class="site-search">
<input id="suche-eingabe" type="search" placeholder="Suchen …" aria-label="Suche" autocomplete="off" />
<svg class="icon such-icon" aria-hidden="true"><use href="#icon-search"></use></svg>
<div id="suche-ergebnisse" class="suche-ergebnisse" hidden></div>
</div>
<button type="button" class="icon-btn" id="theme-toggle" aria-label="Darstellung umschalten">
<svg class="icon icon-sun" aria-hidden="true"><use href="#icon-sun"></use></svg><svg class="icon icon-moon" aria-hidden="true"><use href="#icon-moon"></use></svg>
</button>
</header>
<div class="site-body">
<div class="sidebar-overlay" id="sidebar-overlay" hidden></div>
<nav class="sidebar" id="sidebar" aria-label="Kapitelnavigation"><div class="sidebar-inhalt"><details class="sidebar-gruppe"><summary>Einstieg</summary><ul><li data-kapitel="vorwort.html"><a href="vorwort.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Vorwort & Lesehilfe</span></a></li><li data-kapitel="notation.html"><a href="notation.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Notation & Abkürzungen</span></a></li></ul></details><details class="sidebar-gruppe"><summary>Teil I: Grundlagen des Operations Research</summary><ul><li data-kapitel="einfuehrung.html"><a href="einfuehrung.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 1: Einführung in Operations Research — Vom Ursprung zur mathematischen Entscheidungsfindung</span></a></li><li data-kapitel="fundament.html"><a href="fundament.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 2: Das mathematische Fundament — Vektoren, Matrizen, Konvexität</span></a></li><li data-kapitel="oekosystem.html"><a href="oekosystem.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 3: Das Python-Ökosystem für OR — Solver, Bindings und Modellierungsschichten</span></a></li><li data-kapitel="modellierung.html"><a href="modellierung.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 4: Vom Management-Wunsch zum Modell</span></a></li><li data-kapitel="synthese-grundlagen.html"><a href="synthese-grundlagen.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Synthese Teil I</span></a></li></ul></details><details class="sidebar-gruppe"><summary>Teil II: Die Kernverfahren der deterministischen Optimierung</summary><ul><li data-kapitel="lp.html"><a href="lp.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 5: Lineare Programmierung — Simplex, Dualität und Schattenpreise</span></a></li><li data-kapitel="milp.html"><a href="milp.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 6: Gemischt-ganzzahlige Optimierung — Diskrete Entscheidungen und Branch-and-Bound</span></a></li><li data-kapitel="cpsat.html"><a href="cpsat.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 7: Constraint Programming mit CP-SAT — Logik, Scheduling und Zuweisung</span></a></li><li data-kapitel="graphen.html"><a href="graphen.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 8: Graphen, Flüsse und Touren — Min-Cost-Flow, Matching und VRP</span></a></li><li data-kapitel="metaheuristiken.html"><a href="metaheuristiken.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 9: Metaheuristiken — wenn der exakte Solver aussteigt</span></a></li><li data-kapitel="dekomposition.html"><a href="dekomposition.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Kapitel 10: Spaltengenerierung — das Modell umbauen statt die Lösung raten</span></a></li><li data-kapitel="synthese-kernverfahren.html"><a href="synthese-kernverfahren.html"><span class="fortschritt-haken"><svg class="icon" aria-hidden="true"><use href="#icon-check"></use></svg></span><span>Synthese Teil II</span></a></li></ul></details><details class="sidebar-gruppe"><summary>Teil III: Nichtlinearität, Unsicherheit und mehrperiodige D
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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
<main class="content">
<nav class="prev-next"><span class="prev-next-leer"></span><span class="prev-next-leer"></span></nav>
<article>
<section class="hero">
<div class="hero-text">
<p class="hero-kicker">KOMPENDIUM</p>
<h1>Optimierte Entscheidungsfindung mit Python</h1>
Titeltext: eine Quelle fuer PDF-Titelseite und Startseite Die Startseite zeigte einen anderen Titeltext als das PDF. Der Text stand VIERMAL im Repository: NEUER_TITEL.md, die Konstanten in bilder_04/erzeuge_titelseite.py, der Titelblock des Vorworts - und noch einmal fest einprogrammiert im Hero-Block von baue_landingpage(). Die Ursache ist messbar: Die drei Commits, die den Titel ueberarbeitet haben (ca5621f, 199dd3b, 1659fb9 im Ursprungs-Repository), fassten jedes Mal dieselben drei Dateien an. build_version_04.py war in keinem davon, und OR_HTML_04/index.html taucht in ihren Dateilisten gar nicht auf. Online stand deshalb: Unterzeile "Von den mathematischen Grundlagen zur quantitativen Portfolio-Optimierung an den Finanzmaerkten." Kompendium "Ein vollstaendiges Kompendium mit Algorithmen ..." Anwendungen fehlte ganz Behandlung wie bei den neun Nummern-Funden zuvor: nicht die Kopie korrigieren, sondern die Kopie abschaffen. Das neue titeltexte_04.py zerlegt NEUER_TITEL.md in Titel, Untertitel, Kompendium- und Anwendungen-Absatz; PDF-Titelseite und Startseite lesen dieselbe Funktion. Der Autor bleibt bewusst Konstante im Generator - die Vorlage beschreibt das Buch, nicht sein Impressum. Der entscheidende Beleg: Die neu erzeugte titelseite.svg ist BYTE-IDENTISCH (97fb40d7...) zur vorherigen - der Umbau hat am PDF nachweislich nichts veraendert. Auch nicht am Umbruch: Die frueher handgesetzten drei Zeilen entstehen jetzt automatisch aus _umbrechen(), und zwar exakt so. Ein Textvergleich ueber das SVG war uebrigens nicht moeglich - es enthaelt kein einziges <text>-Element, matplotlib zeichnet alle 726 Buchstaben als Kurven. Das Vorwort bleibt von Hand gepflegter Buchtext, wird aber von pruefe_titeltexte() bei jedem --check gegen die Quelle gestellt. Gleich beim ersten Lauf fand es einen echten Unterschied: Das Vorwort setzte einen Geviertstrich, die Vorlage einen Halbgeviertstrich. Im Deutschen ist der Halbgeviertstrich der richtige - das Vorwort folgt jetzt der Quelle. Veroeffentlicht: 5 Dateien uebertragen, alle vierzehn HTTP-Proben richtig. Gegenprobe vom Server: alle drei Absaetze der Startseite sind zeichengenau identisch mit NEUER_TITEL.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 19:39:49 +02:00
<p class="hero-untertitel">Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb, Technik und Finanzmärkte</p>
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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
<div class="hero-badges">
<span class="badge badge-indigo">HiGHS</span>
<span class="badge badge-emerald">SciPy</span>
<span class="badge badge-cyan">Google OR-Tools</span>
<span class="badge badge-violett">CVXPY</span>
</div>
Titeltext: eine Quelle fuer PDF-Titelseite und Startseite Die Startseite zeigte einen anderen Titeltext als das PDF. Der Text stand VIERMAL im Repository: NEUER_TITEL.md, die Konstanten in bilder_04/erzeuge_titelseite.py, der Titelblock des Vorworts - und noch einmal fest einprogrammiert im Hero-Block von baue_landingpage(). Die Ursache ist messbar: Die drei Commits, die den Titel ueberarbeitet haben (ca5621f, 199dd3b, 1659fb9 im Ursprungs-Repository), fassten jedes Mal dieselben drei Dateien an. build_version_04.py war in keinem davon, und OR_HTML_04/index.html taucht in ihren Dateilisten gar nicht auf. Online stand deshalb: Unterzeile "Von den mathematischen Grundlagen zur quantitativen Portfolio-Optimierung an den Finanzmaerkten." Kompendium "Ein vollstaendiges Kompendium mit Algorithmen ..." Anwendungen fehlte ganz Behandlung wie bei den neun Nummern-Funden zuvor: nicht die Kopie korrigieren, sondern die Kopie abschaffen. Das neue titeltexte_04.py zerlegt NEUER_TITEL.md in Titel, Untertitel, Kompendium- und Anwendungen-Absatz; PDF-Titelseite und Startseite lesen dieselbe Funktion. Der Autor bleibt bewusst Konstante im Generator - die Vorlage beschreibt das Buch, nicht sein Impressum. Der entscheidende Beleg: Die neu erzeugte titelseite.svg ist BYTE-IDENTISCH (97fb40d7...) zur vorherigen - der Umbau hat am PDF nachweislich nichts veraendert. Auch nicht am Umbruch: Die frueher handgesetzten drei Zeilen entstehen jetzt automatisch aus _umbrechen(), und zwar exakt so. Ein Textvergleich ueber das SVG war uebrigens nicht moeglich - es enthaelt kein einziges <text>-Element, matplotlib zeichnet alle 726 Buchstaben als Kurven. Das Vorwort bleibt von Hand gepflegter Buchtext, wird aber von pruefe_titeltexte() bei jedem --check gegen die Quelle gestellt. Gleich beim ersten Lauf fand es einen echten Unterschied: Das Vorwort setzte einen Geviertstrich, die Vorlage einen Halbgeviertstrich. Im Deutschen ist der Halbgeviertstrich der richtige - das Vorwort folgt jetzt der Quelle. Veroeffentlicht: 5 Dateien uebertragen, alle vierzehn HTTP-Proben richtig. Gegenprobe vom Server: alle drei Absaetze der Startseite sind zeichengenau identisch mit NEUER_TITEL.md. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 19:39:49 +02:00
<p class="hero-kompendium"><em>Ein praxisorientiertes Kompendium für Entscheider mit Constraint Programming, Vektor- und Matrixmethoden sowie HiGHS, SciPy, Google OR-Tools und CVXPY.</em></p>
<p class="hero-anwendungen">Personaleinsatz-, Schicht- und Vertretungspläne, Fahrtrouten, Logistik und Maschinen- und Netzwerkauslastung über Energieverteilung und Ressourcenplanung bis zur Portfoliooptimierung und besseren Entscheidungen an den Finanzmärkten mit Python modellieren, optimieren und belegbar fundierte Entscheidungen treffen.</p>
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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
<p class="hero-autor">Autor / Herausgeber: Dieter Schlüter<br>
&lt;dieter(dot)schlueter(atsign)linix(dot)de&gt;<br>
NEUER_TITEL.md zu den Quellen, Kritik-Verzeichnis ganz heraus Der erste Anlauf schloss Kritik_und_Verbesserungsvorschlaege/ mit einer Gegenausnahme aus, weil NEUER_TITEL.md darin lag und der Bau ohne diese Datei abbricht: Kritik_und_Verbesserungsvorschlaege/* !Kritik_und_Verbesserungsvorschlaege/NEUER_TITEL.md Das funktionierte, war aber die schlechtere Loesung: Eine Bauquelle blieb in einem Verzeichnis liegen, das aus dem Repository verschwinden soll. Jetzt steht sie als Operations_Research_mit_Python_Version_04/NEUER_TITEL.md bei den uebrigen Quellen, und .gitignore braucht nur noch eine Zeile. Eine Stelle im Build musste mit: pruefe_dateien() meldet jede .md im Quellverzeichnis, die weder in DATEIEN steht noch mit README beginnt, als "nicht eingebundene Datei". Die bis dahin leere Menge KEINE_KAPITELDATEIEN fuehrt jetzt NEUER_TITEL.md - eine Quelle, aber keine Kapiteldatei. Der Nachweis, dass der Umzug nichts veraendert hat, brauchte einen Umweg: Die Pruefsumme von titelseite.svg aenderte sich - aber nur, weil das Fussband das Tagesdatum traegt und inzwischen der 9. September war. Mit dem Datum des Vortags erzeugt, ist die Datei byte-identisch zum committeten Stand (1b076697...). Dass der Text unveraendert ist, zeigt schon der Strukturvergleich: 721 Glyphenverweise und 81 Pfaddefinitionen in beiden Fassungen. Gegengeprueft mit einem simulierten Klon (git checkout-index in ein leeres Verzeichnis): Das Kritik-Verzeichnis fehlt dort vollstaendig, NEUER_TITEL.md liegt im Quellverzeichnis, und --check liefert dieselben Zahlen wie lokal. Was das NICHT leistet: Die fuenf Dateien verschwinden aus kuenftigen Klons, nicht aus der Historie. Wer einen alten Commit auscheckt, bekommt sie weiterhin. Veroeffentlicht: 5 Dateien uebertragen, PDF unveraendert 781 Seiten. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-09 00:31:16 +02:00
Stand: 9. September 2026</p>
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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
</div>
</section>
<section class="einstieg">
<h2>Bevor Sie starten</h2>
<div class="kartenraster"><a class="karte karte-einstieg" href="vorwort.html"><h3>Vorwort & Lesehilfe</h3><p>Zielgruppe, Voraussetzungen und wie dieses Buch aufgebaut ist — der richtige Startpunkt vor Kapitel 1.</p></a><a class="karte karte-einstieg" href="vorwort.html#setup-installation"><h3>Setup & Installation</h3><p>Virtuelle Umgebung anlegen, Pakete installieren, Installationstest ausführen — damit alle Beispielprogramme sofort laufen.</p></a><a class="karte karte-einstieg" href="notation.html"><h3>Notation & Abkürzungen</h3><p>Symbole, Abkürzungen und Konventionen des Buches zum Nachschlagen.</p></a></div>
</section>
<section class="lernpfade">
<h2>Lernpfade</h2>
Phase 7.3: Glossar "Deutsch - OR" - und die Gegenrichtung Setzt Paket 7 aus Verbesserungen_03.md um. Neuer Abschnitt im Kapitel "Vom Management-Wunsch zum Modell", unmittelbar hinter dem Gespraechsleitfaden: Die zwoelf Fragen liefern Saetze - hier werden sie uebersetzt. Die Abgrenzung zu Anhang B war die eigentliche Entwurfsfrage. Der Musterkatalog hat laengst eine Spalte "Umgangssprachlich", laeuft aber in die andere Richtung: Muster -> Formulierung. Wer aus einer Besprechung kommt, hat den Satz und sucht den Baustein. Das Lexikon ist genau so herum gebaut (21 Eintraege, jeweils mit B-Nummer), und Anhang B bekam einen Rueckverweis. Kein Duplikat, sondern die fehlende Gegenrichtung. Der Teil, der den Abschnitt traegt, ist aber nicht die Tabelle, sondern was danach kommt: fuenf Wendungen, bei denen die Uebersetzung eine Entscheidung erzwingt - "moeglichst", "nicht mehr als drei pro Woche", "im Durchschnitt", "so schnell wie moeglich", "fair". Bei jeder gibt es zwei bis drei vertretbare Modelle, und die Wahl gehoert dem Betrieb, nicht dem Modellierer. Das ist die These des Kapitels, auf die Alltagssprache angewandt. Dazu die Gegenrichtung OR -> Deutsch: acht Saetze fuer die Erklaerung eines Ergebnisses, einschliesslich der Formulierung fuer INFEASIBLE ("Ihre Regeln widersprechen sich", nicht "der Computer schafft es nicht"). Die neue Uebungsaufgabe laesst drei Zielfunktionen fuer "gleichmaessig ausgelastet" aufstellen; die Loesung nennt je einen Fall, in dem die Wahl den Plan sichtbar aendert - und weist darauf hin, dass zwei der drei einen Halbtagsmonteur bestrafen. Mitgezogen: Lernziel, Zusammenfassung, Rueckverweis aus Anhang B, Pfad E im Vorwort (er fuehrte bisher direkt zum Musterkatalog, jetzt ueber das Lexikon). Damit ist Phase 7 abgeschlossen. 296 Abschnitte, 766 Querverweise, 141 Aufgaben mit 141 Loesungen, PDF 749 Seiten. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 11:45:42 +02:00
<div class="kartenraster"><div class="karte karte-pfad"><h3>Pfad A — Vollständiger Lehrgang (100140 Stunden)</h3><p><a href="einfuehrung.html#kap-einfuehrung">Kapitel 1</a> bis <a href="testing.html#kap-testing">Kapitel 23</a> in Reihenfolge, danach ein Projekt aus der Projektwerkstatt. Empfohlen, wenn Sie OR systematisch lernen wollen. Rechnen Sie mit 46 Stunden je Kapitel inklusive Übungen.</p></div><div class="karte karte-pfad"><h3>Pfad B — Planung, Disposition, Personaleinsatz (ca. 25 Stunden)</h3><p><a href="einfuehrung.html#kap-einfuehrung">Kapitel 1</a> (Bausteine) → <a href="fundament.html#kap-fundament">Kapitel 2</a> (bis <a href="fundament.html#sec:fundament-konvexitaet-die-grenze-zwischen-leicht-und">Abschnitt 2.5</a>) → <a href="modellierung.html#kap-modellierung">Kapitel 4</a> (vom Wunsch zum Modell) → <a href="lp.html#kap-lp">Kapitel 5</a> (LP, Schattenpreise) → <a href="milp.html#kap-milp">Kapitel 6</a> (Ja/Nein-Entscheidungen) → <a href="cpsat.html#kap-cpsat">Kapitel 7</a> (CP-SAT, Scheduling) → Projekt P1 (Vertretungsplaner) oder P2 (Schichtplanung). Das ist der kürzeste Weg zu einem einsetzbaren Dienstplan-Optimierer.</p></div><div class="karte karte-pfad"><h3>Pfad C — Logistik und Tourenplanung (ca. 25 Stunden)</h3><p><a href="einfuehrung.html#kap-einfuehrung">Kapitel 1</a><a href="fundament.html#kap-fundament">Kapitel 2</a> (bis <a href="fundament.html#sec:fundament-der-zulaessige-loesungsraum-und-das-polyeder">Abschnitt 2.4</a>) → <a href="lp.html#kap-lp">Kapitel 5</a><a href="milp.html#kap-milp">Kapitel 6</a><a href="graphen.html#kap-graphen">Kapitel 8</a> (Graphen, VRP) → Projekt P3 (Liefertouren) oder P4 (Lagernetzwerk).</p></div><div class="karte karte-pfad"><h3>Pfad D — Quantitative Finance (ca. 30 Stunden)</h3><p><a href="einfuehrung.html#kap-einfuehrung">Kapitel 1</a><a href="fundament.html#kap-fundament">Kapitel 2</a><a href="qp-nlp.html#kap-qp-nlp">Kapitel 11</a> (QP, KKT) → <a href="finanzdaten.html#kap-finanzdaten">Kapitel 18</a> (Daten, Shrinkage) → <a href="markowitz.html#kap-markowitz">Kapitel 19</a> (Markowitz) → <a href="cvar.html#kap-cvar">Kapitel 20</a> (CVaR) → <a href="handelsmaschine.html#kap-handelsmaschine">Kapitel 21</a> (Backtest) → Projekt P6 (Portfolio-Rebalancer) oder P7 (Risikoreport). Wichtig: Überspringen Sie <a href="finanzdaten.html#kap-finanzdaten">Kapitel 18</a> nicht. Wer direkt bei Markowitz einsteigt, optimiert Schätzrauschen und wundert sich über absurde Gewichte.</p></div><div class="karte karte-pfad"><h3>Pfad E — Ich habe morgen ein konkretes Problem (24 Stunden)</h3><p>Lesen Sie <a href="einfuehrung.html#sec:einfuehrung-historischer-kontext-und-evolution">Abschnitt 1.5</a> (die vier Bausteine) und <a href="modellierung.html#sec:modellierung-glossar">Abschnitt 4.6</a> (welcher Satz welcher Baustein ist), dann <a href="anhang-modellierungsmuster.html#anhang-modellierungsmuster">Anhang B</a> ([Modellierungsmuster](anhang-modellierungsmuster.html)) und suchen Sie dort das Muster, das zu Ihrem Problem passt. Von jedem Muster führt ein Verweis in das zuständige Kapitel. Wie die gewählte Bibliothek es schreibt, steht in <a href="anhang-spickzettel.html#anhang-spickzettel">Anhang D</a> ([Spickzettel](anhang-spickzettel.html)); wenn etwas nicht läuft, in <a href="anhang-fehlerdiagnose.html#anhang-fehlerdiagnose">Anhang C</a> ([Fehlerdiagnose](anhang-fehlerdiagnose.html)).</p></div></div>
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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
</section>
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
<section class="kapitelgruppe"><h2>Teil I: Grundlagen des Operations Research</h2><div class="kartenraster"><a class="karte karte-kapitel" href="einfuehrung.html"><span class="karte-nummer">Kapitel 1</span><h3>Einführung in Operations Research — Vom Ursprung zur mathematischen Entscheidungsfindung</h3><p>Was Operations Research ist, warum Ausprobieren ab einer gewissen Problemgröße hoffnungslos wird, und aus welchen vier Bausteinen jedes Opti…</p><span class="karte-zeit">⏱ ca. 3,5 Stunden inklusive Übungen.</span></a><a class="karte karte-kapitel" href="fundament.html"><span class="karte-nummer">Kapitel 2</span><h3>Das mathematische Fundament — Vektoren, Matrizen, Konvexität</h3><p>Um die Sprache, in der Optimierungsmodelle aufgeschrieben werden, und um die eine Eigenschaft, die darüber entscheidet, ob ein Problem verlä…</p><span class="karte-zeit">⏱ ca. 5 Stunden.</span></a><a class="karte karte-kapitel" href="oekosystem.html"><span class="karte-nummer">Kapitel 3</span><h3>Das Python-Ökosystem für OR — Solver, Bindings und Modellierungsschichten</h3><p>Warum es für Optimierung in Python mehrere konkurrierende Bibliotheken gibt, was sie unterscheidet, und wie Sie in unter einer Minute die ri…</p><span class="karte-zeit">⏱ ca. 4 Stunden.</span></a><a class="karte karte-kapitel" href="modellierung.html"><span class="karte-nummer">Kapitel 4</span><h3>Vom Management-Wunsch zum Modell</h3><p>Um den Schritt, der vor jedem Solver kommt und über den kaum ein Lehrbuch spricht: aus einem Satz in einer Besprechung ein Modell zu machen.…</p><span class="karte-zeit">⏱ ca. 3 Stunden.</span></a></div></section><section class="kapitelgruppe"><h2>Teil II: Die Kernverfahren der deterministischen Optimierung</h2><div class="kartenraster"><a class="karte karte-kapitel" href="lp.html"><span class="karte-nummer">Kapitel 5</span><h3>Lineare Programmierung — Simplex, Dualität und Schattenpreise</h3><p>Um das Kernverfahren des Operations Research. Wir bauen den Simplex-Algorithmus selbst — nicht um ihn zu verwenden, sondern um zu verstehen,…</p><span class="karte-zeit">⏱ ca. 7 Stunden — das umfangreichste Kapitel von Teil II.</span></a><a class="karte karte-kapitel" href="milp.html"><span class="karte-nummer">Kapitel 6</span><h3>Gemischt-ganzzahlige Optimierung — Diskrete Entscheidungen und Branch-and-Bound</h3><p>Um Entscheidungen, die nicht teilbar sind: ganze Maschinen, Ja/Nein, „höchstens fünf davon“. Wir zeigen mit einem konkreten Gegenbeispiel, w…</p><span class="karte-zeit">⏱ ca. 6,5 Stunden.</span></a><a class="karte karte-kapitel" href="cpsat.html"><span class="karte-nummer">Kapitel 7</span><h3>Constraint Programming mit CP-SAT — Logik, Scheduling und Zuweisung</h3><p>Um ein völlig anderes Denkmodell: Statt algebraischer Ungleichungen arbeitet Constraint Programming mit Wertebereichen und logischen Regeln.…</p><span class="karte-zeit">⏱ ca. 6,5 Stunden.</span></a><a class="karte karte-kapitel" href="graphen.html"><span class="karte-nummer">Kapitel 8</span><h3>Graphen, Flüsse und Touren — Min-Cost-Flow, Matching und VRP</h3><p>Um Probleme, deren natürliche Sprache der Graph ist: Was fließt wohin? Wer wird wem zugeordnet? Welche Route fährt welches Fahrzeug?…</p><span class="karte-zeit">⏱ ca. 6 Stunden.</span></a><a class="karte karte-kapitel" href="metaheuristiken.html"><span class="karte-nummer">Kapitel 9</span><h3>Metaheuristiken — wenn der exakte Solver aussteigt</h3><p>Um den Fall, für den die bisherigen Kapitel keine Antwort haben: Das Problem ist zu groß, der Solver kommt im Zeitlimit nicht zu einem brauc…</p><span class="karte-zeit">⏱ ca. 5 Stunden.</span></a><a class="karte karte-kapitel" href="dekomposition.html"><span class="karte-nummer">Kapitel 10</span><h3>Spaltengenerierung — das Modell umbauen statt die Lösung raten</h3><p>Um die andere Antwort auf die Frage aus Kapitel 9: Was tun, wenn der Solver an der Größe scheitert? Statt die Lösung zu approximieren, formu…</p><span class="karte-zeit">⏱ ca. 3 Stunden.</span></a></div></section>
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 <noreply@anthropic.com>
2026-09-08 01:20:09 +02:00
</article>
<nav class="prev-next"><span class="prev-next-leer"></span><span class="prev-next-leer"></span></nav>
</main>
</div>
<footer class="site-footer">
<p>© Dieter Schlüter · <a href="gesamtdokument.html">Gesamtdokument</a> ·
<a href="programme.html">Beispielprogramme</a></p>
</footer>
<script defer src="assets/search-index.js"></script>
<script defer src="assets/programme.js"></script>
<script defer src="assets/site.js"></script>
</body>
</html>