Sei sulla pagina 1di 9

DOTTORATO IN INGEGNERIA INDUSTRIALE

Corso di Network Optimization


Esercitazione finale
Alessandro Pilloni 03/11/2011

Corso di Network Optimization 2011


Esercizio 1: Scrivere su Cplex listanza relativa alla rete non bilanciata in Figura 1, usando un costo pari a 100 per gli archi artificiali.

Figura 1 Soluzione Esercizio 1: Un problema di Flusso a Costo Minimo (MCF) per una rete pu essere rappresentato dalla seguente definizione: Il problema consiste nel far giungere il "prodotto" realizzato nei nodi sorgente (nodi con > 0) ai nodi destinazione (nodi con < 0) facendolo viaggiare attraverso la rete e cercando di spendere il meno possibile per il trasporto. In altre parole: Dato un grafo G(N,A) definito da una coppia di insiemi N ed A, dove: N linsieme dei nodi del grafo ed solitamente associato linsieme dei numeri primi; A linsieme degli archi ed un sottoinsieme del prodotto cartesiano NxN, dove ogni arco rappresentato da una coppia di valori (i,j), dove i detto Coda, mentre il nodo j e detto Testa dellarco.

Un problema MCF si traduce nella risoluzione del seguente problema di minimo vincolato: min
,

min


() ()

0 , 0 Dove S(i) e P(i) sono rispettivamente linsieme dei Successori e Predecessori di un nodo i, definiti come: = ,

() = { ( ) } Mentre E la matrice di incidenza nodi archi.

Corso di Network Optimization 2011


Nel nostro caso stato inserito un nodo artificiale in maniera da bilanciare la rete (nodo 6) nel caso in cui questa non lo fosse, e sono stati inseriti degli archi con valori di domanda sufficientemente costosi da rendere poco conveniente tale percorso ed un peso 6 = 0 dato che per la rete deve comunque valere la seguente relazione: = 0

Lo script Cplex che permette di risolvere il problema MCF associato a questa rete il seguente:
/********************************************* * OPL 12.2 Model * Author: Alessandro Pilloni * Creation Date: 29/giu/2011 at 15:09:56 *********************************************/ /*Definizione delle variabili di flusso*/ dvar float+ x12; dvar float+ x13; dvar float+ x15; dvar float+ x23; dvar float+ x34; dvar float+ x42; dvar float+ x45; dvar float+ x53; /* Archi associati al nodo artificiale */ dvar float+ x16; dvar float+ x26; dvar float+ x36; dvar float+ x64; dvar float+ x65; minimize 5*x12-2*x13+2*x15-4*x23+0*x34+6*x42+3*x45+4*x53+100*(x16+x26+x36+x64+x65); subject to { /* Queste sono le equazioni di bilancio per ogni nodo */ x12+x13+x15 +x16 == 2; x23-x12-x42 +x26 == 5; x34-x13-x23-x53 +x36 == 1; x42+x45-x34 -x64 == -4; x53-x15-x45 -x65 == -4; /* Equazione del bilancio al nodo artificiale */ x64+x65-x16-x26-x36==0; }

Mandando in run questo script in Cplex, si ottiene la seguente soluzione ottimale, dove la funzione obbiettivo da minimizzare varr -12, a lalbero ricoprente soluzione del problema costituito dalla seguente base: = Ed i pesi associati a tali archi valgono: 13 = 2 23 = 5 Mentre per tutti i restanti sono pari a zero. La stessa soluzione si sarebbe potuta ottenere analiticamente come mostrato nel materiale didattico relativo allesercitazione. Si noti inoltre che gli archi a costo elevato non sono comparsi nella soluzione. 34 = 8 45 = 4 1,3 (2,3) (3,4) (4,5)

Corso di Network Optimization 2011


Esercizio 2: Scrivere su Cplex listanza relativa alla precedente rete, usando costo pari a 0 per gli archi inter-periodali.

