Veroeffentlichung: Lizenzen, README, Colab-Entscheidung, JupyterLab im Image
Sechs Dinge, alle fuer das jetzt oeffentliche Repository. LIZENZEN. LICENSE traegt die MIT-Lizenz fuer den Programmcode (alle .py, Notebooks, Dockerfile, pyproject.toml), LICENSE-TEXT.md die CC BY-SA 4.0 fuer Buchtext, PDF, Website und Diagramme. Beide Dateien nennen ausdruecklich, was sie abdecken und was nicht - ein Codeblock im Buchtext bleibt Programmcode und steht unter MIT. Vorher hatte das Repository gar keine Lizenz, womit standardmaessig "alle Rechte vorbehalten" galt und niemand die 76 Programme haette weiterverwenden duerfen. COLAB. COLAB_BASIS_URL steht jetzt auf "". Der Platzhalter zeigte auf GitHub, das Repository liegt auf einer eigenen Forgejo-Instanz - und Colab oeffnet Notebooks NUR aus GitHub, Google Drive oder einem Upload. Die URL-Form colab.research.google.com/github/... ist fest auf GitHub verdrahtet; eine selbstgehostete Adresse dort einzusetzen ergaebe keinen Link zum eigenen Server, sondern einen toten GitHub-Link. Der Kommentar im Quelltext ging von GitHub aus und war damit selbst irrefuehrend; er ist ersetzt. Verloren geht nichts: Die 25 Notebooks liegen neben der Website und bekommen einen echten Download-Link, jetzt mit dem Hinweis, was man damit tut - "herunterladen und in Jupyter oeffnen, in Colab hochladen oder mit dem Kurs-Image starten". JUPYTERLAB IM KURS-IMAGE. Neue pyproject-Gruppe [notebook] mit jupyterlab, die Notebooks werden ins Image kopiert, und ein kleiner Startbefehl macht beide Betriebsarten ohne --entrypoint moeglich: ohne Argument JupyterLab, mit Argument ein einzelnes Programm. Gebaut und geprueft - Rucksack.py laeuft, JupyterLab antwortet mit HTTP 200 und zeigt alle 25 Notebooks. Image 1,31 -> 1,46 GB. Es laeuft ohne Token, deshalb im README die Portfreigabe an 127.0.0.1 gebunden. README KOMPLETT NEU. Es war die Bau-Anleitung eines privaten Verzeichnisses und ist jetzt die Visitenkarte eines oeffentlichen Repositorys: was das Buch ist, wo man es liest, drei Wege die Beispiele auszufuehren (Container, schlanke Installation, alles auf einmal), was hier liegt, wie man baut, die Colab-Frage, die Lizenzen und wie man mitwirkt. Alle relativen Links geprueft: 0 tot. .gitattributes. Ohne die Datei entschied core.autocrlf des jeweiligen Rechners, was beim Klonen passiert - ein Windows-Leser bekam CRLF-Rauschen in jedem Diff. Jetzt: im Repository immer LF, im Arbeitsverzeichnis passend zum System, Binaerdateien ausdruecklich ausgenommen. Der Bestand war bereits sauber (git add --renormalize aendert null Dateien). Zusaetzlich sind die erzeugten Verzeichnisse als linguist-generated markiert, sonst zaehlt die Sprachstatistik das Repository als HTML-Projekt. PROGRESS.md: Remote-Repository als erledigt markiert, der Colab-Befund festgehalten. CLAUDE.md um Veroeffentlichung, Lizenzen und die neuen Dateien ergaenzt. Geprueft: --check ohne Fehler, 0 tote README-Links, 76 Programme unveraendert, 33 pytest-Tests, pyproject baut mit acht Gruppen, PDF 759 Seiten (eine weniger - die Colab-Zeile entfaellt in 25 Kapiteln). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
360912dbfa
commit
4fa4e20b04
37 changed files with 467 additions and 258 deletions
|
|
@ -2,9 +2,9 @@
|
||||||
# ganze Verzeichnis an den Daemon - mitsamt Website (rund 50 MB), PDF und
|
# ganze Verzeichnis an den Daemon - mitsamt Website (rund 50 MB), PDF und
|
||||||
# Notebooks, die im Image nichts zu suchen haben.
|
# Notebooks, die im Image nichts zu suchen haben.
|
||||||
|
|
||||||
# Erzeugte Ausgaben
|
# Erzeugte Ausgaben. Notebooks_04/ steht bewusst NICHT hier: Die 25 Notebooks
|
||||||
|
# gehoeren ins Image, damit JupyterLab darin etwas zu oeffnen hat.
|
||||||
OR_HTML_04/
|
OR_HTML_04/
|
||||||
Notebooks_04/
|
|
||||||
*.pdf
|
*.pdf
|
||||||
Operations_Research_mit_Python_Version_04.md
|
Operations_Research_mit_Python_Version_04.md
|
||||||
|
|
||||||
|
|
|
||||||
50
.gitattributes
vendored
Normal file
50
.gitattributes
vendored
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
# Zeilenenden. Ohne diese Datei entscheidet die core.autocrlf-Einstellung des
|
||||||
|
# jeweiligen Rechners, was beim Klonen passiert - und ein Windows-Leser bekommt
|
||||||
|
# je nach Konfiguration entweder CRLF-Rauschen in jedem Diff oder Python-
|
||||||
|
# Dateien, die sein Editor als "gemischte Zeilenenden" anmeckert.
|
||||||
|
#
|
||||||
|
# Die Regel hier legt es fuer alle fest: Im Repository steht immer LF, im
|
||||||
|
# Arbeitsverzeichnis bekommt jeder, was zu seinem System passt.
|
||||||
|
|
||||||
|
* text=auto eol=lf
|
||||||
|
|
||||||
|
# --- Quelltext und Buchtext: ausdruecklich Text ----------------------------
|
||||||
|
*.py text diff=python
|
||||||
|
*.md text
|
||||||
|
*.txt text
|
||||||
|
*.toml text
|
||||||
|
*.yaml text
|
||||||
|
*.yml text
|
||||||
|
*.tex text
|
||||||
|
*.css text
|
||||||
|
*.js text
|
||||||
|
*.html text
|
||||||
|
*.svg text
|
||||||
|
*.ipynb text
|
||||||
|
Dockerfile text
|
||||||
|
.gitignore text
|
||||||
|
.dockerignore text
|
||||||
|
.gitattributes text
|
||||||
|
|
||||||
|
# --- Binaerdateien: niemals anfassen ---------------------------------------
|
||||||
|
# Ein versehentliches Umschreiben der Zeilenenden macht sie unbrauchbar.
|
||||||
|
*.pdf binary
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.jpeg binary
|
||||||
|
*.gif binary
|
||||||
|
*.webp binary
|
||||||
|
*.woff binary
|
||||||
|
*.woff2 binary
|
||||||
|
*.ttf binary
|
||||||
|
*.otf binary
|
||||||
|
*.xlsx binary
|
||||||
|
*.zip binary
|
||||||
|
|
||||||
|
# --- Was auf GitHub/Forgejo die Sprachstatistik verzerrt --------------------
|
||||||
|
# Die Website und die Notebooks sind ERZEUGT. Ohne diese Markierung zaehlt
|
||||||
|
# Linguist das Repository als ueberwiegend HTML - es ist ein Python-Projekt.
|
||||||
|
OR_HTML_04/** linguist-generated=true
|
||||||
|
Notebooks_04/** linguist-generated=true
|
||||||
|
Operations_Research_mit_Python_Version_04_Programme/** linguist-generated=true
|
||||||
|
Operations_Research_mit_Python_Version_04.md linguist-generated=true
|
||||||
21
CLAUDE.md
21
CLAUDE.md
|
|
@ -33,7 +33,9 @@ Notebooks_04/ generiert: ein .ipynb je Kapitel
|
||||||
Kritik_und_Verbesserungsvorschlaege/ Quelle: Rezension, Verbesserungsvorschläge,
|
Kritik_und_Verbesserungsvorschlaege/ Quelle: Rezension, Verbesserungsvorschläge,
|
||||||
NEUER_TITEL.md (Vorlage des Titelblatts)
|
NEUER_TITEL.md (Vorlage des Titelblatts)
|
||||||
pyproject.toml Quelle: Abhängigkeiten in Gruppen
|
pyproject.toml Quelle: Abhängigkeiten in Gruppen
|
||||||
Dockerfile, .dockerignore Quelle: Kurs-Image (nur Programme)
|
Dockerfile, .dockerignore Quelle: Kurs-Image (Programme + JupyterLab)
|
||||||
|
LICENSE, LICENSE-TEXT.md MIT fuer Code, CC BY-SA 4.0 fuer den Text
|
||||||
|
.gitattributes LF im Repository, egal auf welchem System
|
||||||
pandoc-defaults-basis.yaml, pandoc/, pandoc-defaults-buch.yaml PDF-Konfiguration
|
pandoc-defaults-basis.yaml, pandoc/, pandoc-defaults-buch.yaml PDF-Konfiguration
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
@ -154,6 +156,23 @@ Im PDF steht stattdessen ein Hinweis auf die Website.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Veroeffentlichung
|
||||||
|
|
||||||
|
Das Repository liegt oeffentlich auf <https://kitux.de/forgejo/dschlueter/operations_research>.
|
||||||
|
|
||||||
|
**`COLAB_BASIS_URL` ist bewusst leer.** Colab oeffnet Notebooks nur aus GitHub, Google Drive
|
||||||
|
oder einem Upload; die URL-Form `colab.research.google.com/github/...` ist fest auf GitHub
|
||||||
|
verdrahtet und kann eine selbstgehostete Git-Instanz nicht lesen. Statt eines toten Knopfes
|
||||||
|
bekommt jedes Kapitel einen Download-Link auf sein Notebook. Wer spaeter nach GitHub
|
||||||
|
spiegelt, traegt dort **einen** Wert ein.
|
||||||
|
|
||||||
|
Wer ohne eigene Installation rechnen will, nimmt das Kurs-Image:
|
||||||
|
`docker run --rm -p 127.0.0.1:8888:8888 or-mit-python` startet JupyterLab mit allen
|
||||||
|
25 Notebooks. Ohne Portfreigabe und mit einem Programmnamen als Argument fuehrt dasselbe
|
||||||
|
Image ein einzelnes Programm aus.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Sprache
|
## Sprache
|
||||||
|
|
||||||
Kommentare, Ausgaben und Fließtext sind durchgängig **Deutsch** — diesen Stil beibehalten.
|
Kommentare, Ausgaben und Fließtext sind durchgängig **Deutsch** — diesen Stil beibehalten.
|
||||||
|
|
|
||||||
30
Dockerfile
30
Dockerfile
|
|
@ -9,8 +9,8 @@
|
||||||
# ist mit einer lokalen Installation besser bedient (siehe README.md).
|
# ist mit einer lokalen Installation besser bedient (siehe README.md).
|
||||||
#
|
#
|
||||||
# docker build -t or-mit-python .
|
# docker build -t or-mit-python .
|
||||||
# docker run --rm or-mit-python Installationstest.py
|
# docker run --rm -p 127.0.0.1:8888:8888 or-mit-python # JupyterLab
|
||||||
# docker run --rm -it or-mit-python # Python-Eingabe
|
# docker run --rm or-mit-python Installationstest.py # ein Programm
|
||||||
# docker run --rm -v "$PWD/ausgabe:/buch/output" or-mit-python Excel_Bruecke.py
|
# docker run --rm -v "$PWD/ausgabe:/buch/output" or-mit-python Excel_Bruecke.py
|
||||||
#
|
#
|
||||||
# Zwei Stufen: Die erste baut die Abhaengigkeiten in eine virtuelle Umgebung
|
# Zwei Stufen: Die erste baut die Abhaengigkeiten in eine virtuelle Umgebung
|
||||||
|
|
@ -44,7 +44,7 @@ COPY pyproject.toml README.md ./
|
||||||
# Der Konflikt wird nicht durch Weglassen geloest, sondern zur Laufzeit durch
|
# Der Konflikt wird nicht durch Weglassen geloest, sondern zur Laufzeit durch
|
||||||
# getrennte Prozesse (Kapitel Oekosystem). Ein Image, das nur eines von beiden
|
# getrennte Prozesse (Kapitel Oekosystem). Ein Image, das nur eines von beiden
|
||||||
# enthaelt, koennte die Haelfte der Beispiele nicht ausfuehren.
|
# enthaelt, koennte die Haelfte der Beispiele nicht ausfuehren.
|
||||||
RUN pip install ".[finance,large-scale,api,dev]"
|
RUN pip install ".[finance,large-scale,api,dev,notebook]"
|
||||||
|
|
||||||
# --- Stufe 2: das eigentliche Image -----------------------------------------
|
# --- Stufe 2: das eigentliche Image -----------------------------------------
|
||||||
FROM python:3.12-slim AS laufzeit
|
FROM python:3.12-slim AS laufzeit
|
||||||
|
|
@ -66,14 +66,30 @@ ENV PATH="/opt/venv/bin:$PATH" \
|
||||||
RUN useradd --create-home --uid 1000 kurs
|
RUN useradd --create-home --uid 1000 kurs
|
||||||
WORKDIR /buch
|
WORKDIR /buch
|
||||||
COPY --chown=kurs:kurs Operations_Research_mit_Python_Version_04_Programme/ ./
|
COPY --chown=kurs:kurs Operations_Research_mit_Python_Version_04_Programme/ ./
|
||||||
|
COPY --chown=kurs:kurs Notebooks_04/ ./Notebooks_04/
|
||||||
|
|
||||||
# Verzeichnis fuer erzeugte Dateien - als Volume einhaengbar, damit
|
# Verzeichnis fuer erzeugte Dateien - als Volume einhaengbar, damit
|
||||||
# Excel-Ausgaben und Diagramme den Container ueberleben. Angelegt wird es
|
# Excel-Ausgaben und Diagramme den Container ueberleben. Angelegt wird es
|
||||||
# VOR dem Benutzerwechsel, denn /buch gehoert root.
|
# VOR dem Benutzerwechsel, denn /buch gehoert root.
|
||||||
RUN mkdir -p /buch/output && chown kurs:kurs /buch/output
|
RUN mkdir -p /buch/output && chown kurs:kurs /buch/output
|
||||||
USER kurs
|
|
||||||
|
|
||||||
# Ohne Argument eine Python-Eingabeaufforderung, mit Argument das genannte
|
# Ein Startbefehl, zwei Betriebsarten - damit niemand '--entrypoint' braucht:
|
||||||
# Programm: 'docker run --rm or-mit-python Rucksack.py'
|
# ohne Argument -> JupyterLab mit den 25 Kapitel-Notebooks
|
||||||
ENTRYPOINT ["python"]
|
# mit Argument -> genau dieses Programm
|
||||||
|
RUN printf '%s\n' \
|
||||||
|
'#!/bin/sh' \
|
||||||
|
'if [ $# -eq 0 ]; then' \
|
||||||
|
' exec jupyter lab --ip=0.0.0.0 --port=8888 --no-browser \' \
|
||||||
|
' --ServerApp.token= --ServerApp.root_dir=/buch' \
|
||||||
|
'fi' \
|
||||||
|
'exec python "$@"' \
|
||||||
|
> /usr/local/bin/starte && chmod +x /usr/local/bin/starte
|
||||||
|
|
||||||
|
USER kurs
|
||||||
|
EXPOSE 8888
|
||||||
|
|
||||||
|
# JupyterLab laeuft ohne Token. Das ist fuer ein Kurs-Image auf dem eigenen
|
||||||
|
# Rechner richtig - deshalb im README die Portfreigabe an 127.0.0.1 binden
|
||||||
|
# und den Container NICHT ins offene Netz stellen.
|
||||||
|
ENTRYPOINT ["/usr/local/bin/starte"]
|
||||||
CMD []
|
CMD []
|
||||||
|
|
|
||||||
39
LICENSE
Normal file
39
LICENSE
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
Dieses Repository steht unter ZWEI Lizenzen. Welche gilt, hängt davon ab,
|
||||||
|
was Sie verwenden möchten:
|
||||||
|
|
||||||
|
* PROGRAMMCODE — MIT-Lizenz (unten im Wortlaut).
|
||||||
|
Betrifft: alle .py-Dateien (Beispielprogramme, Build-Skripte,
|
||||||
|
Diagrammgeneratoren), die Jupyter-Notebooks, Dockerfile, pyproject.toml
|
||||||
|
und die Konfigurationsdateien.
|
||||||
|
|
||||||
|
* BUCHTEXT UND ABBILDUNGEN — Creative Commons BY-SA 4.0.
|
||||||
|
Betrifft: alle .md-Kapitelquellen, das erzeugte PDF, die Website in
|
||||||
|
OR_HTML_04/ und die Diagramme in bilder_04/.
|
||||||
|
Wortlaut und Bedingungen: siehe LICENSE-TEXT.md.
|
||||||
|
|
||||||
|
Im Zweifel und für Mischformen (etwa ein Codeblock, der im Buchtext
|
||||||
|
abgedruckt ist): Der Code darin steht unter der MIT-Lizenz.
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2026 Dieter Schlüter
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
56
LICENSE-TEXT.md
Normal file
56
LICENSE-TEXT.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Lizenz für Buchtext und Abbildungen
|
||||||
|
|
||||||
|
**Optimierte Entscheidungsfindung mit Python** — © 2026 Dieter Schlüter
|
||||||
|
|
||||||
|
Der Buchtext und die Abbildungen stehen unter der Lizenz
|
||||||
|
**Creative Commons Namensnennung – Weitergabe unter gleichen Bedingungen 4.0
|
||||||
|
International (CC BY-SA 4.0)**.
|
||||||
|
|
||||||
|
* Kurzfassung (allgemeinverständlich): <https://creativecommons.org/licenses/by-sa/4.0/deed.de>
|
||||||
|
* Verbindlicher Volltext: <https://creativecommons.org/licenses/by-sa/4.0/legalcode.de>
|
||||||
|
|
||||||
|
## Was darunter fällt
|
||||||
|
|
||||||
|
| Betroffen | Nicht betroffen |
|
||||||
|
| --- | --- |
|
||||||
|
| Die Kapitelquellen in `Operations_Research_mit_Python_Version_04/*.md` | Sämtlicher Programmcode (`*.py`, Notebooks, `Dockerfile`, `pyproject.toml`) — der steht unter der **MIT-Lizenz**, siehe `LICENSE` |
|
||||||
|
| Das erzeugte PDF | |
|
||||||
|
| Die Website in `OR_HTML_04/` | Die Schriftdateien unter `OR_HTML_04/assets/` und `katex/` — sie tragen ihre eigenen Lizenzen |
|
||||||
|
| Die Diagramme in `bilder_04/` | |
|
||||||
|
|
||||||
|
Ein Codeblock, der im Buchtext abgedruckt ist, bleibt Programmcode: Für ihn
|
||||||
|
gilt die MIT-Lizenz.
|
||||||
|
|
||||||
|
## Was Sie dürfen
|
||||||
|
|
||||||
|
**Teilen** — das Material in jedem Format vervielfältigen und weiterverbreiten.
|
||||||
|
**Bearbeiten** — es remixen, verändern und darauf aufbauen, auch kommerziell.
|
||||||
|
|
||||||
|
## Unter diesen Bedingungen
|
||||||
|
|
||||||
|
**Namensnennung.** Nennen Sie den Autor (Dieter Schlüter), verlinken Sie auf
|
||||||
|
die Lizenz und geben Sie an, ob Änderungen vorgenommen wurden. Eine
|
||||||
|
brauchbare Form:
|
||||||
|
|
||||||
|
> Nach *Optimierte Entscheidungsfindung mit Python* von Dieter Schlüter
|
||||||
|
> (<https://kitux.de/forgejo/dschlueter/operations_research>), lizenziert unter
|
||||||
|
> CC BY-SA 4.0. Bearbeitet: [was Sie geändert haben].
|
||||||
|
|
||||||
|
**Weitergabe unter gleichen Bedingungen.** Wenn Sie das Material verändern
|
||||||
|
oder darauf aufbauen, müssen Sie Ihre Beiträge unter derselben Lizenz wie das
|
||||||
|
Original verbreiten.
|
||||||
|
|
||||||
|
**Keine weiteren Einschränkungen.** Sie dürfen keine zusätzlichen Klauseln
|
||||||
|
anwenden, die anderen rechtlich etwas untersagen, was die Lizenz erlaubt.
|
||||||
|
|
||||||
|
## Was diese Lizenz nicht abdeckt
|
||||||
|
|
||||||
|
Sie erstreckt sich nicht auf Marken- und Namensrechte Dritter. Die im Buch
|
||||||
|
genannten Bibliotheken — HiGHS, Google OR-Tools, CVXPY, SciPy, Pyomo, linopy
|
||||||
|
und andere — stehen unter ihren eigenen Lizenzen; wer sie einsetzt, hält sich
|
||||||
|
an diese.
|
||||||
|
|
||||||
|
Für die Inhalte gibt es **keine Gewährleistung**. Die Modelle und Zahlen sind
|
||||||
|
Lehrbeispiele. Wer auf ihrer Grundlage betriebliche oder finanzielle
|
||||||
|
Entscheidungen trifft, tut das in eigener Verantwortung — das gilt besonders
|
||||||
|
für die Kapitel zu Finanzmärkten.
|
||||||
BIN
OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
generated
BIN
OR_HTML_04/Operations_Research_mit_Python_Version_04.pdf
generated
Binary file not shown.
3
OR_HTML_04/bruecke.html
generated
3
OR_HTML_04/bruecke.html
generated
|
|
@ -126,8 +126,7 @@
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 2,5 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 2,5 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Strukturbruecke.py</code></p>
|
<code>Strukturbruecke.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/bruecke.ipynb">bruecke.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/bruecke.ipynb">bruecke.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/bruecke.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/cpsat.html
generated
3
OR_HTML_04/cpsat.html
generated
|
|
@ -114,8 +114,7 @@
|
||||||
<code>Parallele_Suche.py</code><br />
|
<code>Parallele_Suche.py</code><br />
|
||||||
<code>CP_SAT_Statusfaelle.py</code><br />
|
<code>CP_SAT_Statusfaelle.py</code><br />
|
||||||
<code>Strafgewichte.py</code></p>
|
<code>Strafgewichte.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/cpsat.ipynb">cpsat.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/cpsat.ipynb">cpsat.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/cpsat.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/cvar.html
generated
3
OR_HTML_04/cvar.html
generated
|
|
@ -110,8 +110,7 @@
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>VaR_CVaR_Demo.py</code><br />
|
<code>VaR_CVaR_Demo.py</code><br />
|
||||||
<code>CVaR_Portfolio.py</code></p>
|
<code>CVaR_Portfolio.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/cvar.ipynb">cvar.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/cvar.ipynb">cvar.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/cvar.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/dekomposition.html
generated
3
OR_HTML_04/dekomposition.html
generated
|
|
@ -109,8 +109,7 @@
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Spaltengenerierung.py</code></p>
|
<code>Spaltengenerierung.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/dekomposition.ipynb">dekomposition.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/dekomposition.ipynb">dekomposition.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/dekomposition.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/dynamische-programmierung.html
generated
3
OR_HTML_04/dynamische-programmierung.html
generated
|
|
@ -110,8 +110,7 @@
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Bellman_Minimalbeispiel.py</code><br />
|
<code>Bellman_Minimalbeispiel.py</code><br />
|
||||||
<code>Mehrperiodige_Order_Execution.py</code></p>
|
<code>Mehrperiodige_Order_Execution.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/dynamische-programmierung.ipynb">dynamische-programmierung.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/dynamische-programmierung.ipynb">dynamische-programmierung.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/dynamische-programmierung.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/einfuehrung.html
generated
3
OR_HTML_04/einfuehrung.html
generated
|
|
@ -114,8 +114,7 @@
|
||||||
<code>Brute_Force_Vergleich.py</code><br />
|
<code>Brute_Force_Vergleich.py</code><br />
|
||||||
<code>Bausteine_Vorlage.py</code><br />
|
<code>Bausteine_Vorlage.py</code><br />
|
||||||
<code>Excel_Bruecke.py</code></p>
|
<code>Excel_Bruecke.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/einfuehrung.ipynb">einfuehrung.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/einfuehrung.ipynb">einfuehrung.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/einfuehrung.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/finanzdaten.html
generated
3
OR_HTML_04/finanzdaten.html
generated
|
|
@ -113,8 +113,7 @@
|
||||||
<code>Finanzdaten_Ledoit_Wolf.py</code><br />
|
<code>Finanzdaten_Ledoit_Wolf.py</code><br />
|
||||||
<code>Kovarianz_Falle.py</code></p>
|
<code>Kovarianz_Falle.py</code></p>
|
||||||
<p><strong>⚠️ Überspringen Sie dieses Kapitel nicht.</strong> Wer direkt bei Markowitz (<a href="markowitz.html#kap-markowitz">Kapitel 19</a>) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.</p>
|
<p><strong>⚠️ Überspringen Sie dieses Kapitel nicht.</strong> Wer direkt bei Markowitz (<a href="markowitz.html#kap-markowitz">Kapitel 19</a>) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.</p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/finanzdaten.ipynb">finanzdaten.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/finanzdaten.ipynb">finanzdaten.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/finanzdaten.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/fundament.html
generated
3
OR_HTML_04/fundament.html
generated
|
|
@ -112,8 +112,7 @@
|
||||||
<code>Visualisierung_Loesungsraum.py</code><br />
|
<code>Visualisierung_Loesungsraum.py</code><br />
|
||||||
<code>Konvexitaet_Demo.py</code><br />
|
<code>Konvexitaet_Demo.py</code><br />
|
||||||
<code>Skalierung_Kondition.py</code></p>
|
<code>Skalierung_Kondition.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/fundament.ipynb">fundament.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/fundament.ipynb">fundament.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/fundament.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
69
OR_HTML_04/gesamtdokument.html
generated
69
OR_HTML_04/gesamtdokument.html
generated
|
|
@ -3114,8 +3114,7 @@ Alles bereit — Sie können mit dem ersten Kapitel beginnen.</code></pre>
|
||||||
<code>Brute_Force_Vergleich.py</code><br />
|
<code>Brute_Force_Vergleich.py</code><br />
|
||||||
<code>Bausteine_Vorlage.py</code><br />
|
<code>Bausteine_Vorlage.py</code><br />
|
||||||
<code>Excel_Bruecke.py</code></p>
|
<code>Excel_Bruecke.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/einfuehrung.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/einfuehrung.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/einfuehrung.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:einfuehrung-schnellstart">1.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:einfuehrung-schnellstart">1.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -4421,8 +4420,7 @@ Deckungsbeitrag: 18600 EUR</code></pre>
|
||||||
<code>Visualisierung_Loesungsraum.py</code><br />
|
<code>Visualisierung_Loesungsraum.py</code><br />
|
||||||
<code>Konvexitaet_Demo.py</code><br />
|
<code>Konvexitaet_Demo.py</code><br />
|
||||||
<code>Skalierung_Kondition.py</code></p>
|
<code>Skalierung_Kondition.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/fundament.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/fundament.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/fundament.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:fundament-schnellstart">2.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:fundament-schnellstart">2.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -5592,8 +5590,7 @@ und runden Sie Solver-Ergebnisse NIE ohne Toleranzpruefung.
|
||||||
<code>Solver_Wahl.py</code><br />
|
<code>Solver_Wahl.py</code><br />
|
||||||
<code>Modellierungsschichten.py</code><br />
|
<code>Modellierungsschichten.py</code><br />
|
||||||
<code>Vektorisierte_Modellgenerierung.py</code></p>
|
<code>Vektorisierte_Modellgenerierung.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/oekosystem.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/oekosystem.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/oekosystem.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:oekosystem-schnellstart">3.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:oekosystem-schnellstart">3.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -6933,8 +6930,7 @@ Groesse Variante Aufbau Loesen Aufba
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Vom_Wunsch_zum_Modell.py</code></p>
|
<code>Vom_Wunsch_zum_Modell.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/modellierung.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/modellierung.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/modellierung.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:modellierung-schnellstart">4.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:modellierung-schnellstart">4.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -7889,8 +7885,7 @@ Lesart C (weich): loesbar - 66,000 EUR Deckungsbeitrag, 1 Stammauftrag abgelehnt
|
||||||
<code>Sensitivitaetsanalyse.py</code><br />
|
<code>Sensitivitaetsanalyse.py</code><br />
|
||||||
<code>Dualitaet_Nachweis.py</code><br />
|
<code>Dualitaet_Nachweis.py</code><br />
|
||||||
<code>Toleranzen_und_Entartung.py</code></p>
|
<code>Toleranzen_und_Entartung.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/lp.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/lp.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/lp.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:lp-schnellstart">5.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:lp-schnellstart">5.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -9354,8 +9349,7 @@ brauchbare Aussage. Ein erfundener Einzelwert ist es nicht.</code></pre>
|
||||||
<code>Solverstatus_und_Gap.py</code><br />
|
<code>Solverstatus_und_Gap.py</code><br />
|
||||||
<code>Warmstart_Effekt.py</code><br />
|
<code>Warmstart_Effekt.py</code><br />
|
||||||
<code>Big_M_Falle.py</code></p>
|
<code>Big_M_Falle.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/milp.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/milp.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/milp.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:milp-schnellstart">6.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:milp-schnellstart">6.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -11027,8 +11021,7 @@ funktioniert immer.
|
||||||
<code>Parallele_Suche.py</code><br />
|
<code>Parallele_Suche.py</code><br />
|
||||||
<code>CP_SAT_Statusfaelle.py</code><br />
|
<code>CP_SAT_Statusfaelle.py</code><br />
|
||||||
<code>Strafgewichte.py</code></p>
|
<code>Strafgewichte.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/cpsat.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/cpsat.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/cpsat.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:cpsat-schnellstart">7.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:cpsat-schnellstart">7.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -12730,8 +12723,7 @@ Nebenbedingungen. Alles, was einen Preis hat, wird irgendwann gekauft.
|
||||||
<code>Zuordnung_Ungarisch.py</code><br />
|
<code>Zuordnung_Ungarisch.py</code><br />
|
||||||
<code>VRP_Flotten_Routing.py</code><br />
|
<code>VRP_Flotten_Routing.py</code><br />
|
||||||
<code>VRP_Kapazitaetsfalle.py</code></p>
|
<code>VRP_Kapazitaetsfalle.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/graphen.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/graphen.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/graphen.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:graphen-schnellstart">8.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:graphen-schnellstart">8.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -13674,8 +13666,7 @@ plausibel aussieht.
|
||||||
<code>Simulated_Annealing.py</code><br />
|
<code>Simulated_Annealing.py</code><br />
|
||||||
<code>Metaheuristik_vs_Exakt.py</code><br />
|
<code>Metaheuristik_vs_Exakt.py</code><br />
|
||||||
<code>Large_Neighborhood_Search.py</code></p>
|
<code>Large_Neighborhood_Search.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/metaheuristiken.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/metaheuristiken.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/metaheuristiken.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:metaheuristiken-schnellstart">9.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:metaheuristiken-schnellstart">9.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -15245,8 +15236,7 @@ Abstand zum Optimum.
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Spaltengenerierung.py</code></p>
|
<code>Spaltengenerierung.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/dekomposition.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/dekomposition.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/dekomposition.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:dekomposition-schnellstart">10.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:dekomposition-schnellstart">10.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -16093,8 +16083,7 @@ Mutterrolle 5,600 mm, 13 bestellte Breiten, 219 Zuschnitte.
|
||||||
<code>KKT_Nachweis.py</code><br />
|
<code>KKT_Nachweis.py</code><br />
|
||||||
<code>Entropie_Maximierte_Allokation.py</code><br />
|
<code>Entropie_Maximierte_Allokation.py</code><br />
|
||||||
<code>Lokale_Optima_Multistart.py</code></p>
|
<code>Lokale_Optima_Multistart.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/qp-nlp.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/qp-nlp.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/qp-nlp.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:qp-nlp-schnellstart">11.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:qp-nlp-schnellstart">11.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -17270,8 +17259,7 @@ The objective is not DCP. Its following subexpressions are not: QuadForm(...)</c
|
||||||
<code>Stochastische_Optimierung.py</code><br />
|
<code>Stochastische_Optimierung.py</code><br />
|
||||||
<code>Robuste_Optimierung.py</code><br />
|
<code>Robuste_Optimierung.py</code><br />
|
||||||
<code>Chance_Constraints.py</code></p>
|
<code>Chance_Constraints.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/unsicherheit.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/unsicherheit.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/unsicherheit.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:unsicherheit-schnellstart">12.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:unsicherheit-schnellstart">12.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -18419,8 +18407,7 @@ Anteil ueber 11,34 Tage: 95.5 %</code></pre>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Bellman_Minimalbeispiel.py</code><br />
|
<code>Bellman_Minimalbeispiel.py</code><br />
|
||||||
<code>Mehrperiodige_Order_Execution.py</code></p>
|
<code>Mehrperiodige_Order_Execution.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/dynamische-programmierung.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/dynamische-programmierung.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/dynamische-programmierung.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:dynamische-programmierung-schnellstart">13.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:dynamische-programmierung-schnellstart">13.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -19288,8 +19275,7 @@ Abweichung DP zur analytischen Loesung: 5.788 % (Diskretisierung: 1000 Stueck)
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Mehrziel_Pareto.py</code></p>
|
<code>Mehrziel_Pareto.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/mehrziel.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/mehrziel.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/mehrziel.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:mehrziel-schnellstart">14.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:mehrziel-schnellstart">14.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -19977,8 +19963,7 @@ e(x) \le \varepsilon
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 3,5 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 3,5 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Predict_then_Optimize.py</code></p>
|
<code>Predict_then_Optimize.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/prognose.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/prognose.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/prognose.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:prognose-schnellstart">15.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:prognose-schnellstart">15.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -20724,8 +20709,7 @@ Kosten statt auf Fehler trainiert.
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 2,5 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 2,5 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Strukturbruecke.py</code></p>
|
<code>Strukturbruecke.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/bruecke.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/bruecke.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/bruecke.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:bruecke-schnellstart">16.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:bruecke-schnellstart">16.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -21395,8 +21379,7 @@ u_s \ge \ell_s^\top w - \gamma, \quad u_s \ge 0
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Kraftwerkseinsatz.py</code></p>
|
<code>Kraftwerkseinsatz.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/supplychain.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/supplychain.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/supplychain.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:supplychain-schnellstart">17.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:supplychain-schnellstart">17.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -22179,8 +22162,7 @@ zweistufig 111111222222222222222111 (39 Blockstunden)</code></pre>
|
||||||
<code>Finanzdaten_Ledoit_Wolf.py</code><br />
|
<code>Finanzdaten_Ledoit_Wolf.py</code><br />
|
||||||
<code>Kovarianz_Falle.py</code></p>
|
<code>Kovarianz_Falle.py</code></p>
|
||||||
<p><strong>⚠️ Überspringen Sie dieses Kapitel nicht.</strong> Wer direkt bei Markowitz (<a href="#kap-markowitz">Kapitel 19</a>) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.</p>
|
<p><strong>⚠️ Überspringen Sie dieses Kapitel nicht.</strong> Wer direkt bei Markowitz (<a href="#kap-markowitz">Kapitel 19</a>) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.</p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/finanzdaten.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/finanzdaten.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/finanzdaten.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:finanzdaten-schnellstart">18.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:finanzdaten-schnellstart">18.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -23032,8 +23014,7 @@ Ausfallraten und jede andere geschaetzte Groesse.
|
||||||
<code>Diversifikation_Demo.py</code><br />
|
<code>Diversifikation_Demo.py</code><br />
|
||||||
<code>Markowitz_CVXPY.py</code><br />
|
<code>Markowitz_CVXPY.py</code><br />
|
||||||
<code>Renditeschaetzung_Falle.py</code></p>
|
<code>Renditeschaetzung_Falle.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/markowitz.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/markowitz.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/markowitz.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:markowitz-schnellstart">19.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:markowitz-schnellstart">19.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -24010,8 +23991,7 @@ Drei praktische Konsequenzen:
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>VaR_CVaR_Demo.py</code><br />
|
<code>VaR_CVaR_Demo.py</code><br />
|
||||||
<code>CVaR_Portfolio.py</code></p>
|
<code>CVaR_Portfolio.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/cvar.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/cvar.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/cvar.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:cvar-schnellstart">20.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:cvar-schnellstart">20.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -24667,8 +24647,7 @@ CVaR: Portfolio 101.33 vs. Summe 159.24 -> subadditiv (kohaerent)
|
||||||
<code>Backtest_Fallen.py</code><br />
|
<code>Backtest_Fallen.py</code><br />
|
||||||
<code>Data_Snooping.py</code></p>
|
<code>Data_Snooping.py</code></p>
|
||||||
<p><strong>⚠️ Keine Anlageberatung.</strong> Dieses Kapitel demonstriert Methodik an realen Daten, keine handelbare Strategie. <a href="#sec:handelsmaschine-vom-backtest-zum-betrieb">Abschnitt 21.7</a> erklärt ausführlich, warum ein guter Backtest noch lange keine funktionierende Strategie ist.</p>
|
<p><strong>⚠️ Keine Anlageberatung.</strong> Dieses Kapitel demonstriert Methodik an realen Daten, keine handelbare Strategie. <a href="#sec:handelsmaschine-vom-backtest-zum-betrieb">Abschnitt 21.7</a> erklärt ausführlich, warum ein guter Backtest noch lange keine funktionierende Strategie ist.</p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/handelsmaschine.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/handelsmaschine.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/handelsmaschine.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:handelsmaschine-schnellstart">21.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:handelsmaschine-schnellstart">21.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -25728,8 +25707,7 @@ von allen Fehlversuchen genau einen: den erfolgreichsten.
|
||||||
<code>Betriebsueberwachung.py</code><br />
|
<code>Betriebsueberwachung.py</code><br />
|
||||||
<code>or_kern.py</code><br />
|
<code>or_kern.py</code><br />
|
||||||
<code>Solverwechsel_CPSAT_HiGHS.py</code></p>
|
<code>Solverwechsel_CPSAT_HiGHS.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/praxisfallen.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/praxisfallen.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/praxisfallen.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:praxisfallen-schnellstart">22.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:praxisfallen-schnellstart">22.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
@ -28148,8 +28126,7 @@ sichtbar wird, und gibt Zeit zum Handeln.
|
||||||
<code>Mutationstest.py</code><br />
|
<code>Mutationstest.py</code><br />
|
||||||
<code>Benchmark_Skalierung.py</code><br />
|
<code>Benchmark_Skalierung.py</code><br />
|
||||||
<code>Optimierungsdienst.py</code></p>
|
<code>Optimierungsdienst.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <code>Notebooks_04/testing.ipynb</code><br />
|
<p><strong>Notebook:</strong> <code>Notebooks_04/testing.ipynb</code></p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/testing.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<hr />
|
<hr />
|
||||||
<h2 id="sec:testing-schnellstart">23.1 In 5 Minuten gelöst</h2>
|
<h2 id="sec:testing-schnellstart">23.1 In 5 Minuten gelöst</h2>
|
||||||
|
|
|
||||||
3
OR_HTML_04/graphen.html
generated
3
OR_HTML_04/graphen.html
generated
|
|
@ -112,8 +112,7 @@
|
||||||
<code>Zuordnung_Ungarisch.py</code><br />
|
<code>Zuordnung_Ungarisch.py</code><br />
|
||||||
<code>VRP_Flotten_Routing.py</code><br />
|
<code>VRP_Flotten_Routing.py</code><br />
|
||||||
<code>VRP_Kapazitaetsfalle.py</code></p>
|
<code>VRP_Kapazitaetsfalle.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/graphen.ipynb">graphen.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/graphen.ipynb">graphen.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/graphen.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/handelsmaschine.html
generated
3
OR_HTML_04/handelsmaschine.html
generated
|
|
@ -112,8 +112,7 @@
|
||||||
<code>Backtest_Fallen.py</code><br />
|
<code>Backtest_Fallen.py</code><br />
|
||||||
<code>Data_Snooping.py</code></p>
|
<code>Data_Snooping.py</code></p>
|
||||||
<p><strong>⚠️ Keine Anlageberatung.</strong> Dieses Kapitel demonstriert Methodik an realen Daten, keine handelbare Strategie. <a href="#sec:handelsmaschine-vom-backtest-zum-betrieb">Abschnitt 21.7</a> erklärt ausführlich, warum ein guter Backtest noch lange keine funktionierende Strategie ist.</p>
|
<p><strong>⚠️ Keine Anlageberatung.</strong> Dieses Kapitel demonstriert Methodik an realen Daten, keine handelbare Strategie. <a href="#sec:handelsmaschine-vom-backtest-zum-betrieb">Abschnitt 21.7</a> erklärt ausführlich, warum ein guter Backtest noch lange keine funktionierende Strategie ist.</p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/handelsmaschine.ipynb">handelsmaschine.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/handelsmaschine.ipynb">handelsmaschine.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/handelsmaschine.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/lp.html
generated
3
OR_HTML_04/lp.html
generated
|
|
@ -124,8 +124,7 @@
|
||||||
<code>Sensitivitaetsanalyse.py</code><br />
|
<code>Sensitivitaetsanalyse.py</code><br />
|
||||||
<code>Dualitaet_Nachweis.py</code><br />
|
<code>Dualitaet_Nachweis.py</code><br />
|
||||||
<code>Toleranzen_und_Entartung.py</code></p>
|
<code>Toleranzen_und_Entartung.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/lp.ipynb">lp.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/lp.ipynb">lp.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/lp.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/markowitz.html
generated
3
OR_HTML_04/markowitz.html
generated
|
|
@ -111,8 +111,7 @@
|
||||||
<code>Diversifikation_Demo.py</code><br />
|
<code>Diversifikation_Demo.py</code><br />
|
||||||
<code>Markowitz_CVXPY.py</code><br />
|
<code>Markowitz_CVXPY.py</code><br />
|
||||||
<code>Renditeschaetzung_Falle.py</code></p>
|
<code>Renditeschaetzung_Falle.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/markowitz.ipynb">markowitz.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/markowitz.ipynb">markowitz.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/markowitz.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/mehrziel.html
generated
3
OR_HTML_04/mehrziel.html
generated
|
|
@ -109,8 +109,7 @@
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Mehrziel_Pareto.py</code></p>
|
<code>Mehrziel_Pareto.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/mehrziel.ipynb">mehrziel.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/mehrziel.ipynb">mehrziel.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/mehrziel.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/metaheuristiken.html
generated
3
OR_HTML_04/metaheuristiken.html
generated
|
|
@ -111,8 +111,7 @@
|
||||||
<code>Simulated_Annealing.py</code><br />
|
<code>Simulated_Annealing.py</code><br />
|
||||||
<code>Metaheuristik_vs_Exakt.py</code><br />
|
<code>Metaheuristik_vs_Exakt.py</code><br />
|
||||||
<code>Large_Neighborhood_Search.py</code></p>
|
<code>Large_Neighborhood_Search.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/metaheuristiken.ipynb">metaheuristiken.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/metaheuristiken.ipynb">metaheuristiken.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/metaheuristiken.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/milp.html
generated
3
OR_HTML_04/milp.html
generated
|
|
@ -114,8 +114,7 @@
|
||||||
<code>Solverstatus_und_Gap.py</code><br />
|
<code>Solverstatus_und_Gap.py</code><br />
|
||||||
<code>Warmstart_Effekt.py</code><br />
|
<code>Warmstart_Effekt.py</code><br />
|
||||||
<code>Big_M_Falle.py</code></p>
|
<code>Big_M_Falle.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/milp.ipynb">milp.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/milp.ipynb">milp.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/milp.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/modellierung.html
generated
3
OR_HTML_04/modellierung.html
generated
|
|
@ -109,8 +109,7 @@
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 3 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Vom_Wunsch_zum_Modell.py</code></p>
|
<code>Vom_Wunsch_zum_Modell.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/modellierung.ipynb">modellierung.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/modellierung.ipynb">modellierung.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/modellierung.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/oekosystem.html
generated
3
OR_HTML_04/oekosystem.html
generated
|
|
@ -112,8 +112,7 @@
|
||||||
<code>Solver_Wahl.py</code><br />
|
<code>Solver_Wahl.py</code><br />
|
||||||
<code>Modellierungsschichten.py</code><br />
|
<code>Modellierungsschichten.py</code><br />
|
||||||
<code>Vektorisierte_Modellgenerierung.py</code></p>
|
<code>Vektorisierte_Modellgenerierung.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/oekosystem.ipynb">oekosystem.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/oekosystem.ipynb">oekosystem.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/oekosystem.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/praxisfallen.html
generated
3
OR_HTML_04/praxisfallen.html
generated
|
|
@ -116,8 +116,7 @@
|
||||||
<code>Betriebsueberwachung.py</code><br />
|
<code>Betriebsueberwachung.py</code><br />
|
||||||
<code>or_kern.py</code><br />
|
<code>or_kern.py</code><br />
|
||||||
<code>Solverwechsel_CPSAT_HiGHS.py</code></p>
|
<code>Solverwechsel_CPSAT_HiGHS.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/praxisfallen.ipynb">praxisfallen.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/praxisfallen.ipynb">praxisfallen.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/praxisfallen.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/prognose.html
generated
3
OR_HTML_04/prognose.html
generated
|
|
@ -109,8 +109,7 @@
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 3,5 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 3,5 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Predict_then_Optimize.py</code></p>
|
<code>Predict_then_Optimize.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/prognose.ipynb">prognose.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/prognose.ipynb">prognose.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/prognose.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/qp-nlp.html
generated
3
OR_HTML_04/qp-nlp.html
generated
|
|
@ -125,8 +125,7 @@
|
||||||
<code>KKT_Nachweis.py</code><br />
|
<code>KKT_Nachweis.py</code><br />
|
||||||
<code>Entropie_Maximierte_Allokation.py</code><br />
|
<code>Entropie_Maximierte_Allokation.py</code><br />
|
||||||
<code>Lokale_Optima_Multistart.py</code></p>
|
<code>Lokale_Optima_Multistart.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/qp-nlp.ipynb">qp-nlp.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/qp-nlp.ipynb">qp-nlp.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/qp-nlp.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/supplychain.html
generated
3
OR_HTML_04/supplychain.html
generated
|
|
@ -109,8 +109,7 @@
|
||||||
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
<p><strong>Zeitbedarf:</strong> ca. 4 Stunden.</p>
|
||||||
<p><strong>Programme:</strong><br />
|
<p><strong>Programme:</strong><br />
|
||||||
<code>Kraftwerkseinsatz.py</code></p>
|
<code>Kraftwerkseinsatz.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/supplychain.ipynb">supplychain.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/supplychain.ipynb">supplychain.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/supplychain.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/testing.html
generated
3
OR_HTML_04/testing.html
generated
|
|
@ -112,8 +112,7 @@
|
||||||
<code>Mutationstest.py</code><br />
|
<code>Mutationstest.py</code><br />
|
||||||
<code>Benchmark_Skalierung.py</code><br />
|
<code>Benchmark_Skalierung.py</code><br />
|
||||||
<code>Optimierungsdienst.py</code></p>
|
<code>Optimierungsdienst.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/testing.ipynb">testing.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/testing.ipynb">testing.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/testing.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
3
OR_HTML_04/unsicherheit.html
generated
3
OR_HTML_04/unsicherheit.html
generated
|
|
@ -113,8 +113,7 @@
|
||||||
<code>Stochastische_Optimierung.py</code><br />
|
<code>Stochastische_Optimierung.py</code><br />
|
||||||
<code>Robuste_Optimierung.py</code><br />
|
<code>Robuste_Optimierung.py</code><br />
|
||||||
<code>Chance_Constraints.py</code></p>
|
<code>Chance_Constraints.py</code></p>
|
||||||
<p><strong>Notebook:</strong> <a href="Notebooks_04/unsicherheit.ipynb">unsicherheit.ipynb</a><br />
|
<p><strong>Notebook:</strong> <a href="Notebooks_04/unsicherheit.ipynb">unsicherheit.ipynb</a> — herunterladen und in Jupyter öffnen, in Colab hochladen oder mit dem Kurs-Image starten</p>
|
||||||
<a href="https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/unsicherheit.ipynb">In Google Colab öffnen</a></p>
|
|
||||||
</blockquote>
|
</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
|
||||||
69
Operations_Research_mit_Python_Version_04.md
generated
69
Operations_Research_mit_Python_Version_04.md
generated
|
|
@ -738,8 +738,7 @@ Diese Zeichen kommen erst in den Kapiteln vor, die über das klassische LP hinau
|
||||||
> `Bausteine_Vorlage.py`\
|
> `Bausteine_Vorlage.py`\
|
||||||
> `Excel_Bruecke.py`
|
> `Excel_Bruecke.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/einfuehrung.ipynb`\
|
> **Notebook:** `Notebooks_04/einfuehrung.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/einfuehrung.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -1767,8 +1766,7 @@ Ein Programm, das abstürzt, ist harmlos — Sie sehen sofort, dass etwas nicht
|
||||||
> `Konvexitaet_Demo.py`\
|
> `Konvexitaet_Demo.py`\
|
||||||
> `Skalierung_Kondition.py`
|
> `Skalierung_Kondition.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/fundament.ipynb`\
|
> **Notebook:** `Notebooks_04/fundament.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/fundament.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -2891,8 +2889,7 @@ und runden Sie Solver-Ergebnisse NIE ohne Toleranzpruefung.
|
||||||
> `Modellierungsschichten.py`\
|
> `Modellierungsschichten.py`\
|
||||||
> `Vektorisierte_Modellgenerierung.py`
|
> `Vektorisierte_Modellgenerierung.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/oekosystem.ipynb`\
|
> **Notebook:** `Notebooks_04/oekosystem.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/oekosystem.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -4025,8 +4022,7 @@ Groesse Variante Aufbau Loesen Aufba
|
||||||
> **Programme:**\
|
> **Programme:**\
|
||||||
> `Vom_Wunsch_zum_Modell.py`
|
> `Vom_Wunsch_zum_Modell.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/modellierung.ipynb`\
|
> **Notebook:** `Notebooks_04/modellierung.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/modellierung.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -4758,8 +4754,7 @@ Fällt Ihr Problem durch das Diagramm hindurch — nichtlineare Zielfunktion, un
|
||||||
> `Dualitaet_Nachweis.py`\
|
> `Dualitaet_Nachweis.py`\
|
||||||
> `Toleranzen_und_Entartung.py`
|
> `Toleranzen_und_Entartung.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/lp.ipynb`\
|
> **Notebook:** `Notebooks_04/lp.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/lp.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -5958,8 +5953,7 @@ brauchbare Aussage. Ein erfundener Einzelwert ist es nicht.
|
||||||
> `Warmstart_Effekt.py`\
|
> `Warmstart_Effekt.py`\
|
||||||
> `Big_M_Falle.py`
|
> `Big_M_Falle.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/milp.ipynb`\
|
> **Notebook:** `Notebooks_04/milp.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/milp.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -7570,8 +7564,7 @@ funktioniert immer.
|
||||||
> `CP_SAT_Statusfaelle.py`\
|
> `CP_SAT_Statusfaelle.py`\
|
||||||
> `Strafgewichte.py`
|
> `Strafgewichte.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/cpsat.ipynb`\
|
> **Notebook:** `Notebooks_04/cpsat.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/cpsat.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -9183,8 +9176,7 @@ Nebenbedingungen. Alles, was einen Preis hat, wird irgendwann gekauft.
|
||||||
> `VRP_Flotten_Routing.py`\
|
> `VRP_Flotten_Routing.py`\
|
||||||
> `VRP_Kapazitaetsfalle.py`
|
> `VRP_Kapazitaetsfalle.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/graphen.ipynb`\
|
> **Notebook:** `Notebooks_04/graphen.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/graphen.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -10115,8 +10107,7 @@ plausibel aussieht.
|
||||||
> `Metaheuristik_vs_Exakt.py`\
|
> `Metaheuristik_vs_Exakt.py`\
|
||||||
> `Large_Neighborhood_Search.py`
|
> `Large_Neighborhood_Search.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/metaheuristiken.ipynb`\
|
> **Notebook:** `Notebooks_04/metaheuristiken.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/metaheuristiken.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -11490,8 +11481,7 @@ Genau deshalb bekommt sie ein eigenes Kapitel: [Kapitel 10](#kap-dekomposition).
|
||||||
> **Programme:**\
|
> **Programme:**\
|
||||||
> `Spaltengenerierung.py`
|
> `Spaltengenerierung.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/dekomposition.ipynb`\
|
> **Notebook:** `Notebooks_04/dekomposition.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/dekomposition.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -12217,8 +12207,7 @@ Zwei weitere Kapitel schließen sich an, weil sie dieselbe Voraussetzung aufgebe
|
||||||
> `Entropie_Maximierte_Allokation.py`\
|
> `Entropie_Maximierte_Allokation.py`\
|
||||||
> `Lokale_Optima_Multistart.py`
|
> `Lokale_Optima_Multistart.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/qp-nlp.ipynb`\
|
> **Notebook:** `Notebooks_04/qp-nlp.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/qp-nlp.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -13336,8 +13325,7 @@ else:
|
||||||
> `Robuste_Optimierung.py`\
|
> `Robuste_Optimierung.py`\
|
||||||
> `Chance_Constraints.py`
|
> `Chance_Constraints.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/unsicherheit.ipynb`\
|
> **Notebook:** `Notebooks_04/unsicherheit.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/unsicherheit.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -14520,8 +14508,7 @@ Der szenariobasierte Weg kennt diese Fälle, weil sie in den Daten stehen. Er ko
|
||||||
> `Bellman_Minimalbeispiel.py`\
|
> `Bellman_Minimalbeispiel.py`\
|
||||||
> `Mehrperiodige_Order_Execution.py`
|
> `Mehrperiodige_Order_Execution.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/dynamische-programmierung.ipynb`\
|
> **Notebook:** `Notebooks_04/dynamische-programmierung.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/dynamische-programmierung.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -15237,8 +15224,7 @@ Bei dynamischer Programmierung entscheidet eine einzige Frage über Erfolg oder
|
||||||
> **Programme:**\
|
> **Programme:**\
|
||||||
> `Mehrziel_Pareto.py`
|
> `Mehrziel_Pareto.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/mehrziel.ipynb`\
|
> **Notebook:** `Notebooks_04/mehrziel.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/mehrziel.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -15904,8 +15890,7 @@ Diese Zahl ist mit etwas vergleichbar, das das Unternehmen ohnehin kennt: dem in
|
||||||
> **Programme:**\
|
> **Programme:**\
|
||||||
> `Predict_then_Optimize.py`
|
> `Predict_then_Optimize.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/prognose.ipynb`\
|
> **Notebook:** `Notebooks_04/prognose.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/prognose.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -16561,8 +16546,7 @@ Er hat drei Abschnitte, und Sie können nach jedem aufhören:
|
||||||
> **Programme:**\
|
> **Programme:**\
|
||||||
> `Strukturbruecke.py`
|
> `Strukturbruecke.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/bruecke.ipynb`\
|
> **Notebook:** `Notebooks_04/bruecke.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/bruecke.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -17177,8 +17161,7 @@ Eine Analogie ist nur so nützlich wie die Grenzen, die man ihr zieht. Drei Ding
|
||||||
> **Programme:**\
|
> **Programme:**\
|
||||||
> `Kraftwerkseinsatz.py`
|
> `Kraftwerkseinsatz.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/supplychain.ipynb`\
|
> **Notebook:** `Notebooks_04/supplychain.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/supplychain.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -17875,8 +17858,7 @@ Das ist keine akademische Feinheit, sondern die reale Lage der Energiewirtschaft
|
||||||
>
|
>
|
||||||
> **⚠️ Überspringen Sie dieses Kapitel nicht.** Wer direkt bei Markowitz ([Kapitel 19](#kap-markowitz)) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.
|
> **⚠️ Überspringen Sie dieses Kapitel nicht.** Wer direkt bei Markowitz ([Kapitel 19](#kap-markowitz)) einsteigt, erhält absurde Portfoliogewichte und weiß nicht, warum.
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/finanzdaten.ipynb`\
|
> **Notebook:** `Notebooks_04/finanzdaten.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/finanzdaten.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -18690,8 +18672,7 @@ e 0: \mathbf{w}^ op\mathbf{S}\mathbf{w} = 0$ | „In genau diesen Richtungen mis
|
||||||
> `Markowitz_CVXPY.py`\
|
> `Markowitz_CVXPY.py`\
|
||||||
> `Renditeschaetzung_Falle.py`
|
> `Renditeschaetzung_Falle.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/markowitz.ipynb`\
|
> **Notebook:** `Notebooks_04/markowitz.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/markowitz.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -19585,8 +19566,7 @@ Drei praktische Konsequenzen:
|
||||||
> `VaR_CVaR_Demo.py`\
|
> `VaR_CVaR_Demo.py`\
|
||||||
> `CVaR_Portfolio.py`
|
> `CVaR_Portfolio.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/cvar.ipynb`\
|
> **Notebook:** `Notebooks_04/cvar.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/cvar.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -20251,8 +20231,7 @@ if __name__ == "__main__":
|
||||||
>
|
>
|
||||||
> **⚠️ Keine Anlageberatung.** Dieses Kapitel demonstriert Methodik an realen Daten, keine handelbare Strategie. [Abschnitt 21.7](#sec:handelsmaschine-vom-backtest-zum-betrieb) erklärt ausführlich, warum ein guter Backtest noch lange keine funktionierende Strategie ist.
|
> **⚠️ Keine Anlageberatung.** Dieses Kapitel demonstriert Methodik an realen Daten, keine handelbare Strategie. [Abschnitt 21.7](#sec:handelsmaschine-vom-backtest-zum-betrieb) erklärt ausführlich, warum ein guter Backtest noch lange keine funktionierende Strategie ist.
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/handelsmaschine.ipynb`\
|
> **Notebook:** `Notebooks_04/handelsmaschine.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/handelsmaschine.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -21204,8 +21183,7 @@ Sechs Kapitel, zwei Branchen, die sich für unvergleichbar halten. Die Werkstatt
|
||||||
> `or_kern.py`\
|
> `or_kern.py`\
|
||||||
> `Solverwechsel_CPSAT_HiGHS.py`
|
> `Solverwechsel_CPSAT_HiGHS.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/praxisfallen.ipynb`\
|
> **Notebook:** `Notebooks_04/praxisfallen.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/praxisfallen.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -23482,8 +23460,7 @@ sichtbar wird, und gibt Zeit zum Handeln.
|
||||||
> `Benchmark_Skalierung.py`\
|
> `Benchmark_Skalierung.py`\
|
||||||
> `Optimierungsdienst.py`
|
> `Optimierungsdienst.py`
|
||||||
>
|
>
|
||||||
> **Notebook:** `Notebooks_04/testing.ipynb`\
|
> **Notebook:** `Notebooks_04/testing.ipynb`
|
||||||
> [In Google Colab öffnen](https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main/Notebooks_04/testing.ipynb)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -79,13 +79,22 @@ NOTEBOOK_VERZ = os.path.join(BASIS, NOTEBOOK_NAME)
|
||||||
# Leerstring => es werden keine Colab-Badges erzeugt, nur lokale
|
# Leerstring => es werden keine Colab-Badges erzeugt, nur lokale
|
||||||
# Notebook-Hinweise.
|
# Notebook-Hinweise.
|
||||||
#
|
#
|
||||||
# ACHTUNG BEIM VEROEFFENTLICHEN: Der Pfad danach lautet 'Notebooks_04/<name>.ipynb'
|
# WARUM HIER EIN LEERSTRING STEHT: Das Repository liegt auf einer eigenen
|
||||||
# und wird relativ zur REPOSITORY-WURZEL aufgeloest. Seit der Trennung von
|
# Forgejo-Instanz, und Colab kann Notebooks NUR aus GitHub, aus Google Drive
|
||||||
# Version 03 und 04 ist das Version_04/ - der Pfad stimmt also, sobald dieses
|
# oder aus einem Upload oeffnen. Die URL-Form
|
||||||
# Verzeichnis die Wurzel des neuen Repositorys ist. Zu aendern sind nur
|
# 'colab.research.google.com/github/<konto>/<repo>/...' ist fest auf GitHub
|
||||||
# Kontoname und Repository-Name in der URL unten. Die 25 Badges auf den
|
# verdrahtet - eine selbstgehostete Adresse dort einzusetzen ergibt keinen
|
||||||
# Kapitelseiten haengen daran; ein falscher Wert faellt erst beim Klicken auf.
|
# Link zum eigenen Server, sondern einen toten GitHub-Link.
|
||||||
COLAB_BASIS_URL = "https://colab.research.google.com/github/dschlueter/or-mit-python/blob/main"
|
#
|
||||||
|
# Verloren geht dadurch nichts: Die 25 Notebooks liegen neben der Website in
|
||||||
|
# OR_HTML_04/Notebooks_04/ und bekommen einen echten Download-Link. Wer sie
|
||||||
|
# ohne eigene Installation ausfuehren will, nimmt das Kurs-Image
|
||||||
|
# (docker run -p 8888:8888 or-mit-python) - siehe README.md.
|
||||||
|
#
|
||||||
|
# Wer spaeter doch nach GitHub spiegelt, traegt hier die Basis-URL ein; der
|
||||||
|
# Pfad danach lautet 'Notebooks_04/<name>.ipynb' und wird relativ zur
|
||||||
|
# Repository-Wurzel aufgeloest, stimmt also unveraendert.
|
||||||
|
COLAB_BASIS_URL = ""
|
||||||
|
|
||||||
# Reihenfolge der Kapitel im Gesamtdokument
|
# Reihenfolge der Kapitel im Gesamtdokument
|
||||||
DATEIEN = [
|
DATEIEN = [
|
||||||
|
|
@ -1885,6 +1894,10 @@ def ergaenze_notebook_hinweis(text: str, notebook: str | None,
|
||||||
lokal = (f"[{notebook}]({NOTEBOOK_NAME}/{notebook})" if als_link
|
lokal = (f"[{notebook}]({NOTEBOOK_NAME}/{notebook})" if als_link
|
||||||
else f"`{NOTEBOOK_NAME}/{notebook}`")
|
else f"`{NOTEBOOK_NAME}/{notebook}`")
|
||||||
zeilen = [f"> **Notebook:** {lokal}"]
|
zeilen = [f"> **Notebook:** {lokal}"]
|
||||||
|
if als_link and not COLAB_BASIS_URL:
|
||||||
|
# Ohne Colab-Knopf soll wenigstens dastehen, was man mit der Datei tut.
|
||||||
|
zeilen[0] += (" \u2014 herunterladen und in Jupyter \u00f6ffnen, in Colab "
|
||||||
|
"hochladen oder mit dem Kurs-Image starten")
|
||||||
if COLAB_BASIS_URL:
|
if COLAB_BASIS_URL:
|
||||||
ziel = f"{COLAB_BASIS_URL}/{NOTEBOOK_NAME}/{notebook}"
|
ziel = f"{COLAB_BASIS_URL}/{NOTEBOOK_NAME}/{notebook}"
|
||||||
zeilen.append(f"> [In Google Colab öffnen]({ziel})")
|
zeilen.append(f"> [In Google Colab öffnen]({ziel})")
|
||||||
|
|
|
||||||
21
PROGRESS.md
21
PROGRESS.md
|
|
@ -1345,13 +1345,20 @@ Teilhistorie, die vollständig aussieht und es nicht ist. Volle Historie ginge n
|
||||||
|
|
||||||
### Was von außen kommen muss
|
### Was von außen kommen muss
|
||||||
|
|
||||||
1. **Remote-Repository anlegen und pushen.**
|
1. ✅ **Remote-Repository angelegt und gepusht** — <https://kitux.de/forgejo/dschlueter/operations_research>,
|
||||||
2. **Danach `COLAB_BASIS_URL`** in `build_version_04.py` (Zeile 88) auf Kontoname und
|
öffentlich, Branch `main`.
|
||||||
Repository-Namen setzen. Der Wert dort ist ein **Platzhalter**
|
2. ✅ **`COLAB_BASIS_URL` geklärt — und zwar anders als geplant.** Der Platzhalter zeigte auf
|
||||||
(`dschlueter/or-mit-python`); die 25 Colab-Badges hängen daran, und ein falscher Wert
|
GitHub, das Repository liegt auf einer eigenen Forgejo-Instanz. Colab öffnet Notebooks
|
||||||
fällt erst beim Klicken auf. Danach `--html` neu bauen.
|
**nur** aus GitHub, Google Drive oder einem Upload; die URL-Form
|
||||||
3. **Veröffentlichen.** `OR_HTML_04/` ist selbstgenügsam und direkt auf einen Webserver
|
`colab.research.google.com/github/…` ist fest auf GitHub verdrahtet. Eine
|
||||||
kopierbar.
|
selbstgehostete Adresse dort einzusetzen ergäbe keinen Link zum eigenen Server, sondern
|
||||||
|
einen toten GitHub-Link — der Kommentar im Quelltext („zu ändern sind nur Kontoname und
|
||||||
|
Repository-Name") ging von GitHub aus und war damit selbst irreführend.
|
||||||
|
Die Konstante steht jetzt auf `""`: Die Colab-Zeile entfällt, der **Download-Link auf das
|
||||||
|
Notebook bleibt**, ergänzt um den Hinweis, was man damit tut. Ein späterer GitHub-Spiegel
|
||||||
|
braucht weiterhin nur diesen einen Wert.
|
||||||
|
3. ⏳ **Veröffentlichen.** `OR_HTML_04/` ist selbstgenügsam und direkt auf einen Webserver
|
||||||
|
kopierbar. Sobald die Adresse feststeht, gehört sie ins README.
|
||||||
|
|
||||||
### Bewusst zurückgestellt (aus `Verbesserungen_02/_03`)
|
### Bewusst zurückgestellt (aus `Verbesserungen_02/_03`)
|
||||||
|
|
||||||
|
|
|
||||||
290
README.md
290
README.md
|
|
@ -1,12 +1,108 @@
|
||||||
# Optimierte Entscheidungsfindung mit Python — Version 04
|
# Optimierte Entscheidungsfindung mit Python
|
||||||
|
|
||||||
Quellen, Build-Werkzeuge und Ausgaben des Lehrbuchs *Optimierte Entscheidungsfindung mit Python*
|
*Von der mathematischen Modellierung zu praktischen intelligenten Lösungen für Betrieb,
|
||||||
(Autor: Dieter Schlüter). Dieses Verzeichnis ist die Wurzel: Alle Skripte leiten ihre Pfade
|
Technik und Finanzmärkte*
|
||||||
daraus ab, und alle Befehle unten werden **hier** ausgeführt.
|
|
||||||
|
|
||||||
> Dies ist die Bau-Anleitung für das Repository. Der Wegweiser **für Leserinnen und Leser des
|
Ein Lehrbuch über Operations Research mit Python: **23 Kapitel in 5 Teilen, 5 Anhänge,
|
||||||
> Buchs** — Aufbau, Lernpfade, Voraussetzungen — steht in
|
141 Aufgaben mit vollständigen Lösungen, 76 lauffähige Beispielprogramme, 25 Jupyter-Notebooks,
|
||||||
> [`Operations_Research_mit_Python_Version_04/README.md`](Operations_Research_mit_Python_Version_04/README.md).
|
33 Diagramme — 760 PDF-Seiten.** Von der linearen Programmierung über Constraint Programming
|
||||||
|
und Metaheuristiken bis zu Portfoliooptimierung, CVaR und dem Weg vom Prototyp in den Betrieb.
|
||||||
|
|
||||||
|
Autor: **Dieter Schlüter** · Lizenz: MIT (Code) und CC BY-SA 4.0 (Text)
|
||||||
|
|
||||||
|
> **Der Grundsatz des Buchs:** Jede abgedruckte Ausgabe stammt aus einem echten Lauf des
|
||||||
|
> danebenstehenden Programms, jede Zahl im Text ist gerechnet und nicht geschätzt. Allein
|
||||||
|
> beim Nachbauen von zehn Diagrammen kamen so sieben Fehler ans Licht, die beim Hinsehen
|
||||||
|
> niemand bemerkt hatte.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Das Buch lesen
|
||||||
|
|
||||||
|
| Format | Wo |
|
||||||
|
| --- | --- |
|
||||||
|
| **PDF**, 760 Seiten | [`Operations_Research_mit_Python_Version_04.pdf`](Operations_Research_mit_Python_Version_04.pdf) |
|
||||||
|
| **Website** — eine Seite je Kapitel, mit Volltextsuche, Stichwortverzeichnis und vier interaktiven Plotly-Figuren | `OR_HTML_04/index.html` im Browser öffnen |
|
||||||
|
| **Ein einziges HTML-Dokument** | `OR_HTML_04/gesamtdokument.html` |
|
||||||
|
|
||||||
|
Die Website ist selbstgenügsam — alle Verweise zeigen auf Unterverzeichnisse (`assets/`,
|
||||||
|
`bilder_04/`, `katex/`, `Notebooks_04/`). Der Ordner lässt sich unverändert auf einen
|
||||||
|
Webserver kopieren, ohne Konfiguration.
|
||||||
|
|
||||||
|
**Wegweiser durch den Inhalt** — Aufbau, Lernpfade, Voraussetzungen:
|
||||||
|
[`Operations_Research_mit_Python_Version_04/README.md`](Operations_Research_mit_Python_Version_04/README.md).
|
||||||
|
Vier rollenbezogene Einstiege (Entscheider, Ingenieure, Investoren, Studierende) stehen im
|
||||||
|
Vorwort des Buchs.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Die Beispiele ausführen — drei Wege
|
||||||
|
|
||||||
|
### 1. Im Container, ohne etwas zu installieren
|
||||||
|
|
||||||
|
Der empfohlene Weg zum Ausprobieren. Das Kurs-Image bringt alle Solver in geprüften
|
||||||
|
Versionen mit.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build -t or-mit-python .
|
||||||
|
|
||||||
|
# JupyterLab mit allen 25 Kapitel-Notebooks -> http://127.0.0.1:8888
|
||||||
|
docker run --rm -p 127.0.0.1:8888:8888 or-mit-python
|
||||||
|
|
||||||
|
# oder ein einzelnes Programm
|
||||||
|
docker run --rm or-mit-python Installationstest.py
|
||||||
|
docker run --rm or-mit-python Rucksack.py
|
||||||
|
|
||||||
|
# Ergebnisdateien behalten (Excel-Mappen, Diagramme)
|
||||||
|
docker run --rm -v "$PWD/ausgabe:/buch/output" or-mit-python Excel_Bruecke.py
|
||||||
|
```
|
||||||
|
|
||||||
|
JupyterLab läuft im Image **ohne Zugangstoken** — für den eigenen Rechner richtig, und
|
||||||
|
deshalb steht oben `127.0.0.1:8888:8888` statt `8888:8888`: So ist der Dienst nur lokal
|
||||||
|
erreichbar. Stellen Sie den Container nicht ins offene Netz.
|
||||||
|
|
||||||
|
Das Image führt die Programme aus, **es baut das Buch nicht**: pandoc, xelatex und inkscape
|
||||||
|
wären zusammen über ein Gigabyte ohne Nutzen für jemanden, der rechnen will.
|
||||||
|
|
||||||
|
### 2. Schlanke lokale Installation
|
||||||
|
|
||||||
|
Über [`pyproject.toml`](pyproject.toml) und seine Gruppen — die Grundausstattung trägt den
|
||||||
|
Großteil des Buchs:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
python3 -m venv .venv && source .venv/bin/activate
|
||||||
|
pip install -e . # numpy, scipy, pandas, matplotlib, openpyxl, pydantic, ortools, cvxpy
|
||||||
|
pip install -e ".[finance]" # scikit-learn, yfinance — Teil IV
|
||||||
|
pip install -e ".[large-scale]" # highspy, Pyomo, linopy, polars
|
||||||
|
pip install -e ".[api]" # fastapi, uvicorn, httpx — Kapitel Testen
|
||||||
|
pip install -e ".[notebook]" # jupyterlab
|
||||||
|
pip install -e ".[figures]" # plotly, graphviz — nur zum Neuerzeugen der Diagramme
|
||||||
|
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 die Grundausstattung installiert, kann in den Konflikt gar nicht geraten.
|
||||||
|
Die drei Programme, die beide brauchen, isolieren sie zur Laufzeit in getrennten Prozessen —
|
||||||
|
`ProcessPoolExecutor` mit `spawn` und `max_tasks_per_child=1`, erklärt im Kapitel „Das
|
||||||
|
Python-Ökosystem für OR".
|
||||||
|
|
||||||
|
### 3. Alles auf einen Schlag
|
||||||
|
|
||||||
|
So wie im Buch abgedruckt, über
|
||||||
|
[`requirements.txt`](Operations_Research_mit_Python_Version_04_Programme/requirements.txt):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
pip install -r Operations_Research_mit_Python_Version_04_Programme/requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
> **Prüfen Sie die Installation, bevor Sie anfangen:**
|
||||||
|
> `python3 Operations_Research_mit_Python_Version_04_Programme/Installationstest.py`
|
||||||
|
> meldet für jedes Paket Version und Status und löst je Solver-Familie ein Mini-Modell.
|
||||||
|
|
||||||
|
**Vier der 76 Programme brauchen Internet** (Kursdaten über `yfinance`):
|
||||||
|
`CVaR_Portfolio.py`, `Finanzdaten_Ledoit_Wolf.py`, `Markowitz_CVXPY.py`,
|
||||||
|
`QuantitativeTradingEngine.py`. Alle übrigen laufen offline.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -15,29 +111,31 @@ daraus ab, und alle Befehle unten werden **hier** ausgeführt.
|
||||||
| Pfad | Rolle |
|
| Pfad | Rolle |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `Operations_Research_mit_Python_Version_04/` | **Quelle**: 36 Kapiteldateien (inkl. 5 Teil-Synthesen) + Build-Skripte |
|
| `Operations_Research_mit_Python_Version_04/` | **Quelle**: 36 Kapiteldateien (inkl. 5 Teil-Synthesen) + Build-Skripte |
|
||||||
| `bilder_04/` | **Quelle**: Diagramme (SVG/PNG) + `erzeuge_*.py`-Generatoren |
|
| `bilder_04/` | **Quelle**: 33 Diagramme (SVG) + 16 `erzeuge_*.py`-Generatoren |
|
||||||
|
| `Kritik_und_Verbesserungsvorschlaege/` | **Quelle**: die Rezensionen und Vorschläge, die den Umbau ausgelöst haben |
|
||||||
|
| `pyproject.toml`, `Dockerfile`, `.dockerignore` | **Quelle**: Abhängigkeitsgruppen und Kurs-Image |
|
||||||
|
| `pandoc-defaults-*.yaml`, `pandoc/` | **Quelle**: Konfiguration des PDF-Baus |
|
||||||
|
| `PLAN.md` / `PROGRESS.md` | **Quelle**: Ziel des Umbaus und erreichter Stand |
|
||||||
| `Operations_Research_mit_Python_Version_04.md` | generiert: Gesamtdokument (Pandoc-Eingabe) |
|
| `Operations_Research_mit_Python_Version_04.md` | generiert: Gesamtdokument (Pandoc-Eingabe) |
|
||||||
| `Operations_Research_mit_Python_Version_04.pdf` | generiert: PDF, 760 Seiten |
|
| `Operations_Research_mit_Python_Version_04.pdf` | generiert: PDF, 760 Seiten |
|
||||||
| `OR_HTML_04/` | generiert: **Mehrseiten-Website** — dieser Ordner wird veröffentlicht |
|
| `OR_HTML_04/` | generiert: **Mehrseiten-Website** — dieser Ordner wird veröffentlicht |
|
||||||
| `Operations_Research_mit_Python_Version_04_Programme/` | generiert: 76 lauffähige Beispielprogramme |
|
| `Operations_Research_mit_Python_Version_04_Programme/` | generiert: 76 Beispielprogramme |
|
||||||
| `Notebooks_04/` | generiert: ein Jupyter-Notebook je Kapitel |
|
| `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`, …) |
|
|
||||||
| `Dockerfile`, `.dockerignore` | zweistufiges Kurs-Image (führt die Programme aus, baut nicht das Buch) |
|
|
||||||
| `pandoc-defaults-*.yaml`, `pandoc/` | Konfiguration des PDF-Baus |
|
|
||||||
|
|
||||||
**Nur die als *Quelle* markierten Verzeichnisse werden von Hand bearbeitet.** Alles andere
|
**Nur die als *Quelle* markierten Verzeichnisse werden von Hand bearbeitet.** Alles andere
|
||||||
wird erzeugt und bei jeder inhaltlichen Änderung neu gebaut — insbesondere gehören
|
wird erzeugt und bei jeder inhaltlichen Änderung neu gebaut. Insbesondere gehören
|
||||||
Programmänderungen in den Kapitel-Codeblock, nicht in das Programme-Verzeichnis.
|
**Programmänderungen in den Kapitel-Codeblock**, nicht in das Programme-Verzeichnis — sonst
|
||||||
|
gehen sie beim nächsten Bau verloren.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Bauen
|
## Das Buch selbst bauen
|
||||||
|
|
||||||
|
Alle Befehle werden **in diesem Verzeichnis** ausgeführt; die Skripte leiten ihre Pfade aus
|
||||||
|
der eigenen Position ab.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd Version_04
|
# nur prüfen: Struktur, Querverweise, Codezäune, harte Nummern, Lesekette
|
||||||
|
|
||||||
# nur prüfen: Struktur, Querverweise, Codezäune, harte Nummern
|
|
||||||
python3 Operations_Research_mit_Python_Version_04/build_version_04.py --check
|
python3 Operations_Research_mit_Python_Version_04/build_version_04.py --check
|
||||||
|
|
||||||
# Gesamtdokument, PDF und Website
|
# Gesamtdokument, PDF und Website
|
||||||
|
|
@ -45,115 +143,89 @@ python3 Operations_Research_mit_Python_Version_04/build_version_04.py --pdf --ht
|
||||||
|
|
||||||
# Beispielprogramme aus den Kapiteln extrahieren
|
# Beispielprogramme aus den Kapiteln extrahieren
|
||||||
python3 Operations_Research_mit_Python_Version_04/extract_programme_04.py
|
python3 Operations_Research_mit_Python_Version_04/extract_programme_04.py
|
||||||
|
|
||||||
|
# ein Diagramm neu erzeugen (braucht die Gruppe [figures], teils 'dot')
|
||||||
|
python3 bilder_04/erzeuge_kondition.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Die Website ist danach in `OR_HTML_04/` vollständig und **selbstgenügsam** — alle Verweise
|
`--check` prüft mehr als die Struktur: fehlende Codezäune, tote Dateilinks, eine gebrochene
|
||||||
zeigen auf Unterverzeichnisse (`assets/`, `bilder_04/`, `katex/`, `Notebooks_04/`). Der Ordner
|
Lesekette, Lösungsabschnitte mit falscher Aufgabenzahl — und **jede von Hand geschriebene
|
||||||
lässt sich unverändert auf einen Webserver kopieren.
|
Nummer**, die der Build selbst vergeben müsste. Diese Regel ist die in diesem Projekt am
|
||||||
|
häufigsten verletzte; acht Fälle wurden nachträglich gefunden, und jeder hat eine eigene
|
||||||
|
Prüfung hinterlassen.
|
||||||
|
|
||||||
---
|
### Externe Werkzeuge
|
||||||
|
|
||||||
## Voraussetzungen
|
| Werkzeug | Wofür | Ohne es |
|
||||||
|
|
||||||
**Python-Pakete** — alles auf einen Schlag, wie im Buch abgedruckt
|
|
||||||
([`requirements.txt`](Operations_Research_mit_Python_Version_04_Programme/requirements.txt)):
|
|
||||||
|
|
||||||
```bash
|
|
||||||
python3 -m venv .venv && source .venv/bin/activate
|
|
||||||
pip install -r Operations_Research_mit_Python_Version_04_Programme/requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
Wer eine schlanke Umgebung möchte, nimmt stattdessen [`pyproject.toml`](pyproject.toml) mit
|
|
||||||
seinen Gruppen — die Grundausstattung trägt den Großteil des Buchs:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
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
|
|
||||||
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 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,
|
|
||||||
und steht darum nur in `[figures]`.
|
|
||||||
|
|
||||||
### Oder im Container
|
|
||||||
|
|
||||||
Wer nichts installieren will, baut das Kurs-Image:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker build -t or-mit-python .
|
|
||||||
docker run --rm or-mit-python Installationstest.py
|
|
||||||
docker run --rm or-mit-python Rucksack.py
|
|
||||||
docker run --rm -it or-mit-python # Python-Eingabe
|
|
||||||
docker run --rm -v "$PWD/ausgabe:/buch/output" or-mit-python Excel_Bruecke.py
|
|
||||||
```
|
|
||||||
|
|
||||||
Zweistufiger Bau: Die erste Stufe übersetzt die Abhängigkeiten in eine virtuelle Umgebung
|
|
||||||
und braucht dafür einen Compiler, die zweite kopiert nur das Ergebnis — die Bauumgebung
|
|
||||||
landet nicht im Image. Enthalten sind die Gruppen `finance`, `large-scale`, `api` und `dev`;
|
|
||||||
`figures` fehlt bewusst, weil es zusätzlich Graphviz verlangt und nur dem Neuerzeugen der
|
|
||||||
Diagramme dient.
|
|
||||||
|
|
||||||
**Das Image führt die Programme aus, es baut das Buch nicht.** Für PDF und Website braucht
|
|
||||||
es pandoc, xelatex und inkscape — zusammen über ein Gigabyte, ohne Nutzen für jemanden, der
|
|
||||||
die Beispiele durchrechnen will.
|
|
||||||
|
|
||||||
Zwei Punkte, die nicht offensichtlich sind: Das Image enthält `ortools` **und** `highspy`,
|
|
||||||
obwohl sie sich nicht gemeinsam importieren lassen — der Konflikt wird zur Laufzeit durch
|
|
||||||
getrennte Prozesse gelöst, nicht durch Weglassen. Und `libgomp1` muss im schlanken
|
|
||||||
Basis-Image nachinstalliert werden, sonst scheitert der erste Solveraufruf mit
|
|
||||||
`libgomp.so.1: cannot open shared object file`.
|
|
||||||
|
|
||||||
**Externe Werkzeuge**, je nachdem, was gebaut werden soll:
|
|
||||||
|
|
||||||
| Werkzeug | wofür | ohne es |
|
|
||||||
| --- | --- | --- |
|
| --- | --- | --- |
|
||||||
| `pandoc` (≥ 3.0) | PDF und Website | `--pdf`/`--html` scheitern; `--check` läuft |
|
| `pandoc` (≥ 3.0) | PDF und Website | `--pdf`/`--html` scheitern; `--check` läuft |
|
||||||
| `xelatex` + `texindy` | PDF | kein PDF; Website unberührt |
|
| `xelatex` + `texindy` | PDF | kein PDF; Website unberührt |
|
||||||
| `inkscape` | SVG-Grafiken im PDF | LaTeX bricht bei `\includesvg` ab |
|
| `inkscape` | SVG-Grafiken im PDF | LaTeX bricht bei `\includesvg` ab |
|
||||||
| `dot` (Graphviz) | 5 der 15 Bildgeneratoren | nur beim Neuerzeugen dieser Diagramme nötig |
|
| `dot` (Graphviz) | 5 der 16 Bildgeneratoren | nur beim Neuerzeugen dieser Diagramme nötig |
|
||||||
|
|
||||||
**`OR_HTML_04/katex/`** ist externes Material und wird von keinem Skript erzeugt. Fehlt es,
|
**`OR_HTML_04/katex/`** ist externes Material und wird von keinem Skript erzeugt. Fehlt es,
|
||||||
bleiben die Formeln auf der Website ungesetzt.
|
bleiben die Formeln auf der Website ungesetzt.
|
||||||
|
|
||||||
---
|
**Warum die PDF-Konfiguration doppelt vorliegt:** `pandoc-defaults-basis.yaml` ist eine Kopie
|
||||||
|
der Benutzerdatei `~/.config/pandoc/defaults.yaml` — mit **relativem** Pfad auf
|
||||||
## Zwei Werte, die beim Veröffentlichen zu setzen sind
|
`pandoc/header-includes.tex` statt des absoluten, der dort steht. Ohne diese Kopie könnte ein
|
||||||
|
frischer Klon kein PDF bauen. `build_version_04.py` bevorzugt sie und fällt auf die
|
||||||
1. **`COLAB_BASIS_URL`** in `Operations_Research_mit_Python_Version_04/build_version_04.py`.
|
Benutzerdatei zurück, falls sie fehlt.
|
||||||
Sie trägt Kontoname und Repository-Name; die 25 Colab-Badges auf den Kapitelseiten hängen
|
|
||||||
daran. Der Pfadteil `Notebooks_04/…` wird relativ zur Repository-Wurzel aufgelöst und
|
|
||||||
stimmt bereits. Ein Leerstring schaltet die Badges ab.
|
|
||||||
2. Nichts weiter. Alle übrigen Pfade sind relativ.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Warum die PDF-Konfiguration doppelt vorliegt
|
## Notebooks und Google Colab
|
||||||
|
|
||||||
`pandoc-defaults-basis.yaml` ist eine Kopie der Benutzerdatei
|
Jedes Kapitel hat ein Notebook in `Notebooks_04/`, und die Website verlinkt es zum
|
||||||
`~/.config/pandoc/defaults.yaml` (Schriften, Geometrie, Seitenlayout) — mit **relativem**
|
Herunterladen. Einen **Colab-Knopf gibt es bewusst nicht**: Colab öffnet Notebooks nur aus
|
||||||
Pfad auf `pandoc/header-includes.tex` statt des absoluten, der dort steht. Ohne diese Kopie
|
GitHub, aus Google Drive oder aus einem Upload — eine selbstgehostete Git-Instanz kann es
|
||||||
könnte ein frischer Klon kein PDF bauen. `build_version_04.py` bevorzugt sie und fällt auf
|
nicht lesen. Wer ohne eigene Installation rechnen will, nimmt das Kurs-Image (Weg 1); wer
|
||||||
die Benutzerdatei zurück, falls sie fehlt.
|
Colab bevorzugt, lädt die `.ipynb` herunter und dort hoch.
|
||||||
|
|
||||||
`pandoc-defaults-buch.yaml` enthält die projektspezifischen Überschreibungen
|
Sollte das Repository später zusätzlich auf GitHub gespiegelt werden, genügt **ein** Wert:
|
||||||
(Inhaltsverzeichnis und Nummerierung werden im Markdown selbst erzeugt, `-shell-escape` für
|
`COLAB_BASIS_URL` in `build_version_04.py`. Der Pfad dahinter stimmt bereits.
|
||||||
`\includesvg`). Die eigentliche Buchtypografie steht in `bilder_04/or_pdf_header.tex`.
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Lizenz
|
||||||
|
|
||||||
|
Zwei Lizenzen, je nachdem, was Sie verwenden:
|
||||||
|
|
||||||
|
| Was | Lizenz | Datei |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| **Programmcode** — alle `.py`, Notebooks, `Dockerfile`, `pyproject.toml` | MIT | [`LICENSE`](LICENSE) |
|
||||||
|
| **Buchtext und Abbildungen** — `.md`-Kapitel, PDF, Website, Diagramme | CC BY-SA 4.0 | [`LICENSE-TEXT.md`](LICENSE-TEXT.md) |
|
||||||
|
|
||||||
|
Ein Codeblock, der im Buchtext abgedruckt ist, bleibt Programmcode: Für ihn gilt MIT.
|
||||||
|
|
||||||
|
Die verwendeten Bibliotheken (HiGHS, Google OR-Tools, CVXPY, SciPy, Pyomo, linopy und
|
||||||
|
andere) stehen unter ihren eigenen Lizenzen. Für die Inhalte gibt es **keine
|
||||||
|
Gewährleistung** — die Modelle sind Lehrbeispiele; wer auf ihrer Grundlage betriebliche oder
|
||||||
|
finanzielle Entscheidungen trifft, tut das in eigener Verantwortung.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Mitwirken
|
||||||
|
|
||||||
|
Fehler, Unklarheiten und Verbesserungsvorschläge sind willkommen. Besonders hilfreich:
|
||||||
|
|
||||||
|
* **Eine Zahl, die nicht stimmt.** Jede abgedruckte Ausgabe soll aus einem echten Lauf
|
||||||
|
stammen — ergibt Ihrer etwas anderes, ist das ein Fund. Bitte mit Python- und
|
||||||
|
Paketversion.
|
||||||
|
* **Eine Stelle, an der das Buch etwas behauptet, statt es zu zeigen.**
|
||||||
|
* **Ein Beispiel aus Ihrem Arbeitsalltag**, das ein Muster besser erklärt als das im Buch.
|
||||||
|
|
||||||
|
Wer selbst etwas ändert: Programmänderungen gehören in den **Kapitel-Codeblock**, danach
|
||||||
|
`extract_programme_04.py` laufen lassen. Vor dem Absenden `--check`. Die Konventionen stehen
|
||||||
|
kurz in `CLAUDE.md` und ausführlich in `PLAN.md` Abschnitt 9.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Verlauf
|
## Verlauf
|
||||||
|
|
||||||
Version 04 baut das Werk vom Nachschlagewerk zum Kursbegleiter um; alle sechs Phasen sind
|
Version 04 baut das Werk vom Nachschlagewerk zum Kursbegleiter um. **Was geplant war, steht
|
||||||
abgeschlossen. **Was geplant war, steht in [`PLAN.md`](PLAN.md); was erreicht ist und woran
|
in [`PLAN.md`](PLAN.md); was erreicht ist und woran man das nachprüft, in
|
||||||
man das nachprüft, in [`PROGRESS.md`](PROGRESS.md)** — einschließlich der Funde unterwegs und
|
[`PROGRESS.md`](PROGRESS.md)** — einschließlich aller Funde unterwegs und der Regeln, die
|
||||||
der Regeln, die sich daraus ergeben haben. Wer hier weiterarbeitet, liest beide zuerst.
|
sich daraus ergeben haben. Wer hier weiterarbeitet, liest beide zuerst.
|
||||||
|
|
||||||
|
Bis Version 03 hieß das Buch *Operations Research mit Python*.
|
||||||
|
|
|
||||||
|
|
@ -91,6 +91,12 @@ dev = [
|
||||||
"pytest>=8.0",
|
"pytest>=8.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# Die 25 Kapitel-Notebooks im Browser ausfuehren - ohne dass jemand etwas
|
||||||
|
# installieren muss. Das Kurs-Image (Dockerfile) bringt diese Gruppe mit.
|
||||||
|
notebook = [
|
||||||
|
"jupyterlab>=4.0",
|
||||||
|
]
|
||||||
|
|
||||||
# pymoo wird im Buch als Bibliothek fuer genetische Algorithmen empfohlen
|
# pymoo wird im Buch als Bibliothek fuer genetische Algorithmen empfohlen
|
||||||
# (Kapitel Metaheuristiken), aber von keinem Beispielprogramm importiert.
|
# (Kapitel Metaheuristiken), aber von keinem Beispielprogramm importiert.
|
||||||
# Deshalb steht es hier eigenstaendig und nicht in der Grundausstattung.
|
# Deshalb steht es hier eigenstaendig und nicht in der Grundausstattung.
|
||||||
|
|
@ -99,7 +105,7 @@ empfehlungen = [
|
||||||
]
|
]
|
||||||
|
|
||||||
alles = [
|
alles = [
|
||||||
"or-mit-python[finance,large-scale,api,figures,dev,empfehlungen]",
|
"or-mit-python[finance,large-scale,api,figures,dev,notebook,empfehlungen]",
|
||||||
]
|
]
|
||||||
|
|
||||||
[tool.setuptools]
|
[tool.setuptools]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue