Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 /...
Transcript of Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 /...
23 April 2016 Einfuumlhrung in GAMS 1 88
Einfuumlhrung in die mathematische Modellierung mitder Software GAMS
Knut Haase Matthes Koch Sven Muumlller
Institut fuumlr Verkehrswirtschaft
23 April 2016
23 April 2016 Einfuumlhrung in GAMS 2 88
Uumlbersicht
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 3 88
Einfuumlhrung
I GAMS General Algebraic Modeling System
I algebraische Modellierungssprache
I Formulieren und Loumlsen mathematischer Modelle
I ursprgl entwickelt an der World Bank in den 1970er Jahren
I aktuell Version 247 (April 2016)
I Demoversion httpwwwgamscomdownloadModellgroumlyumlen beschraumlnkt (vgl Downloadseite)
I weitere bekannte ModellierungssprachenI AMPL (A Modeling Language for Mathematical Programming)I OML (Optimization Modeling Language)I LINGOI uvm
Einfuumlhrung - GAMSIDE
Starte GAMS-Lauf (F9)Modell Libraries amp Help
Eingabefenster (gms Skripte)
Aktuell geoumlffnetes Projekt
Projekte anlegenNeue Skripte erstellen
23 April 2016 Einfuumlhrung in GAMS 5 88
Einfuumlhrung - Dateitypen
Zu einem GAMS-Projekt gehoumlren folgende Dateien
I gpr Projektdatei
I gms Gams-Skript - hierin schreiben wir mathematische
Modelle
I lst Gams-Listing - Ergebnisdatei eines GAMS-Aufrufs
I lxi Inhaltsverzeichnis des Listing-Files (GAMSIDE)
I log Gams-Log - Logdatei
I gdx gams data exchange - externe Datensaumltze
I gch Diagrammdateien
I inc Includedateien - bei Modularisierung des Skriptes
I opt Optionsdateien fuumlr Solver
I txt Textdateien zB als externe Daten geschriebeneAusgabedateien ua
Diese Dateien werden in einem gemeinsamen Projektordner mit dergpr-Datei abgelegt
23 April 2016 Einfuumlhrung in GAMS 6 88
Einfuumlhrung - Projekte und Dateitypen
Projekte - gpr
I Projekt Sammlung zusammengehoumlriger Dateien (InputdatenModelle Outputdateien)
I Pfad bzw Verzeichnis der Projektdatei ist default fuumlr alle von GAMSim Rahmen der Projektdatei erzeugten Dateien
I Endung von Projektdateien gpr
I Menuuml File Project New oder Open
I aktuell geoumlnetes Projekt wird in der Titelleiste der GAMSIDE(blauer Bereich ganz oben) angezeigt
23 April 2016 Einfuumlhrung in GAMS 7 88
Einfuumlhrung - Projekte und Dateitypen
Skripte - gms
I Enhaumllt das Modell und alle zugehoumlrigen Deklarationen
I Endung von Projektdateien gms
I File New
I File Save as (dort wo aktuelle gpr liegt)
I Daten koumlnnen in der gms Datei enthalten sein oder aus anderenQuellen integriert werden
23 April 2016 Einfuumlhrung in GAMS 8 88
Einfuumlhrung - GAMSIDE
Nuumltzliche HilfsmittelI unter Help benden sich viele hilfreiche Anleitungen insb
I GAMS Users GuideI Expanded GAMS Guide (McCarl)I Anleitungen zu den in GAMS verwendeten Solvern docssolvers
I Model Libraries groyumle Auswahl bereits programmierter Modelle
23 April 2016 Einfuumlhrung in GAMS 9 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 10 88
Beispiel
max F = 90x1 + 50x2 + 70x3 + 40x4 (1)
st
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 Modellstruktur
I Daten durch Symbole repraumlsentieren
23 April 2016 Einfuumlhrung in GAMS 11 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
st
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)
stX
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 Zielfunktionskoezient der Alternative jI aij Kapazitaumltsparameter bzgl Alternative j in Restriktion iI bi Kapazitaumltsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewaumlhlte Menge der Alternative j
Gleichungsbloumlcke
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 3 88
Einfuumlhrung
I GAMS General Algebraic Modeling System
I algebraische Modellierungssprache
I Formulieren und Loumlsen mathematischer Modelle
I ursprgl entwickelt an der World Bank in den 1970er Jahren
I aktuell Version 247 (April 2016)
I Demoversion httpwwwgamscomdownloadModellgroumlyumlen beschraumlnkt (vgl Downloadseite)
I weitere bekannte ModellierungssprachenI AMPL (A Modeling Language for Mathematical Programming)I OML (Optimization Modeling Language)I LINGOI uvm
Einfuumlhrung - GAMSIDE
Starte GAMS-Lauf (F9)Modell Libraries amp Help
Eingabefenster (gms Skripte)
Aktuell geoumlffnetes Projekt
Projekte anlegenNeue Skripte erstellen
23 April 2016 Einfuumlhrung in GAMS 5 88
Einfuumlhrung - Dateitypen
Zu einem GAMS-Projekt gehoumlren folgende Dateien
I gpr Projektdatei
I gms Gams-Skript - hierin schreiben wir mathematische
Modelle
I lst Gams-Listing - Ergebnisdatei eines GAMS-Aufrufs
I lxi Inhaltsverzeichnis des Listing-Files (GAMSIDE)
I log Gams-Log - Logdatei
I gdx gams data exchange - externe Datensaumltze
I gch Diagrammdateien
I inc Includedateien - bei Modularisierung des Skriptes
I opt Optionsdateien fuumlr Solver
I txt Textdateien zB als externe Daten geschriebeneAusgabedateien ua
Diese Dateien werden in einem gemeinsamen Projektordner mit dergpr-Datei abgelegt
23 April 2016 Einfuumlhrung in GAMS 6 88
Einfuumlhrung - Projekte und Dateitypen
Projekte - gpr
I Projekt Sammlung zusammengehoumlriger Dateien (InputdatenModelle Outputdateien)
I Pfad bzw Verzeichnis der Projektdatei ist default fuumlr alle von GAMSim Rahmen der Projektdatei erzeugten Dateien
I Endung von Projektdateien gpr
I Menuuml File Project New oder Open
I aktuell geoumlnetes Projekt wird in der Titelleiste der GAMSIDE(blauer Bereich ganz oben) angezeigt
23 April 2016 Einfuumlhrung in GAMS 7 88
Einfuumlhrung - Projekte und Dateitypen
Skripte - gms
I Enhaumllt das Modell und alle zugehoumlrigen Deklarationen
I Endung von Projektdateien gms
I File New
I File Save as (dort wo aktuelle gpr liegt)
I Daten koumlnnen in der gms Datei enthalten sein oder aus anderenQuellen integriert werden
23 April 2016 Einfuumlhrung in GAMS 8 88
Einfuumlhrung - GAMSIDE
Nuumltzliche HilfsmittelI unter Help benden sich viele hilfreiche Anleitungen insb
I GAMS Users GuideI Expanded GAMS Guide (McCarl)I Anleitungen zu den in GAMS verwendeten Solvern docssolvers
I Model Libraries groyumle Auswahl bereits programmierter Modelle
23 April 2016 Einfuumlhrung in GAMS 9 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 10 88
Beispiel
max F = 90x1 + 50x2 + 70x3 + 40x4 (1)
st
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 Modellstruktur
I Daten durch Symbole repraumlsentieren
23 April 2016 Einfuumlhrung in GAMS 11 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
st
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)
stX
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 Zielfunktionskoezient der Alternative jI aij Kapazitaumltsparameter bzgl Alternative j in Restriktion iI bi Kapazitaumltsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewaumlhlte Menge der Alternative j
Gleichungsbloumlcke
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 5 88
Einfuumlhrung - Dateitypen
Zu einem GAMS-Projekt gehoumlren folgende Dateien
I gpr Projektdatei
I gms Gams-Skript - hierin schreiben wir mathematische
Modelle
I lst Gams-Listing - Ergebnisdatei eines GAMS-Aufrufs
I lxi Inhaltsverzeichnis des Listing-Files (GAMSIDE)
I log Gams-Log - Logdatei
I gdx gams data exchange - externe Datensaumltze
I gch Diagrammdateien
I inc Includedateien - bei Modularisierung des Skriptes
I opt Optionsdateien fuumlr Solver
I txt Textdateien zB als externe Daten geschriebeneAusgabedateien ua
Diese Dateien werden in einem gemeinsamen Projektordner mit dergpr-Datei abgelegt
23 April 2016 Einfuumlhrung in GAMS 6 88
Einfuumlhrung - Projekte und Dateitypen
Projekte - gpr
I Projekt Sammlung zusammengehoumlriger Dateien (InputdatenModelle Outputdateien)
I Pfad bzw Verzeichnis der Projektdatei ist default fuumlr alle von GAMSim Rahmen der Projektdatei erzeugten Dateien
I Endung von Projektdateien gpr
I Menuuml File Project New oder Open
I aktuell geoumlnetes Projekt wird in der Titelleiste der GAMSIDE(blauer Bereich ganz oben) angezeigt
23 April 2016 Einfuumlhrung in GAMS 7 88
Einfuumlhrung - Projekte und Dateitypen
Skripte - gms
I Enhaumllt das Modell und alle zugehoumlrigen Deklarationen
I Endung von Projektdateien gms
I File New
I File Save as (dort wo aktuelle gpr liegt)
I Daten koumlnnen in der gms Datei enthalten sein oder aus anderenQuellen integriert werden
23 April 2016 Einfuumlhrung in GAMS 8 88
Einfuumlhrung - GAMSIDE
Nuumltzliche HilfsmittelI unter Help benden sich viele hilfreiche Anleitungen insb
I GAMS Users GuideI Expanded GAMS Guide (McCarl)I Anleitungen zu den in GAMS verwendeten Solvern docssolvers
I Model Libraries groyumle Auswahl bereits programmierter Modelle
23 April 2016 Einfuumlhrung in GAMS 9 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 10 88
Beispiel
max F = 90x1 + 50x2 + 70x3 + 40x4 (1)
st
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 Modellstruktur
I Daten durch Symbole repraumlsentieren
23 April 2016 Einfuumlhrung in GAMS 11 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
st
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)
stX
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 Zielfunktionskoezient der Alternative jI aij Kapazitaumltsparameter bzgl Alternative j in Restriktion iI bi Kapazitaumltsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewaumlhlte Menge der Alternative j
Gleichungsbloumlcke
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 7 88
Einfuumlhrung - Projekte und Dateitypen
Skripte - gms
I Enhaumllt das Modell und alle zugehoumlrigen Deklarationen
I Endung von Projektdateien gms
I File New
I File Save as (dort wo aktuelle gpr liegt)
I Daten koumlnnen in der gms Datei enthalten sein oder aus anderenQuellen integriert werden
23 April 2016 Einfuumlhrung in GAMS 8 88
Einfuumlhrung - GAMSIDE
Nuumltzliche HilfsmittelI unter Help benden sich viele hilfreiche Anleitungen insb
I GAMS Users GuideI Expanded GAMS Guide (McCarl)I Anleitungen zu den in GAMS verwendeten Solvern docssolvers
I Model Libraries groyumle Auswahl bereits programmierter Modelle
23 April 2016 Einfuumlhrung in GAMS 9 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 10 88
Beispiel
max F = 90x1 + 50x2 + 70x3 + 40x4 (1)
st
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 Modellstruktur
I Daten durch Symbole repraumlsentieren
23 April 2016 Einfuumlhrung in GAMS 11 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
st
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)
stX
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 Zielfunktionskoezient der Alternative jI aij Kapazitaumltsparameter bzgl Alternative j in Restriktion iI bi Kapazitaumltsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewaumlhlte Menge der Alternative j
Gleichungsbloumlcke
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 9 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 10 88
Beispiel
max F = 90x1 + 50x2 + 70x3 + 40x4 (1)
st
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 Modellstruktur
I Daten durch Symbole repraumlsentieren
23 April 2016 Einfuumlhrung in GAMS 11 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
st
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)
stX
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 Zielfunktionskoezient der Alternative jI aij Kapazitaumltsparameter bzgl Alternative j in Restriktion iI bi Kapazitaumltsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewaumlhlte Menge der Alternative j
Gleichungsbloumlcke
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 11 88
Beispiel
max F = c1x1 + c2x2 + c3x3 + c4x4 (6)
st
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)
stX
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 Zielfunktionskoezient der Alternative jI aij Kapazitaumltsparameter bzgl Alternative j in Restriktion iI bi Kapazitaumltsgrenze von Restriktion (Ressource) i
VariablenI F ZielfunktionsvariableI xj gewaumlhlte Menge der Alternative j
Gleichungsbloumlcke
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 13 88
Uumlbertragung formaler Modelle in GAMS Syntax
Mathematisches Modell GAMS Modell
Mengen sets (Daten)Parameter parameters (Daten)
tables (Daten)scalars (Daten)
Variablen variables (Modellstruktur)Zielfunktion equations (Modellstruktur)Restriktionen equations (Modellstruktur)
Einfache Aumlnderung der Inputdaten ohne Aumlnderung der Modellstruktur
23 April 2016 Einfuumlhrung in GAMS 14 88
Syntax
Erzeugen von entities (zB Parameter)TypDesEntities NameDesEntities Kommentar Wertzuweisung
I Deklaration (TypDesEntities NameDesEntities ) und Denition(Wertzuweisung) koumlnnen wie hier zusammen oder aber seperaterfolgen (Ausnahme equationsvariables immer seperat)
I Mehrere entities gleichen Typs koumlnnen seperat mit je einerAnweisung oder zusammen in einer Anweisung deklariert werden(Trennung durch Komma oder Zeilenumbruch)
I Bezeichner (NameDesEntities) muumlssen mit einem Buchstabenbeginnen dem bis zu 30 weitere Zeichen folgen koumlnnen
I keine Unterscheidung zwischen Groyuml- und Kleinschreibung
I WICHTIG Bezeichner (engl Identifyer) muumlssen eindeutig sein
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung 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 abschlieyumlen umFehler zu vermeiden
I Kommas in Dezimalzahlen werden durch Punkte dargestelltI Kommentare zur Dokumentation
I direkt bei der Deklaration der sets parameter equations uswI gesamte Zeile am Zeilenanfang
I Bestimmte Schluumlsselworte und Symbole sind reserviert und duumlrfennicht anderweitig verwendet werden
23 April 2016 Einfuumlhrung in GAMS 16 88
Mengen
I J Spalten (Auswahlalternativen) j = 1 2 3 4
I I Zeilen i = 1 2 3
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
Hinweis
Deklarationen und Denitionen sind nicht case-sensitive AlsSchluumlsselwort wird set und sets erkannt
SeT
i Menge der Restriktionen 123
J Menge der Spalten 14
Mengenelemente koumlnnen auch Strings (Zeichenketten) sein - bspwStaumldtenamen
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 17 88
Parameter (1)
I cj Zielfunktionskoezient der Alternative j
I bi Kapazitaumltsgrenze 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 auml t s g r e n z e 1 30
2 24
3 36
Trennung der einzelnen Eintraumlge durch Kommasetzung oder Leerzeilenmoumlglich
23 April 2016 Einfuumlhrung in GAMS 18 88
Parameter (2)
I ai j Kapazitaumltsparameter 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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
Ebenfalls moumlglich
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
parameter a(ij) Koeffizientenmatrix
11 2 12 -1 13 1 14 2
21 1 22 2 23 3 24 -1
31 3 32 2 33 -1 34 2
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 19 88
Variablen
I F Zielfunktionsvariable 1 F 1
I xj gewaumlhlte Menge der Alternative j xj 0 8i 2 I
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
Variablentyp Lower Bound (lo) Upper Bound (up) Anmerkung
free 1 +1 Beide Schranken veraumlnderbarpositive 0 +1 obere Schranke veraumlnderbarnegative 1 0 untere Schranke veraumlnderbarbinary 0 1 diskret Schranken sind xinteger 0 100 diskret beide Schranken veraumlnderbar
23 April 2016 Einfuumlhrung in GAMS 20 88
Gleichungen
Deklaration einer Gleichung mit einem Bezeichner und optional einem
Kommentar erfolgt separat vor der Denition Die Deklaration muss mit einem
Semikolon abgeschlossen werden
max F =X
j
cjxj (14)
stX
j
aijxj bi 8i 2 I (15)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 21 88
Equations
Hinweise zu Equations
I Deklaration separat vor Denition
I Denition einer Gleichung durch
I Die Domain eines Gleichungsblocks wird wie bei anderen entitiesdurch eine Klammer () nach dem Bezeichner angegeben Im Beispielwird Gleichung Kapazit fuumlr alle Elemente in i aufgestellt (8i 2 I )Der Block Kapazit(i) enthaumllt also GleichungenI Kapazit(1)I Kapazit(2)I Kapazit(3)
23 April 2016 Einfuumlhrung in GAMS 22 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 23 88
Modell
I Equations koumlnnen zu einem Model zusammengefasst werden
I Wie bei anderen entities kann ein Kommentar vor der Denitioneingefuumlgt werden
I Die Wertzuweisung erfolgt durch auisten der equations oder durchall
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Es koumlnnen mehrere Modelle in einem gms - Skript deniert werden
Umsetzung in GAMS - Beispiel1gms
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
solve Beispiel1 maximizing F using lp
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 25 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 26 88
Loumlsen des Optimierungsproblems
I Uumlbergabe des so denierten Optimierungsmodells an einen Solver
I Im Solver sind Loumlsungsverfahren implementiert (zB SimplexSchnittebenenverfahren ua)
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model Beispiel1 ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
Schluumlsselwort zum Aufruf des Solvers solve
dahinter Bestimmung
I des zu berechnenden ModellsI der Optimierungsrichtung moumlglich
I maximizingI minimizing
I der zu optimierenden Zielfunktionsvariable
I des Modelltyps
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 27 88
Modelltypen und Solver
Kuumlrzel Modelltyp
lp linear programming
nlp nonlinear programmingmip mixed integer programming
rmip relaxed mixed integer programming
minlp mixed integer nonlinear programmingrminlp relaxed mixed integer nonlinear programmingmcp mixed complementarity problemscns constrained nonlinear systems
I Zunaumlchst Betrachtung von Modellen der linearen Programmierung (lp) und derganzzahligen Programmierung (mip)
I Der bei uns dafuumlr verwendete Standardsolver ist IBM Cplex
I Beim Loumlsen von mip-Modellen sind weitere Einstellungen moumlglich (vgl Folie 51)
I Mehr Informationen uumlber Solver nden sich unter Help Solver Manual
23 April 2016 Einfuumlhrung in GAMS 28 88
Compile Run
I Kompilieren Shift + F9
Menuuml File Compile
I Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft
I Gams starten F9
Menuuml File RunI Das Skript wird
kompiliert und auf Fehler
uumlberpruumlft Das Modell
wird fuumlr den Solver
vorbereitet Danach wird
der Solver aufgerufen
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 29 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 30 88
Uumlbersicht
I Waumlhrend des Gamslaufes wird im Process-Window ein Protokoll desGamslaufes angezeigt (log Datei)
I Nach Beendigung des Laufes wird standardmaumlyumlig das Listingangezeigt (lst - Datei im Verzeichnis der Projektdatei)
I Saumlmtliche unmittelbar relevanten Groumlyumlen lassen sich daraus ablesenDas 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 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung 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 m
Equation Listing SOLVE Beispiel1 Using LP From line 41
---- Zielfkt =E= Zielfunktion
Zielfkt F - 90x(1) - 50x(2) - 70x(3) - 40x(4) =E= 0 (LHS = 0)
---- Kapazit =L= Kapazitaumltsrestriktion
Kapazit(1) 2x(1) - x(2) + x(3) + 2x(4) =L= 30 (LHS = 0)
Kapazit(2) x(1) + 2x(2) + 3x(3) - x(4) =L= 24 (LHS = 0)
Kapazit(3) 3x(1) + 2x(2) - x(3) + 2x(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 SeiteKonstanten
I Initialisierung alle Variablen xj auf kleinst moumlglichem Wert (0)
I Falls eine Gleichung durch die Initialisierung unzulaumlssig wird wird zusaumltzlich(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 Koezienten derVariablen in allen Equations(Spalte in derKoezientenmatrix)
(b)
(a)
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung 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 m
Model Statistics SOLVE Beispiel1 Using LP From line 41
MODEL STATISTICS
BLOCKS OF EQUATIONS 2 SINGLE EQUATIONS 4
BLOCKS OF VARIABLES 2 SINGLE VARIABLES 5
NON ZERO ELEMENTS 17
GENERATION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
EXECUTION TIME = 0156 SECONDS 4 Mb WEX235-235 Aug 17 2010
I Blocks of Equations Anzahl Gleichungsbloumlcke (hier 1 Zielfunktion (11) + 1Kapazitaumltsbeschraumlnkung (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 Koezientenmatrix (hier
3 x 4 aus den Nebenbedingungen + 1 x 5 aus der ZF)I Generation time Zeit die GAMS benoumltigt hat um das Modell fuumlr den Solver
aufzubereiten
23 April 2016 Einfuumlhrung 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 gehoumlren
a) Solve Summary
b) SolEqu Solution Report Equations
c) SolVar Solution Report Variables
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung 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 m
Solution Report SOLVE Beispiel1 Using LP From line 41
S O L V E S U M M A R Y
MODEL Beispiel1 OBJECTIVE F
TYPE LP DIRECTION MAXIMIZE
SOLVER CPLEX FROM LINE 41
SOLVER STATUS 1 Normal Completion
MODEL STATUS 1 Optimal
OBJECTIVE VALUE 15133333
RESOURCE USAGE LIMIT 0129 1000000
ITERATION COUNT LIMIT 4 2000000000
IBM ILOG CPLEX Aug 18 2010 2352 WEX 1914319383 WEI x86_64MS Windows
Cplex 12200 GAMS Link 34
I Model Direction Objective Type entsprechen dem Solve-Statement des gms Skriptes
vgl Folie 27
I Solver Status Model Status Ruumlckmeldung des Solvers - verschiedeneStatusmeldungen moumlglich - vgl GAMS Guide - Help expanded gams guide Hierwurde das Modell optimal geloumlst
I Objective Value ZielfunktionswertI resource usage Zeitverbrauch des Solvers beim Loumlsen des Modells (CPU s)I iteration count Benoumltigte Iterationen des Solvers zum Loumlsen des Modells
23 April 2016 Einfuumlhrung in GAMS 36 88
b) Solution Report Equations
LOWER LEVEL UPPER MARGINAL
---- EQU Zielfkt 1000
Zielfkt Zielfunktion
---- EQU Kapazit Kapazitaumltsrestriktion
LOWER LEVEL UPPER MARGINAL
1 -INF 30000 30000 18148
2 -INF 24000 24000 21481
3 -INF 36000 36000 12593
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 Gleichung
I Angabe der Marginals Simplexmultiplikatoren der RestriktionI Wie veraumlndert sich der Zielfunktionswert bei einer marginalen Veraumlnderung der
Konstanten Veraumlnderung um ∆ iI Hier wuumlrde der ZF steigen da Kapazitaumltsgrenze der Restriktion erhoumlht wuumlrde
ein besserer Zielfunktionswert waumlre moumlglich
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 37 88
c) Solution Report Variables
LOWER LEVEL UPPER MARGINAL
---- VAR F -INF 1513333 +INF
F Zielfunktionswert
---- VAR x gewaumlhlte Menge von Alternative j
LOWER LEVEL UPPER MARGINAL
1 +INF -5556
2 7333 +INF
3 8000 +INF
4 14667 +INF
I Untere (LOWER) und obere (UPPER) Beschraumlnkung der VariableI LEVEL Wert der Variablen in der Loumlsung (optimaler Wert)
I MARGINAL Reduzierte KostenI wie veraumlndert sich der ZFW wenn die Variable um eine marginale Einheit ∆
erhoumlht wirdI Veraumlnderung um ∆ cj
23 April 2016 Einfuumlhrung in GAMS 38 88
Display AnweisungAusgabe gewuumlnschter Werte am Ende des Listings
Mit dem -Symbol am Zeilenbeginn koumlnnen Kommentare eingefuumlgt werden (grau)
sets
I Menge der Restriktionen 123
J Menge der Spalten 14
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 auml t s g r e n z e 1 30
2 24
3 36
table a(ij) Kapazitaumltskoeffizienten
1 2 3 4
1 2 -1 1 2
2 1 2 3 -1
3 3 2 -1 2
free variables
F Zielfunktionswert
positive variables
x(j) gewaumlhlte Menge von Alternative j
equations
Z i e l f k t Zielfunktion
K a p a z i t Kapazitaumltsrestriktion
Zielfkt F =E= sum(j c(j) x(j) )
Kapazit(i) sum(j a(ij) x(j) ) =L= b(i)
model B e i s p i e l 1 mein Kommentar zum Modell ZielfktKapazit
ebenso moumlglich
model Beispiel1 all
solve Beispiel1 maximizing F using lp
display
Fl xl xm a
---- 44 VARIABLE FL = 1513333 Zielfunktionswert
---- 44 VARIABLE xL gewaumlhlte Menge von Alternative j
2 7333 3 8000 4 14667
---- 44 VARIABLE xM gewaumlhlte Menge von Alternative j
1 -5556
---- 44 PARAMETER a Kapazitaumltskoeffizienten
1 2 3 4
1 2000 -1000 1000 2000
2 1000 2000 3000 -1000
3 3000 2000 -1000 2000
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 39 88
Fehlerhinweise - Logle
Logle (log-Datei)
I Fehlermeldungen werden mit Zeilenangabe in der Reihenfolge ihresAuftretens im logle-Fenster angezeigt
I Doppelklick auf die rot markierte Fehlermeldung fuumlhrt zurfehlerhaften Zeile in der gms-Datei
I Ein Fehler fuumlhrt oft zu mehreren Fehlermeldungen die erste
Fehlermeldung ist die wichtigste
Echo Print (im Listing)
I Fehlernummer erscheint im Echo Print direkt in der Zeile unterhalbder (scheinbar) fehlerhaften Zeile an entsprechender Stelle und dieZeile wird durch markiert
I Am Ende des Echo Prints werden alle aufgetretenen Fehlernummernmit Beschreibung des Fehlers aufgefuumlhrt
23 April 2016 Einfuumlhrung in GAMS 40 88
Orientierung
1 Einfuumlhrung
2 Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
3 Loumlsen von Optimierungsproblemen in GAMS
4 Auswertung von Rechenergebnissen
5 Mehr zur GAMS-Syntax
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 41 88
Sets - Elemente denieren
I Mengenelemente koumlnnen durch Strings deniert 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 Stadt5Stadt12
display Staedte Bezirke
---- 9 SET Staedte Menge der Staedte
Stadt5 Stadt6 Stadt7 Stadt8 Stadt9 Stadt10 Stadt11
Stadt12
---- 9 SET Bezirke Menge der Bezirke
Pankow Mitte Charlottenburg
23 April 2016 Einfuumlhrung in GAMS 42 88
Sets - Mehrere Namen fuumlr ein Set
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 50
Sets ndash Mehrere Namen fuumlr ein set
set i Knotenmenge 1 2 3 4 5 6
alias( i k l) 6543 2 1
bull Einem set duumlrfen beliebig viele weitere Namen gegeben werden
bull Die Reihenfolge der Bezeichner in der alias-Anweisung ist egal
bull Beachte Nur ein Bezeichner darf vorher schon deklariert worden sein
=== lki
Trennung der Namen durch Komma
5 Weitere Aspekte51 Mengen
I Einem set duumlrfen 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 wordensein
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 43 88
Sets - Subsets denieren
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 51
Sets ndash Teilmenge aus einem uumlbergeordneten set - subset
sets i Knotenmenge 16
q(i) Startknoten 1
Ist eine Menge von Elementen eine Teilmenge einer uumlbergeordnetenMenge empfiehlt es sich die uumlbergeordnete 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 durchgefuumlhrt d h es wird uumlberpruumlft ob die Elemente der Teilmenge wirklich Elemente der uumlbergeordneten Menge sind
Bezeichner der uumlbergeordneten Menge
5 Weitere Aspekte51 Mengen
12
34
6
5
q ist eine Teilmenge (subset) von i - es enthaumllt hier ein Element der uumlbergeordnetenMenge Es empehlt sich die uumlbergeordnete Menge in Klammern anzugeben umFehler zu vermeiden die durch eine fehlerhafte Angabe der Elemente der Teilmengeentstehen
Bei der Compilierung wird uumlberpruumlft ob Elemente der Teilmenge wirklich Elementeder uumlbergeordneten Menge sind Wuumlrde q hier bspw das Element 7 zugewiesenkaumlme es zu einer Fehlermeldung
23 April 2016 Einfuumlhrung in GAMS 44 88
Sets - Zuweisung von Elementen nach der Deklaration
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 52
Sets - Zuweisung (assignment) von Elementen nach Deklaration
sets i Knotenmenge 16
q(i) Quelle(Startknoten)
s(i) Senke
r(i) Restknoten (weder Quelle noch Senke)
q(1)= yes
Zugehoumlrigkeit eines Elements zu einer Menge ja (yes) (=Hinzufuumlgen) oder nein (no) (=Entfernen)
Bezug auf einzelne Elemente Name des Elements in oder
Bei Subsets Bezug auf alle Elemente des uumlbergeordneten Sets Bezeichner des uumlbergeordneten Sets
5 Weitere Aspekte 51 Mengen
Entfernen der Quelle
r(i)= yes
r(1)= no
r(6)= no
s(6)= yes
6543 2 1r
6543 2 r
543 2 rEntfernen der Senke
Durch diese Art der Elementzuweisung werden Mengen dynamisch
1
2
3
4
6
5
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 45 88
Sets - Mehrdimensionale Mengen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Zusammenfassende Schreibweise zB
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 53
Sets ndash Mehrdimensionale sets
sets i Knotenmenge 1 2 3 4 5 6
p(ii) Pfeilmenge 12
13 24 26 34
56
45
set p(ii) Pfeilmenge 1(23)
2(46) 34
Zusammenfassende Schreibweise zB
5 Weitere Aspekte 51 Mengen
4(56)
Index 1 Index 2
Ein Pfeil verbindet zwei Knoten (=zwei Elemente aus der Menge Knoten) miteinander
Verbindung der Elemente durch
Bis zu 10 Dimensionen moumlglich
1
2
3
4
6
5 46
56
Bis zu 10 Dimensionen moumlglich
23 April 2016 Einfuumlhrung in GAMS 46 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
p1 p2 p3 p4
1a 10 0 15 5
1b 5 10 5 0
2a 0 0 0 5
2b 10 10 15 15
3a 10 0 5 10
3b 15 15 15 0
I Wertetabellen werden ohne Backslashes () deniert
I Tabellenformat muss eingehalten werden - Dateneintraumlge duumlrfen Spaltenstruktur nichtuumlberlappen
I mehrere Dimensionen koumlnnen durch verknuumlpft werden Im Beispiel ist tab1ap1 = 10
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 47 88
Parameter - mehrdimensionale Daten in Tabellenform
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
set
i 13
j ab
k p1p4
table tab(ijk) Eine Tabelle mit 3 Dimensionen
$include tabletxt
I Es kann nur eine table pro table-Anweisungdeklariert werden
I Tables koumlnnen bis zu 10 Dimensionen haben
I Groyumle Datenmengen koumlnnen in txt Dateienausgelagert werden
I Tabellenspalten durch Tabstop(Tabulatortaste) trennen Weitere Moumlglichkeiten zur Einbindung
externer Daten Help-Menuuml
23 April 2016 Einfuumlhrung in GAMS 48 88
Parameter - Wertzuweisung (dynamische Parameter)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 60
Verwendung vorhandener Daten zur Erzeugung neuer Daten
table d(sk) 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 Stuumlck und 100 km 05
parameter c(sk) Transportkosten pro Stuumlck zw s und k
c(sk) = d(sk) 100 f
Berechnung von c fuumlr jede Kombination aus s und k
auf konkrete Elemente wird uumlber Element Bezug genommen
5 Weitere Aspekte 52 Daten (Wertzuweisung)
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 49 88
Variablen - Veraumlndern des Wertebereiches
Sux Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx Fixierung untere und obere Schranke sind identisch
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 66
Variablen - Veraumlnderung des Wertebereichs
Suffix Bedeutung
lo untere Schranke (lower bound)
up obere Schranke (upper bound)
fx fester Wert (fixed value) ndash untere und obere Schranke sind identisch
xup(BDD) = 0
xlo(MK) = 100
xfx(HHH) = 50
Kunde in DD darf nicht von Standort B beliefert werden
Kunde in K muss mindestens 100 ME aus M erhalten
Kunde in H erhaumllt genau 50 ME aus HH
Variable Suffix Index bzw Indizes hier gilt nur fuumlr bestimmte Variablen
5 Weitere Aspekte 53 Variablen
23 April 2016 Einfuumlhrung in GAMS 50 88
Loumlsen gemischt ganzzahliger Modelle
I Modelle die ganzzahlige Variablen beinhalten werden als MIP- mixed integer program - bezeichnet
I derartige Modelle erfordern idR einen wesentlich houmlherenRechenaufwand als lineare Porgramme - uU muumlssen sehr viele LPsgeloumlst 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 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 51 88
Summen Produkte und Operatoren
Summen werden durch das Schluumlsselwort sum() deniert Innerhalb derKlammer steht zuerst der Index uumlber den summiert wird Darauf folgtder Summenterm Produkte werden analog gebildet
Beispiel zur Summenbildung sum()
sum(j x(j) - y(j) )
Eine Summe uumlber 2 Mengen -
Indices muumlssen eingeklammert werden
sum((kl) z(kl) p(k) )
Beispiel zur Produktbildung
prod(j p(j) r(j) )
Operatoren
GAMS-Syntax Operator Bedeutung
=L= kleiner-gleich=G= groumlyumler-gleich=E= = ist-gleich
23 April 2016 Einfuumlhrung in GAMS 52 88
Funktionen - card() und ord()
Die ord()-Funktion ermittelt die Position eines Elements in der Menge
sets
bz PankowMarzahnKreuzberg
parameter
pos(bz) Position der Elemente in der Menge
Wird fuumlr jedes Element in bz ausgefuumlhrt
pos(bz) = ord(bz)
Anzeige
display pos
---- 9 PARAMETER pos Position der Elemente in der Menge
Pankow 1000 Marzahn 2000 Kreuzberg 3000
I Zugri auf einzelne Elemente einer Menge zB in Summen oder Schleifen
I ord() kann nicht auf dynamische sets angewendet werdenI dynamische Elementzuweisung durch yesno (vgl Folie 45)
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 53 88
Funktionen - card() und ord()
Die card()-Funktion ermittelt die Anzahl der Elemente einer Menge
sets
bz PankowMarzahnKreuzberg
parameter
a n z Anzahl der Elemente in der Menge
anz = card(bz)
Anzeige
display anz
---- 8 PARAMETER anz = 3000 Anzahl der Elemente i
n der Menge
I Formal wird die Anzahl der Elemente auch als Kardinalitaumlt bezeichnet
I Kardinalitaumlt der Menge J jJj
23 April 2016 Einfuumlhrung 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(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 7 PARAMETER MA = 1770000 Maximum
PARAMETER MI = -15000 Minimum
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 55 88
Funktionen - SMax SMin
Oftmals ist das Maximum bzw Minimum eines Parameters oder einerVariable gesucht
I Maximum-Funktion uumlber einenmehrere Indices
scalar
M A Maximum
M I M i n i m u m
MA = max(1592(35402)7)
MI = min(-1512-6)
display MAMI
set i B e i s p i e l m e n g e 15
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
smasmi
---- 21 PARAMETER SMA = 100000 Daten-Maximum
PARAMETER SMI = -3000 Daten-Minimum
23 April 2016 Einfuumlhrung in GAMS 56 88
Funktionen - Runden und Zufallszahlen
I Uniform(xy) erzeugt eine gleichverteilte (Pseudo)-Zufallszahl zwischen x und y
I eine ganzzahlige Zufallszahl liefert die Funktion Uniformint(xy)
---- 6 PARAMETER r Beispielparameter
A 1717 B 8433 C 5504 D 3011
---- 8 PARAMETER r Beispielparameter
A 3000 B 2000 C 3000 D 9000
---- 10 PARAMETER r Beispielparameter
A 0700 B 5000 C 10000 D 5800
Die Funktion round(xy) rundet die Zahl x auf y Stellen Mit oor(xy) und ceil(xy)
kann auch gezielt ab bzw aufgerundet werden
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung 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 fuumlr number ist 3141Wird der seed veraumlndert so werden neue (Pseudo)-Zufallszahlenerstellt
23 April 2016 Einfuumlhrung in GAMS 58 88
$-Bedingungen
Mit $() koumlnnen Bedingungen umgesetzt werden Beispielsweise kann dieWertzuweisung eines Parameters mit einer Bedingung verbunden werden
set
i 15
parameter
c(i) P a r a m e t e r
c(i)$(ord(i) gt 2) = 5
display c
---- 7 PARAMETER c Parameter
3 5000 4 5000 5 5000
Die Wertzuweisung auf der linken Seite wird nur dann vorgenommen wenn die
$( )-Bedingungen erfuumlllt ist Der Wert von ci wird also nur fuumlr diejenigen Elemente der
Menge i zugewiesen deren Position in der Menge i groumlyumler als 2 ist Fuumlr c1 und c2 wird
die Wertzuweisung demnach nicht aufgestellt (vglord()-Funktion Folie 53 )
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 59 88
$-Bedingungen
Auch Gleichungen koumlnnen an Bedingungen geknuumlpft werden
Im Beispiel soll eine Restriktion nur fuumlr 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( (ij) x(ij) ) =E= 1
23 April 2016 Einfuumlhrung in GAMS 60 88
$-Bedingungen - Operatoren
Logische Operatoren
Operator Bedeutung
not nichtand undor oderxor exklusiv oder
Numerische Operatoren
Operator Bedeutung
lt lt kleiner alsle lt= kleiner oder gleicheq = gleichne ltgt ungleichge gt= groumlyumler oder gleichgt gt groumlyumler
Beispiel
c(j)$( (ord(j) gt 6) AND (ord(j) ltgt 10) ) = 10
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 61 88
Optimalitaumltskriterium
Um die Loumlsungszeit eines MIPs zu verringern kann angegeben werden wie groyuml dieLuumlcke der zu ermittelnden Loumlsung zu der theoretisch noch bestmoumlglichen ganzzahligenLoumlsung sein darf Sobald im Branch-amp-Bound Prozess eine zulaumlssige ganzzahligeLoumlsung gefunden wird deren Zielfunktionswert eine geringere Dierenz zum nochtheoretisch bestmoumlglichen Ergebnis aufweist wird der Loumlsungsprozess mit derMeldung solution satises tolerances abgebrochen
Angabe der Luumlcke dem sog solution gap vor dem solve Statement
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
Bei Angabe einer maximalen relativen Luumlcke
Angabe eines absoluten gaps optca (criterium absolute)
option optca = 5000
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
5000
Angabe eines relativen gaps optcr (criterium relative)
option optcr = 01
maximale Abweichung der ermittelten Loumlsung von der Optimalloumlsung
10 Prozent
23 April 2016 Einfuumlhrung in GAMS 62 88
Optimalitaumltskriterium
Die Standardeinstellung ist optcr = 01 Soll bis zum Nachweis derOptimalitaumlt gerechnet werden muss optcr = 0 gesetzt werden
option optcr = 0
Option optca=4000
option optcr = 0
MIP status(101) integer optimal solution
Fixed MIP status(1) optimal
Proven optimal solution
MIP Solution 96394100000
Final Solve 96394100000
Best possible 96394100000
Absolute gap 0000000
Relative gap 0000000
Die maximale relative Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsung ist auf0 gesetzt Somit wird die optimale Loumlsung berechnetDer Rechenaufwand dafuumlr kann sehr groyuml sein
option optcr = 0
Option optca=4000
option optcr = 0MIP status(102) integer optimal tolerance
Fixed MIP status(1) optimal
Solution satisfies tolerances
MIP Solution 96394100000
Final Solve 96394100000
Best possible 92485800000
Absolute gap 3908300000
Relative gap 0040545
Die maximale absolute Abweichung desZielfunktionswertes von der bestmoumlglichen Loumlsungbetraumlgt 4000 Sobald eine ganzzahlige Loumlsung gefundenwird die eine Optimalitaumltsluumlcke von houmlchstens 4000aufweist wird die Berechnung beendet Um optca zusetzen muss zunaumlchst die Standardeinstellung fuumlr optcr
(Standard optcr=01) aufgehoben werden
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 63 88
Optionen - Rechenzeit und Iterationen
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 77
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
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 135199117
RESOURCE USAGE LIMIT 0109 1000000
ITERATION COUNT LIMIT 7 10000
Maximal zulaumlssiger Zeitbedarf zum Loumlsen (default 1000 Sekunden)
Maximal zulaumlssige Anzahl von Iterationen zum Loumlsen (default 10000 Iterationen)
vom Solver zur Loumlsung benoumltigte Zeit (CPU-Zeit)
vom Solver zur Loumlsung benoumltigte Iterationen
5 Weitere Aspekte 55 Loumlsen von Modellen
Ausschnitt A_4_5_biglst
23 April 2016 Einfuumlhrung in GAMS 64 88
Optionen - Rechenzeit und Iterationen
Bei groumlyumleren Problemen kann eine Erhoumlhung notwendig sein da bspwinnerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 78
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Cplex 1001 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 groumlszligeren Problemen kann eine Erhoumlhung notwendig sein da bspw innerhalb der vorgegebenen Zeit keine Loumlsung gefunden wird
Bsp fuumlr Zeituumlberschreitung
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 65 88
Optionen - Rechenzeit und Iterationen
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung durch modelreslim undmodeliterlim vor dem solve Statement
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 79
Veraumlndern der Zeit- bzw Iterationsbeschraumlnkung
Uumlber modelreslim bzw modeliterlim (irgendwo) vor dem solve-Statement
aufgabereslim=20000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Rechenzeit auf 20000 Sekunden
ITERATION COUNT LIMIT 7 50000
5 Weitere Aspekte
RESOURCE USAGE LIMIT 0109 20000000
Ausschnitt A_4_5_biglst
aufgabeiterlim=50000
solve schiffsbeladung maximizing F using mip
Erhoumlhung der Iterations-anzahl auf 50000
Ausschnitt A_4_5_biglst
55 Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 66 88
Hinweis zum Setzen von Optionen
Optionen koumlnnen in den meisten Faumlllen sowohl fuumlr alle Modelle desaktuellen GAMS-Laufes als auch fuumlr spezische Modelle gesetzt werdenBspw kann die Zahl der Iterationen entweder uumlber
option iterlim = 10000
fuumlr alle Modelle oder uumlber
modelnameiterlim = 10000
fuumlr ein spezisches Modell (modelname) gesetzt werden
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 67 88
Optionen - Sonstiges
Veraumlnderung der Anzahl der im Listing angezeigten Spalten (Variablen)bzw Zeilen (Equations) durch
option limcol = number
option limrow = number
23 April 2016 Einfuumlhrung in GAMS 68 88
Sonstiges
I $ sowie muumlssen immer an den Zeilenanfang (nicht einruumlcken)
I Mehrzeilge Kommentare koumlnnen zwischen $Ontext und $Offtext
geschrieben werden
I Titel koumlnnen durch $title Beispieltitel gesetzt werden
I $Exit beendet das Skript in der entsprechenden Zeile
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 69 88
If-Else Verzweigung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 90
Bedingungen ndash if-elseif-else
if( ylt5
x = 10
elseif ygt5
x = 2
else x = 0
)
bull elseif ist optional und kann beliebig oft verwendet werden
bull mehrere Bedingungen am besten gut einklammern
bull keine Deklaration und keine Definition von equations innerhalb if aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I elseif ist optional und kann beliebig oft verwendet werden
I mehrere Bedingungen am besten gut einklammern
I keine Deklaration und keine Denition von equations innerhalb ifaber zB solve zum mehrfachen Loumlsen von Modellen
Schleifen loop
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 87
6 Ablaufgestaltung in GAMS
Schleifen ndash loop (bdquowiederhole etwas fuumlr alle Elemente einer Mengeldquo)
loop( j
)
loop( j$(yl(j)=1)
Anweisungen
loop( i
Anweisungen
)
)
Anweisungen
loop((ij)
Anweisungen
)
bull keine Deklaration und keine Definition von equations innerhalb loop
geschachtelte Schleife wobei die Anweisungen nur fuumlr die Elemente von j ausgefuumlhrt werden fuumlr die die Variable y(j) den Wert 1 hat (bedingte loop)
Menge fuumlr deren Elemente die Anweisungen ausgefuumlhrt werden sollen
mehrere Indizes durch Komma trennen und in Klammern setzen
I wiederholte Anweisungen uumlber einen Index
I keine Deklaration und keine Denition von equations innerhalb loop
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
Schleifen for
Mehrmalige Ausfuumlhrung mit einem Zaumlhler
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 88
6 Ablaufgestaltung in GAMS
Schleifen ndash for (bdquowiederhole etwas genau x-malldquo)
scalar zaehler p 0
for( zaehler = 1 to 10
)
display p
p = p + 10
bull keine Deklaration und keine Definition von equations innerhalb for
---- 16 PARAMETER p = 100000
von Startwert bis Endwert
scalar zaehler p 0
for( zaehler = 1 to 10 by 2
)
p = p + 10
---- 16 PARAMETER p = 50000
Zaumlhler (scalar kein set)
default Erhoumlhung des Zaumlhlers pro Durchlauf um 1
Anweisung wird 10mal
ausgefuumlhrt
Erhoumlhung des Zaumlhlers pro Durchlauf um 2
Anweisung wird 5mal
ausgefuumlhrt
I keine Deklaration und keine Denition von equations innerhalb for
Schleifen while
Mehrmalige bedingte Ausfuumlhrung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 89
Schleifen ndash while (bdquowiederhole etwas solange wieldquo)
parameter p 0
while( plt=20
a(s) = a(s) + p a(s)
solve transport minimizing F using lp
a(s) = a(s)(1+p)
p = p + 5
)
wiederhole die folgenden Anweisungen solange die Bedingung erfuumlllt ist
Anweisungen die pro Durchlauf ausgefuumlhrt werden
bull keine Deklaration und keine Definition von equations innerhalb while aber zB solve zum mehrfachen Loumlsen von Modellen
6 Ablaufgestaltung in GAMS
I keine Deklaration und keine Denition von equations innerhalbwhile aber zB solve zum mehrfachen Loumlsen von Modellen
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 73 88
Ausgabedateien - Beispiel Transportplanung
I Mit GAMS koumlnnen txt - Ausgabedateien erstellt werden
I Deklaration + Denition einer Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
I Festlegung in welche Datei geschrieben werden soll
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 92
7 Gestaltung eigener Ausgabedateien
Deklaration + Definition einer Ausgabedatei
file out Ausgabe_Transporttxt
put out
Festlegung in welche Datei geschrieben werden soll
Schluumlsselwort zur Deklaration von Dateien
Eindeutiger Bezeichner (Name)
Dateiname mit Endung und ggf Pfadangabe ohne Pfad Speicherung am Speicherort der aktuellen gpr-Datei
Schluumlsselwort zum Schreiben in Dateien
Bezeichner der Datei in die ab sofort geschrieben werden soll
Erklaumlrungen am Beispiel Transportplanung
23 April 2016 Einfuumlhrung in GAMS 74 88
Ausgabedateien - Beispiel
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 93
file out Ausgabe_Transporttxt
put out
put Transportproblem
put ats
loop(s
put 3 stl 10 a(s)
)
put
Zeilenumbruch
Ausgabe von Text
erfolgt in hellip bzw
bdquofuumlr jedes Element aus der Menge s wiederholeldquo
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 Eintraumlge hinter put durch Komma (zu empfehlen) oder Leerzeichen
Schreibe Kommentar zum parameter a
Beispiel
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 75 88
Ausgabedateien - Beispiel Fortsetzung
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 94
put bts
loop(k
put 3 ktl 10 b(k)
)
put
put Transportkosten zl
put
put Transportmengen
put von8 nach8 Mengegt8
loop((sk)
put stl8 ktl8 xl(sk)82
)
Zielfunktionswert (Variable) schreiben
Anzahl der Stellen die fuumlr diesen Eintrag reserviert werden (Feldbreite)
Ausrichtung des Eintrags innerhalb der reservierten Feldbreite hier rechtsbuumlndig
Anzahl an Dezimalstellen von der Feldbreite hier 2 von 8 Stellen (nur bei numerischen Eintraumlgen)
Beispiel - Fortsetzung
7 Gestaltung eigener Ausgabedateien
Ausgabedateien - Beispiel Ergebnis
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 95
Transportproblem
Kapazitaumlt am Standort s
B 35000
HH 50000
M 55000
Nachfrage des Kunden k
DD 30000
F 30000
K 25000
S 15000
H 35000
Transportkosten 191000
Transportmengen
von nach Menge
B DD 30000
B F 000
B K 000
B S 000
B H 5000
HH DD 000
HH F 000
HH K 20000
HH S 000
HH H 30000
M DD 000
M F 30000
M K 5000
M S 15000
M H 000
Entstehende Ausgabedatei
Ausgabe_Transporttxt
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 77 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Quellcode
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 96
Transportmengen als Tabelle - Quellcode
put 100
loop(k
put ktlgt10
)
put
scalar i
for(i=1 to 60
put -
)
put
loop(s
put stl100
loop(k
put xl(sk)102
)
put
)
Tabellenkopf erzeugen
Strich uumlber gesamte Tabellenbreite erzeugen
geschachtelte loop-Anweisung zur Ausgabe einer Tabelle
Aumluszligerer loop Zeilen
Innerer loop Spalten
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 78 88
Ausgabedateien - Beispiel Fortsetzung
Transportmengen als Tabelle - Ausgabedatei
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 97
DD F K S H
------------------------------------------------------------
B 30000 000 000 000 5000
HH 000 000 20000 000 30000
M 000 30000 5000 15000 000
Transportmengen als Tabelle - Ausgabedatei
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 79 88
Ausgabedateien - Hinweise
I Normalen Text zwischen zwei Anfuumlhrungszeichen (Text) schreiben
I Elementnamen Mengetl
I Elementkommentare Mengets
I WertSchranken von variablesequationsBezeichnerlmloup(Index)
I Moumlglichkeit zur einfachen Ausgabe formatierter Dateien zumEinlesen in Excel oder Datenbanken (leerzeichen- tabstopp- bzwkommagetrennt)
23 April 2016 Einfuumlhrung in GAMS 80 88
Ausgabedateien - Standardformatierung
Standardformat Feldbreite Ausrichtung
Text 0 Stellen linksbuumlndigNamen 12 Stellen linksbuumlndignumerische Objekte 12 Stellen rechtsbuumlndigSet-Elemente 12 Stellen rechtsbuumlndig
Anpassung fuumlr einzelne Output-Elemente (vgl Folie 77)
TU Dresden Okt 2009 copy Andrea Foumlrster TU Dresden Folie 99
bull Text linksbuumlndig 0 Stellen
bull Namen linksbuumlndig 12 Stellen
bull numerische Objekte rechtsbuumlndig 12 Stellen
bull Elemente von Mengen rechtsbuumlndig 12 Stellen
Formatierung von Ausgabeobjekten (lokal)
Standardmaumlszligig Ausrichtung Feldbreite
Anpassung fuumlr einzelne Outputobjekte
Objekt Ausrichtung FeldbreiteDezimalstellen
Ausgabe-objekt
Optional gt Rechtsbuumlndig lt Linksbuumlndig ltgt zentriert
Anzahl der Stellen des reservierten Platzes
Anzahl der Dezimalstellen an der Gesamtzahl der Stellen
7 Gestaltung eigener Ausgabedateien
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 81 88
Gams Data Exchange
I Mit GAMS koumlnnen Daten aus MS Excel eingelesen und in eineExcel-Datei geschrieben werden
I Dazu wird die Funktion GDXXRW verwendet
I Der Datenaustausch erfolgt uumlber gdx (gams data exchange) Dateien
GAMS-SkriptMS Excel-Datei GDX-file
Gams Data Exchange
23 April 2016 Einfuumlhrung in GAMS 82 88
GDX Daten
GDX-Dateien speichern Daten in fuumlr GAMS lesbarer Form Beispiel fuumlr eine GDX Datei
gdx Dateien koumlnnen durch FileOpen geoumlffnet werden
Auflistung der Dateneintraumlge mit Typ (setparvar)Anzahl an Dimensionen und Anzahl Elementen
Details des ausgewaumlhlten Dateneintrags
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 83 88
Einlesen und Schreiben von GDX Daten
Vor der Verwendung muumlssen die GDX-Daten dem Gamsskript bekannt gemachtwerden Dafuumlr wird die gdx-Datei geoumlnet 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
display Staedte Einwohner
---- 8 SET Staedte
Hamburg Berlin Dresden London Dallas
---- 8 PARAMETER Einwohner
Hamburg 1800 Berlin 3400 Dresden 0520 London 8300
Dallas 1200
23 April 2016 Einfuumlhrung 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 Datensatzgdx
$load Staedte Einwohner
$gdxin
Einwohner(Staedte) = Einwohner(Staedte)2
execute_unload Datensatz_neugdx Staedte Einwohner
Werden dabei keine Daten angegeben so werden alle derzeit geladenen Daten nachgdx entladen
Aktualisierte Parameter nach dem GAMS-Lauf
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 85 88
Datenaustausch
Der Datenaustausch von GDX zu MS Excel erfolgt uumlber das Gams-ProgrammGDXXRWexecute gdxxrwexe Datensatzgdx o=meinWBxlsx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
execute gdxxrwexe Datensatzgdx o=meinWBxlsx par=Einwohner rng=Tabelle1C2G2 rdim=0 cdim=1
Ergebnis in Tabelle1 von meinWBxlsx
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 geoumlnet sein (Schreibschutz)
23 April 2016 Einfuumlhrung in GAMS 86 88
Datenaustausch
Der Datenaustausch von MS Excel zu GDX wird ebenfalls uumlber GDXXRW realisiert$call gdxxrw meinWBxlsx o=Inputgdx set=Staedte rng=Tabelle1A1A5 rdim=1 cdim=0
Es wird die gdx Datei erstellt (uumlberschrieben) und mit Werten gefuumlllt
I Liest man Mengen ein kann in der Tabellenzelle nebenunter demMengenelement ein Kommentar angegeben werden
I es gibt verschiedene Optionen zum Einlesen
I SE=0 Skip Empty erspart die Angabe eines genauen rng (wie oben A1A5) - es istmoumlglich nur die erste Zelle des Bereiches anzugeben (zB rng=Tabelle1A1)Sobald die durch SE angegebene Anzahl an leeren Zellen erreicht ist wird dasEinlesen des aktuellen Datenelements beendet
I values=yn fuumlr Mengenelemente es werden nur Elemente akzeptiert derenKommentarzelle YESY oder 1 enthaumllt Mit 0NNO koumlnnen damiteinzelne Set-Elemente ausgeschaltet werden
I enthaumllt die Tabelle Duplikate kann dset= anstelle von set= verwendetwerden um Mengenelemente einzulesen
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
23 April 2016 Einfuumlhrung in GAMS 87 88
Datenaustausch - Fortgeschrittene Methoden
I kompakte Schreibweise des GDXXRW-Aufrufes durch Verwendungeines Index-Blattes innerhalb der zu lesenden Excelmappe
I Zusammenfuumlhrung mehrerer GDX-Dateien zu einer GDX-Datei (gdxmerge)
I Mehrdimensionale Parameter und Mengen
Ausfuumlhrliche Darstellung fortgeschrittener Methoden des Datenaustausches nden sichmit Beispielen im Expanded Gams Guide von Bruce McCarl
I Tipp Fuumlr statische Daten ist das Einbinden einer txt Datei mit $Include der einfachsteWeg externe Daten einzubinden Excel-Tabellen lassen sich als txt Dateien exportieren
23 April 2016 Einfuumlhrung in GAMS 88 88
Quellen
I Foumlrster A (2009) Foliensatz zur Gams-Uumlbung TechnischeUniversitaumlt Dresden
I McCarl B A (2006) Expanded GAMS Guide(httpwwwgamscom)
I GAMS Development Corporation (Hrsg) (2006) GAMS - A UsersGuide Books on Demand Norderstedt (bzwhttpwwwgamscom o GAMS - Menuuml Help)
I GAMS IDE Documentation (httpwwwgamscom bzwGAMS-Menuuml Help-Help Topics)
I GAMS Homepage httpwwwgamscom
- Einfuumlhrung
- Uumlberfuumlhrung formaler Modelle in GAMS-Syntax
- Loumlsen von Optimierungsproblemen in GAMS
- Auswertung von Rechenergebnissen
- Mehr zur GAMS-Syntax
-
- Modellsyntax
- Grundlegende Funktionen
- $-Conditionals
- Skript-Optionen
- Schleifen und Verzweigungen
- Eigene Ausgabedateien
- GDX und Datenaustausch mit MS Excel
- Quellen
-
Tabelle1
Tabelle2
indextab
rdim | cdim | dim | |||||||||||
set | i0 | Tabelle1a2d2 | 0 | 1 | 1 | ||||||||
set | i1 | Tabelle1a2d3 | 0 | 1 | 1 | values=yn | |||||||
dset | i2 | Tabelle1a6f6 | 0 | 1 | 1 | ||||||||
set | i3 | Tabelle1a9c10 | 0 | 1 | 1 | ||||||||
se=0 | |||||||||||||
set | i4 | Tabelle1a13 | 0 | 1 | 1 | ||||||||
dset | j1 | Tabelle1a17 | 1 | 0 | 1 |
a(ij) | 1 | 2 | 3 | 4 | 5 | |||||||||||
1 | 25 | 188 | 90 | 1 | 6 | |||||||||||
2 | 10 | 12 | 2 | 5 | 6 | |||||||||||
3 | 100 | 20 | 20 | 55 | 6 | |||||||||||
i | b(i) | |||||||||||||||
1 | 9 | |||||||||||||||
2 | 5 | |||||||||||||||
3 | 2000 | |||||||||||||||
P(klm) | alpha | beta | alpha | beta | alpha | beta | lt- Menge L | |||||||||
1 | 1 | 2 | 2 | 3 | 3 | lt- Menge M | ||||||||||
Menge K -gt | A | 8 | 80 | 59 | 12 | 02 | 05 | |||||||||
B | 4 | 12 | 41 | 12 | 065 | 035 | ||||||||||
C | 3 | 55 | 60 | 44 | 055 | 04 |
Menge i0 und i1 | |||||||||||
Zug | Auto | Flugzeug | Dreirad | ||||||||
1 | 1 | 0 | 0 | ||||||||
Menge i2 (mit Duplikaten) | |||||||||||
Zug | Auto | Flugzeug | Flugzeug | Auto | Skateboard | ||||||
Elemente mit Kommentar | |||||||||||
TXL | LAX | STL | |||||||||
Bln-Tegel | Los Angeles | St Louis | |||||||||
Menge mit Luumlcke | |||||||||||
Berlin | Muumlnchen | Hamburg | Schwerin | Wiesbaden | |||||||
Menge j1 | |||||||||||
Frosch | erstes Tier | ||||||||||
Lurch | zweites Tier | ||||||||||
Echse | drittes Tier | ||||||||||
Elefant | viertes Tier | ||||||||||
Frosch | fuumlnftes Tier | ||||||||||
Frosch | sechstes Tier | ||||||||||
Lurch | siebtes Tier | ||||||||||
Zebra | |||||||||||
Loumlwe | achtes Tier | ||||||||||
Schlange | neuntes Tier |
Tabelle2
indextab
rdim | cdim | dim | |||||||||||
set | i0 | Tabelle1a2d2 | 0 | 1 | 1 | ||||||||
set | i1 | Tabelle1a2d3 | 0 | 1 | 1 | values=yn | |||||||
dset | i2 | Tabelle1a6f6 | 0 | 1 | 1 | ||||||||
set | i3 | Tabelle1a9c10 | 0 | 1 | 1 | ||||||||
se=0 | |||||||||||||
set | i4 | Tabelle1a13 | 0 | 1 | 1 | ||||||||
dset | j1 | Tabelle1a17 | 1 | 0 | 1 |
a(ij) | 1 | 2 | 3 | 4 | 5 | |||||||||||
1 | 25 | 188 | 90 | 1 | 6 | |||||||||||
2 | 10 | 12 | 2 | 5 | 6 | |||||||||||
3 | 100 | 20 | 20 | 55 | 6 | |||||||||||
i | b(i) | |||||||||||||||
1 | 9 | |||||||||||||||
2 | 5 | |||||||||||||||
3 | 2000 | |||||||||||||||
P(klm) | alpha | beta | alpha | beta | alpha | beta | lt- Menge L | |||||||||
1 | 1 | 2 | 2 | 3 | 3 | lt- Menge M | ||||||||||
Menge K -gt | A | 8 | 80 | 59 | 12 | 02 | 05 | |||||||||
B | 4 | 12 | 41 | 12 | 065 | 035 | ||||||||||
C | 3 | 55 | 60 | 44 | 055 | 04 |
indextab
rdim | cdim | dim | |||||||||||
set | i0 | Tabelle1a2d2 | 0 | 1 | 1 | ||||||||
set | i1 | Tabelle1a2d3 | 0 | 1 | 1 | values=yn | |||||||
dset | i2 | Tabelle1a6f6 | 0 | 1 | 1 | ||||||||
set | i3 | Tabelle1a9c10 | 0 | 1 | 1 | ||||||||
se=0 | |||||||||||||
set | i4 | Tabelle1a13 | 0 | 1 | 1 | ||||||||
dset | j1 | Tabelle1a17 | 1 | 0 | 1 |