Figura 2 Soluzione Esercizio 2: Questo problema rappresenta un problema di allocazione di risorse in diversi periodi futuri. Come si pu vedere in Figura 2, questo problema stato modellato duplicando la rete base, in Figura1, ed inserendo degli archi inter-perioidali ed intra-perioidali. Lobbiettivo preposto sar quello di minimizzare i costi delle decisioni relative a tutti periodi, in modo tale che i vincoli siano soddisfatti in tutti i periodi. Si noti che solitamente si attuano le decisioni relative al primo periodo, si aggiornano i dati e si risolve una nuova istanza in cui il secondo periodo diventato il primo (Rollin Horizon fashion). Lo script Cplex relativo alla rete in Figura 2 il seguente:
/********************************************* * OPL 12.2 Model * Author: Alessandro Pilloni * Creation Date: 29/giu/2011 at 15:28:41 *********************************************/ /* ************** DEFINIZIONE VARIABILI DI FLUSSO ************ */ /* Periodo 1 */ dvar float+ x121; dvar float+ x131; dvar float+ x151; dvar float+ x231; dvar float+ x341; dvar float+ dvar float+ x451; dvar float+ x531; /* Archi associati al nodo artificiale al periodo 1 */ dvar float+ x161; dvar float+ x261; dvar float+ dvar float+ x641; dvar float+ x651; /* Archi inter-periodali tra periodo 1 e periodo 2 */ dvar float+ y111; dvar float+ y221; dvar float+ /* Periodo 2 */ dvar float+ x122; dvar float+ x132; dvar float+ x152; dvar float+ x232; dvar float+ x342; dvar float+ dvar float+ x452; dvar float+ x532; /* Archi associati al nodo artificiale al periodo 2 */ dvar float+ x162; dvar float+ x262; dvar float+ dvar float+ x642; dvar float+ x652; /* Archi inter-periodali tra periodo 2 e periodo 3 */ dvar float+ y112; dvar float+ y222; dvar float+ /* Periodo 3 */ dvar float+ x123; dvar float+ x133; dvar float+ x153; dvar float+ x233; dvar float+ x343; dvar float+ dvar float+ x453; dvar float+ x533; /* Archi associati al nodo artificiale al periodo 3 */ dvar float+ x163; dvar float+ x263; dvar float+ dvar float+ x643; dvar float+ x653;

x421; x361; y331; x422; x362; y332; x423; x363;

Corso di Network Optimization 2011


minimize 5*x121-2*x131+2*x151-4*x231+0*x341+6*x421+3*x451+4*x531+100*(x161+x261+x361+x641+x651)+ 5*x122-2*x132+2*x152-4*x232+0*x342+6*x422+3*x452+4*x532+100*(x162+x262+x362+x642+x652)+ 5*x123-2*x133+2*x153-4*x233+0*x343+6*x423+3*x453+4*x533+100*(x163+x263+x363+x643+x653); subject to { /* Periodo 1 */ x121+x131+x151 x231-x121-x421 x341-x131-x231-x531 x421+x451-x341 x531-x151-x451 /* Periodo 2 */ -y111 +x122+x132+x152 -y221 +x232-x122-x422 -y331 +x342-x132-x232-x532 x422+x452-x342 x532-x152-x452 /* Periodo 3 */ -y112 +x123+x133+x153 -y222 +x233-x123-x423 -y332 +x343-x133-x233-x533 x423+x453-x343 x533-x153-x453 +x161 +y111 +x261 +y221 +x361 +y331 -x641 -x651 +x162 +y112 +x262 +y222 +x362 +y332 -x642 -x652 +x163 +x263 +x363 -x643 -x653 ==2; ==5; ==1; ==-4; ==-4; ==2; ==5; ==1; ==-4; ==-4; ==2; ==5; ==1; ==-4; ==-4; +x643+x653-x163-x263-x363==0;

/* Equazione del bilancio al nodo artificiale */ x641+x651-x161-x261-x361 +x642+x652-x162-x262-x362 }

Si noti che nellimplementazione di questo problema su Cplex si preferito per evitare una inutile ridondanza di nodi pozzo, e quindi rappresentare i tre nodi 6 ripartiti nei tre periodi come un unico nodo. In Figura 3 riportato un esempio visto a lezione di un sistema idrico nel quale si utilizzato il medesimo approccio per la modellazione del nodo pozzo u.

