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