Gibt's eine Schritt für Schritt Anleitung?

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
dominik_d
User
Beiträge: 5
Registriert: Donnerstag 22. Mai 2014, 18:06

Hallo in die Runde,

ich habe vor ca. anderthalb Jahren mal die Benutzung von Python als Tool für lineare Optimierungsprobleme an der Uni gelernt oder sagen wir, wir haben gezeigt bekommen, was möglich ist, wenn man weiß, wie es funktioniert. Mehr als ein paar kleinteilige Optimierungen haben wir nicht gemacht. Aber ich habe die Macht des Instruments verstanden.

Jetzt würde ich Python gern für ein (vermutlich ganzzahliges) lineares Optimierungsvorhaben nutzen wollen, komme aber schnell an meine Grenzen. Zum Beispiel sollen Werte aus einer externen Tabelle ausgelesen werden, was ein "abstractmodell" erfordert, ich weiß aber nicht, wie das geht uvm.

Es geht um einen zu deckenden Strombedarf y(t), für den es in einer externen Tabelle 8.760 Stundenwerte pro Jahr gibt.
Dieser Strombedarf soll aus einer kostenminimalen Kombination aus verschiedenen zur Verfügung stehenden Quellen gedeckt werden.

Also etwa in der Stunde 1 ist y(1) = 1.000 kWh/h. In der Stunde 1 steht der Energieträger Wind x1 im Umfang von bspw. 600 kWh/h, der Energieträger Sonne im Umfang von 0 kWh/h und der Energieträger Biogas im Umfang von 800 kWh/h zur Verfügung. Der Strom aus Wind kostet 0,1 € / kWh und der Strom aus Biogas kostet 0,12 € / kWh. Kostenminimal wäre der Einsatz von 600 kWh/h Wind und 400 kWh/h Biogas zu insgesamt 108,- €.

Dieses Beispiel ist relativ einfach, so dass ich es von Hand ausrechnen kann. Aber es gibt ca. 7 oder 8 variable Energieträger, die über die 8.760 Stunden eines Jahres immer eine unterschiedliche Strommengen liefern, außerdem soll ein Batteriespeicher berücksichtigt werden.

In einem zweiten Schritt gibt es dann noch eine weitere Besonderheit, denn das Ziel ist es eigentlich ein kostenminimales Anlagen-Set zu ermitteln, um einen bestimmten Energiebedarf zu decken. Also die Frage ist am Ende, welches Windrad (von bspw. 10 verschiedenen Typen), welche Solaranlage etc. stellen in Kombination die kostenminimale Lösung dar.

Ich vermute mal, dass dieses Vorhaben für die meisten hier Kinderkram ist, aber irgendwo muss man (ich) ja anfangen.
Jetzt wäre meine Frage, ob mir jemand entweder einen guten Tipp für eine Einführung in diese Fragestellungen geben kann oder ob jemand Lust hat mir mir zusammen dieses Problem anzugehen. Unter Umständen kann ich sogar ein kleines Budget dafür auftreiben, aber es geht um ein soziales Vorhaben, kein gewinnorientiertes, also keine allzu hohen Erwartungen. :)

Ich freue mich auf ein paar gutgemeinte und konstruktive Ratschläge! :)

Viele Grüße
Dominik
BlackJack

@dominik_d: Ich glaube nicht das das für die meisten hier Kinderkram ist, denn Du beschreibst da ein Problem (lineare Optimierung) was die meisten Python-Programmierer wahrscheinlich nicht haben und damit sich deshalb mit so etwas nicht auseinandergesetzt haben. Selbst in diesem Unterforum nicht.

Python ist kein Werkzeug um lineare Optimierungsprobleme zu lösen sondern in erster Linie eine allgemeine Programmiersprache. Stellt sich also zunächst die Frage mit welcher Bibliothek ihr in der Uni gearbeitet habt, beziehungsweise welche Du nun benutzen möchtest.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Desweiteren wäre noch die Frage, inwiefern man Python von Grund auf verstanden haben muss. Wenn es "lediglich" als Scriptsprache für ein solches Optimierungsprogramm dient und man mittels Python dort eher Konfiguration als Algorithmik betreibt, so kann man vielleicht sogar um die Grundlagen und damit ein Grundverständnis der Sprache herum kommen und sich durch "Rumprobieren" ins Ziel retten.

Ansonsten muss man einfach die Grundlagen von Python lernen. Das kann man mittels verschiedener Tutorials; es gibt z.B. das offizielle, welches auf der Doku Seite von Python zu finden ist. Das wiederum öffnet einem erst den Schritt, fremde APIs zu verstehen und zu kapieren, wie welcher Aufruf sein soll und wie man eben die Funktionalität eines Rahmenwerks nutzen kann. Imho ist das der schwerste Schritt, zweigt er doch wirklich, ob man eine Sprache wirklich verstanden hat. Bei vielen Neulingen erkennt man da große Probleme, sobald die aus der "heilen" Welt der gängigen Standardfunktionen hinaus und fremde Module nutzen müssen :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
dominik_d
User
Beiträge: 5
Registriert: Donnerstag 22. Mai 2014, 18:06

Hallo zusammen,

also erstmal vielen Dank für eure Antworten. Tatsächlich war mir nicht wirklich klar, dass Python eine allgemeine Programmiersprache ist, wir haben es damals auf unsere Notebooks installiert und Bibliotheken wie Numpy, MatPlotLib (sind das die Bibliotheken?) dazu und dann hat uns der Dozent gezeigt, wie man eine Bibliothek importiert, wie man eine Formel eingibt und wie man auf Ausführen klickt.
Im Ergebnis wurde dann rechts im Log-Fenster angezeigt, dass das Optimum für X1 = soundsoviel ist und für X2 = soundsoviel usw.

D.h. alles was ich über Python weiß ist, dass man damit lineare Optimierungen ausführen kann und das würde ich jetzt gerne weiter ausbauen.
Denkt ihr das macht überhaupt Sinn? Also soll ich mir mal die Python Einführung reinziehen?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Wenn Du damit bisher gut klargekommen bist, wieso nicht? :-) Dann *verstehst* Du nebenbei auch viel besser, *was* der Dozent da alles "gezaubert" hat. Zudem kannst Du ggf. das ein oder andere Zusatzmodul später eigenständig nutzen. Und Programmieren i.A. lernen ist ja auch ein Wert an sich :-)

Es gibt auch einige erweiterte Python-Shells, die einem eben direkt Graphen malen usw.. Unter Linux kann man da wohl cantor nutzen (die Webseite ist veraltet - das Dinge hat sowohl Python2 als auch Python3 Support), ansonsten hat iPython iirc einen erweiterten Modus, der für so etwas auch gut taugt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
BlackJack

Sage wäre vielleicht noch erwähnenswert.
Antworten