Figura 3 La soluzione del problema fornitaci dal software di calcolo Cplex e riportata di seguito. Il valore ritrovato per la funzione obbiettivo -36, mentre gli archi che soddisfano il problema sono: 1: 13 = 2 23 = 5 34 = 8 2: 13 = 2 23 = 5 34 = 8 3: 13 = 2 23 = 5 34 = 8 Mentre per tutti i restanti sono pari a zero. Per quanto riguarda la soluzione ottenuta, possiamo dire che questa soluzione risulta la replica della precedente su tre periodi, questo perch nei diversi periodi la rete sempre rimasta la stessa, ovvero non si sono verificati cambiamenti tra domanda ed offerta e nei costi di transito dei flussi nella rete. 45 = 4 45 = 4 45 = 4

Corso di Network Optimization 2011

Esercizio 3: Scegliere due possibili valori per un parametro incerto nella precedente rete a 3 periodi. Scrivere su Cplex unistanza a 2 scenari e 3 periodi, imponendo le condizioni di non anticipativit per gli archi il cui nodo di coda nel primo periodo.

Figura 4 Soluzione Esercizio 3: Osservando la rete multi-periodo multi-scenario riportata in Figura 4, possiamo notare che i due scenari differiscono dal fatto che nel terzo periodo la domanda del nodo 5 in un primo caso vale -4, mentre nel secondo, vale -40, questo fatto ha determinato anche il cambio dellofferta del nodo artificiale 6 nel secondo scenario, che passato da 0 a -36, dato che la seguente relazione deve sempre valere: = 0

La quale appunto garantisce che ci che viene prodotto nei nodi sorgente esattamente pari a ci che viene consumato nei nodi destinazione. Detto questo di seguito si riporta listanza Cplex che rappresenta il problema di MCF sopracitato.
/********************************************* * OPL 12.2 Model * Author: Alessandro Pilloni * Creation Date: 02/lug/2011 at 15:05:48 *********************************************/ /* ************** DEFINIZIONE VARIABILI DI FLUSSO ************ */ /* Periodo 1 Scenario 1 */

Corso di Network Optimization 2011


