metodo di gomory (tagli) - dipartimento di matematicasideri/did/romat/disp_rom/d_2012_pli.pdf ·...

21
Metodo di Gomory (tagli) Se si ha un problema max c t x Ax = b x 0 e si cerca una soluzione con x intero sapendo A ,b,c vettori di interi Facile trovare la soluzione x B (con il simplesso) x B 0 e allora A = [B, A 0 ] Bx B =b = B x B + A 0 0 La soluzione x B e’ ha componenti frazionarie del tipo p/q con q = det B (regola di Cramer) Se una componente di x B e’ non intera allora si ha (x B ) i = [(x B ) i ] + α i con [(x B ) i ] intero e 0 < α i < 1 Se x e’ una soluzione intera (x* y*) con x*0, y* 0 si ha b = Bx B = Bx* + A y* e x B = x* + (B -1 A) y* Isolando la riga i si ha (x B ) i = (x*) i + (B -1 A) ik (y*) k Ogni componete della riga di (B -1 A) puo ‘ essere scritto come (B -1 A) ik = [(B -1 A) ik ] + β k con [(B -1 A) ik ] intero e 0 β k < 1 Allora [(x B ) i ] + α i = (x*) i + ( [(B -1 A) ik ] + β k ) (y*) k da cui α i - (β k )(y*) k = (x*) i + ( [(B -1 A) ik ] )(y*) k - [(x B ) i ] Da 0 < α i < 1 , y* 0 , 0 β k

Upload: others

Post on 05-Apr-2020

15 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Metodo di Gomory (tagli) Se si ha un problema

max ctx Ax = b x ≥ 0

e si cerca una soluzione con x intero sapendo A ,b,c vettori di interi Facile trovare la soluzione xB (con il simplesso) xB ≥0 e allora A = [B, A0 ]

BxB=b = B xB + A0 0 La soluzione xB e’ ha componenti frazionarie del tipo p/q con q = det B (regola di Cramer) Se una componente di xB e’ non intera allora si ha

(xB)i = [(xB)i ] + αi con [(xB)i ] intero e 0 < αi < 1 Se x e’ una soluzione intera (x* y*) con x*≥0, y* ≥0 si ha

b = BxB = Bx* + A y* e

xB = x* + (B-1A) y* Isolando la riga i si ha

(xB)i = (x*)i + ∑ (B-1A) ik (y*) k Ogni componete della riga di (B-1A) puo ‘ essere scritto come

(B-1A) ik = [(B-1A) ik] + βk

con [(B-1A) ik] intero e 0 ≤ βk < 1 Allora

[(xB)i ] + αi = (x*)i + ∑ ( [(B-1A) ik] + βk ) (y*) k da cui

αi - ∑ (βk )(y*) k = (x*)i + ∑ ( [(B-1A) ik] )(y*) k - [(xB)i ] Da

0 < αi < 1 , y* ≥0 , 0 ≤ βk

Page 2: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

si ha αi - ∑ (βk )(y*) k <1

Ma (x*)i + ∑ ( [(B-1A) ik] )(y*) k- [(xB)i ] e’ un intero quindi

αi - ∑ (βk )(y*) k ≤ 0 Il vincolo

αi ≤ ∑ (βk )(y) k non e’ rispettato dalla soluzione corrente ( y k =0 ) ed e’ rispettato da qualsiasi soluzione intera (stessa costruzione) . Il vincolo puo’ essere espresso da interi (moltiplicare per det B) e puo’ essere aggiunto. Con questo sistema in teoria e’ possibile, aggiungendo vincoli (tagli di Gomory) trovare la soluzione intera (se esiste)

Page 3: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Il problema dello zaino Si tratta di risolvere il seguente problema (Si suppongono i vari numeri ci , ai , b interi positivi ) max ∑ i ci xi con il vincolo ∑ i ai xi ≤ b e per ogni i xi deve essere o 0 o 1 Il problema si chiama in questo modo perchè è quello che deve risolvere un alpinista che può portare vari oggetti di peso ai in uno zaino . Il massimo peso che può essere portato è b e i vari ci rappresentano l` " utilità " del generico oggetto i . Se l`oggetto i è preso xi vale 1 e se non è preso xi vale 0 Lo stesso problema deve essere risolto se si ha a disposizione una macchina per b ore e si possono fabbricare vari oggetti . In questo caso ai rappresenta il numero di ore per fabbricare l`oggetto i e ci il profitto legato alla produzione dell`oggetto i . Se l`oggetto i è fabbricato xi vale 1 e se non è fabbricato xi vale 0 . Il problema può essere messo in forma canonica ma questo comporta problemi lineari con dimensione alta poichè bisognerebbe introdurre le variabili slack. La matrice risultante non è unimodulare (il vincolo è espresso con numeri ≠1 ) e quindi potrebbe essere risolto con l'algoritmi del tagli ma solo con ulteriori aumenti di dimensione . Per tale problema sono presentati due metodi diversi di soluzione Si tratta di due metodi sviluppati tenendo conto delle caratteristiche particolari del problema. METODO 1 Supponiamo gli indici i ordinati in modo che la successione dei rapporti ci/ai sia non crescente e inoltre che per ogni i valga ai ≤ b Se il problema fosse semplicemente max ∑ i ci xi con i vincoli ∑ i ai xi ≤ b 0≤xi≤1 considerazioni elementari portano a concludere che se ∑ i=1,k ai < b < ∑ i=1,k+1 ai la soluzione ottimale si ottiene ponendo xi = 1 per i =1, k e xk+1 = (b- ∑ i=1,k ai) / ak+1 e xj = 0 per i rimanenti indici . Ciò deriva dal fatto che le prime a1 unità di b rendono r1 = c1/a1 le rimanenti a2 unità rendono r2 = c2/a2 ecc... In corrispondenza di questa soluzione si ha il valore

Page 4: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

V = ∑ i=1,k ci + ck (b- ∑ i=1,k ai) / ak+1 . Evidentemente il massimo valore che può essere ottenuto è dato da [ V] cioè dalla parte intera di V . Non è possibile sapere però se tale valore corrisponde ad una effettiva soluzione . Costruiamo le possibili alternative Se si impone x1 = 1 si ha un problema con una variabile in meno e un peso b massimo pari a b -a1 Se si impone x1= 0 si ha un problema con una variabile in meno e il peso b rimane immutato Siccome i rapporti ci/ai rimangono ordinati calcoliamo per ciascuno dei due casi la soluzione del problema con i vincoli 0≤xi≤1 per le rimanenti variabili e la sua parte intera . Consideriamo l`alternativa che dà la stima più alta per [ V] . Proseguimo da questa operando sulla successiva variabile x2 ecc... Si continua fino a determinare una soluzione ottima . L`ottimalità è garantita dal fatto che le altre possibili scelte danno valori (o stime ) minori per [ V] . Se si impone poi a qualche xi valore 1 o 0 la stime [ V] non cresce . Se esaminando le varie possibilità si supera il peso b si pone [ V] = 0 Anzichè espandere tutto l`albero espandiamo soltanto la parte corrispondente al massimo valore . Il procedimento continua fino a che non si ottiene una soluzione . Ad ogni espansione partiamo sempre dalla stima con valore più alto ESEMPIO max 11 x1 + 12 x2 + 5x3 + 6x4 + 4x5 con il vincolo 10 x1 + 12 x2 + 6x3 + 8x4 + 6x5 ≤ 20 La soluzione con i vincoli rilassati è (1 , 5/6,0 ,0,0 ) valore 11 + 12(5/6) = 21 si impone x1 = 1 o x1 = 0 Se x1 = 1 la soluzione rilassata resta la stessa V = 21 se x1 = 0 la soluzione rilassata è (0 , 1, 1 , 1/4 , 0 ) valore 12 + 5 + 6/4 [V ] =18 Si continua da x1= 1 Se si impone x2 =1 si il vincolo è violato . Si pone V=0 Se x2 = 0 la soluzione è (1,0,1,1/2,0 ) il valore è 11 + 6 + 6/2 = 20 Si continua se x3 = 1 soluzione ( 1,0,1 ,1/2,0) valore 20 se x3 = 0 soluzione (1,0,0,1,1/3 ) valore 11+6 +4/3 [V ] =18

Page 5: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Si continua da x3 = 1 se x4 = 1 soluzione impossibile V = 0 se x4 = 0 soluzione (1,0,1,0, 2/3 ) valore 11 + 5 + 8/3 , [V ] =18 si continua se x5 = 0 soluzione (1,0,1,0,0 ) valore 16 se x5 = 1 soluzione (non accettabile ) (1,0, 1,0,1) V = 0 Si ha V= 18 sia per x3 = 0 , sia per x1 = 0 Se si riparte da x3 = 0 si guarda x4 = 1 soluzione (1,0,0,1,1/3) valore 11 + 6 + 4/3 = 18 x4 = 0 soluzione (1,0,0,0,1) valore = 15 (e non occorre scendere a x5 ) Da x4 = 1 si impone x5 = 1 e si ottiene (1,0,0,1,1) una soluzione impossibile mentre x5 = 0 dà (1,0,0,1,0) valore = 17 Si riparte da x1 = 0 si pone x2 = 1 soluzione (0,1,1,1/4,0,) valore 12 +5+6/4 [V ] =18 si pone x2 = 0 e si ha (0,0,1,1,1) valore 5 +6 +4 = 15 Si continua da x2 = 1 si pone x3 = 1 e si ha soluzione (0,1,1,1/4,0,) valore 12 +5+6/4 [V ] =18 si pone x3 = 0 e si ha (0,1,0,1,0 ) valore 18 Sicccome quest'ultima è una soluzione ammissibile e non è possibile avere valori di ∑ ci xi maggiori di 18 è anche la (o una delle ) soluzioni ottimali . Il metodo equivale alla costruzione del seguente albero

