mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-24 03:04:18 +00:00
Importa OLI da Steffo99/gmpl-stuff
This commit is contained in:
parent
89b3a26aa7
commit
f8c212ff85
4 changed files with 148 additions and 0 deletions
|
@ -0,0 +1,21 @@
|
||||||
|
/* Primale */
|
||||||
|
var x;
|
||||||
|
var y;
|
||||||
|
|
||||||
|
maximize s: x + y;
|
||||||
|
c1: 2*x + y <= 5;
|
||||||
|
c2: x + 2*y <= 5;
|
||||||
|
|
||||||
|
/* Duale */
|
||||||
|
var a;
|
||||||
|
var b;
|
||||||
|
|
||||||
|
minimize z: 5*a + 5*b;
|
||||||
|
c3: 2*a + b >= 1;
|
||||||
|
c4: a + 2*b >= 1;
|
||||||
|
|
||||||
|
solve;
|
||||||
|
display x, y, s;
|
||||||
|
display a, b, z;
|
||||||
|
|
||||||
|
end;
|
|
@ -0,0 +1,13 @@
|
||||||
|
var w >= 0;
|
||||||
|
var x >= 0;
|
||||||
|
var y >= 0;
|
||||||
|
var z >= 0;
|
||||||
|
|
||||||
|
maximize sol: 3*w - 2*x + z;
|
||||||
|
c1: w - x + 3*y >= 8;
|
||||||
|
c2: 4*x + 5*z <= 12;
|
||||||
|
c3: 3*w - 4*y + z >= 15;
|
||||||
|
|
||||||
|
solve;
|
||||||
|
display sol, w, x, y, z;
|
||||||
|
end;
|
|
@ -0,0 +1,75 @@
|
||||||
|
/*
|
||||||
|
Un grossista gestisce nel suo magazzino P tipi di prodotti differenti.
|
||||||
|
- [x] Ogni prodotto k = 1..P ha un volume di v_k unità.
|
||||||
|
- [x] Ogni prodotto ha una domanda stimata, per le prossime T settimane, pari a d_{tk} (t = 1..T).
|
||||||
|
- [x] L'approvigionamento di ogni prodotto k è limitato a un massimo di m_k unità per settimana.
|
||||||
|
- [x] Il volume totale disponibile nel magazzino è pari a V.
|
||||||
|
- [x] Ogni prodotto k non può occupare più di V_k unità di spazio in magazzino.
|
||||||
|
- [x] Alla settimana t = 0 il magazzino dispone di I_{0k} unità di ogni prodotto k.
|
||||||
|
- [x] Alla fine della settimana T devono rimanere in magazzino s_k unità di ogni prodotto k.
|
||||||
|
- [x] In ogni settimana si può ordinare (o meno) ogni prodotto k al rispettivo fornitore.
|
||||||
|
- [x] Il prodotto viene consegnato al magazzino nella stessa settimana.
|
||||||
|
- [x] Ogni ordine di prodotto k non può essere inferiore a una data quantità minima q_k.
|
||||||
|
|
||||||
|
Si scriva un modello di programmazione lineare per aiutare l'azienda a definire una politica di approvigionamento che permetta di soddisfare la domanda, nel rispetto di tutti i vincoli e minimizzando la giacenza media delle T settimane.
|
||||||
|
*/
|
||||||
|
|
||||||
|
# Numero di prodotti
|
||||||
|
param P;
|
||||||
|
|
||||||
|
# Numero di settimane
|
||||||
|
param T;
|
||||||
|
|
||||||
|
# Domanda per ogni prodotto
|
||||||
|
param domanda{1 .. P, 1 .. T}, >= 0;
|
||||||
|
|
||||||
|
# Offerta per ogni prodotto
|
||||||
|
param approvigionamento{1 .. P}, >= 0;
|
||||||
|
|
||||||
|
# Quantità in magazzino di ogni prodotto alla settimana 0
|
||||||
|
param quantitaIniziale{1 .. P}, >= 0;
|
||||||
|
|
||||||
|
# Capacità in magazzino massima di ogni prodotto
|
||||||
|
param capacita{1 .. P}, >= 0;
|
||||||
|
|
||||||
|
# Capacità massima in totale
|
||||||
|
param capacitaTotale, >= 0;
|
||||||
|
|
||||||
|
# Quantità minima di ogni prodotto che deve rimanere in magazzino alla fine dell'ultima settimana
|
||||||
|
param safety{1 .. P}, >= 0;
|
||||||
|
|
||||||
|
# Dimensione minima di un ordine
|
||||||
|
param ordineMinimo{1 .. P}, >= 0;
|
||||||
|
|
||||||
|
# Quantità da ordinare ogni settimana di ogni prodotto
|
||||||
|
var ordine{1 .. P, 1 .. T}, >= 0;
|
||||||
|
|
||||||
|
# Quantità in magazzino di ogni prodotto
|
||||||
|
var quantita{1 .. P, 1 .. T}, >= 0;
|
||||||
|
|
||||||
|
# Quantità totale di prodotti in magazzino
|
||||||
|
var quantitaTotale{1 .. T}, >= 0;
|
||||||
|
|
||||||
|
|
||||||
|
# All'ultima settimana, la quantità deve essere almeno safety
|
||||||
|
c1{p in 1 .. P}: safety[p] <= quantita[p, T];
|
||||||
|
|
||||||
|
# La quantità di ogni prodotto deve sempre essere minore della capacità e la safety.
|
||||||
|
c2{p in 1 .. P, t in 1 .. T}: quantita[p, t] <= capacita[p];
|
||||||
|
|
||||||
|
# Ci possono essere massimo X prodotti in magazzino.
|
||||||
|
c3{t in 1 .. T}: quantitaTotale[t] == sum{p in 1 .. P} quantita[p, t];
|
||||||
|
c4{t in 1 .. T}: quantitaTotale[t] <= capacitaTotale;
|
||||||
|
|
||||||
|
# Si può ordinare al minimo X e al massimo Y prodotti ogni settimana
|
||||||
|
c5{p in 1 .. P, t in 1 .. T}: ordine[p, t] >= ordineMinimo[p];
|
||||||
|
c6{p in 1 .. P, t in 1 .. T}: ordine[p, t] <= approvigionamento[p];
|
||||||
|
|
||||||
|
# La quantità è uguale alla somma degli ordini e della quantità iniziale
|
||||||
|
c7{p in 1 .. P, t in 1 .. T}: quantita[p, t] == quantitaIniziale[p] + sum{u in 1 .. t} ordine[p, u] - sum{u in 1 .. t} domanda[p, u];
|
||||||
|
|
||||||
|
# Funzione obiettivo
|
||||||
|
minimize sol: sum{t in 1 .. T} quantitaTotale[t];
|
||||||
|
solve;
|
||||||
|
|
||||||
|
end;
|
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
A warehouse has to store n boxes in a rack with m shelves.
|
||||||
|
The first m1 shelves have length L1, while the remaining have length L2.
|
||||||
|
Each box j = 1..n has length l_j and a frequency of usage f_j.
|
||||||
|
Write a linear programming model that helps the warehouse to decide how to store the boxes,
|
||||||
|
so that the sum of the frequencies of the boxes stored in the first m1 shelves is maximized.
|
||||||
|
(N.B. It is not known if all the boxes can be stored.)
|
||||||
|
*/
|
||||||
|
|
||||||
|
# Set casse
|
||||||
|
param nCasse >= 1;
|
||||||
|
set CASSE := 1..nCasse;
|
||||||
|
|
||||||
|
# Set scaffali
|
||||||
|
param nScaffali >= 1;
|
||||||
|
set SCAFFALI := 1..nScaffali;
|
||||||
|
|
||||||
|
# Parametri cassa
|
||||||
|
param dimensione{c in CASSE} >= 0;
|
||||||
|
param frequenza{c in CASSE} >= 0;
|
||||||
|
|
||||||
|
# Parametri scaffali
|
||||||
|
param spazioA >= 0;
|
||||||
|
param spazioB >= 0;
|
||||||
|
param cutoff >= 1, <= nScaffali + 1; # Tutti gli scaffali maggiori o uguali a questo numero saranno considerati nel set B
|
||||||
|
param spazio{s in SCAFFALI} := if s >= cutoff then spazioB else spazioA;
|
||||||
|
set SCAFFALI_A := 1..cutoff;
|
||||||
|
set SCAFFALI_B := cutoff + 1 ..nScaffali;
|
||||||
|
|
||||||
|
# Vincoli
|
||||||
|
var suScaffale{c in CASSE, s in SCAFFALI} binary;
|
||||||
|
c1{c in CASSE}: sum{s in SCAFFALI} suScaffale[c, s] == 1;
|
||||||
|
c2{s in SCAFFALI}: sum{c in CASSE} dimensione[c] * suScaffale[c, s] <= spazio[s];
|
||||||
|
|
||||||
|
# Funzione obiettivo
|
||||||
|
maximize z: sum{c in CASSE, s in SCAFFALI_A} suScaffale[c, s] * frequenza[c];
|
||||||
|
|
||||||
|
solve;
|
||||||
|
end;
|
Loading…
Reference in a new issue