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.
This commit is contained in:
dschlueter 2026-09-10 17:40:29 +02:00
commit e8abb66d75
52 changed files with 4316 additions and 1921 deletions

View file

@ -152,7 +152,7 @@ Umschlagpunkt: 3.9 Stunden</code></pre>
<p><strong>Und jetzt der Punkt.</strong> Bis knapp vier Stunden ist die <em>fünfmal teurere</em> Gasturbine die günstigere Wahl. Erst danach hat der Kernblock seine Anfahrkosten wieder eingespielt.</p>
<p>Die Merit-Order — Kraftwerke nach Grenzkosten sortieren und von unten auffüllen — ist damit nur für einen <strong>einzelnen</strong> Zeitpunkt richtig. Sobald ein Tag geplant wird, hängt jede Stunde an allen anderen: Ein Block, der um 8 Uhr angefahren wird, muss bis mindestens 16 Uhr laufen, und diese Entscheidung fällt am Vorabend.</p>
<blockquote>
<p><strong>🎯 Merksatz</strong> Anfahrkosten und Mindestlaufzeiten machen aus 24 unabhängigen Stundenentscheidungen <strong>ein</strong> Problem. Genau deshalb ist die Kraftwerkseinsatzplanung ein MILP und keine Sortierung.</p>
<p><strong>🎯 Merksatz</strong> Anfahrkosten und Mindestlaufzeiten machen aus 24 unabhängigen Stundenentscheidungen <strong>ein</strong> Problem. Genau deshalb ist die Kraftwerkseinsatzplanung ein <a href="anhang-glossar.md#gloss:gemischt-ganzzahlige-optimierung-milp" class="glossar-link">MILP</a> und keine Sortierung.</p>
</blockquote>
<p><strong>Warum funktioniert das?</strong> Der Umschlagpunkt ist eine einfache Rechnung: Die Anfahrkostendifferenz (38 500 €) geteilt durch die Grenzkostendifferenz je Stunde (83 €/MWh × 120 MW = 9 960 €/h) ergibt 3,9 Stunden. Bei zwei Kraftwerken kann man das im Kopf ausrechnen — bei fünf Blöcken und 24 Stunden nicht mehr.</p>
<hr />
@ -162,7 +162,7 @@ Umschlagpunkt: 3.9 Stunden</code></pre>
<li>… ein Unit-Commitment-Modell mit Anfahrkosten und Mindestlaufzeiten aufstellen.</li>
<li>… erklären, warum eine <strong>binäre erste Stufe</strong> das zweistufige Modell aus <a href="unsicherheit.html#kap-unsicherheit">Kapitel 12</a> verschärft.</li>
<li>… zeigen, dass eine Planung auf den Erwartungswert nicht nur ungenau, sondern <strong>systematisch zu knapp</strong> ist.</li>
<li>… eine CVaR-Schranke auf eine physikalische Größe (nicht gedeckte Energie) legen.</li>
<li>… eine <a href="anhang-glossar.md#gloss:conditional-value-at-risk-cvar" class="glossar-link">CVaR</a>-Schranke auf eine physikalische Größe (nicht gedeckte Energie) legen.</li>
<li>… begründen, wann eine Risikoschranke etwas ändert — und wann sie überflüssig ist.</li>
</ol>
<hr />
@ -848,7 +848,7 @@ zweistufig 111111222222222222222111 (39 Blockstunden)</code></pre>
<p><strong>Aufgabe 17.2 ⭐ — Die fehlende Nebenbedingung.</strong> Das Modell kennt Mindestlaufzeiten, aber keine <strong>Mindeststillstandszeiten</strong>. Formulieren Sie die entsprechende Bedingung. Welchen realen Sachverhalt bildet sie ab?</p>
<p><strong>Aufgabe 17.3 ⭐⭐ — Wie viele Szenarien?</strong> Rechnen Sie mit 10, 20, 40 und 80 Szenarien. Ab wann ändert sich der Commitment-Plan nicht mehr? Was folgt daraus für die Praxis — und was hat das mit <a href="prognose.html#sec:prognose-messfalle">Abschnitt 15.6</a> zu tun?</p>
<p><strong>Aufgabe 17.4 ⭐⭐ — Der Wert eines Speichers.</strong> Ergänzen Sie einen Batteriespeicher (100 MW, 400 MWh, Wirkungsgrad 90 %). Um wie viel sinken die erwarteten Kosten — und was ist der Speicher damit je MWh Kapazität wert?</p>
<p><strong>Aufgabe 17.5 ⭐⭐⭐ — Wenn es größer wird.</strong> Erhöhen Sie auf 20 Blöcke und 168 Stunden (eine Woche). Beobachten Sie MIP-Gap und Rechenzeit (<a href="milp.html#sec:milp-gap">Abschnitt 6.8</a>). Ab wann wird das Problem für den exakten Solver zu groß — und welches Verfahren aus <a href="metaheuristiken.html#kap-metaheuristiken">Kapitel 9</a> würden Sie einsetzen?</p>
<p><strong>Aufgabe 17.5 ⭐⭐⭐ — Wenn es größer wird.</strong> Erhöhen Sie auf 20 Blöcke und 168 Stunden (eine Woche). Beobachten Sie <a href="anhang-glossar.md#gloss:mip-gap" class="glossar-link">MIP-Gap</a> und Rechenzeit (<a href="milp.html#sec:milp-gap">Abschnitt 6.8</a>). Ab wann wird das Problem für den exakten <a href="anhang-glossar.md#gloss:solver" class="glossar-link">Solver</a> zu groß — und welches Verfahren aus <a href="metaheuristiken.html#kap-metaheuristiken">Kapitel 9</a> würden Sie einsetzen?</p>
<hr />
<h2 id="sec:supplychain-denkfehler">17.8 Finde den Denkfehler</h2>
<div class="card card-denkfehler">