Page 6: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

21

18

18 15

21

20

0

18 20

0 18

016

15 18

17 0

1-1

2-2

-33

4 -4

5-5-5 5

-4 4

18

18

-33

2 -2

Nell`albero -k significa che la variabile xk è posta a zero e k che la variabile xk è posta a 1 . Col il nome branch and bound si denotano vari metodi analoghi all'algorimo precedente che consistono nel generare un albero in generale di soluzioni e/o di limitazioni e di considerarne sempre il nodo di valore "migliore" muovendosi e/o saltando tra i vari nodi. L'efficenza di tali algorimi è fortemente migliorata dall'uso di tecniche raffinate per calcolare le limitazioni e le scelte da effettuare. METODO 2 (programmazione dinamica ) Se si ha il problema max ∑ i=1,n ci xi con il vincolo ∑ i=1,n ai xi ≤ b e per ogni i xi deve essere o 0 o 1 Denotiamo con Vk (p) il massimo valore di ∑ i=1,k ci xi con i vincoli ∑ i=1,k ai xi ≤ b e xi o 0 o 1 . Vk (p) è il massimo valore della funzione obbiettivo usando con un vincolo di peso p e la limitazione ai primi k oggetti . Evidentemente Vn(b) corrisponde alla soluzione .

Page 7: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Poniamo per ogni k Vk(p ) = -∞ se p <0 e Vk(0) = 0 Per V1 si avrà inoltre V1(p ) = 0 se p <a1 e V1(p) = c1 se p ≥ a1 . In generale vale Vk+1 (p) = max { Vk(p) , Vk( p-ak+1) + ck+1 } perchè se per ottenere il valore ottimale Vk+1 (p) si usa l`oggetto (k+1)-esimo vale Vk+1 (p) = Vk( p-ak+1) + ck+1 mentre se non si usa l`oggetto (k+1)-esimo vale Vk+1 (p) = Vk( p) Per determinare la soluzione ottima si scrive Vn(b) = max { Vn-1(b) , Vn-1(b-an) +cn } si calcolano i valori di Vn-1(b) , Vn-1(b-an) e così di seguito fino ad arrivare al calcolo di V1 per diversi pesi . Si sostituiscono i valori e procedendo all`incontrario si ottiene Vn(b) . Quali xi sono 0 e quali sono 1 è ricavato dalle varie eguaglianze . Il metodo risulta comodo se si deve ottenere la soluzione per diversi valori di b (i conti sono simili ) ESEMPIO max 6x1 + 7 x2 + 4x3 + 5x4 + 2x5 con il vincolo 5x1 + 10 x2 + 7x3 + 12x4 + 8x5 ≤ 20 V5(20) = max { V4( 20) ,V4(12) +2 } V4 (20) = max {V3 (20) ,V3(8) +5 } V4 (12) = max {V3 (12) ,V3(0) +5 } = max { V3 (12) , 5 } V3 (20) = max {V2 (20) ,V2(13) +4 } V3 (12) = max {V2 (12) ,V2(5) +4 } V3 (8) = max {V2 (8) ,V2(1) +4 } V2 (20) = max {V1 (20) ,V1(10) +7 } V2 (13) = max {V1 (13) ,V1(3) +7 } V2 (12) = max {V1 (12) ,V1(2) +7 } V2 (8) = max {V1 (8) ,V1(-2) +7 } = V1 (8) V2 (5) = max {V1 (5) ,V1(-5) +7 } = V1 (5) V2 (1) = max {V1 (1) ,V1(-9) +7 } = V1 (1) V1 ( p) = 6 per p≥5 V1 ( p) = 0 per 0 ≤p <5

