Commit graph operations_research/OR_HTML_04/anhang-literatur.html
Author SHA1 Message Date
dschlueter
e8abb66d75 Glossar-Links: Fachbegriffe im Fließtext automatisch verlinken
Auto-Linking im Build: Glossar-Begriffe werden im Fließtext automatisch
erkannt und als Link auf den Glossar-Eintrag gesetzt — erste Nennung je
Begriff je Datei, dezent gestrichelte Unterstreichung im HTML, hyperref
im PDF. Kein manuelles Markieren bei Textänderungen nötig.

Neue Infrastruktur:
- glossar_eintraege_04.py: glossar_slug() + LINK_TEXTE-Map (automatisch
  generiert aus EINTRAEGEN + Abkürzungs-Extraktion)
- erzeuge_glossar_04.py: jeder Eintrag bekommt {#gloss:<slug>}-Anchor
- build_version_04.py: resolve_glossar() — Auto-Linking + {gl:}-Marke
- web_04/site.css: .glossar-link (dezent, nicht wie Navigationslink)

5 neue Glossar-Einträge (waren als Begriff im Text, aber nicht im Glossar):
Solver, Scheduling, Graphen, Backtest, DCP (Disciplined Convex Programming)

Schutzmechanismen:
- Code-Blöcke, Inline-Code, {idx:}/{ref:}-Marken, Markdown-Links und
  Überschriften werden nicht verlinkt
- Verschachtelung verhindert: 'CP-SAT-Solver' als Ganzes, nicht 'CP'+[
  -'SAT'+[-'Solver'
- 'OR' als 2-Zeichen-Abkürzung nicht auto-verlinkt (False Positive in
  'OR-Tools'); {gl:OR} als manuelle Marke
- Glossar selbst nicht auto-verlinkt (sonst Self-Links)
- reflow_markdown(): ::: als Block-Grenze (sonst kollabiert fenced div)

619 Glossar-Links im Gesamtdokument, 239 Anchor im Glossar, 34 im Vorwort.
2026-09-10 17:40:29 +02:00
dschlueter
99cb85907c Stichwortregister: automatische Markierung aller Glossarbegriffe (988 statt 456 Marker)
Neues Skript erzeuge_stichwortregister_04.py:
- Sucht alle Glossarbegriffe (Anzeigename) in den Kapiteldateien
  und markiert die erste Fundstelle je Datei mit {idx:Indexmarke}
- Termliste aus glossar_eintraege_04.py + vorhandenen {idx:...}-Markern
- Idempotent: erkennt vorhandene Marker und überspringt sie
- Überspringt Codeblöcke, Inline-Code und Math
- --check und --bericht Modi
- 605 Marker eingefügt (2 Durchläufe: 597 + 8)

Zusätzlich:
- titeltexte_04.py _saeubern(): entfernt {idx:...}-Marker vor
  Titeltext-Vergleich (pruefe_titeltexte schlug sonst fehl)
2026-09-10 00:07:01 +02:00
dschlueter
803d8aa91e Literaturverzeichnis: alle Eintraege gegen Crossref geprueft
Die erste Fassung stuetzte sich bei rund 30 Eintraegen auf Kenntnis der
Standardliteratur statt auf eine Abfrage. Ein Skript hat jeden Eintrag einzeln
gegen die Crossref-API gestellt: DOIs ueber /works/{doi}, Eintraege ohne DOI
ueber die bibliografische Suche mit Aehnlichkeitsbewertung.

Ergebnis: 54 der 72 Eintraege tragen eine DOI, alle 54 loesen auf und zeigen
auf das richtige Werk. Die uebrigen 18 sind Webdokumentationen,
Institutsberichte, Konferenzbeitraege ohne DOI-Vergabe oder Buecher, die
Crossref nicht auf Buchebene fuehrt.

Zwei echte Fehler:

* Almgren & Chriss stand mit (2000) und der DOI 10.21314/JOR.2000.041 - die
  loest nicht auf. Richtig ist 2001 mit 10.21314/jor.2001.041; Band, Heft und
  Seitenzahlen stimmten.
* Rockafellar & Uryasev stand mit S. 21-42, und zwar schon in der
  Vorgaengerfassung. Der Verlagsdatensatz nennt S. 21-41.

Dazu sieben ergaenzte Buch-DOIs (Dantzig, Wolsey, Boyd/Vandenberghe, Ben-Tal
et al., Biere et al., Brandimarte/Zotteri, Powell), jede einzeln auf Verlag,
Jahr und Typ geprueft. Beim Handbook of Constraint Programming fuehrt Crossref
nur Kapitel-DOIs - statt eines geratenen Buch-DOI ist jetzt die Reihe genannt
(Foundations of Artificial Intelligence, Bd. 2).

Der lehrreichste Teil war das Verwerfen: Die Crossref-Suche liefert zu
"Network Flows" (Ahuja/Magnanti/Orlin) den Treffer 10.2307/2583863 mit 100 %
Titeluebereinstimmung - er gehoert zu einer Buchbesprechung von 1994, nicht
zum Buch. Ebenso falsch waren die Treffer zu Sutton/Barto (Rezension der
ersten Auflage, 1998), Bertsekas (1996), Kleppmann (Elsevier 2003) und dem
SCIP-Bericht (ein R-Paket). Eine automatische Uebernahme des besten Treffers
haette fuenf falsche DOIs ins Buch geschrieben; sichtbar wurde es erst beim
Abgleich von Typ, Verlag und Jahr.

Veroeffentlicht: 4 Dateien, PDF unveraendert 781 Seiten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 21:58:16 +02:00
dschlueter
b83bd392cd Literaturverzeichnis von 27 auf 87 Eintraege
Auftrag: bestehende Liste bewerten, Streichkandidaten benennen, moderne
Standardwerke recherchieren, neue Themenbloecke anlegen - mit Relevanzsternen
(3 Stufen) und Themen-Tags.

Welche Bloecke fehlen, entschied nicht die Vorschlagsliste, sondern das Buch.
Vorgeschlagen waren u. a. "Diskrete Ereignissimulation (SimPy)" und
"Cloud-basierte Solver-Nutzung". Beide wurden NICHT angelegt: "SimPy" kommt im
Buch null Mal vor, "Cloud" ebenfalls null. Eine Literaturliste soll das Buch
erschliessen, nicht darueber hinausweisen. Der API-gestuetzte Betrieb ist
stattdessen im neuen Praxisblock erfasst - dort gibt es mit dem
FastAPI-Optimierungsdienst tatsaechlich einen Anker im Text.

Zwoelf neue Bloecke, in der Reihenfolge der Kapitel: Modellierung in Python;
Lineare und ganzzahlige Optimierung; Moderne Solver und Benchmarks; Graphen,
Fluesse und Tourenplanung; Metaheuristiken; Spaltengenerierung und
Dekomposition; Optimierung unter Unsicherheit; Dynamische Programmierung;
Mehrkriterielle Optimierung; Lernbasierte Optimierung; Supply Chain, Energie
und Produktionsplanung; Praxis: Betrieb, Test und Auslieferung.

Streichkandidaten: keine. Alle 27 Alteintraege sind korrekt zitiert, in ihrem
Feld massgeblich und nicht redundant. Zwei wurden auf einen Stern herabgestuft
(Dantzig 1963, Bellman 1957) - historisch bedeutend, im selben Block aber
durch modernere Darstellungen ersetzt. Eine Streichliste zu erfinden, nur weil
der Auftrag eine vorsah, waere die schlechtere Antwort gewesen.

Zur Vorgabe "bevorzugt ab 2018": nur teilweise einloesbar, und zwar aus der
Sache heraus. 22 von 63 datierten Eintraegen sind von 2018 oder juenger. In
weiten Teilen des OR sind die massgeblichen Werke aelter - Ahuja/Magnanti/
Orlin (1993), Boyd/Vandenberghe (2004), Ehrgott (2005), Birge/Louveaux (2011).
Neu ist es dort, wo sich das Feld bewegt hat: Benchmarks, Python-Bibliotheken,
lernbasierte Optimierung.

Recherchiert, nicht erinnert: Bei einem Literaturverzeichnis ist eine
erfundene Quelle der schlimmste moegliche Fehler. Die unsicheren Angaben sind
per Websuche gegen die Primaerquelle geprueft - linopy (JOSS 8(84), 4823),
SCIP Optimization Suite 9.0, Elmachtoub & Grigas (Management Science 68(1),
9-26), MIPLIB 2017 (MPC 13(3), 443-490), HiGHS und Vidal/Laporte/Matl
(EJOR 286(2), 401-416).

Ein Fund dabei: Die Mittelmann-Benchmarks enthalten seit 2024 keine
kommerziellen Solver mehr - Gurobi, IBM und FICO haben ihre Ergebnisse
entfernen lassen. Ein direkter Vergleich Gurobi gegen HiGHS ist dort nicht
mehr moeglich. Das steht jetzt als Einschraenkung beim Eintrag.

Jeder Block verweist ueber {ref:kap:...} auf sein Kapitel - 37 Querverweise,
alle aufgeloest. PDF von 772 auf 781 Seiten. Veroeffentlicht: 4 Dateien.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 21:44:01 +02:00
dschlueter
47d63dfe9c Menue: ZIP-Punkt nicht mehr eingerueckt, "(eine HTML-Seite)"
Zwei Beschriftungsaenderungen in baue_sidebar_html():

* "Download Notebooks als ZIP" steht jetzt auf gleicher Hoehe wie die
  uebrigen Punkte statt eingerueckt unter "Notebooks".
* "Gesamtdokument (eine Seite)" -> "(eine HTML-Seite)". Direkt darunter steht
  "Download Buch als PDF"; ohne das Wort HTML liess sich nicht erkennen, dass
  es zwei verschiedene Formate sind.

Mit der Einrueckung faellt ihre Ursache weg: Die CSS-Klasse
.sidebar-unterpunkt in web_04/assets/site.css war eigens dafuer angelegt
worden und wird von nichts mehr benutzt - entfernt, statt als tote Regel
stehen zu bleiben.

Veroeffentlicht: 42 Dateien uebertragen (die Seiten, nichts sonst - dank
--checksum), 0 geloescht, alle vierzehn HTTP-Proben richtig. Gegenprobe vom
Server: kein sidebar-unterpunkt mehr im ausgelieferten HTML.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 19:24:54 +02:00
dschlueter
e3ff5846f6 Menuepunkt praeziser: "Download Buch als PDF"
Der Eintrag stand direkt unter "Download Notebooks als ZIP"; ohne das Wort
"Buch" liess sich nicht auf einen Blick sehen, was da heruntergeladen wird.

Geaendert an der einen Stelle in baue_sidebar_html(), von dort auf alle 41
Seiten. Veroeffentlicht: 151 Dateien uebertragen, 0 geloescht, alle vierzehn
HTTP-Proben richtig.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 16:54:24 +02:00
dschlueter
b6de2802fc Glossar und Literatur trennen, Menue um Glossar und ZIP-Download ergaenzen
94_Anhang_Glossar_und_Literatur.md enthielt zwei verschiedene Nachschlagewerke
in einer Datei. Jetzt sind es zwei Anhaenge: E = Glossar (92 Eintraege),
F = Literaturverzeichnis (6 Kategorien). Aus 5 Anhaengen werden 6, aus 36
Kapiteldateien 37.

Die Teilung war billig: Die Datei trug bereits zwei eigenstaendige
Ueberschriften mit nichts als einem --- dazwischen, und im ganzen Buch gab es
genau einen {ref:anhang:glossar-literatur} - die Weiter-mit-Zeile im
Spickzettel. Geprueft: keine Inhaltszeile verloren, alle 92 Glossareintraege
auf der neuen Seite, Indexmarken unveraendert bei 328.

Das Seitenleisten-Menue bekommt zwei Eintraege:

  Beispielprogramme
  Notebooks
    Download Notebooks als ZIP     <- neu, eingerueckt
  Glossar                          <- neu
  Stichwortverzeichnis
  Gesamtdokument (eine Seite)
  Download als PDF

Der ZIP-Link benutzt dieselbe Konstante wie baue_notebooks_seite() beim
Schreiben des Archivs, damit Link und Datei nicht auseinanderlaufen. Das
Glossar erscheint absichtlich doppelt: hier als Abkuerzung neben dem
Stichwortverzeichnis, und unten in der Gruppe "Anhaenge", weil es ein Anhang
ist.

Die verwaiste anhang-glossar-literatur.html von Hand entfernt - der Build
raeumt alte Seiten nicht ab.

Nebenbefund, in PROGRESS.md festgehalten: OR_HTML_04/assets/site.css ist eine
von Hand gepflegte Quelle, die im als "generiert" beschriebenen Verzeichnis
liegt. Der Build schreibt sie nie. Dasselbe gilt fuer site.js, icons.svg,
highlight.css und plotly.min.js.

--check: 5 Teile, 23 Kapitel, 6 Anhaenge, 296 Abschnitte, 825 Querverweise,
328 Indexmarken, 37 Dateien, 28.544 Zeilen, 305 Hauptueberschriften, keine
Warnung. PDF unveraendert 759 Seiten.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-08 15:48:57 +02:00