# Paketbeschreibung fuer die Beispielprogramme des Buchs # "Optimierte Entscheidungsfindung mit Python". # # Zweck: schlanke, gezielt zusammengestellte Umgebungen. Wer nur die ersten # Kapitel durcharbeitet, braucht weder yfinance noch FastAPI. # # pip install -e . # Grundausstattung, traegt den Grossteil des Buchs # pip install -e ".[finance]" # Teil "Anwendungen": Markowitz, CVaR, Handelsmaschine # pip install -e ".[large-scale]" # HiGHS, Pyomo, linopy, polars # pip install -e ".[api]" # Kapitel "Testen, Messen, Ausliefern" # pip install -e ".[figures]" # nur zum Neuerzeugen der Diagramme # pip install -e ".[dev]" # Tests # pip install -e ".[alles]" # alles zusammen - siehe Warnung unten # # ACHTUNG, Solverkonflikt: ortools und highspy bringen jeweils eine eigene # HiGHS-Kopie mit und lassen sich nicht im selben Prozess importieren. ortools # steht deshalb in der Grundausstattung, highspy erst in [large-scale] - wer nur # "pip install -e ." nutzt, kann in den Konflikt gar nicht geraten. cvxpy zieht # ein installiertes highspy bei der Solver-Erkennung selbst mit hinein, [finance] # loest ihn also indirekt ebenfalls aus. Die Programme des Buchs umgehen das # durch getrennte Prozesse (Muster: Ein_System_Vier_Ansaetze.py); ausfuehrlich # steht es im Kapitel "Das Python-Oekosystem fuer OR". # # Die Datei ergaenzt # Operations_Research_mit_Python_Version_04_Programme/requirements.txt und # ersetzt sie nicht: Jene ist im Buch abgedruckt und installiert bewusst alles # auf einen Schlag. [build-system] requires = ["setuptools>=68"] build-backend = "setuptools.build_meta" [project] name = "or-mit-python" version = "4.0.0" description = "Beispielprogramme zum Buch 'Optimierte Entscheidungsfindung mit Python'" readme = "README.md" requires-python = ">=3.10" authors = [{ name = "Dieter Schlüter", email = "dieter.schlueter@linix.de" }] keywords = ["operations-research", "optimierung", "linear-programming", "constraint-programming", "milp", "lehrbuch"] # Grundausstattung: traegt die Kapitel bis einschliesslich Graphen und Touren. # scipy liefert linprog/milp, ortools den CP-SAT-Solver und pywraplp. dependencies = [ "numpy>=2.5.2", "scipy>=1.17.1", "pandas>=3.0.1", "matplotlib>=3.10.8", "openpyxl>=3.1.5", # kein direkter Import: Excel-Motor hinter pandas "pydantic>=2.12", "ortools>=9.15.6755", # cvxpy gehoert in die Grundausstattung, nicht in [finance]: Es wird von # 13 Programmen gebraucht, darunter dreien im Kapitel Unsicherheit, lange # vor dem Finanzteil. Es zieht KEIN highspy nach - der Solverkonflikt # entsteht erst mit [large-scale]. "cvxpy>=1.9.2", ] [project.optional-dependencies] # Teil "Anwendungen - Energiewirtschaft und Finanzmaerkte" finance = [ "scikit-learn>=1.8.0", "yfinance>=1.2.0", ] # Groessere Modelle, alternative Solver und Modellierungsschichten large-scale = [ "highspy>=1.15.1", "Pyomo>=6.7", "linopy>=0.3", "polars>=1.0", ] # Kapitel "Testen, Messen, Ausliefern": der Optimierungsdienst api = [ "fastapi>=0.115", "uvicorn>=0.30", "httpx>=0.27", # Selbsttest des Dienstes ueber den TestClient ] # Nur zum Neuerzeugen der Diagramme in bilder_04/ - fuer das Lesen und # Ausfuehren des Buchs nicht noetig. graphviz braucht zusaetzlich das # Kommandozeilenwerkzeug 'dot' aus dem Betriebssystempaket. figures = [ "plotly>=6.0", "graphviz>=0.20", "folium>=0.19", # die Leaflet-Karte der VRP-Touren ] dev = [ "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 # (Kapitel Metaheuristiken), aber von keinem Beispielprogramm importiert. # Deshalb steht es hier eigenstaendig und nicht in der Grundausstattung. empfehlungen = [ "pymoo>=0.6", ] alles = [ "or-mit-python[finance,large-scale,api,figures,dev,notebook,empfehlungen]", ] [tool.setuptools] # Die Beispielprogramme sind ein erzeugtes Artefakt (extract_programme_04.py) # und kein installierbares Paket - hier wird nur der Abhaengigkeitsbaum # beschrieben. packages = []