Page 8: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Quindi V2 (1) = 0 V2 (5) = V1 (5) = 6 V2 (8) = V1 (8) = 6 V2 (12) = max {V1 (12) ,V1(2) +7 } = V1(2) +7 = 7 V2 (13) = max {V1 (13) ,V1(3) +7 } = V1(3) +7 = 7 V2 (20) = max {V1 (20) ,V1(10) +7 } = V1(10) +7 = 13 V3 (8) = max {V2 (8) ,V2(1) +4 } = V2 (8) = 6 V3 (12) = max {V2 (12) ,V2(5) +4 }= V2(5) +4 = 9 V3 (20) = max {V2 (20) ,V2(13) +4 } = V2 (20) = 13 V4 (12) = max {V3 (12) ,V3(0) +5 } = max { V3 (12) , 5 } = V3 (12) =9 V4 (20) = max {V3 (20) ,V3(8) +5 } = V3 (20) = 13 V5(20) = max { V4( 20) ,V4(12) +2 } = V4( 20) = 13 Poichè V5(20) = V4 (20) = V3 (20) = V2 (20) e V2 (20)= V1(10) +7 , V1 ( p) = 6 per p≥5 segue che x1 =1 , x2 =2 , x3 =0 , x4 = 0 , x5 = 0 Questa tecnica non genera esplicitamente un albero ma risulta comunque abbastanza complessa. Può essere comoda nel caso in cui il problema debba esere risolto con diversi valori di b. E' da notare che se si fosse usato il simplesso il problema sarebbe diventato max 6x1 + 7 x2 + 4x3 + 5x4 + 2x5 con il vincolo originale 5x1 + 10 x2 + 7x3 + 12x4 + 8x5 ≤ 20 ed i cinque vincoli xi ≤ 1 , i=1,...,5 Il problema in forma canonica avrebbe richiesto 6 ulteriori variabili slack e la matrice di base sarebbe stata di 6 righe e 11 colonne. Analogamente un problema dello zaino con n variabili porta ad un problema rilassato (forma canonica ) di n+1 righe e 2n+1 colonne. L'uso dell' algoritmo di taglio può portare a lavorare con matrici di dimensione 2n+1.

Page 9: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Set covering Un particolare tipo di problemi lineari a numeri interi è dato dai problemi del tipo

min ∑i xi vincolato a xi = 0 oppure xi =1 e con le righe di vincoli

∑i ∈r(i) xi ≥ 1 (per ogni riga i r(i) rappresenta l'insieme degli indici presenti nella riga ) Problemi di questo tipo si chiamano Set covering perchè uno dei problemi della classe è il seguente : sono dati degli insiemi S1 , ..., Sn e degli elementi e1 , ..., ek e ogni elemento appartiene ad almeno un insieme Sp . Determinare il numero minimo di elementi ei necessari per avere per ogni insieme Sj almeno un elemento nell'insieme . Per questo problema si avrebbe xi = 0 se l'elemento ei non è preso e xi = 1 se l'elemento ei è preso . Per ogni insieme Sk si ha il vincolo

∑ xi ≥ 1 e la somma è limitata agli xi corrispondenti agli elementi xi nell'insieme . Problemi analoghi sorgono se si deve determinare il numero minimo di servizi ( es. scuole , ospedali ecc...) con il vincolo di offrire ad ogni quartiere un servizio sufficentemente vicino . La matrice dei vincoli del set covering è una matrice con tutti 0 o 1 ma non si tratta di una matrice totalmente unimodulare. In questo caso una soluzione può essere ottenuta con tecniche euristiche che fanno uso di - caratteristiche del problema - possibilità di semplificazioni - tecniche enumerative e stime di casi peggiori - In generale la matrice può essere semplificata usando due semplici regole R1) Se si hanno due righe r1 e r2 e gli 1 della riga r1 sono in corrispondenza di 1 della riga r2 allora si può cancellare la riga r2 ( la riga r2 può avere 1 in corrispondenza di zeri della riga r1 ) R2) Se si hanno due colonne c1 e c2 e in corrispondenza degli elementi non nulli della colonna c1 la colonna c2 ha elementi non nulli si può porre xc1 = 0 ( ovvero si può cancellare c1 )

Page 10: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Il significato della prima regola è il seguente :se è soddisfatto il vincolo relativo alla colonna r1 automaticamente è soddisfatto il vincolo relativo alla colonna r2 .Se nella riga r1 si ha un xi =1 allora anche nella riga r2 si ha xi =1 e il vincolo è soddisfatto La seconda regola dice che se si ha xc2 = 1 automaticamente sono soddisfatti i vincoli relativi alle righe della colonna c2 con 1 . Siccome se in una riga si ha 1 si ha anche 1 nella colonna c1 Se invece i vincoli sono soddisfatti diversamente xc2 = 0 . Se le due colonne sono uguali la possibilità di cancellarne una è ovvia . Se non sono uguali ( e quindi c1 ha meno elementi nonzero ) tutti i vincoli non possono essere soddisfatti ponendo semplicemente xc1 =1. Una volta ridotta la matrice dei vincoli usando queste due regole si può considerare una matrice ridotta e riapplicarle ancora fino a che possibile . Si applicano anche le regole (ovvie) R3) Se in una riga si ha un solo 1 in corispondenza della colonna c1 si pone xc1 =0 R4) Se in una colonna vi sono tutti elementi 1 il problema è risolto ponendo xi =1 per tale colonna Arrivati ad una matrice di ridotta dimensione si sa che il numero massimo di elementi xi >0 è pari alle colonne della matrice . A questo punto si sceglie una variabile xi e si esaminano le matrici ridotte che si ottengono nei due casi xi = 1 e xi =0 . Si continua ad attribuire un valore agli altri xi partendo sempre dal xi che soddisferebbe il maggior numero di vincoli . ESEMPIO 1 Supponiamo un problema di set covering con 10 righe (vincoli) e diversi da 0 per ogni riga gli elementi : riga 1 {1,4,7} , riga 2 {2,5,6,8} , riga 3 {1,4,5,7,8} , riga 4{2,3,4,8} , riga 5 {3,4,6} , riga 6 {1,2,6} , riga 7 {3,6,7} , riga 8 {6,7,8} , riga 9 {5,7,8} , riga 10 {1,5,8} . Indichiamo le colonne con c1 , ..., c8 e le righe con r1, ...r10