dvar float+ x1211; dvar float+ x1311; dvar float+ x1511; dvar float+ x2311; dvar float+ x3411; dvar float+ x4211; dvar float+ x4511; dvar float+ x5311; /* Archi associati al nodo artificiale */ dvar float+ x1611; dvar float+ x2611; dvar float+ x3611; dvar float+ x6411; dvar float+ x6511; /* Archi inter-periodali tra periodo 1 e periodo 2 */ dvar float+ y1111; dvar float+ y2211; dvar float+ y3311; dvar float+ y66121; dvar float+ y66211; /* Periodo 2 Scenario 1 */ dvar float+ x1221; dvar float+ x1321; dvar float+ x1521; dvar float+ x2321; dvar float+ x3421; dvar float+ x4221; dvar float+ x4521; dvar float+ x5321; /* Archi associati al nodo artificiale al periodo 2 */ dvar float+ x1621; dvar float+ x2621; dvar float+ x3621; dvar float+ x6421; dvar float+ x6521; /* Archi inter-periodali tra periodo 2 e periodo 3 */ dvar float+ y1121; dvar float+ y2221; dvar float+ y3321; dvar float+ y66231; dvar float+ y66321; /* Periodo 3 Scenario 1 */ dvar float+ x1231; dvar float+ x1331; dvar float+ x1531; dvar float+ x2331; dvar float+ x3431; dvar float+ x4231; dvar float+ x4531; dvar float+ x5331; /* Archi associati al nodo artificiale al periodo 2 */ dvar float+ x1631; dvar float+ x2631; dvar float+ x3631; dvar float+ x6431; dvar float+ x6531; /* Periodo 1 Scenario 2 */ dvar float+ x1212; dvar float+ x1312; dvar float+ x1512; dvar float+ x2312; dvar float+ x3412; dvar float+ x4212; dvar float+ x4512; dvar float+ x5312; /* Archi associati al nodo artificiale */ dvar float+ x1612; dvar float+ x2612; dvar float+ x3612; dvar float+ x6412; dvar float+ x6512; /* Archi inter-periodali tra periodo 1 e periodo 2 */ dvar float+ y1112; dvar float+ y2212; dvar float+ y3312; dvar float+ y66122; dvar float+ y66212; /* Periodo 2 Scenario 2 */ dvar float+ x1222; dvar float+ x1322; dvar float+ x1522; dvar float+ x2322; dvar float+ x3422; dvar float+ x4222; dvar float+ x4522; dvar float+ x5322; /* Archi associati al nodo artificiale al periodo 2 */ dvar float+ x1622; dvar float+ x2622; dvar float+ x3622; dvar float+ x6422; dvar float+ x6522; /* Archi inter-periodali tra periodo 2 e periodo 3 */ dvar float+ y1122; dvar float+ y2222; dvar float+ y3322; dvar float+ y66232; dvar float+ y66322; /* Periodo 3 Scenario 2 */ dvar float+ x1232; dvar float+ x1332; dvar float+ x1532; dvar float+ x2332; dvar float+ x3432; dvar float+ x4232; dvar float+ x4532; dvar float+ x5332; /* Archi associati al nodo artificiale al periodo 2 */ dvar float+ x1632; dvar float+ x2632; dvar float+ x3632; dvar float+ x6432; dvar float+ x6532; minimize 5*x1211-2*x1311+2*x1511-4*x2311+0*x3411+6*x4211+3*x4511+4*x5311+ 100*(x1611+x2611+x3611+x6411+x6511)+ 5*x1221-2*x1321+2*x1521-4*x2321+0*x3421+6*x4221+3*x4521+4*x5321+ 100*(x1621+x2621+x3621+x6421+x6521)+ 5*x1231-2*x1331+2*x1531-4*x2331+0*x3431+6*x4231+3*x4531+4*x5331+ 100*(x1631+x2631+x3631+x6431+x6531)+ 5*x1212-2*x1312+2*x1512-4*x2312+0*x3412+6*x4212+3*x4512+4*x5312+ 100*(x1612+x2612+x3612+x6412+x6512)+ 5*x1222-2*x1322+2*x1522-4*x2322+0*x3422+6*x4222+3*x4522+4*x5322+ 100*(x1622+x2622+x3622+x6422+x6522)+ 5*x1232-2*x1332+2*x1532-4*x2332+0*x3432+6*x4232+3*x4532+4*x5332+ 100*(x1632+x2632+x3632+x6432+x6532); subject to { /* Periodo 1 Scenario 1 */ x1211+x1311+x1511 +x1611 x2311-x1211-x4211 +x2611 x3411-x1311-x2311-x5311 +x3611 x4211+x4511-x3411 -x6411 x5311-x1511-x4511 -x6511

+y1111 ==2; +y2211 ==5; +y3311 ==1; ==-4; ==-4;

Corso di Network Optimization 2011


x6411+x6511-x1611-x2611-x3611 /* Periodo 2 Scenario 1 */ -y1111 +x1221+x1321+x1521 -y2211 +x2321-x1221-x4221 -y3311 +x3421-x1321-x2321-x5321 x4221+x4521-x3421 x5321-x1521-x4521 +y66121-y66211 ==0;

+x1621 +y1121 ==2; +x2621 +y2221 ==5; +x3621 +y3321 ==1; -x6421 ==-4; -x6521 ==-4; +y66231-y66321==0; +x1631 +x2631 +x3631 ==2; ==5; ==1; -x6431 ==-4; -x6531 ==-4;

y66211-y66121 +x6421+x6521-x1621-x2621-x3621 /* Periodo 3 Scenario 1 */ -y1121 +x1231+x1331+x1531 -y2221 +x2331-x1231-x4231 -y3321 +x3431-x1331-x2331-x5331 x4231+x4531-x3431 x5331-x1531-x4531

y66321-y66231 +x6431+x6531-x1631-x2631-x3631 ==0; /* Periodo 1 Scenario 2 */ x1212+x1312+x1512 +x1612 +y1112 ==2; x2312-x1212-x4212 +x2612 +y2212 ==5; x3412-x1312-x2312-x5312 +x3612 +y3312 ==1; x4212+x4512-x3412 -x6412 ==-4; x5312-x1512-x4512 -x6512 ==-4; x6412+x6512-x1612-x2612-x3612 /* Periodo 2 Scenario 2 */ -y1112 +x1222+x1322+x1522 -y2212 +x2322-x1222-x4222 -y3312 +x3422-x1322-x2322-x5322 x4222+x4522-x3422 x5322-x1522-x4522 +y66122-y66212==0;

+x1622 +y1122 ==2; +x2622 +y2222 ==5; +x3622 +y3322 ==1; -x6422 ==-4; -x6522 ==-4; +y66232-y66322==0; +x1632 +x2632 +x3632 ==2; ==5; ==1; -x6432 ==-4; -x6532 ==-40;

y66212-y66122 +x6422+x6522-x1622-x2622-x3622 /* Periodo 3 Scenario 2 */ -y1122 +x1232+x1332+x1532 -y2222 +x2332-x1232-x4232 -y3322 +x3432-x1332-x2332-x5332 x4232+x4532-x3432 x5332-x1532-x4532

y66322-y66232 +x6432+x6532-x1632-x2632-x3632 ==36; /* Condizioni di non anticipativit */ x1211==x1212; x1311==x1312; x1511==x1512; x3411==x3412; x4211==x4212; x4511==x4512; /* Archi associati al nodo artificiale */ x1611==x1612; x2611==x2612; x3611==x3612; /* Archi inter-periodali tra periodo 1 e periodo y1111==y1112; y2211==y2212; y3311==y2212; }

x2311==x2312; x5311==x5312; x6411==x6412; x6511==x6512; 2 */ y66121==y66122; y66211==y66212;

A differenza della rete multi-periodo dellesercizio precedente in questo caso si preferito implementare la struttura della rete in Figura 4, ovvero con un nodo pozzo per ogni grafo di ogni periodo e scenario. Osservando il codice riportato, oltre al classico bilancio di flussi, in questo caso allinterno del costrutto
subject to{}

sono stati inseriti dei vincoli aggiuntivi su tutti gli archi in cui il nodo di coda nel primo periodo; questi vincoli sono detti condizioni di non anticipativit, le quali rappresentano il fatto che la rete tra il primo ed il secondo periodo per entrambi gli scenari presenti la medesima dinamica e quindi si comporti alla stessa maniera.

Corso di Network Optimization 2011


Di seguito si riporta la soluzione ottenuta attraverso il software di calcolo Cplex. In particolare si ottenuto un valore di 3.528 per la funzione obbiettivo. In Tabella 1 sono riportati i valori associati alle variabili decisionali per i diversi periodi e scenari. Tabella 1

Periodo 1
13 23 34 45 13 23 34 45 =2 =5 =8 =4 =2 =5 =8 =4

Periodo 2
13 23 34 45 13 23 34 45 =2 =5 =8 =4 =2 =5 =8 =4

Periodo 3
13 23 34 45 = = = = 2 5 8 4

Scenario 1

Scenario 2

13 = 2 23 = 5 34 = 8 45 = 4 65 = 36

Osservando i risultati riportati in Tabella 1 possiamo notare come i valori associati alle nostre variabili decisionali sono esattamente gli stessi degli esercizi precedenti ad eccezione per la variabile 65 nel terzo periodo del secondo scenario, il quale in particolare vale 36. Questo risultato risulta del tutto coerente in quanto le offerte dei nodi reali della rete sono rimaste invariate per tutti i periodi e scenari, mentre la richiesta del nodo 5 nel terzo periodo aumentata notevolmente; poich tale richiesta doveva essere necessariamente soddisfatta allora si dovuto ricorrere alle risorse del nodo dummy del terzo periodo, secondo scenario, nonostante queste avessero dei costi decisamente superiori. A titolo di esempio si riportano i risultati simulativi del precedente sistema multi-periodo multi-scenario, nel caso in cui la richiesta del nodo 5 sia ancora -40, ma lofferta del nodo 1 passi da 2 a 38 e lofferta del nodo dummy 6 venga riposta nuovamente a 0. In questo caso si ottiene un valore per la funzione obbiettivo di -36, mentre i valori associati alle variabili di flusso del problema sono riportati in Tabella 2. Osservando tali risultati si nota che essendo la rete bilanciata senza bisogno dei nodi dummy, si ottiene una soluzione che non necessita del loro utilizzo ed infatti la funzione obbiettivo assume un valore di costo ancora pari a -36 come nellEsercizio 2. Tabella 2

Periodo 1
13 23 34 45 13 23 34 45 =2 =5 =8 =4 =2 =5 =8 =4

Periodo 2
13 23 34 45 13 23 34 45 =2 =5 =8 =4 =2 =5 =8 =4

Periodo 3
13 23 34 45 = = = = 2 5 8 4

Scenario 1

Scenario 2

13 = 38 23 = 5 34 = 44 45 = 40