Modellieren mit AMPL Elisabeth Gassner Mathematische Modelle in den Wirtschaftswissenschaften Prof. R. E. Burkard 27. April 2007 E. Gassner (Mathematische Modelle) AMPL 27. April 2007 1 / 21
Überblick AMPL - Algebraic modeling language for mathematical programming Algebraische Schreibweise eine linearen Programms: min x s.t. n c j x j j=1 n a ij x j b i j=1 x j 0 i = 1,..., m j = 1,..., n Ziel: Übergabe eines Modells und der Daten an einen Solver und Ausgabe einer Optimallösung. E. Gassner (Mathematische Modelle) AMPL 27. April 2007 2 / 21
Überblick Eigenschaften von AMPL: AMPL ist eine Modelliersparche, die es ermöglicht, ein Optimierungsmodell in kompakter Form darzustellen. AMPL löst das Optimierungsproblem nicht selbst sondern übergibt es einem Solver (z.b. CPLEX, minos, etc.) Das Modell und die Daten sind getrennt (file.mod, file.dat) Das Modellfile enthält Deklaration der Datenparameter und Variablen, die Zielfunktion und die Nebenbedingungen. Das Datenfile enthält die aktuellen Werte der Parameter. E. Gassner (Mathematische Modelle) AMPL 27. April 2007 3 / 21
Überblick Verfügbarkeit: Freie Studentenversion von AMPL auf http://www.ampl.com/downloads/index.html Online-Version In der Windows-Version wird Solver mit zip-file mitgeliefert, für Unix/Linux muss CPLEX getrennt downgeloadet werden. E. Gassner (Mathematische Modelle) AMPL 27. April 2007 4 / 21
Beispiel 1: Produktionsplanung Eine Stahlfabrik muss den Produktionsplan für eine Woche zusammenstellen. Die Fabrik kann Produkt A oder Produkt B herstellen. Die Produkte werden in folgenden Raten gefertigt: Der Verkaufspreis beträgt Tonnen pro Stunde: Produkt A 200 Produkt B 140 Profit pro Tonne: Produkt A 25 Produkt B 30 Aufgrund von Kapazitätsbeschränkungen müssen folgende Grenzen eingehalten werden: Maximal in Tonnen: Produkt A 6000 Produkt B 4000 Wieviel Tonnen von Produkt A und B sollen produziert werden, wenn 40 Arbeitsstunden zur Verfügung stehen und als Ziel der gesamte Verkaufserlös maximiert werden soll? E. Gassner (Mathematische Modelle) AMPL 27. April 2007 5 / 21
Beispiel 1: Produktionsplanung (Fs.) Entscheidungsvariablen: x A (Tonnen von Produkt A), x B (Tonnen von Produkt B) max s.t. 25x A + 30x B 1 200 x A + 1 140 x B 40 0 x A 6000 0 x B 4000 E. Gassner (Mathematische Modelle) AMPL 27. April 2007 6 / 21
Beispiel 1: Produktionsplanung (Fs.) Trennung von Modell und Daten! production.mod set PROD; param rate {PROD} >0; param profit {PROD}; param schranke {PROD}; param arbeitszeit; var menge {PROD}; #Produkte #Produktionsrate für jedes Produkt #Profit pro Tonne für jedes Produkt #obere Schranke für jedes Produkt #Arbeitsstunden pro Woche #Produktionsmenge für jedes Produkt maximize Gesamtprofit: sum {p in PROD} profit[p] * menge[p]; subject to Zeit: sum {p in PROD} (1/rate[p]) * menge[p] <= arbeitszeit; subject to Schranken {p in PROD}: menge[p] <= schranke[p]; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 7 / 21
Beispiel 1: Produktionsplanung (Fs.) production.dat set PROD := ProduktA ProduktB; param arbeitszeit := 40; param: rate profit schranke := ProduktA 200 25 6000 ProduktB 140 30 4000; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 8 / 21
Beispiel 1: Produktionsplanung (Fs.) production.run model production.mod; data production.dat; option solver cplex; #option solver cplexamp; solve; display menge; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 9 / 21
Starten von AMPL Starten von AMPL Windows: MS-DOS Fenster: Doppelklick auf ampl.exe MS-DOS Fenster öffnet sich mit ampl: Scrolling-Window Utility: Doppelklick auf sw.exe Fenster öffnet sich mit sw: sw: ampl ampl: Linux/Unix: Konsole ampl Lösen eines Optimierungsproblems mit AMPL include filename.run; Beenden von AMPL mit quit; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 10 / 21
Output von AMPL ILOG AMPL 9.100, licensed to university-graz. AMPL Version 20021038 (Linux 2.4.9-e.24smp) ILOG CPLEX 9.100, licensed to university-graz, options: e m b q CPLEX 9.1.0: optimal solution; objective 192000 0 dual simplex iterations (0 in phase I) menge [*] := ProduktA 6000 ProduktB 1400 ; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 11 / 21
Die Modelldatei (1) Definition von Mengen, Parametern und Variablen Mengen: set MENGENNAME; Parameter: param PARAMETERNAME >= lb, <= ub; Indizierter Parameter: param PARAMETERNAME {MENGE} >= lb, <= ub; #oder param PARAMETERNAME {MENGE1, MENGE2} >= lb, <= ub; Variablen: var VARIABLENNAME >= lb, <= ub; #oder var VARIABLENNAME {j in MENGE} >= lb, <= ub; #oder var VARIABLENNAME {i in MENGE1, j in MENGE2} # optional binary oder integer E. Gassner (Mathematische Modelle) AMPL 27. April 2007 12 / 21
Die Modelldatei (2) Definition der Zielfunktion: maximize/minimize ZIELNAME: Funktion; Nebenbedingungen: eine Bedingung: subject to NAME: Restriktion; mehrere Bedingungen: subject to NAME {j in Menge}: Restriktion; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 13 / 21
Die Datendatei Mengen: set MENGENNAME := M1 M2 M3 M4; set MENGENNAME := 1.. 10 by 2; #oder Parameter: param PARAMETERNAME := 40; Einfach indizierter Parameter: param PARAMETERNAME:= M1 p1 M2 p2; #einfach indiziert param: PARAMETERNAME1 PARAMETERNAME2 := M1 p1 p2 M2 p3 p4; #mehrere Parameter E. Gassner (Mathematische Modelle) AMPL 27. April 2007 14 / 21
Die Datendatei (2) Mehrfach indizierte Parameter: param PARAMETERNAME:= [M1,*] N1 a N2 b [M2,*] N1 c N2 d; #doppelt indiziert param PARAMETERNAME: N1 N2:= M1 a b M2 c d; #einfache Schreibweise param PARAMETERNAME:= [A1,*,*] C1 C2 C3 B1 a b c B2 d e f [A2,*,*] C1 C2 C3 B1 g h i B2 j k l; #Parameter mit 3 Indizes E. Gassner (Mathematische Modelle) AMPL 27. April 2007 15 / 21
Die Run-Datei reset; model DATEINAME.mod; data DATEINAME.dat; option solver cplex; #option solver cplexamp; solve; display VARIABLE1, VARIABLE2; #Output am Bildschirm display VARIABLE3 > OUTPUT.txt; #Output in Datei OUTPUT.txt E. Gassner (Mathematische Modelle) AMPL 27. April 2007 16 / 21
Einige Grundsätze und Fehlerquellen Wählen Sie aussagekräftige Namen. Variablen und Nebenbedingungen dürfen nicht den gleichen Namen tragen. Dokumentieren Sie das Modell. Alles nach dem Symbol # wird ignoriert. Jede Zeile muss mit Strichpunkt enden. Jede Variable muss mit var definiert sein. E. Gassner (Mathematische Modelle) AMPL 27. April 2007 17 / 21
Beispiel 2: Zuordnungsproblem Ein Unternehmen besitzt 3 Lager und 4 Fabriken. Die Ressourcen für die Produktion in den Fabriken müssen von den Lagern zugeliefert werden. Die Lager verfügen über folgende Kapazitäten Lager 1: 250, Lager 2: 800, Lager 3: 760 und die Fabriken haben folgenden Bedarf Fabrik 1: 300, Fabrik 2: 320, Fabrik 3: 800, Fabrik 4: 390 Die Transportkosten pro gelieferter Einheit sind linear von der Distanz abhängig: Fabrik 1 Fabrik 2 Fabrik 3 Fabrik 4 Lager 1 1 2 3 2 Lager 2 3 2 4 1 Lager 3 2 6 2 5 Bestimmen Sie einen zulässigen Transportplan, der die Gesamtkosten minimiert. E. Gassner (Mathematische Modelle) AMPL 27. April 2007 18 / 21
Beispiel 2: Zuordnungsproblem zuordnung.mod param anzahlfabriken; #Anzahl der Fabriken param anzahllager; #Anzahl der Lager set fabriken:=1..anzahlfabriken; #Menge aller Fabriken set lager:=1..anzahllager; #Menge der Lager param cost{i in lager, j in fabriken}; #Kosten von Lager i zu Fabrik j param kapazitaet {i in lager}; #Kapazitaet von Lager i param bedarf {j in fabriken}; #Bedarf von Fabrik j var transport {i in lager, j in fabriken} >=0; #Transportierte Menge von Lager i zu Fabrik j E. Gassner (Mathematische Modelle) AMPL 27. April 2007 19 / 21
Beispiel 2: Zuordnungsproblem zuordnung.mod (Fs.) minimize Kosten: sum{i in lager, j in fabriken} cost[i,j] * transport[i,j]; subject to Lagerkapazitaet {i in lager}: sum{j in fabriken} transport[i,j] <= kapazitaet[i]; #Gesamttransport ab Lager i subject to Fabriksbedarf {j in fabriken}: sum{i in lager} transport[i,j] >= bedarf[j]; #Gesamttransport zu Fabrik j E. Gassner (Mathematische Modelle) AMPL 27. April 2007 20 / 21
Beispiel 2: Zuordnungsproblem zuordnung.dat param anzahlfabriken := 4; param anzahllager :=3; param kapazitaet:= 1 250 2 800 3 760; param bedarf:= 1 300 2 320 3 800 4 390; param cost: 1 2 3 4 := 1 1 2 3 2 2 3 2 4 1 3 2 6 2 5; E. Gassner (Mathematische Modelle) AMPL 27. April 2007 21 / 21