Author
trinhanh
View
218
Download
4
Embed Size (px)
23. Oktober 2013 Einfhrung in GAMS 1 / 88
Einfhrung in die mathematische Modellierung mitder Software GAMS
Matthes Koch, Sven Mller
Institut fr Verkehrswirtschaft
23. Oktober 2013
23. Oktober 2013 Einfhrung in GAMS 2 / 88
bersicht
1. Einfhrung
2. berfhrung formaler Modelle in GAMS-Syntax
3. Lsen von Optimierungsproblemen in GAMS
4. Auswertung von Rechenergebnissen
5. Mehr zur GAMS-Syntax
23. Oktober 2013 Einfhrung in GAMS 3 / 88
Einfhrung
I GAMS: General Algebraic Modeling SystemI algebraische ModellierungsspracheI Formulieren und Lsen mathematischer ModelleI ursprgl. entwickelt an der World Bank in den 1970er JahrenI aktuell: Version 24.1 (Oktober 2013)I Demoversion: http://www.gams.com/download
Modellgren beschrnkt (vgl. Downloadseite)I weitere bekannte Modellierungssprachen:
I AMPL (A Modeling Language for Mathematical Programming)I OML (Optimization Modeling Language)I LINGOI uvm..
Einfhrung - GAMSIDE
Starte GAMS-Lauf (F9)Modell Libraries & Help
Eingabefenster (.gms Skripte)
Aktuell geffnetes Projekt
Projekte anlegen,Neue Skripte erstellen
http://www.gams.com/download
23. Oktober 2013 Einfhrung in GAMS 5 / 88
Einfhrung - Dateitypen
Zu einem GAMS-Projekt gehren folgende Dateien:I .gpr ProjektdateiI .gms Gams-Skript - hierin schreiben wir mathematische
ModelleI .lst Gams-Listing - Ergebnisdatei eines GAMS-AufrufsI .lxi Inhaltsverzeichnis des Listing-Files (GAMSIDE)I .log Gams-Log - LogdateiI .gdx gams data exchange - externe DatenstzeI .gch DiagrammdateienI .inc Includedateien - bei Modularisierung des SkriptesI .opt Optionsdateien fr SolverI .txt Textdateien, z.B. als externe Daten, geschriebene
Ausgabedateien u.a.
Diese Dateien werden in einem gemeinsamen Projektordner mit der.gpr-Datei abgelegt.
23. Oktober 2013 Einfhrung in GAMS 6 / 88
Einfhrung - Projekte und Dateitypen
Projekte - .gprI Projekt: Sammlung zusammengehriger Dateien (Inputdaten,
Modelle, Outputdateien)I Pfad bzw. Verzeichnis der Projektdatei ist default fr alle von GAMS
im Rahmen der Projektdatei erzeugten DateienI Endung von Projektdateien: .gprI Men File ! Project ! New oder OpenI aktuell geffnetes Projekt wird in der Titelleiste der GAMSIDE
(blauer Bereich ganz oben) angezeigt
23. Oktober 2013 Einfhrung in GAMS 7 / 88
Einfhrung - Projekte und Dateitypen
Skripte - .gmsI Enhlt das Modell und alle zugehrigen DeklarationenI Endung von Projektdateien: .gmsI File ! NewI File ! Save as (dort, wo aktuelle .gpr liegt)I Daten knnen in der .gms Datei enthalten sein oder aus anderen
Quellen integriert werden.
23. Oktober 2013 Einfhrung in GAMS 8 / 88
Einfhrung - GAMSIDE
Ntzliche Hilfsmittel:I unter Help befinden sich viele hilfreiche Anleitungen, insb.
I GAMS Users GuideI Expanded GAMS Guide (McCarl)I Anleitungen zu den in GAMS verwendeten Solvern: docs/solvers
I Model Libraries: groe Auswahl bereits programmierter Modelle
23. Oktober 2013 Einfhrung in GAMS 9 / 88
Orientierung
1. Einfhrung
2. berfhrung formaler Modelle in GAMS-Syntax
3. Lsen von Optimierungsproblemen in GAMS
4. Auswertung von Rechenergebnissen
5. Mehr zur GAMS-Syntax
23. Oktober 2013 Einfhrung in GAMS 10 / 88
Beispiel
max F = 90x1 + 50x2 + 70x3 + 40x4 (1)
s.t.
2x1 1x2 + 1x3 + 2x4 30 (2)
1x1 + 2x2 + 3x3 1x4 24 (3)
3x1 + 2x2 1x3 + 2x4 36 (4)
x1; x2; x3; x4 0 (5)
Modell abstrahieren:I Ziel: Trennung von konkreten Daten und ModellstrukturI Daten durch Symbole reprsentieren
23. Oktober 2013 Einfhrung in GAMS 11 / 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
s.t.
a11x1 + a12x2 + a13x3 + a14x4 b1 (7)
a21x1 + a22x2 + a23x3 + a24x4 b2 (8)
a31x1 + a32x2 + a33x3 + a34x4 b3 (9)
x1; x2; x3; x4 0 (10)
(7) - (9) besitzen dieselbe Struktur ! Zusammenfassung zu einemRestriktionsblock (12)
max F =X
j
cjxj (11)
s.t.X
j
aijxj bi 8i 2 I (12)
xj 0 8j 2 J (13)
Das so verallgemeinerte Modell besitzt:MengenI J Spalten (Auswahlalternativen) j = 1; 2; 3; 4I I Zeilen i = 1; 2; 3
ParameterI cj Zielfunktionskoeffizient der Alternative jI ai ;j Kapazittsparameter bzgl. Alternative j in Restriktion iI bi Kapazittsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewhlte Menge der Alternative j
Gleichungsblcke
23. Oktober 2013 Einfhrung in GAMS 13 / 88
bertragung formaler Modelle in GAMS Syntax:
Mathematisches Modell GAMS ModellMengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
! Einfache nderung der Inputdaten ohne nderung der Modellstruktur
23. Oktober 2013 Einfhrung in GAMS 14 / 88
Syntax
Erzeugen von entities (z.B. Parameter):TypDesEntities NameDesEntities Kommentar /Wertzuweisung/;
I Deklaration (TypDesEntities NameDesEntities ) und Definition(/Wertzuweisung/) knnen wie hier zusammen oder aber seperaterfolgen (Ausnahme: equations/variables immer seperat)
I Mehrere entities gleichen Typs knnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) mssen mit einem Buchstabenbeginnen, dem bis zu 30 weitere Zeichen folgen knnen
I keine Unterscheidung zwischen Gro- und KleinschreibungI WICHTIG: Bezeichner (engl. Identifyer) mssen eindeutig sein.
23. Oktober 2013 Einfhrung in GAMS 15 / 88
Weitere Hinweise
I Leerzeichen und Leerzeilen zur besseren Lesbarkeit beliebigeinsetzbar
I mehrzeilige Anweisungen bzw. mehrere Anweisungen auf einer Zeilesind erlaubt
I alle Anweisungen vorerst immer durch Semikolon abschlieen, umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation:
I direkt bei der Deklaration der sets, parameter, equations usw.I gesamte Zeile: * am Zeilenanfang
I Bestimmte Schlsselworte und Symbole sind reserviert und drfennicht anderweitig verwendet werden.
23. Oktober 2013 Einfhrung in GAMS 16 / 88
Mengen
I J Spalten (Auswahlalternativen) j = 1; 2; 3; 4I I Zeilen i = 1; 2; 3
* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
Hinweis:Deklarationen und Definitionen sind nicht case-sensitive. AlsSchlsselwort wird set und sets erkannt.
SeT
i Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
Mengenelemente knnen auch Strings (Zeichenketten) sein - bspw.Stdtenamen.
23. Oktober 2013 Einfhrung in GAMS 17 / 88
Parameter (1)
I cj Zielfunktionskoeffizient der Alternative jI bi Kapazittsgrenze von Restriktion (Ressource) i
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
Trennung der einzelnen Eintrge durch Kommasetzung oder Leerzeilenmglich.
23. Oktober 2013 Einfhrung in GAMS 18 / 88
Parameter (2)
I ai ;j Kapazittsparameter bzgl. Alternative j in Restriktion i
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
Ebenfalls mglich:
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
parameter a(i,j) Koeffizientenmatrix /1.1 2, 1.2 -1, 1.3 1, 1.4 2 2.1 1, 2.2 2, 2.3 3, 2.4 -1 3.1 3, 3.2 2, 3.3 -1, 3.4 2 / ;
23. Oktober 2013 Einfhrung in GAMS 19 / 88
Variablen
I F Zielfunktionsvariable, 1 F 1I xj gewhlte Menge der Alternative j , xj 0 8i 2 I
* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
free variables F Zielfunktionswert;
positive variables x(j) gewhlte Menge von Alternative j;
equations
Z i e l f k t Zielfunktion K a p a z i t Kapazittsrestriktion;
Zielfkt.. F =E= sum(j, c(j) * x(j) );Kapazit(i).. sum(j, a(i,j) * x(j) ) =L= b(i);
model Beispiel1 /Zielfkt,Kapazit/;
solve Beispiel1 maximizing F using lp;
Variablentyp Lower Bound (.lo) Upper Bound (.up) Anmerkung
free 1 +1 Beide Schranken vernderbarpositive 0 +1 obere Schranke vernderbarnegative 1 0 untere Schranke vernderbarbinary 0 1 diskret, Schranken sind fixinteger 0 100 diskret, beide Schranken vernderbar
23. Oktober 2013 Einfhrung in GAMS 20 / 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einemKommentar erfolgt separat vor der Definition; Die Deklaration muss mit einemSemikolon abgeschlossen werden.
max F =X
j
cjxj (14)
s.t.X
j
aijxj bi 8i 2 I (15)
* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
free variables F Zielfunktionswert;
positive variables x(j) gewhlte Menge von Alternative j;
equations
Z i e l f k t Zielfunktion K a p a z i t Kapazittsrestriktion;
Zielfkt.. F =E= sum(j, c(j) * x(j) );Kapazit(i).. sum(j, a(i,j) * x(j) ) =L= b(i);
model Beispiel1 /Zielfkt,Kapazit/;
solve Beispiel1 maximizing F using lp;
23. Oktober 2013 Einfhrung in GAMS 21 / 88
Equations
Hinweise zu EquationsI Deklaration separat vor DefinitionI Definition einer Gleichung durch ..I Die Domain eines Gleichungsblocks wird wie bei anderen entities
durch eine Klammer () nach dem Bezeichner angegeben. Im Beispielwird Gleichung Kapazit fr alle Elemente in i aufgestellt (8i 2 I ).Der Block Kapazit(i) enthlt also Gleichungen:I Kapazit(1)I Kapazit(2)I Kapazit(3)
23. Oktober 2013 Einfhrung in GAMS 22 / 88
Summen, Produkte und Operatoren
Summen werden durch das Schlsselwort sum() definiert. Innerhalb derKlammer steht zuerst der Index, ber den summiert wird. Darauf folgtder Summenterm. Produkte werden analog gebildet.
*Beispiel zur Summenbildung: sum()
sum(j, x(j) - y(j) );* Eine Summe ber 2 Mengen -
* Indices mssen eingeklammert werden:
sum((k,l), z(k,l) * p(k) );*Beispiel zur Produktbildung:
prod(j, p(j) * r(j) );
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= grer-gleich=E= = ist-gleich
23. Oktober 2013 Einfhrung in GAMS 23 / 88
Modell
I Equations knnen zu einem Model zusammengefasst werden.I Wie bei anderen entities kann ein Kommentar vor der Definition
eingefgt werden.I Die Wertzuweisung erfolgt durch auflisten der equations, oder durch
/all/.
* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
free variables F Zielfunktionswert;
positive variables x(j) gewhlte Menge von Alternative j;
equations
Z i e l f k t Zielfunktion K a p a z i t Kapazittsrestriktion;
Zielfkt.. F =E= sum(j, c(j) * x(j) );Kapazit(i).. sum(j, a(i,j) * x(j) ) =L= b(i);
model Beispiel1 /Zielfkt,Kapazit/;*ebenso mglich:
*model Beispiel1 /all/;
solve Beispiel1 maximizing F using lp;Es knnen mehrere Modelle in einem .gms - Skript definiert werden.
Umsetzung in GAMS - Beispiel1.gms* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
free variables F Zielfunktionswert;
positive variables x(j) gewhlte Menge von Alternative j;
equations
Z i e l f k t Zielfunktion K a p a z i t Kapazittsrestriktion;
Zielfkt.. F =E= sum(j, c(j) * x(j) );Kapazit(i).. sum(j, a(i,j) * x(j) ) =L= b(i);
model Beispiel1 /Zielfkt,Kapazit/;
solve Beispiel1 maximizing F using lp;
23. Oktober 2013 Einfhrung in GAMS 25 / 88
Orientierung
1. Einfhrung
2. berfhrung formaler Modelle in GAMS-Syntax
3. Lsen von Optimierungsproblemen in GAMS
4. Auswertung von Rechenergebnissen
5. Mehr zur GAMS-Syntax
23. Oktober 2013 Einfhrung in GAMS 26 / 88
Lsen des Optimierungsproblems
I bergabe des so definierten Optimierungsmodells an einen SolverI Im Solver sind Lsungsverfahren implementiert (z.B. Simplex,
Schnittebenenverfahren u.a.)
* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
free variables F Zielfunktionswert;
positive variables x(j) gewhlte Menge von Alternative j;
equations
Z i e l f k t Zielfunktion K a p a z i t Kapazittsrestriktion;
Zielfkt.. F =E= sum(j, c(j) * x(j) );Kapazit(i).. sum(j, a(i,j) * x(j) ) =L= b(i);
model Beispiel1 /Zielfkt,Kapazit/;*ebenso mglich:
*model Beispiel1 /all/;
solve Beispiel1 maximizing F using lp;
Schlsselwort zum Aufruf des Solvers: solve
dahinter Bestimmung:I des zu berechnenden ModellsI der Optimierungsrichtung, mglich:
I maximizingI minimizing
I der zu optimierenden ZielfunktionsvariableI des Modelltyps
23. Oktober 2013 Einfhrung in GAMS 27 / 88
Modelltypen und Solver
Krzel Modelltyp
lp linear programmingnlp nonlinear programmingmip mixed integer programmingrmip relaxed mixed integer programmingminlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafr verwendete Standardsolver ist IBM Cplex
I Beim Lsen von mip-Modellen sind weitere Einstellungen mglich (vgl. Folie 51)
I Mehr Informationen ber Solver finden sich unter Help ! Solver Manual.
23. Oktober 2013 Einfhrung in GAMS 28 / 88
Compile, Run
I Kompilieren: Shift + F9Men: File ! CompileI Das Skript wird
kompiliert und auf Fehlerberprft.
I Gams starten: F9Men: File ! RunI Das Skript wird
kompiliert und auf Fehlerberprft. Das Modellwird fr den Solvervorbereitet. Danach wirdder Solver aufgerufen.
23. Oktober 2013 Einfhrung in GAMS 29 / 88
Orientierung
1. Einfhrung
2. berfhrung formaler Modelle in GAMS-Syntax
3. Lsen von Optimierungsproblemen in GAMS
4. Auswertung von Rechenergebnissen
5. Mehr zur GAMS-Syntax
23. Oktober 2013 Einfhrung in GAMS 30 / 88
bersicht
I Whrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (.log Datei)
I Nach Beendigung des Laufes wird standardmig das Listingangezeigt (.lst - Datei im Verzeichnis der Projektdatei)
I Smtliche unmittelbar relevanten Gren lassen sich daraus ablesen.Das Listing besteht ausI einem echo-print, der die Model-Syntax nochmal wiedergibtI dem Equation ListingI dem Column ListingI der Model StatisticsI dem Solution ReportI optional dem Display
23. Oktober 2013 Einfhrung in GAMS 31 / 88
Equation Listing
G e n e r a l A l g e b r a i c M o d e l i n g S y s t e mEquation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt.. F - 90*x(1) - 50*x(2) - 70*x(3) - 40*x(4) =E= 0 ; (LHS = 0)
---- Kapazit =L= Kapazittsrestriktion
Kapazit(1).. 2*x(1) - x(2) + x(3) + 2*x(4) =L= 30 ; (LHS = 0)
Kapazit(2).. x(1) + 2*x(2) + 3*x(3) - x(4) =L= 24 ; (LHS = 0)
Kapazit(3).. 3*x(1) + 2*x(2) - x(3) + 2*x(4) =L= 36 ; (LHS = 0)
I Darstellung der ersten drei ausformulierten Gleichungen (default = 3) jedesBlocks
I linke Seite der Gleichungen (LHS): Variablen mit Parametern; rechte Seite:Konstanten
I Initialisierung: alle Variablen xj auf kleinst mglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulssig wird, wird zustzlich(INFES = infeasible) angezeigt
Column Listing
Darstellung der ersten drei konkretenVariablen (default = 3) je deklarierterVariable
(a) Angabe der Wertebereiche und
der Startwerte der VariablenI .LO = Lower Bound
I .L = Level
I .UP = Upper Bound
I .M = Marginal
(b) Angabe der Koeffizienten derVariablen in allen Equations(Spalte in derKoeffizientenmatrix)
(b)
(a)
23. Oktober 2013 Einfhrung in GAMS 33 / 88
Model Statistics
G e n e r a l A l g e b r a i c M o d e l i n g S y s t e mModel Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5NON ZERO ELEMENTS 17
GENERATION TIME = 0.156 SECONDS 4 Mb WEX235-235 Aug 17, 2010
EXECUTION TIME = 0.156 SECONDS 4 Mb WEX235-235 Aug 17, 2010
I Blocks of Equations: Anzahl Gleichungsblcke (hier: 1 Zielfunktion (11) + 1Kapazittsbeschrnkung (12) )
I Single Equations: Anzahl an Gleichungen (hier: 1 Zielfunktion (11) + 3 ausformulierteRestriktionsgleichungen (2) - (4) )
I Blocks of Variables : Anzahl der deklarierten Variablen (hier: F und xj )I Single Variables: Anzahl ausformulierter Variablen (hier: F und x1; :::; x4)I Non Zeor Elements: Anzahl von 0 verschiedener Elemente der Koeffizientenmatrix (hier:
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time: Zeit, die GAMS bentigt hat, um das Modell fr den Solver
aufzubereiten
23. Oktober 2013 Einfhrung in GAMS 34 / 88
Solution Report
Nachdem im Listing zuerst das Modell vor dem Solveraufruf dargestelltwurde, folgt im Solution Report des Listings die Auswertung derSolver Ergebnisse.
Es werden also Variablen und Gleichungen mit den vom Solverermittelten Variablenwerten ausgewertet.
Zum Solution Report gehren:
a) Solve Summary
b) SolEqu: Solution Report Equations
c) SolVar: Solution Report Variables
23. Oktober 2013 Einfhrung in GAMS 35 / 88
a) Solution Report - Solve Summary
G e n e r a l A l g e b r a i c M o d e l i n g S y s t e mSolution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE FTYPE LP DIRECTION MAXIMIZESOLVER CPLEX FROM LINE 41
**** SOLVER STATUS 1 Normal Completion**** MODEL STATUS 1 Optimal**** OBJECTIVE VALUE 1513.3333
RESOURCE USAGE, LIMIT 0.129 1000.000ITERATION COUNT, LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18, 2010 23.5.2 WEX 19143.19383 WEI x86_64/MS WindowsCplex 12.2.0.0, GAMS Link 34
I Model, Direction, Objective, Type entsprechen dem Solve-Statement des .gms Skriptesvgl. Folie 27
I Solver Status, Model Status: Rckmeldung des Solvers - verschiedeneStatusmeldungen mglich - vgl. GAMS Guide - Help ! expanded gams guide. Hierwurde das Modell optimal gelst.
I Objective Value: ZielfunktionswertI resource usage: Zeitverbrauch des Solvers beim Lsen des Modells (CPU s)I iteration count: Bentigte Iterationen des Solvers zum Lsen des Modells
23. Oktober 2013 Einfhrung in GAMS 36 / 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt . . . 1.000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazittsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30.000 30.000 18.1482 -INF 24.000 24.000 21.4813 -INF 36.000 36.000 12.593
I Angabe der unteren und oberen Schranken der Gleichungen - im Bsp. entsprechen UpperBound den Konstanten bi
I Angabe des Levels: Wert der linken Seite der GleichungI Angabe der Marginals: Simplexmultiplikatoren der Restriktion
I Wie verndert sich der Zielfunktionswert bei einer marginalen Vernderung derKonstanten ! Vernderung um i
I Hier wrde der ZF steigen, da Kapazittsgrenze der Restriktion erhht wrde !ein besserer Zielfunktionswert wre mglich
23. Oktober 2013 Einfhrung in GAMS 37 / 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513.333 +INF .
F Zielfunktionswert
---- VAR x gewhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 . . +INF -5.5562 . 7.333 +INF .3 . 8.000 +INF .4 . 14.667 +INF .
I Untere (LOWER) und obere (UPPER) Beschrnkung der VariableI LEVEL: Wert der Variablen in der Lsung (optimaler Wert)I MARGINAL: Reduzierte Kosten
I wie verndert sich der ZFW, wenn die Variable um eine marginale Einheit erhht wird
I Vernderung um cj
23. Oktober 2013 Einfhrung in GAMS 38 / 88
Display AnweisungAusgabe gewnschter Werte am Ende des Listings
* Mit dem *-Symbol am Zeilenbeginn knnen Kommentare eingefgt werden (grau)
sets
I Menge der Restriktionen /1,2,3/ J Menge der Spalten /1*4/;
parameter
c(j) Z i e l f u n k t i o n s k o e f f i z i e n t / 1 90, 2 50, 3 70, 4 40 / b(i) K a p a z i t t s g r e n z e / 1 30 2 24 3 36 /;
table a(i,j) Kapazittskoeffizienten 1 2 3 41 2 -1 1 22 1 2 3 -13 3 2 -1 2;
free variables F Zielfunktionswert;
positive variables x(j) gewhlte Menge von Alternative j;
equations
Z i e l f k t Zielfunktion K a p a z i t Kapazittsrestriktion;
Zielfkt.. F =E= sum(j, c(j) * x(j) );Kapazit(i).. sum(j, a(i,j) * x(j) ) =L= b(i);
model B e i s p i e l 1 mein Kommentar zum Modell /Zielfkt,Kapazit/;*ebenso mglich:
*model Beispiel1 /all/;
solve Beispiel1 maximizing F using lp;
display
F.l, x.l, x.m, a;
---- 44 VARIABLE F.L = 1513.333 Zielfunktionswert
---- 44 VARIABLE x.L gewhlte Menge von Alternative j
2 7.333, 3 8.000, 4 14.667
---- 44 VARIABLE x.M gewhlte Menge von Alternative j
1 -5.556
---- 44 PARAMETER a Kapazittskoeffizienten
1 2 3 4
1 2.000 -1.000 1.000 2.0002 1.000 2.000 3.000 -1.0003 3.000 2.000 -1.000 2.000
23. Oktober 2013 Einfhrung in GAMS 39 / 88
Fehlerhinweise - Logfile
Logfile (.log-Datei):I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihres
Auftretens im logfile-Fenster angezeigt.I Doppelklick auf die rot markierte Fehlermeldung fhrt zur
fehlerhaften Zeile in der .gms-Datei.I Ein Fehler fhrt oft zu mehreren Fehlermeldungen !die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing):I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalb
der (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch **** markiert.
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefhrt.
23. Oktober 2013 Einfhrung in GAMS 40 / 88
Orientierung
1. Einfhrung
2. berfhrung formaler Modelle in GAMS-Syntax
3. Lsen von Optimierungsproblemen in GAMS
4. Auswertung von Rechenergebnissen
5. Mehr zur GAMS-Syntax
23. Oktober 2013 Einfhrung in GAMS 41 / 88
Sets - Elemente definieren
I Mengenelemente knnen durch Strings definiert werden
I Werden Elementbezeichnungen mit Zahlen verwendet, muss lediglich das ersteund das letzte Element verbunden durch * angegeben werden
sets
B e z i r k e Menge der Bezirke /Pankow, Mitte, Charlottenburg/;sets
S t a e d t e Menge der Staedte /Stadt5*Stadt12/;
display Staedte, Bezirke;
---- 9 SET Staedte Menge der Staedte
Stadt5 , Stadt6 , Stadt7 , Stadt8 , Stadt9 , Stadt10, Stadt11Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow , Mitte , Charlottenburg
23. Oktober 2013 Einfhrung in GAMS 42 / 88
Sets - Mehrere Namen fr ein Set
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 50
Sets Mehrere Namen fr ein set
set i Knotenmenge / 1, 2, 3, 4, 5, 6 / ;
alias( i, k, l) ; }6,5,4,3 ,2 ,1{
Einem set drfen beliebig viele weitere Namen gegeben werden.
Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal.
Beachte: Nur ein Bezeichner darf vorher schon deklariert worden sein.
=== lki
Trennung der Namen durch Komma
5. Weitere Aspekte5.1 Mengen
I Einem set drfen beliebig viele weitere Namen gegeben werden.I Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal.I Beachte: Nur ein Bezeichner darf vorher schon deklariert worden
sein.
23. Oktober 2013 Einfhrung in GAMS 43 / 88
Sets - Subsets definieren
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 51
Sets Teilmenge aus einem bergeordneten set - subset
sets i Knotenmenge /1*6/
q(i) Startknoten /1/ ;
Ist eine Menge von Elementen eine Teilmenge einer bergeordnetenMenge, empfiehlt es sich die bergeordnete Menge in Klammern anzugeben, um Fehler zu vermeiden, die durch eine fehlerhafte Angabe der Elemente der Teilmenge entstehen. Bei der Compilierung wird dadurch ein domain checking durchgefhrt, d. h. es wird berprft, ob die Elemente der Teilmenge wirklich Elemente der bergeordneten Menge sind.
Bezeichner der bergeordneten Menge
5. Weitere Aspekte5.1 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthlt hier ein Element der bergeordnetenMenge. Es empfiehlt sich die bergeordnete Menge in Klammern anzugeben, umFehler zu vermeiden, die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen.
Bei der Compilierung wird berprft, ob Elemente der Teilmenge wirklich Elemente
der bergeordneten Menge sind. Wrde q hier bspw. das Element 7 zugewiesen,
kme es zu einer Fehlermeldung.
23. Oktober 2013 Einfhrung in GAMS 44 / 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge /1*6/
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke) ;
q("1")= yes ;
Zugehrigkeit eines Elements zu einer Menge: ja (yes) (=Hinzufgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente: Name des Elements in " " oder ' '
Bei Subsets Bezug auf alle Elemente des bergeordneten Sets: Bezeichner des bergeordneten Sets
5. Weitere Aspekte 5.1 Mengen
Entfernen der Quelle
r(i)= yes ;
r("1")= no ;
r("6")= no ;
s("6")= yes ;
}6,5,4,3 ,2 ,1{r
}6,5,4,3 ,2 {r
}5,4,3 ,2 {rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch.
1
2
3
4
6
5
23. Oktober 2013 Einfhrung in GAMS 45 / 88
Sets - Mehrdimensionale Mengen
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 53
Sets Mehrdimensionale sets
sets i Knotenmenge / 1, 2, 3, 4, 5, 6 /
p(i,i) Pfeilmenge / 1.2 1.3 2.4 2.6 3.4
5.6 / ;
4.5
set p(i,i) Pfeilmenge / 1.(2,3)
2.(4,6) 3.4
Zusammenfassende Schreibweise z.B.
5. Weitere Aspekte 5.1 Mengen
4.(5,6)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander.
Verbindung der Elemente durch .
Bis zu 10 Dimensionen mglich.
1
2
3
4
6
5 4.6
5.6 / ;
Zusammenfassende Schreibweise, z.B.
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 53
Sets Mehrdimensionale sets
sets i Knotenmenge / 1, 2, 3, 4, 5, 6 /
p(i,i) Pfeilmenge / 1.2 1.3 2.4 2.6 3.4
5.6 / ;
4.5
set p(i,i) Pfeilmenge / 1.(2,3)
2.(4,6) 3.4
Zusammenfassende Schreibweise z.B.
5. Weitere Aspekte 5.1 Mengen
4.(5,6)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander.
Verbindung der Elemente durch .
Bis zu 10 Dimensionen mglich.
1
2
3
4
6
5 4.6
5.6 / ;
Bis zu 10 Dimensionen mglich
23. Oktober 2013 Einfhrung in GAMS 46 / 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz /Pankow,Marzahn,Kreuzberg/ ;parameter
a n z Anzahl der Elemente in der Menge ;
anz = card(bz) ;*Anzeige:
display anz ;
set
i /1*3/ j /a,b/ k /p1*p4/;table tab(i,j,k) Eine Tabelle mit 3 Dimensionen p1 p2 p3 p41.a 10 0 15 51.b 5 10 5 02.a 0 0 0 52.b 10 10 15 153.a 10 0 5 103.b 15 15 15 0;
I Wertetabellen werden ohne Backslashes (/.../) definiertI Tabellenformat muss eingehalten werden - Dateneintrge drfen Spaltenstruktur nicht
berlappenI mehrere Dimensionen knnen durch . verknpft werden. Im Beispiel ist tab1;a;p1 = 10.
23. Oktober 2013 Einfhrung in GAMS 47 / 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz /Pankow,Marzahn,Kreuzberg/ ;parameter
a n z Anzahl der Elemente in der Menge ;
anz = card(bz) ;*Anzeige:
display anz ;
set
i /1*3/ j /a,b/ k /p1*p4/;table tab(i,j,k) Eine Tabelle mit 3 Dimensionen$include table.txt;
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables knnen bis zu 10 Dimensionen haben
I Groe Datenmengen knnen in .txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Mglichkeiten zur Einbindung
externer Daten !Help-Men
23. Oktober 2013 Einfhrung in GAMS 48 / 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(s,k) Distanz zwischen Standort s und Kunde k
DD F H K S
B 200 540 290 570 630
HH 500 490 150 420 670
M 460 390 630 570 220 ;
scalar f Frachtkosten pro Stck und 100 km /0.5/ ;
parameter c(s,k) Transportkosten pro Stck zw. s und k ;
c(s,k) = d(s,k) / 100 * f ;
Berechnung von c fr jede Kombination aus s und k
auf konkrete Elemente wird ber 'Element' Bezug genommen
5. Weitere Aspekte 5.2 Daten (Wertzuweisung)
23. Oktober 2013 Einfhrung in GAMS 49 / 88
Variablen - Verndern des Wertebereiches
Suffix Bedeutung.lo untere Schranke (lower bound).up obere Schranke (upper bound).fx Fixierung: untere und obere Schranke sind identisch
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 66
Variablen - Vernderung des Wertebereichs
Suffix Bedeutung
.lo untere Schranke (lower bound)
.up obere Schranke (upper bound)
.fx fester Wert (fixed value) untere und obere Schranke sind identisch
x.up('B','DD') = 0;
x.lo('M','K') = 100;
x.fx('HH','H') = 50;
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhlt genau 50 ME aus HH
Variable .Suffix Index bzw. Indizes, hier: gilt nur fr bestimmte Variablen
5. Weitere Aspekte 5.3 Variablen
23. Oktober 2013 Einfhrung in GAMS 50 / 88
Lsen gemischt ganzzahliger Modelle
I Modelle, die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern i.d.R. einen wesentlich hherenRechenaufwand als lineare Porgramme - u.U. mssen sehr viele LPsgelst werden
Solve-Aufruf eines MIP:
solve modelname maximizing F using mip ;
Die LP-Relaxation (relaxed mixed integer program) eines ganzzahligenPrograms wird als rmip bezeichnet. Dabei wird dieGanzzahligkeitseigenschaft der Variablen verworfen.
solve modelname maximizing F using rmip ;
23. Oktober 2013 Einfhrung in GAMS 51 / 88
Summen, Produkte und Operatoren
Summen werden durch das Schlsselwort sum() definiert. Innerhalb derKlammer steht zuerst der Index, ber den summiert wird. Darauf folgtder Summenterm. Produkte werden analog gebildet.
*Beispiel zur Summenbildung: sum()
sum(j, x(j) - y(j) );* Eine Summe ber 2 Mengen -
* Indices mssen eingeklammert werden:
sum((k,l), z(k,l) * p(k) );*Beispiel zur Produktbildung:
prod(j, p(j) * r(j) );
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= grer-gleich=E= = ist-gleich
23. Oktober 2013 Einfhrung in GAMS 52 / 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge.
sets
bz /Pankow,Marzahn,Kreuzberg/ ;parameter
pos(bz) Position der Elemente in der Menge ;
*Wird fr jedes Element in bz ausgefhrt:
pos(bz) = ord(bz) ;*Anzeige:
display pos ;
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1.000, Marzahn 2.000, Kreuzberg 3.000
I Zugriff auf einzelne Elemente einer Menge z.B. in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yes/no (vgl. Folie 45)
23. Oktober 2013 Einfhrung in GAMS 53 / 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge.
sets
bz /Pankow,Marzahn,Kreuzberg/ ;parameter
a n z Anzahl der Elemente in der Menge ;
anz = card(bz) ;*Anzeige:
display anz ;
---- 8 PARAMETER anz = 3.000 Anzahl der Elemente in der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitt bezeichnet
I Kardinalitt der Menge J: jJj
23. Oktober 2013 Einfhrung in GAMS 54 / 88
Funktionen - Max, Min
Berechnung des Maximums und Minimums:scalar
M A Maximum M I M i n i m u m ;
MA = max(1592,(3540/2),7);MI = min(-15,12,-6);display MA,MI;
set i B e i s p i e l m e n g e /1*5/ ;parameter
c(i) B e i s p i e l d a t e n /1 10, 2 5, 3 100, 4 -3, 5 13/ ;scalar
S M A Daten-Maximum S M I Daten-Minimum;
SMA = smax(i, c(i) ) ;SMI = smin(i, c(i) ) ;
*display
*sma,smi ;
---- 7 PARAMETER MA = 1770.000 MaximumPARAMETER MI = -15.000 Minimum
23. Oktober 2013 Einfhrung in GAMS 55 / 88
Funktionen - SMax, SMin
Oftmals ist das Maximum bzw. Minimum eines Parameters oder einerVariable gesucht.I Maximum-Funktion ber einen/mehrere Indices:
scalar
M A Maximum M I M i n i m u m ;
MA = max(1592,(3540/2),7);MI = min(-15,12,-6);display MA,MI;
set i B e i s p i e l m e n g e /1*5/ ;parameter
c(i) B e i s p i e l d a t e n /1 10, 2 5, 3 100, 4 -3, 5 13/ ;scalar
S M A Daten-Maximum S M I Daten-Minimum;
SMA = smax(i, c(i) ) ;SMI = smin(i, c(i) ) ;
display
sma,smi ;
---- 21 PARAMETER SMA = 100.000 Daten-MaximumPARAMETER SMI = -3.000 Daten-Minimum
23. Oktober 2013 Einfhrung in GAMS 56 / 88
Funktionen - Runden und Zufallszahlen
I Uniform(x,y) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(x,y)
set i B e i s p i e l m e n g e /A,B,C,D/ ;parameter r(i) B e i s p i e l p a r a m e t e r ;
r(i) = Uniform(0,10) ;display r ;r(i)= Uniformint(0,10)display r ;r(i) = round(uniform(0,10),1) ;display r ;
---- 6 PARAMETER r BeispielparameterA 1.717, B 8.433, C 5.504, D 3.011---- 8 PARAMETER r BeispielparameterA 3.000, B 2.000, C 3.000, D 9.000---- 10 PARAMETER r BeispielparameterA 0.700, B 5.000, C 10.000, D 5.800
Die Funktion round(x,y) rundet die Zahl x auf y Stellen. Mit floor(x,y) und ceil(x,y)
kann auch gezielt ab bzw. aufgerundet werden.
23. Oktober 2013 Einfhrung in GAMS 57 / 88
Funktionen - Runden und Zufallszahlen
Hinweis zu Zufallszahlen:
Es werden sog. Pseudozufallszahlen erstellt. Ruft man das Skriptmehrmals nacheinander auf so werden immer wieder diesselbenZufallszahlen erzeugt. Der Zufallszahlengenerator kann durch
Option Seed=number;
eingestellt werden. Der voreingestellte Standardwert fr number ist 3141.Wird der seed verndert, so werden neue (Pseudo)-Zufallszahlenerstellt.
23. Oktober 2013 Einfhrung in GAMS 58 / 88
$-Bedingungen
Mit $(...) knnen Bedingungen umgesetzt werden. Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden.
set
i /1*5/ ;parameter
c(i) P a r a m e t e r ;
c(i)$(ord(i) > 2) = 5 ;display c ;
---- 7 PARAMETER c Parameter
3 5.000, 4 5.000, 5 5.000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen, wenn die
$( )-Bedingungen erfllt ist. Der Wert von ci wird also nur fr diejenigen Elemente der
Menge i zugewiesen, deren Position in der Menge i grer als 2 ist. Fr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vgl.ord()-Funktion: Folie 53 ).
23. Oktober 2013 Einfhrung in GAMS 59 / 88
$-Bedingungen
Auch Gleichungen knnen an Bedingungen geknpft werden.
Im Beispiel soll eine Restriktion nur fr das letzte Element einer Menge aufgestelltwerden:
equations
G l e i c h u n g 1 Dies ist eine Gleichung ;
Gleichung1(i)$(ord(i) = card(i)).. sum( (i,j), x(i,j) ) =E= 1 ;
23. Oktober 2013 Einfhrung in GAMS 60 / 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutungnot nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutunglt < kleiner alsle = grer oder gleichgt > grer
Beispiel
c(j)$( (ord(j) > 6) AND (ord(j) 10) ) = 10 ;
23. Oktober 2013 Einfhrung in GAMS 61 / 88
Optimalittskriterium
Um die Lsungszeit eines MIPs zu verringern, kann angegeben werden, wie gro dieLcke der zu ermittelnden Lsung zu der theoretisch noch bestmglichen ganzzahligenLsung sein darf. Sobald im Branch-&-Bound Prozess eine zulssige ganzzahligeLsung gefunden wird, deren Zielfunktionswert eine geringere Differenz zum nochtheoretisch bestmglichen Ergebnis aufweist, wird der Lsungsprozess mit derMeldung solution satisfies tolerances abgebrochen.
Angabe der Lcke, dem sog. solution gap, vor dem solve Statement:
*Angabe eines absoluten gaps: optca (criterium absolute)
option optca = 5000;*maximale Abweichung der ermittelten Lsung von der Optimallsung:
*5000
*Angabe eines relativen gaps: optcr (criterium relative)
option optcr = 0.1;*maximale Abweichung der ermittelten Lsung von der Optimallsung:
*10 Prozent
Bei Angabe einer maximalen relativen Lcke:
*Angabe eines absoluten gaps: optca (criterium absolute)
option optca = 5000;*maximale Abweichung der ermittelten Lsung von der Optimallsung:
*5000
*Angabe eines relativen gaps: optcr (criterium relative)
option optcr = 0.1;*maximale Abweichung der ermittelten Lsung von der Optimallsung:
*10 Prozent
23. Oktober 2013 Einfhrung in GAMS 62 / 88
Optimalittskriterium
Die Standardeinstellung ist optcr = 0.1. Soll bis zum Nachweis derOptimalitt gerechnet werden muss optcr = 0 gesetzt werden.
option optcr = 0;Option optca=4000;
option optcr = 0;
MIP status(101): integer optimal solutionFixed MIP status(1): optimalProven optimal solution.
MIP Solution: 96394.100000Final Solve: 96394.100000
Best possible: 96394.100000Absolute gap: 0.000000Relative gap: 0.000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmglichen Lsung ist auf0% gesetzt. Somit wird die optimale Lsung berechnet.Der Rechenaufwand dafr kann sehr gro sein.
option optcr = 0;Option optca=4000;
option optcr = 0;MIP status(102): integer optimal, toleranceFixed MIP status(1): optimalSolution satisfies tolerances.
MIP Solution: 96394.100000Final Solve: 96394.100000
Best possible: 92485.800000Absolute gap: 3908.300000Relative gap: 0.040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmglichen Lsungbetrgt 4000. Sobald eine ganzzahlige Lsung gefundenwird, die eine Optimalittslcke von hchstens 4000aufweist, wird die Berechnung beendet. Um optca zusetzen muss zunchst die Standardeinstellung fr optcr(Standard: optcr=0.1) aufgehoben werden.
23. Oktober 2013 Einfhrung in GAMS 63 / 88
Optionen - Rechenzeit und Iterationen
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 77
Verndern der Zeit- bzw. Iterationsbeschrnkung
S O L V E S U M M A R Y
MODEL schiffsbeladung OBJECTIVE F
TYPE MIP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 56
**** SOLVER STATUS 1 NORMAL COMPLETION
**** MODEL STATUS 1 OPTIMAL
**** OBJECTIVE VALUE 13519.9117
RESOURCE USAGE, LIMIT 0.109 1000.000
ITERATION COUNT, LIMIT 7 10000
Maximal zulssiger Zeitbedarf zum Lsen (default: 1000 Sekunden)
Maximal zulssige Anzahl von Iterationen zum Lsen (default: 10000 Iterationen)
vom Solver zur Lsung bentigte Zeit (CPU-Zeit)
vom Solver zur Lsung bentigte Iterationen
5. Weitere Aspekte 5.5 Lsen von Modellen
Ausschnitt A_4_5_big.lst
23. Oktober 2013 Einfhrung in GAMS 64 / 88
Optionen - Rechenzeit und Iterationen
Bei greren Problemen kann eine Erhhung notwendig sein, da bspw.innerhalb der vorgegebenen Zeit keine Lsung gefunden wird.
Bsp. fr Zeitberschreitung:
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 78
Verndern der Zeit- bzw. Iterationsbeschrnkung
Cplex 10.0.1, GAMS Link 31
Cplex licensed for 1 use of lp, qp, mip and barrier, with 2 parallel threads.
Resource limit exceeded, no integer solution found.
No solution returned
5. Weitere Aspekte
Bei greren Problemen kann eine Erhhung notwendig sein, da bspw. innerhalb der vorgegebenen Zeit keine Lsung gefunden wird.
Bsp. fr Zeitberschreitung:
Ausschnitt A_4_5_big.lst
5.5 Lsen von Modellen
23. Oktober 2013 Einfhrung in GAMS 65 / 88
Optionen - Rechenzeit und Iterationen
Verndern der Zeit- bzw. Iterationsbeschrnkung durch model.reslim undmodel.iterlim vor dem solve Statement:
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 79
Verndern der Zeit- bzw. Iterationsbeschrnkung
ber model.reslim bzw. model.iterlim (irgendwo) vor dem solve-Statement:
aufgabe.reslim=20000;
solve schiffsbeladung maximizing F using mip ;
Erhhung der Rechenzeit auf 20.000 Sekunden
ITERATION COUNT, LIMIT 7 50000
5. Weitere Aspekte
RESOURCE USAGE, LIMIT 0.109 20000.000
Ausschnitt A_4_5_big.lst
aufgabe.iterlim=50000;
solve schiffsbeladung maximizing F using mip ;
Erhhung der Iterations-anzahl auf 50.000
Ausschnitt A_4_5_big.lst
5.5 Lsen von Modellen
23. Oktober 2013 Einfhrung in GAMS 66 / 88
Hinweis zum Setzen von Optionen
Optionen knnen in den meisten Fllen sowohl fr alle Modelle desaktuellen GAMS-Laufes als auch fr spezifische Modelle gesetzt werden.Bspw. kann die Zahl der Iterationen entweder ber:
option iterlim = 10000 ;
fr alle Modelle, oder ber:
modelname.iterlim = 10000 ;
fr ein spezifisches Modell (modelname) gesetzt werden.
23. Oktober 2013 Einfhrung in GAMS 67 / 88
Optionen - Sonstiges
Vernderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw. Zeilen (Equations) durch
option limcol = number ;
option limrow = number ;
23. Oktober 2013 Einfhrung in GAMS 68 / 88
Sonstiges
I $ sowie * mssen immer an den Zeilenanfang (nicht einrcken)I Mehrzeilge Kommentare knnen zwischen $Ontext und $Offtext
geschrieben werdenI Titel knnen durch $title Beispieltitel gesetzt werdenI $Exit beendet das Skript in der entsprechenden Zeile
23. Oktober 2013 Einfhrung in GAMS 69 / 88
If-Else Verzweigung
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 90
Bedingungen if-elseif-else
if( y5,
x = 2 ;
else x = 0 ;
) ;
elseif ist optional und kann beliebig oft verwendet werden
mehrere Bedingungen am besten gut einklammern
keine Deklaration und keine Definition von equations innerhalb if, aber z.B. solve zum mehrfachen Lsen von Modellen
6. Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werdenI mehrere Bedingungen am besten gut einklammernI keine Deklaration und keine Definition von equations innerhalb if,
aber z.B. solve zum mehrfachen Lsen von Modellen
Schleifen: loop
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 87
6. Ablaufgestaltung in GAMS
Schleifen loop (wiederhole etwas fr alle Elemente einer Menge)
loop( j,
) ;
loop( j$(y.l(j)=1),
Anweisungen ;
loop( i,
Anweisungen ;
) ;
) ;
Anweisungen ;
loop((i,j),
Anweisungen ;
) ;
keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife, wobei die Anweisungen nur fr die Elemente von j ausgefhrt werden, fr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge, fr deren Elemente die Anweisungen ausgefhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen ber einen IndexI keine Deklaration und keine Definition von equations innerhalb loop
Schleifen: for
Mehrmalige Ausfhrung mit einem Zhler
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 88
6. Ablaufgestaltung in GAMS
Schleifen for (wiederhole etwas genau x-mal)
scalar zaehler, p / 0 /;
for( zaehler = 1 to 10,
) ;
display p ;
p = p + 10 ;
keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100.000
von Startwert bis Endwert
scalar zaehler, p / 0 /;
for( zaehler = 1 to 10 by 2,
) ;
p = p + 10 ;
---- 16 PARAMETER p = 50.000
Zhler (scalar, kein set)
default: Erhhung des Zhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefhrt
Erhhung des Zhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefhrt
I keine Deklaration und keine Definition von equations innerhalb for
Schleifen: while
Mehrmalige bedingte Ausfhrung
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 89
Schleifen while (wiederhole etwas solange wie)
parameter p /0/ ;
while( p
23. Oktober 2013 Einfhrung in GAMS 73 / 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS knnen .txt - Ausgabedateien erstellt werden.I Deklaration + Definition einer Ausgabedatei:
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 92
7. Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out / Ausgabe_Transport.txt / ;
put out ;
Festlegung, in welche Datei geschrieben werden soll
Schlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf. Pfadangabe; ohne Pfad: Speicherung am Speicherort der aktuellen .gpr-Datei
Schlsselwort zum Schreiben in Dateien
Bezeichner der Datei, in die ab sofort geschrieben werden soll
Erklrungen am Beispiel Transportplanung
I Festlegung, in welche Datei geschrieben werden soll
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 92
7. Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out / Ausgabe_Transport.txt / ;
put out ;
Festlegung, in welche Datei geschrieben werden soll
Schlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf. Pfadangabe; ohne Pfad: Speicherung am Speicherort der aktuellen .gpr-Datei
Schlsselwort zum Schreiben in Dateien
Bezeichner der Datei, in die ab sofort geschrieben werden soll
Erklrungen am Beispiel Transportplanung
23. Oktober 2013 Einfhrung in GAMS 74 / 88
Ausgabedateien - Beispiel
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 93
file out /Ausgabe_Transport.txt/;
put out;
put "Transportproblem" // ;
put a.ts /;
loop(s,
put @3, s.tl , @10, a(s)/;
);
put /;
Zeilenumbruch /
Ausgabe von Text
erfolgt in "" bzw. '...'
fr jedes Element aus der Menge s wiederhole
Schreibe das, was folgt, in die 3. Spalte der aktuellen Zeile (@Spaltennr.)
Name des betrachteten Elements (.tl)
Wert des Parameters a(s) des betrachteten Elements
Leerzeile Trennung der Eintrge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7. Gestaltung eigener Ausgabedateien
23. Oktober 2013 Einfhrung in GAMS 75 / 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 94
put b.ts /;
loop(k,
put @3, k.tl , @10, b(k)/;
);
put /;
put "Transportkosten: " z.l /;
put /;
put "Transportmengen" //;
put "von":8, "nach":8, "Menge":>8 //;
loop((s,k),
put s.tl:8, k.tl:8, x.l(s,k):8:2 /;
);
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen, die fr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite, hier: rechtsbndig
Anzahl an Dezimalstellen von der Feldbreite, hier: 2 von 8 Stellen (nur bei numerischen Eintrgen)
Beispiel - Fortsetzung
7. Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 95
Transportproblem
Kapazitt am Standort s
B 350.00
HH 500.00
M 550.00
Nachfrage des Kunden k
DD 300.00
F 300.00
K 250.00
S 150.00
H 350.00
Transportkosten: 1910.00
Transportmengen
von nach Menge
B DD 300.00
B F 0.00
B K 0.00
B S 0.00
B H 50.00
HH DD 0.00
HH F 0.00
HH K 200.00
HH S 0.00
HH H 300.00
M DD 0.00
M F 300.00
M K 50.00
M S 150.00
M H 0.00
Entstehende Ausgabedatei
Ausgabe_Transport.txt
7. Gestaltung eigener Ausgabedateien
23. Oktober 2013 Einfhrung in GAMS 77 / 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put "":10:0;
loop(k,
put k.tl:>10 ;
);
put /;
scalar i ;
for(i=1 to 60,
put "-";
);
put /;
loop(s,
put s.tl:10:0 ;
loop(k,
put x.l(s,k):10:2 ;
);
put /;
);
Tabellenkopf erzeugen
Strich ber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
uerer loop: Zeilen
Innerer loop: Spalten
7. Gestaltung eigener Ausgabedateien
23. Oktober 2013 Einfhrung in GAMS 78 / 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 300.00 0.00 0.00 0.00 50.00
HH 0.00 0.00 200.00 0.00 300.00
M 0.00 300.00 50.00 150.00 0.00
Transportmengen als Tabelle - Ausgabedatei
7. Gestaltung eigener Ausgabedateien
23. Oktober 2013 Einfhrung in GAMS 79 / 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfhrungszeichen (Text) schreibenI Elementnamen: Menge.tlI Elementkommentare: Menge.tsI Wert/Schranken von variables/equations:
Bezeichner.l/.m/.lo/.up(Index)I Mglichkeit zur einfachen Ausgabe formatierter Dateien zum
Einlesen in Excel oder Datenbanken (leerzeichen-, tabstopp- bzw.kommagetrennt)
23. Oktober 2013 Einfhrung in GAMS 80 / 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite AusrichtungText 0 Stellen linksbndigNamen 12 Stellen linksbndignumerische Objekte 12 Stellen rechtsbndigSet-Elemente 12 Stellen rechtsbndig
Anpassung fr einzelne Output-Elemente: (vgl. Folie 77)
TU Dresden, Okt. 2009 Andrea Frster, TU Dresden Folie 99
Text: linksbndig 0 Stellen
Namen: linksbndig 12 Stellen
numerische Objekte: rechtsbndig 12 Stellen
Elemente von Mengen: rechtsbndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmig: Ausrichtung Feldbreite
Anpassung fr einzelne Outputobjekte:
Objekt: Ausrichtung Feldbreite:Dezimalstellen
Ausgabe-objekt
Optional: > Rechtsbndig < Linksbndig zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7. Gestaltung eigener Ausgabedateien
23. Oktober 2013 Einfhrung in GAMS 81 / 88
Gams Data Exchange
I Mit GAMS knnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden.
I Dazu wird die Funktion GDXXRW verwendetI Der Datenaustausch erfolgt ber .gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23. Oktober 2013 Einfhrung in GAMS 82 / 88
GDX Daten
GDX-Dateien speichern Daten in fr GAMS lesbarer Form. Beispiel fr eine GDX Datei:
.gdx Dateien knnen durch File/Open geffnet werden
Auflistung der Dateneintrge mit Typ (set,par,var),Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewhlten Dateneintrags
23. Oktober 2013 Einfhrung in GAMS 83 / 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung mssen die GDX-Daten dem Gamsskript bekannt gemachtwerden. Dafr wird die gdx-Datei geffnet, die entsprechenden Daten werden gelesenund mit $gdxin wird die GDX-Datei wieder geschlossen. Die Deklaration der Datenerfolgt vorher separat!
set Staedte ;Parameter Einwohner(Staedte) ;*Laden aus gdx:
$gdxin Datensatz.gdx$load Staedte Einwohner$gdxin
display Staedte, Einwohner;
---- 8 SET Staedte
Hamburg, Berlin , Dresden, London , Dallas
---- 8 PARAMETER Einwohner
Hamburg 1.800, Berlin 3.400, Dresden 0.520, London 8.300Dallas 1.200
23. Oktober 2013 Einfhrung in GAMS 84 / 88
Einlesen und Schreiben von GDX Daten
Sollen Daten nach dem GAMS-Lauf in einer GDX-Datei gespeichert werden, so kannfolgende Funktion verwendet werden:
set Staedte ;Parameter Einwohner(Staedte) ;*Laden aus gdx:
$gdxin Datensatz.gdx$load Staedte Einwohner$gdxin
Einwohner(Staedte) = Einwohner(Staedte)/2;
execute_unload "Datensatz_neu.gdx" Staedte Einwohner
Werden dabei keine Daten angegeben, so werden alle derzeit geladenen Daten nach.gdx entladen.
Aktualisierte Parameter nach dem GAMS-Lauf
23. Oktober 2013 Einfhrung in GAMS 85 / 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt ber das Gams-ProgrammGDXXRW.execute gdxxrw.exe Datensatz.gdx o=meinWB.xlsx set=Staedte rng=Tabelle1!A1:A5 rdim=1 cdim=0 ;
execute gdxxrw.exe Datensatz.gdx o=meinWB.xlsx par=Einwohner rng=Tabelle1!C2:G2 rdim=0 cdim=1;
Ergebnis in Tabelle1 von meinWB.xlsx:
rdim=1: Eine Dimension pro Zeile (row)
cdim=1: Eine Dimension pro Spalte (column)
Mit o=Workbookname wird das zu beschreibende Workbook angegeben. Wird die
Angabe weggelassen, so wird ein Workbook mit dem Namen der GDX Datei
verwendet. Sollte die Datei noch nicht existieren, wird sie angelegt. Die zu
beschreibende Datei darf nicht in Excel geffnet sein (Schreibschutz).
23. Oktober 2013 Einfhrung in GAMS 86 / 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls ber GDXXRW realisiert.$call gdxxrw meinWB.xlsx o=Input.gdx set=Staedte rng=Tabelle1!A1:A5 rdim=1 cdim=0 ;
Es wird die .gdx Datei erstellt (berschrieben) und mit Werten gefllt.I Liest man Mengen ein, kann in der Tabellenzelle neben/unter dem
Mengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen:I SE=0 Skip Empty: erspart die Angabe eines genauen rng (wie oben A1:A5) - es ist
mglich nur die erste Zelle des Bereiches anzugeben (z.B. rng=Tabelle1!A1).Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist, wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fr Mengenelemente: es werden nur Elemente akzeptiert, derenKommentarzelle YES,Y oder 1 enthlt. Mit 0,N,NO knnen damiteinzelne Set-Elemente ausgeschaltet werden.
I enthlt die Tabelle Duplikate, kann dset=... anstelle von set=... verwendetwerden, um Mengenelemente einzulesen.
23. Oktober 2013 Einfhrung in GAMS 87 / 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und MengenAusfhrliche Darstellung fortgeschrittener Methoden des Datenaustausches finden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp: Fr statische Daten ist das Einbinden einer .txt Datei mit $Include der einfachsteWeg externe Daten einzubinden. Excel-Tabellen lassen sich als .txt Dateien exportieren
23. Oktober 2013 Einfhrung in GAMS 88 / 88
Quellen
I Frster, A. (2009): Foliensatz zur Gams-bung, TechnischeUniversitt Dresden
I McCarl, B. A. (2006): Expanded GAMS Guide(http://www.gams.com)
I GAMS Development Corporation (Hrsg.) (2006), GAMS - A UsersGuide, Books on Demand, Norderstedt (bzw.http://www.gams.com o. GAMS - Men Help)
I GAMS IDE Documentation (http://www.gams.com bzw.GAMS-Men Help-Help Topics)
I GAMS Homepage: http://www.gams.com
http://www.gams.comhttp://www.gams.comhttp://www.gams.comhttp://www.gams.com
Einfhrungberfhrung formaler Modelle in GAMS-SyntaxLsen von Optimierungsproblemen in GAMSAuswertung von RechenergebnissenMehr zur GAMS-SyntaxModellsyntaxGrundlegende Funktionen$-ConditionalsSkript-OptionenSchleifen und VerzweigungenEigene AusgabedateienGDX und Datenaustausch mit MS ExcelQuellen