Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

A GAMS Tutorial Dr. Michael Georgiadis

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "A GAMS Tutorial Dr. Michael Georgiadis"— Μεταγράφημα παρουσίασης:

1 A GAMS Tutorial Dr. Michael Georgiadis
Centre for Process Systems Engineering (CPSE) Department of Chemical Engineering & Chemical Technology

2 Περίγραμμα Χαρακτηριστικά του GAMS Ενδεικτικό παράδειγμα
Αρχείο εισόδου Μεταγλώττιση Αρχείο εξόδου

3 Εισαγωγή GAMS - General Algebraic Modelling System
Αναπτύχθηκε από την World Bank για οικονομολόγους! Κύρια Χαρακτηριστικά: Γλώσσα υψηλού επιπέδου Αναπαράσταση μοντέλων με τρόπο παρόμοιο με αυτό στο χαρτί Η περιγραφή του μοντέλου είναι ανεξάρτητη από τον αλγόριθμο επίλυσης

4 GAMS Μεταγλώττιση του Μοντέλου Αρχείο Εξόδου με αποτελέσματα
filename.lst Αρχείο Εισόδου του Μοντέλου filename.gms Optimization Solver e.g. MINOS CONCOPT CPLEX DICOPT

5 Παράδειγμα στο GAMS ΠΑΡΑΔΕΙΓΜΑ ΜΕΤΑΦΟΡΩΝ
Με δεδομένα: Τη μέγιστη διαθέσιμη ποσότητα προϊόντος από το εργοστάσιο i Τη ζήτηση στην αγορά j Την απόσταση μεταφοράς από το εργοστάσιο i στην αγορά j Το μοναδιαίο κόστος μεταφοράς του προϊόντος από το εργοστάσιο i στην αγορά j Ζητείται: Το ελάχιστο κόστος μεταφοράς των προϊόντων από τα εργοστάσια στις αγορές

6 Παράδειγμα στο GAMS ΠΑΡΑΔΕΙΓΜΑ ΜΕΤΑΦΟΡΩΝ
New York New York 325 275 300 600 350 2.5 kMiles 1.4 kMiles 1.8 kMiles 1.7 kMiles San Diego Topeka Topeka Seattle Chicago

7 Παράδειγμα στο GAMS ΠΑΡΑΔΕΙΓΜΑ ΜΕΤΑΦΟΡΩΝ
Αποστάσεις (σε χιλιάδες μίλια) Μέγιστη Παραγωγή Αγορές (σε κιβώτια) Εργοστάσια New York Chicago Topeka Seattle 2.5 1.7 1.8 350 San Diego 2.5 1.8 1.4 600 Demand 325 300 275 Τα μεταφορικά κόστη είναι $90 ανά κιβώτιο ανά χίλια μίλια

8 Παράδειγμα Μεταφορών: ΑΛΓΕΒΡΙΚΗ ΑΝΑΠΑΡΑΣΤΑΣΗ
Δείκτες (ή σύνολα): i = εργοστάσια j = αγορές Δεδομένα (ή παράμετροι): ai = διαθέσιμη ποσότητα προϊόντος στο εργοστάσιο i (σε κιβώτια) bj = ζήτηση του προϊόντος στην αγορά j (κιβώτια) f = κόστος μεταφοράς ($/κιβώτιο/1000 μίλια) dij = απόσταση μεταξύ εργοστασίου i και αγοράς j (σε χιλιάδες μίλια) cij = f.dij/ 1000, κόστος ανά μονάδα που μεταφέρεται μεταξύ του εργοστασίου i και της αγοράς j ($Κ/ κιβώτιο)

9 Παράδειγμα Μεταφορών: ΑΛΓΕΒΡΙΚΗ ΑΝΑΠΑΡΑΣΤΑΣΗ
Μεταβλητές Απόφασης (Decision Variables): xij = ποσότητα που θα μεταφερθεί από το εργοστάσιο i στην αγορά j (κιβώτια), Όπου xij≥ 0, για κάθε i, j Περιορισμοί (Constraints): Παρατήρησε το όριο προμήθειας στο εργοστάσιο i: ∑j xij ≤ ai , για κάθε i (κιβώτια) Ικανοποίησε τη ζήτηση στην αγορά j: ∑i xij ≥ bj , για κάθε j (κιβώτια) Αντικειμενική Συνάρτηση (Objective Function): Minimize ∑i ∑j cij xij ($K)

10 GAMS Code

11 GAMS Code (contd.)

