Esercizi di MPL - Università di Bologna

Transcript

Esercizi di MPL - Università di Bologna
Esempi di Uso di MPL per
problemi LP ed ILP
Michele Monaci e Daniele Vigo
D.E.I.S. – Università di Bologna
[email protected]
rev. 2.0 – ottobre 2002
Knapsack 01
Problema dello zaino:
•
•
•
•
n
p
w
c
i
i
oggetti
profitto oggetto i
peso oggetto i
capacità dello zaino
massimizzare il profitto degli oggetti inseriti nello
zaino rispettando il vincolo di capacità
D. Vigo
MPL.Es
.2
•1
Modello PLI di KP-01
max
∑px
n
i =1
i i
∑w x
n
i =1
i i
x
i
≤c
∈ {0,1} i = 1,
Kn
,
D. Vigo
MPL.Es
.3
Soluzione MPL di KP-01(1)
TITLE
KP01;
INDEX
oggetti := 1..10;
DATA
profitti := (5, 7, 4, 2, 2, 1, 8, 6, 4, 9);
pesi:= (8, 9, 3, 2, 3, 1, 4, 7, 5, 10);
capacita := 14;
D. Vigo
MPL.Es
.4
•2
Soluzione MPL di KP-01(2)
VARIABLES
x[oggetti];
MODEL
MAX z = SUM(oggetti: x*profitti);
SUBJECT TO
SUM(oggetti: x * pesi) <= capacita;
BINARY x
END
D. Vigo
MPL.Es
.5
Knapsack Multiplo (MKP-01)
Problema dello zaino:
•
•
•
•
•
•
n oggetti
p profitto oggetto i
w peso oggetto i
m contenitori (identici)
c capacità dei contenitori
Un oggetto può essere inserito in un solo contenitore
i
i
massimizzare il profitto degli oggetti inseriti nei
contenitori rispettando il vincolo di capacità di
ciascun contenitore
D. Vigo
MPL.Es
.6
•3
Modello PLI di MKP-01
∑ ∑x
n
max
i =1
pi
∑w x
m
∑j xij
n
i ij
i =1
m
j =1
ij
≤c
j=
,
≤ 1 i = 1,
,
=1
x
ij
Km
Kn
K n j= K m
1,
∈ {0,1}
i=
1,
,
D. Vigo
;
1,
,
MPL.Es
.7
Soluzione MPL di MKP-01(1)
TITLE MKP01;
INDEX
oggetti := 1..10;
bin := 1..2;
DATA
profitti := (5, 7, 4, 2, 2, 1, 8, 6, 4, 9);
pesi:= (8, 9, 3, 2, 3, 1, 4, 7, 5, 10);
capacita := 14;
D. Vigo
MPL.Es
.8
•4
Soluzione MPL di MKP-01(2)
VARIABLES
x[oggetti, bin];
MODEL
MAX z = SUM(oggetti, bin : x*profitti);
SUBJECT TO
cap[bin]: SUM(oggetti: x[bin] * pesi) <= capacita;
v[oggetti]: SUM(bin: x[oggetti] ) <= 1;
BINARY x
END
D. Vigo
MPL.Es
.9
Transportation Problem
Problema:
•
•
•
•
•
n centri di produzione
m centri di stoccaggio
c massima capacità produttiva centro di produzione i
r minima quantità richiesta da centro di stoccaggio j
cost costo per inviare una unità di prodotto da centro di
produzione i a centro di stoccaggio j
i
j
ij
Minimizzare il costo di trasporto totale
D. Vigo
MPL.Es
.10
•5
Modello PLI di TP
min
∑∑ cost x
∑x ≥r j = K m
∑x ≤c i = K m
n
m
i =1 j =1
ij ij
n
ij
i
j
1,
,
1,
,
=1
m
ij
j
x
ij
i
=1
≥ 0 (intero)
i=
1,
Kn
,
;
j=
D. Vigo
1,
Km
,
MPL.Es
.11
Soluzione MPL di TP (1)
INDEX
supply = (Wh1,Wh2,Wh3,Wh4,Wh5);
dest
= (A1,A2,B1,B2,B3,C1,C2,C3);
DATA
MaxCapacity[supply] := (200,300,250,450,350);
Required[dest]
:=
(188,214,137,199,225,200,177,185);
ShipCost[supply,dest]:=DATAFILE(“tp_cost.dat”);
D. Vigo
MPL.Es
.12
•6
Soluzione MPL di TP (2)
DECISION VARIABLES
X[supply,dest] ;
MODEL
MIN TotalCost = SUM(supply,dest: ShipCost * X);
SUBJECT TO
Capacity[supply] : SUM(dest: X)
Demand[dest]
< MaxCapacity ;
: SUM(supply: X) > Required ;
END
D. Vigo
MPL.Es
.13
Attivazione impianti
Problema:
• n possibili impianti
• Ogni impianto j è caratterizzato da:
costo iniziale
• F
•V
costo per unità di prodotto
• M massima capacità produttiva (per il periodo)
j
j
j
Minimizzare il costo complessivo
necessario per produrre, nel periodo in
esame, R unità di prodotto.
D. Vigo
MPL.Es
.14
•7
Modello PLI
min
∑ F y +V x
∑x ≥ R
n
j
i =1
j
j
j
n
j
j =1
x
j
≤M y
x
j
≥0
y
j
j
j
j = 1,
,
Kn
j= K n
j = 1,
∈ {0,1}
Kn
,
1,
,
D. Vigo
MPL.Es
.15
Soluzione MPL (1)
INDEX
impianti:=(1,2,3,4,5,6);
DATA
Max_prod[impianti]:=
(100, 90, 75, 30, 45, 70);
Fix_cost[impianti]:=(256, 200, 180, 90, 110, 135);
Var_cost[impianti]:= ( 7,
9, 11, 18, 16, 10);
Req:= 200;
D. Vigo
MPL.Es
.16
•8
Soluzione MPL (2)
DECISION VARIABLES
prod[impianti]; !produzione di ogni impianto
costr[impianti]; !impianto costruito o no
MACRO
Prod_cost:= SUM(impianti: prod * Var_cost);
Init_cost := SUM(impianti: costr * Fix_cost);
D. Vigo
MPL.Es
.17
Soluzione MPL (3)
MODEL
MIN Costo=Init_cost + Prod_cost;
SUBJECT TO
TOTP: SUM(impianti: prod) >= Req;
CMAX[impianti]: prod <= Max_prod;
BINARY
costr[impianti];
END
D. Vigo
MPL.Es
.18
•9
Shortest Path Problem
Problema:
• grafo orientato G=(V,A), pesato sugli archi
• c costo arco (i,j)
• dati due vertici s,t∈V, determinare il cammino a
costo minimo da s a t
ij
D. Vigo
MPL.Es
.19
Modello PLI di SPP
min Σ
(i,j):∈
Σ
Α
Costo cammino
N. archi uscenti
N. archi entranti
cx
ij
ij
Γ+(h)
x –Σ
N. archi in S
Σ
(h,j):∈
Superfluo se costi
degli archi sono >= 0
D. Vigo
hj
-
1
(i,h):∈Γ (h)
(i,j):i,j∈S
x = –1
ih
0
se
se
se
h=s
h=t
h ∈V \{s,t}
x ≤ | S | – 1 ∀S ⊆ V, S ≠ ∅
ij
0 ≤ x ≤ 1 intero (i, j) ∈ A
ij
MPL.Es
.20
•10
Soluzione MPL di SPP(1)
TITLE SPP;
INDEX
node := 0..8;
FromNode := node;
ToNode := node;
D. Vigo
MPL.Es
.21
Soluzione MPL di SPP(2)
DATA
Distance[FromNode,ToNode] := SPARSEFILE
(“SPP_DIST.DAT”);
VARIABLES
Path[FromNode, ToNode]
WHERE (Distance > 0);
D. Vigo
MPL.Es
.22
•11
Soluzione MPL di SPP(3)
MODEL
MIN TotalDistance = SUM(FromNode, ToNode:
Distance * Path);
SUBJECT TO
FlowBalance[node] :
IF (node=0) THEN 1 ENDIF +
SUM(FromNode: Path[FromNode,
ToNode:=node]) =
IF (node=8) THEN 1 ENDIF + SUM(ToNode:
Path[FromNode:=node, ToNode]) ;
END
D. Vigo
MPL.Es
.23
Esercizio 1
• Allocazione di lavori a macchine:
•
•
•
•
•
n
m
d
c
D
lavori
macchine (con
m < n)
i
i
durata esecuzione lavoro
ij
“costo” di allocazione lavoro i a macchina
j
capacità macchine (max tempo lavorazione)
• Es: n = 7, m = 3, D = 40, d ={5,8,10,6,12,15,13}
c = {5, 3, 2, 4, 6, 10, 8,
8, 3, 4, 5, 3, 7, 4,
4, 1, 4, 3, 4, 5, 9}
D. Vigo
MPL.Es
.24
•12
Assegnamento Generalizzato
xij
1 se lavoro i assegnato alla macchina
=
0 altrimenti
n m
min
∑∑ c x
∑d x
∑x
≤D
j=
=1
i = 1,
i =1 j =1
n
i =1
x
ij
D. Vigo
i ij
n
j =1
ij
∈ {0,1}
j
ij ij
i=
1,
Km
Kn
1,
,
,
Kn
,
;
j=
1,
Km
,
MPL.Es
.25
•13