Page 11: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 2 0 1 0 0 1 1 0 1 3 1 0 0 1 1 0 1 1 4 0 1 1 1 0 0 0 1 5 0 0 1 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 1 0 0 1 1 0 8 0 0 0 0 0 1 1 1 9 0 0 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1

r1è in r3 , r10 in r3 . Via r3 , la matrice si riduce a

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 2 0 1 0 0 1 1 0 1 4 0 1 1 1 0 0 0 1 5 0 0 1 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 1 0 0 1 1 0 8 0 0 0 0 0 1 1 1 9 0 0 0 0 1 0 1 1 0 1 0 0 0 1 0 0 1

c5 in c8 ( via c5 ) oppure c5 = 0 .

Page 12: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

La nuova matrice è

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 2 0 1 0 0 0 1 0 1 4 0 1 1 1 0 0 0 1 5 0 0 1 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 1 0 0 1 1 0 8 0 0 0 0 0 1 1 1 9 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1

r9 in r8 V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 2 0 1 0 0 0 1 0 1 4 0 1 1 1 0 0 0 1 5 0 0 1 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 1 0 0 1 1 0 9 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 0 1

Non sono possibili ulteriori semplificazioni . All`ottimo la funzione obbiettivo è ≤ 7 La colonna con più elementi è la colonna 8 Esaminiamo prima la situazione ponendo x8 = 1 In questo modo si soddisfa il numero più alto possibile di vincoli con una sola variabile . Sono verificati con x8 =1 i vincoli dati dalle righe r2 ,r4,r9,r10

Page 13: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 5 0 0 1 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 1 0 0 1 1 0

La colonna c3 è contenuta in c6 . La matrice si riduce a

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 5 0 0 0 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 0 0 0 1 1 0

La colonna con più elementi >0 è c6 . Se si pone x6 = 1 si soddisfano i vincoli dati dalle righe r5 , r6 , r7 . Resta la matrice

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 E una qualunque delle tre variabili x1 ,x4, x7 può essere messa a 1 . La soluzione trovata ha valore 3 Se , fissato x8 = 1 , si pone x6 = 0 ( cioè si mette c6 = 0 ) si ha

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 5 0 0 0 1 0 0 0 0 6 1 1 0 0 0 0 0 0 7 0 0 0 0 0 0 1 0

Da r7 si ottiene x7 =1 e si può cancellare anche r1

Page 14: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Si ha

V 1 2 3 4 5 6 7 8

5 0 0 0 1 0 0 0 0 6 1 1 0 0 0 0 0 0

Siccome non si ha una colonna di 1 occorrono altre due variabili e i vincoli sono soddisfatti da una soluzione di valore 4 Se invece alla prima alternativa si pone x8 = 0 e c8 = 0 si ha

V 1 2 3 4 5 6 7 8

1 1 0 0 1 0 0 1 0 2 0 1 0 0 0 1 0 0 4 0 1 1 1 0 0 0 0 5 0 0 1 1 0 1 0 0 6 1 1 0 0 0 1 0 0 7 0 0 1 0 0 1 1 0 9 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0

automaticamente (da r10) x1 = 1 e da r9 x7 = 1 Sono così soddisfati i vincoli relativi alle righe r1 , r6 , r7, r9 ,r10

V 1 2 3 4 5 6 7 8

2 0 1 0 0 0 1 0 0 4 0 1 1 1 0 0 0 0 5 0 0 1 1 0 1 0 0

Non vi è nessuna colonna con tutti 1 e nessuna riga o colonna è cancellabile Per ottenere la soluzione occorrono almeno due altre variabili diverse da zero . La soluzione ha valore 4 Vi sono quindi tre soluzioni ottime date da x1 = 1 , x6 =1 , x8 = 1 x4 = 1 , x6 =1 , x8 = 1 x7 = 1 , x6 =1 , x8 = 1

Page 15: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Problema del Commesso viaggiatore Un commesso viaggiatore deve visitare n città C1 , ...,Cn partendo e tornando dalla stessa città , visitandole tutte e non passando mai due volte nella stessa città . Ad ogni viaggio tra una città i ed una città j è associato un costo cij , (che potrebbero essere le distanze e/o i costi di trasporto ) e il commesso viaggiatore deve percorrere l'itinerario che minimiza il costo . Il problema sembra abbastanza futile ma ha alcune applicazioni importanti Un esempio è costituito dalla programmazione di n lavori (su una stessa macchina ) . In questo caso la distanza cij corrisponde ai costi per il passaggio dal lavoro i al lavoro j . Un secondo esempio è la programmazion è del lavoro di una macchina automatica (tipo trapano) che deve spostarsi per effettuare n buchi su una lastra. Altri esempi simili derivano da problemi di cristallografia. Non è noto nessun algoritmo che risolva polinomialmente il problema del commesso viaggiatore . Se G è un grafo non orientato di N vertici e si considera il problema del commesso viaggiatore relativo a N città con costi cij = cji = 1 se esiste l'arco (i,j) cij = cji = 2 se non esiste l'arco (i,j) un cammino di minimo costo pari ad N determina un circuito Hamiltoniano nel grafo G mentre un cammino di minimo costo maggiore di N esclude il circuito Hamiltoniano. Il problema di determinare un circuito Hamiltoniano è NP-completo mentre escludere un circuito Hamiltoniano è un problema (forse) più difficile di quelli di NP. Il problema del commesso viaggiatore appartiene alla classe NP-hard (problemi difficili almeno come quelli di NP). Di tale problema si presentano vari sottocasi i) completo (nessun cammino i-j è escluso ovvero cij < +∞ ∀ i j ) ii) simmetrico ( se cij = cji ∀ i j ) iii) euclideo ( se simmetrico ,completo e cij≤ cik + ckj ∀ i j k) Se il problema non è completo anche trovare una soluzione ammissibile può essere difficile (=circuito Hamiltoniano ). Nei casi simmetrici si hanno delle semplificazioni. Se il problema è euclideo ha senso cercare una soluzione approssimata. Infatti se nel giro ottimo di costo T* si visitano nell'ordine le città h-i-j-k e cij è il costo più piccolo del giro ottimo si ha che

cij ≤ T*/N e inoltre

chj≤ chi + cij cik≤ cij + cjk Quindi se a h-i-j-k si sostituisce h-j-i-k si ha un costo T che verifica

T≤ T* +2 cij ovvero T ≤ T*(1 + 2/N ) In altre parole esiste (almeno) un giro subottimo che approssima il giro ottimo e il rapporto T/T* decresce all'aumentare di N.

Page 16: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Il problema formalizzato diventa

min ∑ ij cij xij con i vincoli

∑ i xij = 1

∑ j xij = 1 xij ∈ {0 ,1} con il significato xij = 1 se si va dalla città i alla città j e xij = 0 altrimenti. In questa formulazione mancano i vincoli che obbligano a visitare in sequenza tutte le città una volta sola . Imporre tali vincoli significa aggiungere per ogni sottoinsieme S di città un vincolo del tipo

∑ ij xij ≤ card(S)-1 e il numero dei vincoli crescerebbe esponenzialmente. Il problema senza questi ulteriori vincoli è un problema di assegnazione al minimo costo : basta mettere cii= +∞ e assegnare ad ogni città i (di partenza ) un'altra citta j (di arrivo). Il problema può essere risolto con tecniche standard ma la soluzione comprende normalmente due o più cicli (visita di un sottoinsieme di città ritornando nella prima di esse). La soluzione del problema dell'assegnazione costituisce un limite inferiore alla soluzione ottima. Chiaramente ogni giro ammissibile costituisce un limite superiore. Un algoritmo sensato per una soluzione approssimata (caso euclideo ) è il seguente ( Alg. Christofides) + Si considerano le città come vertici di un grafo non orientato, si considerano esistenti tutti gli archi possibili tra due vertici . + All'arco ( vi,vj ) si associa il peso cij + Si cerca un albero di minimo peso per il grafo + Si considerano i vertici di grado dispari nell`albero Esiste sempre un numero pari di vertici dispari + Siano vi(1) ,...,vi(k) i vertici di grado dispari si cerca un accoppiamento tra questi vertici . Se sono possibili più accoppiamenti l`accoppiamento deve minimizzare la somma della quantità cij.

Page 17: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

+ Si considera il grafo con vertici vi . Si cancellano gli archi non appartenenti nè all'albero nè all'accoppiamento e si duplicano gli archi comuni . Nel grafo risultante tutti i vertici hanno grado pari + Si determina un ciclo (Euleriano) che percorra tutti gli archi e si scrivono i vertici nell'ordine determinato dal cammino . + Alcuni vertici possono essere incontrati più volte nel cammino . Se un vertice vk compare due volte ( ... ,vi , vk, vj , ... , vr , vk, vs , ... ) Lo si cancella una volta (la prima p.e. ) collegando il vertice precedente al vertice successivo . + si considera come soluzione il cammino determinato in questo modo Supponiamo che l'albero di minimo peso costi K1 , l'accoppiamento K2 e il cammino ottimale , corrispondente alla soluzione esatta T* . Il cammino ottimale meno un collegamento determina un albero che non necessariamente è di minimo peso quindi K1 ≤ T* Il cammino ottimale determina anche due possibili accoppiamenti tra i vertici ( se Ci(1) ,..., Ci(n) è la successione delle città gli accoppiamenti sono Ci(1) - Ci(2) , Ci(3) - Ci(4) ... e Ci(2) - Ci(3) , Ci(4) - Ci(5) ... ) Il costo del cammino ottimale è la somma del costo dei due accoppiamenti L`algoritmo determina un accoppiamento tra i vertici ( non necessariamente tutti ) così 2 K2 ≤ T* Il cammino determinato dall`algoritmo vertici ha quindi costo ( K1 + K2 ) ≤ 1.5 T* Il costo ( K1 + K2 ) si riferisce al cammino con ripetizione di vertici . Se si cancellano dei vertici ripetuti cioe da vi , vk, vj si passa a vi , vj il costo passa da cik + ckj a cij . Il costo scende per la diseguaglianza triangolare. Osservazioni 1) La proprietà sui vertici di grado dispari si ottiene sommando i gradi dei vertici per il numero di vertici dello stesso grado

∑k (2k+1) nv(2k+1) + ∑k (2k) nv(2k) = 2(n-1) ed osservando che per differenza ∑k nv(2k+1) è un numero pari. 2) Il cammino che percorre tutti gli archi una volta sola tornando nel punto iniziale esiste se e solo se tutti i vertici hanno grado pari. Questa proprietà, come la precedente, risale ad Eulero . 3) Esiste un algoritmo (tipo blossom ) per il calcolo dell'accoppiamento di peso minimo ( omesso pechè di complicata descrizione).

Page 18: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

ESEMPIO Consideriamo la tabella delle distanze tra i seguenti capoluoghi di provincia della Sicilia (indicati con la sigla automobilistica ) Ag Cl Ct Me Pa Si Tp Ag - 58 167 264 128 214 175 Cl - 109 206 127 156 233 Ct - 97 208 61 314 Me -- 235 158 341 Pa -- 255 104 Si --- 361 L'albero di minimo peso comprende (in ordine crescente ) gli archi (Ag , Cl ) , (Ct,Si) , (Ct,Me) , (Pa,Tp ) , (Cl,Ct) , (Cl ,Pa) . Il costo dell`albero è 556