12 Δομή ενός Μοντέλου GAMS
SETS Δήλωση Ορισμός μελών DATA (PARAMETERS, TABLES, SCALARS) VARIABLES Ορισμός τύπου (Προαιρετικά) Ορισμός ορίων και/ή αρχικών τιμών EQUATIONS Ορισμός MODEL και SOLVE statements (Προαιρετικά) DISPLAY statements

13 Γενικές Παρατηρήσεις Μοναδικός κανόνας για τη σειρά: δεν μπορούμε να αναφερθούμε σε κάτι πριν το ορίσουμε Τερματισμός statements με ερωτηματικό (;) Ο compiler του GAMS δεν είναι case-sensitive Γραμμές που ξεκινούν με * είναι γραμμές σχολίων Τα ονόματα πρέπει να ξεκινούν με γράμμα και να ακολουθούνται από μέχρι 9 γράμματα ή ψηφία Το επεξηγηματικό κείμενο πρέπει να μην ξεπερνάει τη μία γραμμή μην έχει μήκος πάνω από 80 χαρακτήρες μην ξεκινάει με δεσμευμένες λέξεις του GAMS και να μην περιέχει τα σύμβολα =, ;/

14 Σύνολα Σύνολα στο GAMS ≡ δείκτες σε αλγεβρικά μοντέλα, π.χ. Sets
i canning plants / seattle, san-diego / j markets / new-york, chicago, topeka / ; Τα στοιχεία δεν μπορούν να αποτελούνται από πολλές λέξεις. Π.χ. NEW-YORK όχι NEW YORK Μπορούμε εναλλακτικά να ορίσουμε τα σύνολα ως: Set i canning plants / seattle, san-diego /; Set j markets / new-york, chicago, topeka / ; Όταν τα στοιχεία ακολουθούν μία σειρά, χρησιμοποιούμε το αστεράκι: Set T time periods /1991*2000/; Set M machines /MACH1*MACH24/; Αυτό αντιστοιχεί σε T = {1991, 1992, …, 2000} και M = {MACH1, MACH2, …, MACH24} Όταν έχουμε αλληλεπίδραση μεταξύ στοιχείων του ίδιου συνόλου (i και i΄), χρησιμοποιούμε την εντολή alias (i, ii) και ορίζουμε το σύνολο i΄: Π.χ. i = {1,2}; r1 = 6; r2 = 4; τότε bii’ = 7-ri+ri’ ==> b11 = 7, b12 = 5, b21 = 9, b22 = 7 b(i,ii) = 7 – r(i) + r(ii);

15 Δεδομένα Εισαγωγή με λίστες Εισαγωγή με πίνακες Parameters
a(i) capacity of plant i in cases / seattle san-diego / b(j) demand at market j in cases / new-york chicago 300 topeka / ; Εισαγωγή με πίνακες Table d(i,j) distance in thousands of miles new-york chicago topeka seattle san-diego ; !!! Προσοχή !!! στο ;

16 Δεδομένα Εισαγωγή με απευθείας ανάθεση όπου το GAMS υπολογίζει τις τιμές αυτόματα: Parameter c(i,j) transport cost in 1000s of dollars per case ; c(i,j) = f * d(i,j) / 1000 ; Επίσης D(‘seattle’, ‘new-york’) = 2.5; Scalar είναι μία παράμετρος που δεν έχει πεδίο ορισμού: Scalar f freight in dollars per case per thousand miles /90/; Η προκαθορισμένη τιμή για μη ορισμένες παραμέτρους και scalars είναι μηδέν.

17 Μεταβλητές Τύποι μεταβλητών: Ο προκαθορισμένος τύπος είναι FREE
Τύπος Μεταβλητής Επιτρεπτό εύρος τιμών FREE -∞ to +∞ POSITIVE 0 to +∞ NEGATIVE -∞ to 0 BINARY 0 or 1 INTEGER 0, 1, …, 100

18 Περιορισμοί Οι Περιορισμοί πρέπει να δηλωθούν και να οριστούν ξεχωριστά Η δήλωση γίνεται γράφοντας: Το όνομα της εξίσωσης που ορίζεται Το πεδίο ορισμού της Συνθήκη περιορισμού πεδίου ορισμού (προαιρετικό) Τις δύο τελείες '..‘ Το αριστερό μέρος Τελεστής: =l=, =e=, =g= Το δεξί μέρος

19 Περιορισμοί

20 Περιορισμοί Χρήση των operators SUM και PROD:
SUM(J, X(J)) είναι ισοδύναμο με SUM(J, X(Ι,J)) είναι ισοδύναμο με PROD(J, X(J)) είναι ισοδύναμο με SUM((I,J), X(I,J)) είναι ισοδύναμο με SUM(I, SUM(J, X(I,J))) Μπορούν να χρησιμοποιηθούν σε απευθείας αναθέσεις PARAMETERS και SCALARS, Π.χ. SCALAR TOTSUPPLY total supply over all plants; TOTSUPPLY = SUM(i, b(i));

