810 likes | 985 Views
ΑΝΑΛΥΣΗ & ΣΧΕΔΙΑΣΜΟΣ ΣΥΣΤΗΜΑΤΩΝ ΜΕΤΑΦΟΡΩΝ. ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ: Mathematical Programming Language ( MPL). ΑΝΑΛΥΣΗ & ΣΧΕΔΙΑΣΜΟΣ ΣΥΣΤΗΜΑΤΩΝ ΜΕΤΑΦΟΡΩΝ. ΕΙΣΑΓΩΓΗ ΣΤΗΝ MPL ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL ΔΗΛΩΣΗ/ ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ ( INDEXES)
E N D
ΑΝΑΛΥΣΗ & ΣΧΕΔΙΑΣΜΟΣ ΣΥΣΤΗΜΑΤΩΝ ΜΕΤΑΦΟΡΩΝ ΕΡΓΑΣΤΗΡΙΑΚΟ ΜΑΘΗΜΑ: Mathematical Programming Language (MPL)
ΑΝΑΛΥΣΗ & ΣΧΕΔΙΑΣΜΟΣ ΣΥΣΤΗΜΑΤΩΝ ΜΕΤΑΦΟΡΩΝ • ΕΙΣΑΓΩΓΗ ΣΤΗΝ MPL • ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL • ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL • ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) • ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) • ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) • ΧΡΗΣΗ ΑΘΡΟΙΣΜΑΤΩΝ (SUM) • ΑΝΤΙΚΕΙΜΕΝΙΚΗ ΣΥΝΑΡΤΗΣΗ(Objective Function) • ΔΗΛΩΣΗ/ ΟΡΙΣΜΟΣ ΠΕΡΙΟΡΙΣΜΩΝ (Specifying Constraints) • ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ ΚΑΙ ΠΑΡΑΜΕΤΡΩΝ ΑΠΟ ΕΞΩΤΕΡΙΚΟ ΑΡΧΕΙΟ • ΧΡΗΣΗ ΜΑΚΡΟΕΝΤΟΛΩΝ (MACROS) • ΠΑΡΑΔΕΙΓΜΑΤΑ
ΕΙΣΑΓΩΓΗ ΣΤΗΝ MPL Τι είναι η MPL; • Η MPL είναι ένα προηγμένο σύστημα μοντελοποίησης που επιτρέπει στο χρήστη του συστήματος τη διαμόρφωσηπολύπλοκων μοντέλων βελτιστοποίησης με σαφή, συνοπτικό και αποτελεσματικό τρόπο. • Η MPL περιλαμβάνει μια αλγεβρική γλώσσα μοντελοποίησης που επιτρέπει στο χρήστη του συστήματος τη δημιουργία μοντέλων βελτιστοποίησης με χρήση αλγεβρικών εξισώσεων. • Αλγεβρικές γλώσσες βελτιστοποίησης, όπως η MPL,είναι οι πιο αποτελεσματικές μέθοδοι για την ανάπτυξη και τη συντήρηση μοντέλων βελτιστοποίησης, επειδή είναι πιο εύκολο να τις μάθεις, πιο γρήγορο να διαμορφώσεις τα μοντέλα και απαιτούν λιγότερο προγραμματισμό.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ MPL Χαρακτηριστικά MPL • Διεπαφή του χρήστη σε παραθυρικό περιβάλλον (Microsoft Windows). • Μπορεί να εισάγει και να εξάγει δεδομένα απευθείας από ή προς βάσεις δεδομένων ή υπολογιστικά φύλλα. Οι βάσεις δεδομένων που υποστηρίζει είναι οι: Microsoft Access and Excel, ODBC, Paradox, FoxPro, Dbase, SQL Sever και Oracle.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ MPL • Έχει σχεδιαστεί για να είναι φορητή (μπορεί να διαβαστεί σε οποιαδήποτε πλατφόρμα που υποστηρίζει την MPL). Υπάρχει διαθέσιμη έκδοση και για Unix περιβάλλον(OSF Motif). • H MPL μπορεί να χειριστεί εύκολα και γρήγορα πολύ μεγάλους πίνακες με εκατομμύρια μεταβλητές και περιορισμούς (πλήρη έκδοση). Ενώ στην περίπτωση της δοκιμαστικής έκδοσης (student/ trial version) υπάρχει ο περιορισμός του μεγέθους (300 μεταβλητές/ περιορισμοί). • Επιτρέπει στο χρήστη να διαμορφώσει το μοντέλο του και στη συνέχεια να επιλέξει τη μηχανή βελτιστοποίησης (CPLEX, LPSolve, GUROBI, XPRESSsolver) που επιθυμεί για να επιλύσει το μοντέλο. • Τα αποτελέσματα ανακτώνται αυτόματα από τη μηχανή βελτιστοποίησης (solver) και εμφανίζονται, παρέχοντας στο χρήστη άμεση ανατροφοδότηση.
ΕΙΣΑΓΩΓΗ ΣΤΗΝ MPL OptiMax Component Library • Η OptiMaxείναι μια αντικειμενοστραφής βιβλιοθήκη συστατικών, σχεδιασμένη να ενσωματώνει μοντέλα βελτιστοποίησης σε ποικίλες πλατφόρμες όπως VBA για Excel/Access, Visual Basic, Visual C++, Delphi, Java και σε γλώσσες προγραμματισμού για το διαδίκτυο.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL • ΒΗΜΑ 1ο Άνοιγμα εφαρμογής MPL για Windows 4.2 και δημιουργία καινούριου αρχείου MPL. • ΒΗΜΑ 2ο Δήλωση δεικτών, μεταβλητών, παραμέτρων, αντικειμενικής συνάρτησης και περιορισμών. • ΒΗΜΑ 3ο Αποθήκευση αρχείου MPL. • ΒΗΜΑ 4ο Συντακτικός έλεγχος του μοντέλου.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL • ΒΗΜΑ 5ο Επίλυση και εμφάνιση των λύσεων του μοντέλου. • ΒΗΜΑ 6ο Εμφάνιση στατιστικών στοιχείων, μεταβλητών, παραμέτρων, αντικειμενικής συνάρτησης και περιορισμών του μοντέλου. • ΒΗΜΑ 7ο Εμφάνιση γραφικής παράστασης του πίνακα και της αντικειμενικής συνάρτησης.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 1ο • Ανοίγουμε την εφαρμογή MPL for Windows 4.2. Μετά το άνοιγμα της εφαρμογής, θα εμφανιστεί το βασικό μενού. Το βασικό μενού προσφέρει τις ακόλουθες ενέργειες στο χρήστη : • File //άνοιγμα, αποθήκευση και εκτύπωση αρχείων. • Edit //αναίρεση, αποκοπή, αντιγραφή και επικόλληση. • Search //αναζήτηση, αντικατάσταση. • Project //άνοιγμα, αποθήκευση και κλείσιμο project. • Run //εκκίνηση μηχανής βελτιστοποίησης (solver), έλεγχος συντακτικών λαθών και δημιουργία εισόδου. • View //εμφάνιση λύσης στην οθόνη. • Graph //εμφάνιση γραφικής παράστασης. • Options //αλλαγή προεπιλεγμένων επιλογών του MPL. • Window //χειρισμός πολλαπλών παραθύρων. • Help //βοήθεια. • ΒΗΜΑ 2ο
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 1ο • Ο χρήστης έχει τη δυνατότητα να δημιουργήσει ένα καινούριο αρχείο MPL, μέσω της επιλογής File →New.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 2ο • Ακολουθεί η δήλωση των δεικτών, των μεταβλητών, των παραμέτρων, της αντικειμενικής συνάρτησης και των περιορισμών(η ονομασία τους πρέπει να είναι μοναδική και υπάρχει διάκριση πεζών και κεφαλαίων γραμμάτων).
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 3ο • Ο χρήστης αποθηκεύει το αρχείο MPL που δημιούργησε μέσω της επιλογής Save και Save As.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 4ο • Έλεγχος του μοντέλου για συντακτικά λάθη, επιλέγοντας Run→Check Syntax. • Σε περίπτωση που το μοντέλο δεν έχει συντακτικά λάθη.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 4ο • Σε περίπτωση που το μοντέλο έχει συντακτικά λάθη.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 5ο • Εφόσον το μοντέλο δεν έχει συντακτικά λάθη, ακολουθεί η επίλυση του μοντέλου, μέσω τηςεπιλογής Run→Solve.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 5ο • Η MPL μετά την επίλυση του μοντέλου δημιουργεί ένα αρχείο με τις λύσεις, ο χρήστης έχει τη δυνατότητα να δει τις λύσεις επιλέγοντας View→Files → όνομα αρχείου.sol.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 6ο • H MPL επιτρέπει στο χρήστη να δει τα στατιστικά του μοντέλου, επιλέγοντας View→Model Statistics.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 6ο • Ο χρήστης έχει τη δυνατότητα να δει τα στοιχεία (μεταβλητές, παραμέτρους, αντικειμενική συνάρτηση κ.α.) που όρισε για τη διαμόρφωση του μοντέλου, επιλέγοντας View→Model Definitions.
ΒΑΣΙΚΑ ΒΗΜΑΤΑ ΜΟΝΤΕΛΟΠΟΙΗΣΗΣ ΣΤΗΝ MPL : ΒΗΜΑ 7ο • Τέλος η MPL επιτρέπει στο χρήστη να δει τη γραφική παράσταση του πίνακα και της αντικειμενικής συνάρτησης, επιλέγοντας Graph→ Matrix / Objective Function.
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL • Το αρχείο του μοντέλου MPL περιλαμβάνει τα ακόλουθα Τμήματα Δηλώσεων: • το τμήμα δήλωσης των δεικτών, • το τμήμα δήλωσης των παραμέτρων, • το τμήμα δήλωσης των μεταβλητών, • το τμήμα δήλωσης της αντικειμενικής συνάρτησης και των περιορισμών του μοντέλου
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL Τμήμα δήλωσης δεικτών, παραμέτρων και μεταβλητών(The Definition Part) Το Τμήμα δήλωσης δεικτών, παραμέτρων και μεταβλητών χρησιμοποιείται με σκοπό να οριστούν τα στοιχεία που θα χρησιμοποιηθούν αργότερα στο μοντέλο και αποτελείται από: TITLE // Όνομα του προβλήματος INDEX // Σύνολα του προβλήματος DATA // Παράμετροι DECISION VARIABLES // Μεταβλητές αποφάσεων MACRO // Μακροεντολές για επαναλαμβανόμενα τμήματα
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL Για παράδειγμα: TITLE TransportationProblem ; INDEX supply:=(S1,S2) ; dest:= (D1,D2,D3) ; DATA CapacityS[supply]:= (200,300) ; Demand[dest]:= (150,200,150) ; TransCostSD[supply, dest]:= (10,12,15, 14,10,16) ; DECISION VARIABLES ShipSD[supply, dest] ;
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL Τμήμα δήλωσης αντικειμενικής συνάρτησης και περιορισμών (The Model Part) Η δήλωση της αντικειμενικής συνάρτησης και των περιορισμών πρέπει να εμφανίζεται αμέσως μετά τη δεσμευμένη λέξη: “MODEL”. • Η εντολή MODEL είναι προαιρετική, παρόλα αυτά είναι χρήσιμο να εισάγεται στην αρχή της διαμόρφωσης του μοντέλου. • Η προσθήκη MAX (μεγιστοποίηση) ή MIN (ελαχιστοποίηση) προηγείται της δήλωσης της αντικειμενικής συνάρτησης. • Η χρήση της εντολής END σηματοδοτεί τον τερματισμό του μοντέλου.
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL Τμήμα δήλωσης της αντικειμενικής συνάρτησης και των περιορισμών MODEL MAX or MIN {Αντικειμενική συνάρτηση} SUBJECT TO BOUNDS {Ανώτερα και κατώτερα όρια μεταβλητών} FREE {Ελεύθερες μεταβλητές} INTEGER {Ακέραιες μεταβλητές} BINARY {Δυαδικές μεταβλητές (0/1)} END
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL Για παράδειγμα: MODEL MIN TotalCost= SUM(supply,dest: TransCostSD * ShipSD) ; SUBJECT TO Const1[supply]: SUM(dest : ShipSD) <CapacityS[supply] ; Const2[dest]: SUM(supply : ShipSD) =Demand[dest]; END Κόστος μεταφοράς από το supply στο dest Ποσότητα που θα μεταφερθεί από το supply στο dest
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL • Αριθμοί H MPL επιτρέπει την εισαγωγή είτε πραγματικών αριθμών είτε ακεραίων. Για παράδειγμα: • 10 • 5.64 • -0.657 • 25.0 • Ονόματα Τα ονόματα των περιορισμών και των μεταβλητών μπορούν να έχουν οποιοδήποτε μέγεθος. Δεν επιτρέπεται η χρήση κενών διαστημάτων ανάμεσα σε ένα όνομα, εξαίρεση αποτελεί η χρήση του χαρακτήρα της κάτω παύλας(_).
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL Παραδείγματα ορθής και λανθασμένης ονομασίας: • Constraint • cons1A_A • PROFIT • constraint 1 x • constaint2 • demand 1_ x • B_constraint1 • A _capacity x • consAB
ΔΗΛΩΣΗ/ΟΡΙΣΜΟΣ ΜΑΘΗΜΑΤΙΚΟΥ ΜΟΝΤΕΛΟΥ ΣΤΗΝ MPL • Εισαγωγή σχολίων Το σχόλιο είναι μέρος ενός αρχείου το οποίο η MPL δεν επεξεργάζεται. Σχόλια μπορούν να εισαχθούν σε οποιοδήποτε μέρος του αρχείου. Οι βασικοί τύποι σχολίων είναι οι εξής: • Σχόλια μίας γραμμής : ! Τα σχόλια μίας γραμμής χρησιμοποιούνται για να προσθέσουν σχόλια σε μία γραμμή ή σε κάποιο κομμάτι μίας γραμμής ενός κειμένου. • Σχόλια πολλαπλών γραμμών : {...} Τα σχόλια για πολλαπλές γραμμές χρησιμοποιούνται για να προσθέσουν σχόλια σε πολλές γραμμές του κειμένου.
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) Στην MPL αναγνωρίζονται δύο βασικοί τύποι συνόλων: τα αριθμητικά σύνολα και τα σύνολα ονομάτων. • Τα αριθμητικά σύνολα (Numeric Indexes) περιλαμβάνουν ακέραιους αριθμούς. Οι αριθμοί δεν πρέπει να είναι αρνητικοί και ο δεύτερος αριθμός πρέπει να είναι μεγαλύτερος από τον πρώτο. Τα αριθμητικά σύνολα ορίζονται στο τμήμα δηλώσεων “INDEX” με τον ακόλουθο τρόπο: {όνομα συνόλου} := a..b; Για παράδειγμα: INDEX warehouse_id :=1..4;
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) Εναλλακτικά ένα αριθμητικό σύνολο δηλώνεται και ως ακολούθως: {όνομα συνόλου} := (a1,a2, ,ak); Για παράδειγμα: INDEX warehouse_id :=(1,2,3,4);
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) • Τα σύνολα ονομάτων(Named Indexes) δηλώνονται με τον ακόλουθο τρόπο: {όνομα συνόλου}: =(στοιχείο1, στοιχείο2, ,στοιχείοk); Παράδειγμα: week := (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Στο παραπάνω παράδειγμα ορίζεται ένα σύνολο week (εβδομάδα) το οποίο αποτελείται από 7 στοιχεία (μέρες της εβδομάδας). Σε περίπτωση που ο χρήστης θέλει να χρησιμοποιήσει ένα σύνολο στοιχείων με μικρότερα ονόματα, τότε μπορεί να χρησιμοποιήσει τον τελεστή →. Ακολουθεί ένα παράδειγμα: names := (Kostas, John, Katherine, Manolis, Dimitris, Maria) -> (Ko, Jo, Ka, Man, Di, Ma);
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) • Το όνομα ενός συνόλου χρησιμοποιείται και ως δείκτης. H MPL δίνει τη δυνατότητα στο χρήστηνα ορίσει περισσότερους από έναν δείκτες. Κάθε δείκτης ορίζεται στο τμήμα δηλώσεων “INDEX” με τον ακόλουθο τρόπο: {όνομα δείκτη}:= {όνομα συνόλου}; • Για παράδειγμα: INDEX location:= (A, B, C) ; destination:=location ; depot:=location ;
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) • Με βάση τα παραπάνω δεδομένα μπορούμε να ορίσουμε μια μεταβλητή απόφασης (DECISION VARIABLES), που περιγράφει το κόστος μεταφοράς από ένα σταθμό (depot) σε ένα προορισμό (destination): DECISION VARIABLES shipcost[depot, destination];
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) Δημιουργία υποσυνόλων (subsets of Indexes) • Κάθε υποσύνολο ενός συνόλου ορίζεται στο τμήμα δηλώσεων “INDEX” ως ακολούθως: {όνομα υποσυνόλου} [{όνομα συνόλου}] :=(στοιχείο1, στοιχείο2, ..., στοιχείοk) ; Για παράδειγμα: INDEX k:=(1..7); m:=(Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday); Επομένως μπορούμε να ορίσουμε τα παρακάτω σύνολα σαν υποσύνολα των αρχικών συνόλων: p[k]:= (2,4,6,7); Lessons[m]:= (Monday, Thursday, Saturday);
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) Δημιουργία πολυδιάστατων συνόλων (Multi-dimensional Index Sets) • Με δεδομένα κ σύνολα Σ1, Σ2, το 2-διάστατο σύνολο ορίζεται ως ακολούθως: {όνομα κ-διάστατου συνόλου} [{Σ1}, {Σ2}] := (στοιχείο11, στοιχείο12,..., στοιχείο1m2, στοιχείο21, στοιχείο22, ..., στοιχείο2m2, ... ... ... στοιχείοm11, στοιχείο m1 2 , ..., στοιχείο m1m2) ;
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) • Για παράδειγμα αν στο μοντέλο μας έχουμε ορίσει ένα σύνολο Producer και ένα σύνολο Product, μπορεί να θέλουμε να δημιουργήσουμε ένα σύνολο που να καθορίζει ποια προϊόντα(Product) παράγει ο παραγωγός (Producer). Η δημιουργία του παραπάνω συνόλου στην MPL πραγματοποιείται με τον ακόλουθο τρόπο: INDEX Producer :=(Kostas, Michael,George) ; Product :=(apples, bananas, oranges) ; PP[Producer,Product] := ( Kostas.bananas, Michael.oranges, George.apples ) ;
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) Ορισμός συνόλων υπό συνθήκη (Conditional sets) • Ένα σύνολο υπό συνθήκη ορίζεται στο τμήμα δηλώσεων “INDEX” ως ακολούθως: {όνομα υπόσυνθήκη συνόλου} [{όνομα συνόλου}] WHERE (περιορισμός); Για παράδειγμα: INDEX plant := (Atlanta, Chicago, Dallas); warehouse := (Pittsburgh, Charlotte, Memphis); DATA ShipCost[plant, warehouse] := (1200, 3000, 2300, 1800, 4200, 3300, 2700, 2100, 1900) ; INDEX BestRoutes[plant,warehouse] WHERE (ShipCost[plant, warehouse] <= 2400);
ΔΗΛΩΣΗ ΣΥΝΟΛΩΝ/ ΔΕΙΚΤΩΝ(INDEXES) Ορισμός συνόλων υπό συνθήκη (Conditional sets) • Στο παραπάνω παράδειγμα δημιουργήσαμε ένα σύνολο BestRoutes, το οποίο περιλαμβάνει τα δρομολόγια ανάμεσα σε παραγωγούς(plants) και αποθήκες (warehouses), τα οποία έχουν κόστος μεταφοράς μικρότερο του 2400. • Ειδικότερα το παραπάνω σύνολο(BestRoutes)θα αποτελείται από τα εξής στοιχεία: • Atlanta.Pittsburgh • Atlanta.Memphis • Chicago.Pittsburgh • Dallas.Charlotte • Dallas.Memphis
ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) Οι παράμετροι του μοντέλου δηλώνονται στο τμήμα δηλώσεων “DATA”. Υπάρχουν 2 διαφορετικοί τύποι παραμέτρων που αναγνωρίζει η MPL: τις απλές παραμέτρους(Data Constants)και τις πολυδιάστατες παραμέτρους (Data Vectors). • Οι απλές παράμετροι (Data Constants)μπορούν να οριστούν με 2 διαφορετικούς τρόπους: • Εκχωρώντας τιμές στις παραμέτρους. Στην συγκεκριμένη περίπτωση οι απλές παράμετροι ορίζονται με τον ακόλουθο τρόπο: {όνομα παραμέτρου} := α ; όπου αͼ R Για παράδειγμα: DATA TransportationCost := 5 ;
ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) • Διαδραστικά, ζητώντας από το χρήστη να εισάγει την τιμή που επιθυμεί όταν το αρχείο του μοντέλου διαβάζεται. Στην περίπτωση που οι παράμετροι ορίζονται διαδραστικά, εισάγουμε ένα αγγλικό ερωτηματικό (?) μετά την τιμή της παραμέτρου. Για παράδειγμα: DATA MaxStocks:= 10 ? ;
ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) • Παράδειγμα διαδραστικής εκχώρησης τιμής σε απλές παραμέτρους: • Η τιμή της παραμέτρου MaxStocks ζητείται κατά το χρόνο εκτέλεσης του προγράμματος, όπου εμφανίζεται ένα παράθυρο διαλόγου (Data Request Dialog) και ο χρήστης εισάγει την τιμή της παραμέτρου.
ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) • Οι πολυδιάστατοι παράμετροι (Data Vectors) είναι πίνακες ή διανύσματα και ορίζονται με τον ακόλουθο τρόπο: • Για διανυσματικές παραμέτρους διάσταση (κ): {όνομα παραμέτρου} [{όνομα συνόλου}] :=(α1, α2, , ακ); • Για πίνακα (n x m): {όνομα παραμέτρου} [όνομα συνόλου] := (α11, α12, , α1m, αn1, αn2, , αnm) ; • Για παράδειγμα: INDEX products:= (potatoes, tomatoes, lemons); DATA price[products]:= (3,4,2); Το price είναι ένα διάνυσμα που αναφέρεται σε προϊόντα(products).
ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) Θα πρέπει να υπάρχουν αρκετοί αριθμοί για να ικανοποιήσουν το μέγεθος του διανύσματος. Σε περίπτωση ύπαρξης επιπρόσθετων τιμών, οι τιμές επιτρέπονται αλλά αγνοούνται, αντιθέτως όταν οι τιμές είναι λιγότερες από το μέγεθος του διανύσματος τότε εμφανίζεται σφάλμα. Στο παρακάτω παράδειγμα, χρησιμοποιείται ο πολλαπλασιαστής 1000. INDEX warehouse:= (China, Bulgaria, Greece); DATA cost[warehouse]:= 1000(200,150,400); Οι πραγματικές τιμές του διανύσματος είναι: (200000, 150000, 400000).
ΔΗΛΩΣΗ ΠΑΡΑΜΕΤΡΩΝ (DATA) Παραδείγματα ορισμού πολυδιάστατων παραμέτρων(π.χ. Πίνακας τιμών): D[i,j] := (5,6,3,2,7, 3,2,4,8,9, 8,9,10,5,11, 15,4,8,10,7) ; Εναλλακτικά: D[i,j] :=( (5,6,3,2,7), (3,2,4,8,9), (8,9,10,5,11), (15,4,8,10,7) ) ;
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) • Οι μεταβλητές αποφάσεων ορίζονται στο τμήμα δηλώσεων “DECISION VARIABLES”. • Κάθε μεταβλητή μπορεί να έχει οποιοδήποτε μέγεθος. Ξεκινάει με γράμμα και το υπόλοιπο αποτελείται από γράμματα και ψηφία. • Υπάρχουν 2 τύποι μεταβλητών αποφάσεων (decision variables): απλέςμεταβλητές(plain variables) και πολυδιάστατες μεταβλητές (vector variables). Απλές Μεταβλητές (plain variables) • Κάθε απλή μεταβλητή έχει την ακόλουθη μορφή: {όνομα μεταβλητής} [{όνομα συνόλου}]; Για παράδειγμα: Invest[stock] ;
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) Πολυδιάστατες μεταβλητές (vector variables). • Οι πολυδιάστατες μεταβλητές αναφέρονται σε ένα εύρος στηλών. • Οι πολυδιάστατες μεταβλητές πρέπει να ορίζονται προτού χρησιμοποιηθούν στο μοντέλο. • Κάθε πολυδιάστατη μεταβλητή έχει την ακόλουθη μορφή: {όνομα πολυδιάστατης μεταβλητής} [{όνομα συνόλου1, όνομα συνόλου2,..., όνομα συνόλουκ}] ; Για παράδειγμα: DECISION VARIABLES ShipWM[producer, warehouse]; Στο συγκεκριμένο παράδειγμα ορίζουμε μια μεταβλητή απόφασης ShipWM, η οποία αναφέρεται στη ποσότητα που μεταφέρεται από το producer (προμηθευτή) στο warehouse (αποθήκη).
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) • Επειδή το μέγεθος των ονομάτων των μεταβλητών στις περισσότερες μηχανές βελτιστοποίησης (LPsolver) δεν ξεπερνά τους 8 χαρακτήρες, μπορεί να χρησιμοποιηθεί ο τελεστής → για να εισάγουμε μικρότερο όνομα. Για παράδειγμα: DECISION VARIABLES Production[product,month] -> Prod ;
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) • Ορισμός μεταβλητών με υποσυνθήκη συνόλα • Όταν οι δείκτες ανήκουν σε κάποιο υποσύνολο: Για παράδειγμα: INDEX Nodes:=(1,2,3,4); i[Nodes]; j[Nodes]; link[i,j]:=((1,2),(1,4),(1,3),(2,3),(3,2)); DECISION VARIABLE X[link];
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) • Όταν οι δείκτες ορίζονται από αλγεβρική παράσταση παραμέτρων: • Σε αυτές τις περιπτώσεις γίνεται χρήση της συνθήκης WHERE. Η συνθήκη WHERE χρησιμοποιείται όταν ο χρήστης θέλει να περιορίσει τον αριθμό των μεταβλητών που θα οριστούν. Για παράδειγμα: DECISION VARIABLES Production[product, month] WHERE (Demand[product,month]>0) ;
ΟΡΙΣΜΟΣ ΜΕΤΑΒΛΗΤΩΝ ΑΠΟΦΑΣΕΩΝ(DECISION VARIABLES) Πιο συγκεκριμένα: INDEX Nodes:=(1,2,3,4); i[Nodes]; j[Nodes]; DATA cost[i,j]:=(0,2,2,3, 2,0,3,5, 3,4,0,5, 2,5,7,0) ; DECISION VARIABLEY[i,j] WHERE (cost[i,j] > 0) ;