Tp Pa

Cl

Ag

Ct

Me

Si

FIG 1 Si hanno sei vertici di grado dispari corrispondenti a Ag , Cl , Ct, Me ,Si, Tp Per trovare un accoppiamento che minimizzi la somma dei costi cij si può usare la seguente tecnica (euristica ) . (L'uso di una tecnica ad hoc è giustificata da una certa arbitrarietà nel passo successivo .) Si usano tutti gli archi partendo da quello di minimo peso e proseguendo successivamente fino a determinare un accoppiamento massimo .

Tp

Ag

ClCt

Me

Si

87

5

3

2

46

FIG 2

I primi archi sono utilizzati per ottenere un accoppiamento completo . Se non è possibile con gli archi successivi aumentare il numero di archi nell`accoppiamento si generano due vertici insaturi e con la tecnica delle catene alternate si aumenta il numero di archi .

Page 19: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Tp

Ag

ClCt

Me

Si

87

5

3

2

46

1

FIG 3

Se si hanno più archi fini incidenti in un vertice si cerca di determinare l`accoppiamento usando l`arco legato al minor valore di cij . Se l`accoppiamento non è completo il procedimento continua aggiungendo nuovi archi . In questo caso si genera l'accoppiamento Tp-Ag , Cl-Si , Me-Ct

Tp

Ag

ClCt

Me

Si

87

5

3

2

4

1

FIG 4

Il costo dell`accoppiamento è 428 Un cammino nel grafo è (fig 5) Me - Ct -Si - Cl - Ag-Tp - Pa - Cl -Ct - Me

Tp Pa

Cl

Ag

Ct

Me

Si

FIG . 5 Eliminando Ct e Cl ricorrono due volte nel cammino . Eliminandole la prima volta si ha il cammino Me - Si - Ag-Tp - Pa - Cl -Ct - Me Il costo di questo cammino è 984 Se l`accoppiamento è effettivamente quello di minimo costo si ha che il costo minimo C* non è inferiore a due volte quello dell`accoppiamento e quindi 856 . Le altre stime possibili danno valori inferiori per C*. Un'altra possibilità è quella di partire da una città qualsiasi e di scegliere sempre il cij minimo fino a completare un ciclo; questa tecnica da risultati diversi a seconda delle città di partenza.

Page 20: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

Un metodo per trovare una soluzione approssimata (euristica) è il seguente (Lin -Kernigham ) ed spesso eseguito dopo una delle tecniche precedenti. Si parte da una qualunque soluzione ammissibile (un giro ) e si prosegue effettuando degli scambi tra coppie (o terne ) di archi. Tecniche di questo tipo risultano abbastanza efficienti ma non è possibile limitare a priori l'errore. Supponendo i cerchi percorsi in senso orario

i j

h k

i j

h k

l m

si hanno due possibilita’ Caso 1 (sinistra) Se percorso iniziale e’ i-j == k - h == i un nuovo percorso (legale ) e ‘ i - k==j-h==i Lo scambio e’ conveniente se cij + ckh > cik + chj Caso 2 (destra) Se percorso iniziale e’ i--j == m -- k == h--l ==i vi sono 7 altri percorsi legali - 3 percorsi che si ottengono lasciando un arco e scambiando i due rimanenti come nel caso 1 - 4 nuovi percorsi si ottengono cancellando i tre archi e ricombinando i--m == j -- h ==k--l ==i i-- k ==h -- j==m-- l ==i i-- h ==k--j==m-- l ==i i-- k == h--m==j-- l ==i Solo il percorso i-- k ==h -- j==m-- l ==i non inverte nessun arco Ovviamente le cancellazioni e gli scambi vengono effettuati dopo un confronto tra i valori dei costi . Nel secondo caso si effettua lo scambio piu’ conveniente. Si puo’ partire da una qualunque soluzione e considerare ( e testare per lo scambio) tutti gli archi Se invece interessa la soluzione esatta vi sono vari approcci possibili. Per piccoli valori di N è applicabile un algoritmo di tipo branch and bound Tale tecnica risulta troppo complicata per valori grandi di N. In tal casi si preferisce risolvere il problema dell'assegnazione e aggiungere progressivamente dei vincoli del tipo

Page 21: Metodo di Gomory (tagli) - Dipartimento Di Matematicasideri/did/romat/DISP_ROM/D_2012_PLI.pdf · 2013-01-10 · Metodo di Gomory (tagli) Se si ha un problema . max ctx . Ax = b

∑ ij xij ≤ card(S)-1 ( o loro combinazioni) per escludere sottocicli fino ad isolare la soluzione ottima. Le tecniche per aggiungere i vincoli sono sofisticate: è necessario aggiungere pochi vincoli e cercare di forzare il problema all'ottimo. E' da tenere presente che la maggior parte dei problemi (euclidei) di dimensione elevata una tecnica approssimata fornisce una soluzione con un errore del 4-5% circa. Una tecnica esatta richiede l'impiego di parecchio tempo (e/o memoria). Viceversa, una volta scelta una tecnica approssimata non è quasi mai possibile effettuare in un tempo ragionevole e con tecniche semplici un test di ottimalità. Il problemi risolti esattamente (con sicurezza) sono di dimensione abbastanza elevata.