Simplex optimization with Octave
Έστω π η συνάρτηση κέρδους μιας πιτσαρίας που κερδίζει 2 € για κάθε μακαρονάδα και 3 € για κάθε πίτσα. Αν πουλά x1 μακαρονάδες και x2 πίτσες τότε:
$$ \pi(x_1, x_2) = 2\, x_1 + 3\, x_2 $$
Η πιτσαρία έχει μέγιστη παραγωγική ικανότητα 100 πιάτα:
$$ x_1 + x_2 \le 100 $$
Επίσης:
$$ \frac{x_1}{2} + x_2 \le 80 $$
και:
$$ x_2 \le 75 $$
Ο πίνακας των περιορισμών:
c = [2 3]'; A = [ 1 1 1/2 1 0 1 ];
Οι σταθεροί όροι:
b = [100 80 75]'; lb = [0 0]'; ub = [];όπου lb είναι οι κατώτερες πιθανές τιμές και ub οι ανώτερες (εδώ δεν υπάρχει περιορισμός στο άνω όριο).
Οι περιορισμοί δίνονται ως άνω όρια ανισότητας, επομένως ένα U για κάθε ανισότητα:
ctype = "UUU";
Οι μεταβλητές είναι συνεχείς, επομένως ένα C για κάθε μεταβλητή:
vartype = "CC";
Θέτουμε την τιμή -1 στην παράμετρο βελτιστοποίησης (μεγιστοποίηση) αλλιώς 1 για ελαχιστοποίηση της τιμής της αντικειμενικής συνάρτησης.
s = -1;
Θέτουμε προαιρετικά το όριο επαναλήψεων για την εύρεση λύσης
param.itlim = 100;
Καλούμε τη συνάρτηση υπολογισμού της λύσης:
[x, f, status, extra] = ... glpk (c, A, b, lb, ub, ctype, vartype, s, param);όπου x είναι η λύση, f είναι η τιμή της αντικειμενικής συνάρτησης, status είναι η κατάσταση της λύσης (0 αν όλα πήγαν καλά).
Όλο το πρόγραμμα:
c = [2 3]'; A = [ 1 1 1/2 1 0 1 ]; b = [100 80 75]'; lb = [0 0]'; ub = []; ctype = "UUU"; # upper constraint type vartype = "CC"; # continuus variable s = -1; # maximization param.itlim = 100; # iteration limit [x, f, status, extra] = ... glpk (c, A, b, lb, ub, ctype, vartype, s, param);
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.