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);

simplex optimization

Συνδεθείτε για περισσότερες δυνατότητες αλληλεπίδρασης,
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.

Creative Commons License
Εκπαιδευτικό υλικό από τον Αθανάσιο Σταυρακούδη σας παρέχετε κάτω από την άδεια Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.