MILP-Gleichungen (PML)
Das MILP-Modell wird parallel zum algebraischen Modell in der PML formuliert. Die beiden Bestandteile des MILP-Modells sind die Zielfunktion, nach der optimiert wird, z. B. Betriebskosten, und die einzuhaltenden Nebenbedingungen, z. B. Energiebilanzen.
Das MILP-Modell wird aus Gleichungen gebildet, die ebenfalls in der PML geschrieben werden.
Zielfunktionsbeiträge
Die Zielfunktion ist die Summe aller Zielfunktionsbeiträge. Sie wird grundsätzlich minimiert. Ein Zielfunktionsbeitrag hat einen Typ (Beitragstyp), der einer bestimmten Kostenfunktion zugeordnet ist. Ein Zielfunktionsbeitrag hat folgende PML-Syntax:
target.Typ Linearer Term
Beispiel
target.Operation price_Electricity * lP_electric
Im obigen Beispiel ist der Term Strompreis mal elektrische Leistung Teil der Zielfunktion Betriebskosten. Bei der Einstellung, nicht nach Betriebskosten, sondern z. B. nach CO2 zu optimieren, werden die Zielfunktionsbeiträge vom Typ target.Operation ignoriert.
Die Einheit des linearen Terms muss der Einheit des Beitragstyps entsprechen (in dem Beispiel: EUR/a).
Standardzielfunktionsbeiträge
In der Software stehen folgende Zielfunktionen vorkonfiguiert zur Verfügung.
| Typ | Einheit | Beschreibung |
|---|---|---|
| Annual | TEUR/a | Annualisierte Gesamtkosten |
| CO2 | t/a | CO2-Emission |
| Invest | TEUR | Investitionskosten |
| NPV | TEUR | Kapitalwert |
| Operation | TEUR/a | Betriebskosten |
| Other | TEUR/a | Benutzerdefinierte Kosten |
| PrimaryEnergy | kW | Primärenergie |
Die Zielfunktionsbeiträge in unterschiedlichen Komponenten werden durch Addition zu einer Zielfunktion zusammengefasst. Innerhalb einer Komponente können Zielfunktionsbeiträge auch anderen Beitragstypen zugeordnet werden. Dafür wird die Variable this.Beitragstyp verwendet. Die folgende Tabelle zeigt dafür beispielhaft die verschiedenen Kostenbeiträge der Komponente Brennstofftarif: in der zweiten Zeile sind dem Beitragstyp Annualisierte Gesamtkosten (annual) die jährlichen Betriebskosten (Operation) zugeordnet, in der dritten Zeile wird der Kapitalwert (NPV) aus den annualisierten Gesamtkosten, skaliert um den Rentenbarwertfaktor (RBF), berechnet.
| target.Operation | in.lH_dot_chem * price_TT; |
| target.Annual | this.Operation; |
| target.NPV | this.Annual * .economy.RBF; |
Oben wurde beschrieben, wie Sie der Zielfunktion einen Beitrag zuschreiben. Möchten Sie den Wert der Zielfunktion selbst auslesen, zum Beispiel um diesen zu beschränken, können Sie die folgenden Variablen abrufen: .targetInvest, .targetOperation oder .targetCO2.
Beispiel
CO2_total = .targetCO2;
.targetCO2 <= 1000 [t/a];
Benutzerdefinierte Kosten
Der Kostenbestandteil Benutzerdefinierte Kosten wird in den jeweiligen Komponenten modelliert. Darunter werden all jene benutzerdefinierten Zielfunktionsbeiträge geführt, die sich nicht den Haupttypen target.Operation, target.NPV etc. zuordnen lassen. Jeder vom Anwender selbst benannte, in der Modellbeschreibung formulierte Zielkostenbeitrag wird dem Bestandteil Benutzerdefinierte Kosten zugeordnet, z. B.:
target.MeineKosten lkosten*10;
Die Zuordnung zu Benutzerdefinierten Kosten wird durch die Meldung [8236] im Simulator-Fenster unter Log-Level 3 Details angezeigt. Der Zielfunktionsbeitrag muss in [EUR/a] umwandelbar sein.
Für ein Energiesystem, in dem andere als die voreingestellten Größen relevant sind, kann eine zusätzliche Kostenfunktion definiert werden.
Zum Beispiel kann ein System so optimiert werden, dass es möglichst wenig Lärm erzeugt. Dazu wird eine Kostenfunktion target.Lärmbelästigung definiert, und in allen relevanten Komponenten werden die Beiträge hinzugefügt. In der Modellbeschreibung eines Kessels könnte beispielsweise hinzugefügt werden:
target.Lärmbelästigung 3 [EUR/kWh] * lQ_dot_heat;
und der lauteren Gasturbine würde der Beitrag zugewiesen:
target.Lärmbelästigung 15 [EUR/kWh] * lP_el;
Bei der anschließenden Optimierung nach der Zielfunktion Benutzerdefinierte Kosten wird die Betriebsweise so bestimmt, dass die Kosten für Lärmbelästigung am geringsten sind. Natürlich gelten noch alle weiteren Nebenbedingungen, z. B. dass die Bedarfe gedeckt werden müssen etc. Die Optimierung betrifft lediglich die darüber hinaus gehenden Freiheitsgrade im System.
Ein Szenario zur Modellierung Benutzerdefinierter Kosten ist die akteurbasierte Optimierung. Enthält das Modell mehrere Akteure, so wird als Ergebnis immer das Gesamtoptimum berechnet, bei dem im gesamten System die geringsten Kosten anfallen, bzw. die größten Gewinne erzielt werden. Sollen jedoch nur bestimmte Kosten oder Gewinne berücksichtigt werden, so kopiert man die vorhandenen Kostenberechnungen aus den entsprechenden Komponenten und fügt sie unter MeineKosten ein. Für die Brennstoffkomponente kann das so aussehen:
Original:
Selbst modelliert:
Bei der anschließenden Optimierung nach der Zielfunktion Benutzerdefinierte Kosten wird nur der Beitrag aus MeineKosten gewertet und minimiert.
Gleichungen für Nebenbedingungen
Die Zielfunktion wird unter Einhaltung von Nebenbedingungen minimiert. Die Nebenbedingungen sind als Gleichungen oder Ungleichungen der Syntax ==, >= oder <= zu formulieren. Zum Beispiel stellen Energiebilanzen typische Nebenbedingungsgleichungen dar, und maximale Anlagenleistungen sind typische Ungleichungen, die als Nebenbedingungen formuliert werden.
Beispiele
lH_dot_in + lH_dot_aus == lH_dot_chem + lP_el ;
lP_el <= P_el_max ;
Algebraische Variablen gehen als Koeffizienten in das Optimierungsmodell ein und müssen vor dem Lösen des MILP-Problems bestimmt werden.
Beispiel
Eta ist ein (algebraischer, als Number deklarierter) Koeffizient, und der Wert ist schon vor der Optimierung bekannt: 80 %.
lP_el und lH_dot_chem seien als Linear Number deklarierte Designvariablen.
lP_el == eta * lH_dot_chem ;
Falsch:
lP_el * lQ_dot_heat == lH_dot_chem ;
Häufige Fehler beim Erstellen von MILP-Modellen
Fehlende Koeffizienten des MILP
Ein Koeffizient des MILP (algebraische Number-Variable) ist zum Zeitpunkt des Lösens nicht bekannt. Folgende Anzeige erscheint im Simulator-Fenster.
Klicken Sie auf den blauen Link unterbestimmte Koeffizienten. Scrollen Sie anschließend rechts im Simulator-Fenster unter dem Reiter Nicht lösbar im Variablenfenster, bis Sie eine Variable finden, für die kein Wert angezeigt wird (siehe folgende Abbildung).
Das abgebildete Beispiel entspricht der oben im Abschnitt 3 gezeigten Gleichung:
lP_el == eta * lH_dot_chem ;
Fälschlicherweise wurde hier jedoch der Wirkungsgrad eta nicht vor der Optimierung berechnet oder eingegeben.
Nichtlineare Gleichungen
Verwenden Sie fälschlicherweise eine nichtlineare Formulierung für zwei Optimierungsvariablen (Linear Numbers, Designvariablen), weist eine Meldung darauf hin.





