Hinweise zum Einlesen von Daten mit AMPL
Ab einer gewissen Komplexität eines linearen Optimierungsproblems bietet es sich an, den Quellcode des zugehörigen AMPL-Programms in einen Modellteil und einen Datenteil zu splitten und diese in verschiedenen Dateien abzuspeichern. Diese Trennung macht das Programm übersichtlicher und erleichtert nachträgliche Änderungen der Systemparameter.
- Modellteil: Hier wird die Grundstruktur des LPs festgelegt. Typischerweise deklariert man Indexmengen (mit set), Parameter (mit param) und Optimierungsvariablen (mit var), ohne bereits numerische Werte zuzuweisen. Die Initialisierung der Indexmengen und der Parameter ist Aufgabe des Datenteils. Außerdem kann man hier die zu minimierende Zielfunktion (mit minimize BEZEICHNUNG: ... ) und die Nebenbedingungen (mit subject to BEZEICHNUNG: ... ) definieren.
- Datenteil: Hier werden die im Modellteil deklarierten Indexmengen und Parameter initialisiert, d.h. es werden konkrete Mengen bzw. numerische Werte für die Parameter festgelegt.
In der auszuführenden AMPL-Datei liest man mittels
model <dateiname>.mod
bzw.
data <dateiname>.dat
den Modell- und den Datenfile ein.
Programmieraufgabe 20:
Prinzipiell lassen sich das LP und insbesondere die Nebenbedingungen derart formulieren, dass man für jede einzelne Restriktion eine eigene "subject to" - Anweisung definiert. Dieser Aufwand lässt sich vermeiden, indem man die kommentierten Modell- bzw. Datenfiles lebensmittel.mod bzw. lebensmittel.dat wie oben beschrieben in sein AMPL-Programm einbindet. Nun sind lediglich noch die Zielfunktion und die Nebenbedingungen anzugeben und anschließend wie gewohnt ein solver auszuwählen (bspw. IPOPT), mit welchem das LP gelöst werden soll.
Ein paar hilfreiche AMPL-Sprachkonstrukte:
- Die Summation
Masse['Mehl'] + Masse['Reis'] + ... + Masse['Kakao'];
lässt sich kompakt schreiben als
sum {j in Lebensmittel} Masse[j];
- Eine indizierte Menge von Nebenbedingungen kann durch einen einzigen Befehl definiert werden:
subject to Mindestbedarf {i in Nährstoffe}: ... ;
Für die beiden Nebenbedingungen "Der monatliche Verbrauch an ... " können Sie davon ausgehen, dass ein Monat 30 Tage umfasst.
Abgabe: Falls Sie von den bereitgestellten Modell- und Datenfiles Gebrauch machen, müssen Sie diese nicht Ihrem Übungsgruppenleiter per Mail schicken. Es genügt, Ihr AMPL-Programm, in welchem diese Files eingebunden werden, in Papierform und per eMail abzugeben. Außerdem bitte unbedingt eine sinnvolle Ausgabe des Programms (AMPL-Befehl: display ... ; ) ausdrucken und abgeben.
Bei Fragen und Problemen mit AMPL zögern Sie bitte nicht, Ihren Übungsgruppenleiter zu fragen oder Bahne Christiansen zu kontaktieren.
|