21 Ο Τελεστής Δολάριο ($) Δίνει τη δυνατότητα συνοπτικού χειρισμού εξαιρέσεων Παράδειγμα 1: If y ≥ 1.5, then x = 2, else x = 0 SCALAR X, Y; Y = 2; X = 1; X = 2 $ (Y GE 1.5); Παράδειγμα 2: If y ≥ 1.5, then x = 2, else x = 1 X $ (Y GE 1.5) = 2; Παράδειγμα 3: If xi ≠ 0, then pi = 1/xi, else pi = 0 p(i) = (1/x(i)) $ (x(i) NE 0); Παράδειγμα 4: j = {1,2,3,4}. EQ1.. SUM(j $ (ord(j) GT 1), x(j)) =E= 1; Παράδειγμα 5: If xi ≠ 0, then zi = yi-3 EQ2$(x(i) NE 0).. z(i) =E= y(i)-3;

22 Model and Solve Statements
Με τη λέξη κλειδί MODEL στο GAMS μπορούμε να ορίσουμε μία συλλογή από Equations: MODEL TRANSPORT /ALL/ ή ισοδύναμα: MODEL TRANSPORT /COST, SUPPLY, DEMAND/; Για την επίλυση του Μοντέλου που ορίσαμε, χρησιμοποιούμε το SOLVE: SOLVE ModelName USING SolutionProcedure Keyword OptimizationVariable; Διαθέσιμα Solution Procedures: LP για linear programming NLP για non-linear programming MIP για mixed-integer linear programming MINLP για mixed-integer non-linear programming Διαθέσιμα Keywords: MINIMIZING MAXIMIZING

23 Display Statements Με την εντολή DISPLAY, μπορούμε να εμφανίσουμε τις τιμές παραμέτρων, μεταβλητών, κ.α. Η γενική της μορφή είναι: DISPLAY VariableName.Suffix, Parameter; Διαθέσιμα suffixes: .LO = lower bound .L = level value, actual value (initial or final) .UP = upper bound .M = dual value, Lagrange or Kuhn-Tucker multipliers Παράδειγμα DISPLAY x.l;

24 Όρια Πριν την επίλυση του μοντέλου, μπορούμε να ορίσουμε άνω και κάτω όρια για τις μεταβλητές μας ως εξής: X.UP(I,J) = CAPACITY(I,J); X.LO(I,J) = 10.0; X.UP(‘SEATTLE’, ‘NEW-YORK’) = 1.2*CAPACITY(‘SEATTLE’, ‘NEW-YORK’); Κάποιες τιμές μεταβλητών μπορούν να δοθούν από το χρήστη πριν την επίλυση: X.FX(‘SEATTLE’, ‘NEW-YORK’) = 45.0;

25 Γενική Δομή της Εξόδου του GAMS
Echo Print Μηνύματα Λάθους Λίστες Εξισώσεων Στατιστικά Μοντέλου Αναφορές Κατάστασης Αναφορές Λύσης

26 Echo Print Αυτό είναι ένα αντίγραφο του αρχείου εισόδου με αρίθμηση γραμμών Πάντα εμφανίζεται στην έξοδο Το statement $TITLE κάνει το κείμενο που παρατίθεται να τυπωθεί στην κορυφή της κάθε σελίδας Η εντολή $OFFUPPER δίνει τη δυνατότητα στο echo να περιέχει ανάμεικτα κεφαλαία και πεζά

27 Μηνύματα Λάθους Αυτά εμφανίζονται μέσα στο echo. Ξεκινούν με **** και περιέχουν ένα $ με έναν αριθμό ακριβώς κάτω από το σημείο του λάθους. Οι αριθμοί αυτοί επεξηγούνται μετά το echo Παράδειγμα 1: SET SUM months /JUN, JUL, AUG/; δίνει echo: 2 SET SUM months /JUN, JUL, AUG/; **** $2 Το GAMS υποδεικνύει ότι κάτι δεν πάει καλά με το στοιχείο SUM. Στο κάτω μέρος του echo εμφανίζεται το μήνυμα: ERROR MESSAGES 2 IDENTIFIER EXPECTED Το πρόβλημα είναι ότι το SUM είναι μία δεσμευμένη λέξη του GAMS.

