Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 /...

44

Transcript of Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 /...

Page 1: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 2: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 3: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 4: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 5: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 6: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 7: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 8: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 9: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 10: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 11: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 12: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 13: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 14: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 15: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 16: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 17: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 18: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 19: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 20: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 21: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 22: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 23: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 24: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 25: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 26: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 27: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 28: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 29: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 30: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 31: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 32: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 33: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 34: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 35: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 36: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 37: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 38: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 39: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 40: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 41: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 42: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 43: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 44: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

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
        • lesen_aus_excel_Mengen_kompakt_textfilegms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls indextxt13$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          lesen_aus_excel_Parametergms

          set13 i Menge der Zeilen (wird ausgelesen)13 j Menge der Spalten 151313parameter13a(ij) zweidimensionaler Parameter13b(i) eindimensionaler Parameter1313$call gdxxrw beispielxls set=i rng=Tabelle2a3a5 rdim=113$gdxin beispielgdx13$load i13$gdxin1313$call gdxxrw beispielxls par=a rng=Tabelle2a2f5 dim=213$gdxin beispielgdx13$load a13$gdxin1313$call gdxxrw beispielxls par=b rng=Tabelle2a11b13 rdim=1 cdim=013$GDXin beispielgdx13$load b13$gdxin1313display13i a b131313 Mehrdimensionale Parameter13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P131313

          schreiben_in_excelgms

          Schreiben in Excel1313 Mehrdimensionale Parameter einlesen13set13 K ABC13 L alphabeta13 M 13 13Parameter13P(klm)13$call gdxxrw beispielxls par=P rng=Tabelle2b18h22 rdim=1 cdim=213$GDXin beispielgdx13$load P13$gdxin13display P1313Mehrdimensionalen Parameter wieder in Excel schreiben13P(klm) = -1P(klm)13execute_unload unloadmegdx P13execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b25h29 rdim=1 cdim=213execute gdxxrwexe unloadmegdx o=beispielxls par=P rng=Tabelle2b31

          beispielxls

          Tabelle1

          Tabelle2

          indextab

          gdxbeispielgpr

          [PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

          indextxt

          set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

          lesen_aus_excel_Mengengms

          AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

          lesen_aus_excel_Mengen_kompakt_indexsheetgms

          sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

          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
Page 45: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

Tabelle1

Tabelle2

indextab

gdxbeispielgpr

[PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

indextxt

set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

lesen_aus_excel_Mengengms

AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

lesen_aus_excel_Mengen_kompakt_indexsheetgms

sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

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
Page 46: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

Tabelle2

indextab

gdxbeispielgpr

[PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

indextxt

set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

lesen_aus_excel_Mengengms

AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

lesen_aus_excel_Mengen_kompakt_indexsheetgms

sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

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
Page 47: Einführung in die mathematische Modellierung mit der ... · 23. April 2016 Einführung in GAMS 5 / 88 Einführung - Dateitypen Zu einem GAMS-Projekt gehören folgende Dateien: I.gpr

indextab

gdxbeispielgpr

[PROJECT]1313[GDXDISP distance2 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP i3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i4a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i5 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6a Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i6c Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i7 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i8 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j3 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i2 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP j6 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP i0 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP b Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP a Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPHASKRIPT]131=1313[GDXDISP i Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPBEREITSCHAFT]131=1313[RPGDXXRWREAD]131=1313[GDXDISP P Par 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Par 2]13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[GDXDISP B1 Set 3]13PlaneDim=013RowDim=313Squeeze=113Order=12313Decim=713PlaneRownr=-11313[GDXDISP B1 Set 7]13PlaneDim=013RowDim=713Squeeze=113Order=123456713Decim=713PlaneRownr=-11313[GDXDISP B1 Set 8]13PlaneDim=013RowDim=813Squeeze=113Order=1234567813Decim=713PlaneRownr=-11313[GDXDISP B1 Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP B2 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[RPSHIFTSCHEDULING]131=1313[RPOLIGOMCP]131=1313[GDXDISP BL Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=2113Decim=713PlaneRownr=-11313[GDXDISP B1 Set 2]13Sorted=YY13PlaneDim=013RowDim=213Squeeze=113Order=1213Decim=713PlaneRownr=-11313[RPMENGEN AUSLESEN]131=1313[RPAS-HUBNETZ]131=1313[RPSUDOKU]131=1313[GDXDISP Einwohner Par 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[GDXDISP Staedte Set 1]13PlaneDim=013RowDim=113Squeeze=113Order=113Decim=713PlaneRownr=-11313[RPUNTITLED_2]131=1313[RPUNTITLED_3]131=1313[RPCPLEX]131=1313[RPRESOURCE]131=1313[RPRANGING]131=1313[OPENWINDOW_1]13MAXIM=013TOP=013LEFT=013HEIGHT=71313WIDTH=16101313[RPREAD_DATA]131=1313[RPUNTITLED_4]131=1313[RPGDX]131=1313[RPMENGEN MIT EXCEL]131=1313[RPMENGEN MIT EXCEL_KOMPAKT]131=1313[RPMENGEN MIT EXCEL_KOMPAKT_TEXT]131=1313[RPPARAMETER MIT EXCEL]131=1313[RPSCHREIBEN_IN_EXCEL]131=1313[RPLESEN_AUS_EXCEL_MENGEN_KOMPAKT_INDEXSHEET]131=1313[RPSENSITIVITY]131=1313[RPUNTITLED_1]131=1313[MRUFILES]131=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelUntitled_1gms132=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelSensitivitygms133=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetgms134=CUsersMatthesKochDocumentsgamsdirprojdirgdx excellesen_aus_excel_Mengen_kompakt_indexsheetlst135=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelschreiben_in_excelgms136=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelParameter mit Excelgms137=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompakt_textgms138=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excel_kompaktgms139=CUsersMatthesKochDocumentsgamsdirprojdirgdx excelMengen mit Excelgms13

indextxt

set=i0 rng=Tabelle1a2d2 cdim=113set=i1 rng=Tabelle1a2d3 cdim=1 values=yn13dset=i2 rng=Tabelle1a6f6 cdim=113set=i3 rng=Tabelle1a9c10 cdim=113se=0 set=i4 rng=Tabelle1a13 cdim=113se=0 dset=j1 rng=Tabelle1a17 rdim=113

lesen_aus_excel_Mengengms

AUSLESEN MIT EXCEL1313 Alle I sets reihenweise1313 Einfaches Auslesen von Elementen13 cdim = 1 Spaltendimension = 113 (o = beispielgdx ist eigtl uumlberfluumlssig)13set i0 Elemente der Zeile13$call gdxxrw beispielxls o=beispielgdx set=i0 rng=Tabelle1a2d2 cdim=1 rdim=013$gdxin beispielgdx13$load i013$gdxin13display i01313values=yn Nur Elemente deren Kommentare nicht 0N oder NO enthalten13set i1 ausgewaumlhlte Elemente einer Zeile13$call gdxxrw beispielxls o=beispielgdx set=i1 rng=Tabelle1a2d3 cdim=1 rdim=0 values=yn13$gdxin beispielgdx13$load i113$gdxin13display i11313 dset Duplikate in der Menge werden nicht beruumlcksichtigt (falls nur set13 benutzt wird so wird die gdx Datei geloumlscht)13set i2 Menge deren Input Duplikate enthielt13$call gdxxrw beispielxls dset=i2 rng=Tabelle1a6f6 cdim=1 rdim=013$gdxin beispielgdx13$load i213$gdxin13display i21313 Elemente mit Kommentar auslesen13set i3 Elemente mit Kommentar ausgelesen13$call gdxxrw beispielxls set=i3 rng=Tabelle1a9c10 cdim=113$gdxin beispielgdx13$load i313$gdxin13file Ausgabe Elemente_mit_Kommentartxt13put Ausgabe13loop(i313 put i3tl i3te(i3)13 put 13)13display i31313 Kein Endpunkt angeben13 SE = 0 -gt Skip emtpy dh 0 leere Werte sind erlaubt dann Abbruch13set i4 Menge mit hilfe von SE=0 begrenzt13$call gdxxrw beispielxls se=0 set=i4 rng=Tabelle1a13 cdim=113$gdxin beispielgdx13$load i413$gdxin13display i41313j spaltenweise13 rdim Zeilendimension13set j1 Elemente aus einer Spalte ausgelesen13$call gdxxrw beispielxls se=0 dset=j1 rng=Tabelle1a17 rdim=1 cdim=013$gdxin beispielgdx13$load j113$gdxin13display j113

lesen_aus_excel_Mengen_kompakt_indexsheetgms

sets13 i0 Elemente der Zeile13 i1 ausgewaumlhlte Elemente einer Zeile13 i2 Menge deren Input Duplikate enthielt13 i3 Elemente mit Kommentar ausgelesen13 i4 Menge mit Hilfe von SE=0 begrenzt13 j1 Elemente aus einer Spalte ausgelesen1313$call gdxxrw beispielxls index=indextaba113$gdxin beispielgdx13$load i0 i1 i2 i3 i4 j113$gdxin13display13i0i1i2i3i4j113

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