28 Μηνύματα Λάθους (contd.)
Παράδειγμα 2: Έστω ότι κάποιος προσπάθησε να γράψει τον περιορισμό: Το GAMS θα βρει και τα 2 λάθη: EQ10(I).. SUM(I, X(I,J)) =E= 100; **** $125 $149 ERROR MESSAGES 125 SET IS UNDER CONTROL ALREADY 149 UNCONTROLLED SET ENTERED AS CONSTANT Συχνά 1 μικρό λάθος μπορεί να δημιουργήσει μία «χιονοστιβάδα» λαθών Πάντα φροντίζουμε να διορθώσουμε το πρώτο λάθος που εμφανίζεται και μετά τα υπόλοιπα

29 Λίστες Εξισώσεων Εμφανίζονται μετά την επίλυση του μοντέλου και δίνουν τη δυνατότητα ελέγχου αν το GAMS παράγει το μοντέλο που θέλαμε Παράδειγμα: ο γενικός περιορισμός ζήτησης στο αρχείο εισόδου DEMAND(J).. SUM(I, X(I,J)) =G= B(J); Παράγει την παρακάτω λίστα στο αρχείο εξόδου: ----DEMAND =G= satisfy demand at market j DEMAND(NEW-YORK).. X(SEATTLE,NEW-YORK)+X(SAN-DIEGO,NEW-YORK)=G= 325; DEMAND(CHICAGO).. X(SEATTLE,CHICAGO)+X(SAN-DIEGO,CHICAGO)=G= 300; DEMAND(TOPEKA).. X(SEATTLE,TOPEKA)+X(SAN-DIEGO,TOPEKA)=G= 275; Ο προκαθορισμένος αριθμός εξισώσεων που εμφανίζεται είναι 3 για κάθε γενική εξίσωση. Για να το αλλάξουμε, εισάγουμε τη γραμμή OPTION LIMROW = number; πριν το SOLVE statement. Χρησιμοποιώντας OPTION LIMROW = 0, LIMCOL = 0; γλυτώνουμε σελίδες χαρτιού μόλις τελειώσουμε με την αποσφαλμάτωση του μοντέλου!

30 Στατιστικά Μοντέλου Για το πρόβλημα μεταφοράς:
MODEL STATISTICS BLOCKS OF EQUATIONS 3 SINGLE EQUATIONS 6 BLOCKS OF VARIABLES 2 SINGLE VARIABLES 7 NON ZERO ELEMENTS 19 Το BLOCK αναφέρεται στις γενικές εξισώσεις και μεταβλητές Το SINGLE αναφέρεται στις ξεχωριστές γραμμές και στήλες

31 Περίληψη Λύσης Για το πρόβλημα μεταφοράς: SOLVE SUMMARY
MODEL TRANSPORT OBJECTIVE Z TYPE LP DIRECTION MINIMIZE SOLVER CONOPT2 FROM LINE 49 **** SOLVER STATUS 1 NORMAL COMPLETION **** MODEL STATUS 1 OPTIMAL **** OBJECTIVE VALUE RESOURCE USAGE, LIMIT ITERATION COUNT, LIMIT

32 Περίληψη Λύσης (συνέχεια)
Η επιθυμητή κατάσταση του solver είναι 1 NORMAL COMPLETION Άλλες πιθανές καταστάσεις είναι: Ξεπεράστηκε το όριο επαναλήψεων: 2 ITERATION INTERRUPT Λύση: Αλλάξτε την τιμή της παραμέτρου ITERLIM Ξεπεράστηκε το όριο χρόνου: 3 RESOURCE INTERRUPT Λύση: Αλλάξτε την τιμή της παραμέτρου RESLIM Διακοπή από το χρήστη: 8 USER INTERRUPT κ.α.

33 Περίληψη Λύσης (συνέχεια)
Υπάρχουν 11 πιθανές καταστάσεις του μοντέλου Για LPs, οι πιο κοινές καταστάσεις είναι: 1 OPTIMAL 3 UNBOUNDED 4 INFEASIBLE Για NLPs, η επιθυμητή κατάσταση είναι: 2 LOCALLY OPTIMAL Για IPs, η επιθυμητή κατάσταση είναι: 8 INTEGER SOLUTION

34 Αναφορές λύσης

35 Αναφορές λύσης (συνέχεια)
Οι μονές τελείες αναπαριστούν μηδενικά Η καταχώρηση EPS σημαίνει μικρή τιμή αλλά όχι μηδέν Αν τα αποτελέσματα περιέχουν infeasibilities: INFES Αν τα οριακά κόστη έχουν λάθος πρόσημο: NOPT Αν το πρόβλημα είναι unbounded: UNBND Στο τέλος της αναφοράς λύσης, υπάρχει μία περιληπτική αναφορά: Η statement DISPLAY X.L, X.M; δίνει:


Κατέβασμα ppt "A GAMS Tutorial Dr. Michael Georgiadis"

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google