04.02.2013 Views

Column Generation

Column Generation

Column Generation

SHOW MORE
SHOW LESS

Trasformi i suoi PDF in rivista online e aumenti il suo fatturato!

Ottimizzi le sue riviste online per SEO, utilizza backlink potenti e contenuti multimediali per aumentare la sua visibilità e il suo fatturato.

Generazione di Colonne AA 2009/10 1<br />

Metodi di Generazione di Colonne<br />

Alcuni problemi di programmazione lineare sono caratterizzati da un<br />

elevato numero di variabili e/o vincoli.<br />

Alcuni di questi problemi hanno generalmente una struttura della matrice<br />

dei vincoli tale per cui sia possibile risolverli decomponendoli in<br />

sottoproblemi di piú facile soluzione.<br />

In generale l’obiettivo é quello di risolvere tali problemi senza considerare<br />

esplicitamente tutti le variabili e/o vincoli del problema.<br />

L’algoritmo che sta alla base dei metodi basati sulla generazione di<br />

colonne é il metodo del simplesso revisionato.<br />

Si consideri la seguente coppia di problemi primale-duale:<br />

(P) z(P) = Min c T x<br />

s.t. Ax = b<br />

x ≥ 0<br />

(D) z(D) = Max u T b<br />

s.t. u T A ≤ c T<br />

dove A é una matrice (m×n), e c(n), b(m), x(n) e u(m).<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 2<br />

Sia nel metodo del simplesso primale che in quello duale si eseguono<br />

iterativamente le seguenti operazioni:<br />

(1) Selezione di una colonna s di A;<br />

(2) Selezione di una riga r di A;<br />

(3) Esecuzione di un’operazione di pivoting usando ars come elemento<br />

di pivot.<br />

Nota una base B di A:<br />

- u T = c T BB −1 : variabili duali associate a B;<br />

- b = B −1 b: valore delle variabili in base;<br />

- Aj: colonna j di A;<br />

- cj = cj −uAj: costo ridotto associato alla variabile xj;<br />

- aij: elemento (i,j) della matrice B −1 A.<br />

Le operazioni del metodo del simplesso primale e duale possono essere<br />

riassunte come segue.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 3<br />

Simplesso primale e duale<br />

Simplesso Primale Simplesso Duale<br />

Test di ottimalitá cj ≥ 0,j = 1,...,m bi ≥ 0,i = 1,...,m<br />

Var. entrante in base s = argmin{cj : j = 1,...,n} s = argmin{ cj<br />

|a rj| : arj < 0,j = 1,...,n}<br />

Var. uscente dalla base r = argmin{ b i<br />

a is : ais > 0,i = 1,...,m} r = argmin{bi : i = 1,...,m}<br />

Elemento di pivoting ars ars<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 4<br />

Si noti che nel caso in cui n e/o m siano molto grandi, potrebbe diventare<br />

proibitivo effettuare le operazione di pivoting.<br />

Simplesso in formato tableau:<br />

z x1 ... xm xm+1 ... xn<br />

-1 c T B c T F 0<br />

0. B F b<br />

0<br />

BxB +FxF = b<br />

−z +c T B xB +c T F xF = 0<br />

xB = b−FxF<br />

−z +c T BB −1 b+(c T F −cBB −1 F)xF = 0<br />

−z +c0 +c T F xF = 0<br />

z x1 ... xm xm+1 ... xn<br />

-1 0 ... 0 c T F −c0<br />

0. I F b<br />

0<br />

Si noti che non é necessario calcolare A = B −1 A ma é sufficiente calcolare<br />

B −1 e u T = c T BB −1 :<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 5<br />

Il simplesso revisionato<br />

0 ... 0 c T B c T F 0<br />

I B F b<br />

CARRY tableau normale<br />

Effettuando i pivot anche sulla matrice CARRY<br />

0−uI = −u c T B −u T B = 0 c T F −u T F −u T b<br />

B −1 I B −1 F B −1 b<br />

CARRY tableau normale<br />

Nella matrice CARRY sono memorizzati B −1 e u.<br />

Possiamo eliminare il tableau normale e usare solo la CARRY.<br />

Algoritmo Simplesso Rivisto<br />

1. Calcola i costi cj = cj −u T Aj per ogni j ∈ F;<br />

2. scegli la variabile entrante xh;<br />

3. genera la sola colonna Ah = B −1 Ah e orla la CARRY;<br />

4. scegli la riga t del pivot (criterio del rapporto bi/aih > 0);<br />

5. effettua il pivot sulla CARRY e sulla colonna dei r.h.s.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 6<br />

Esempio<br />

−u T ch −u T b<br />

a1h<br />

B −1 ath B −1 b<br />

0 2 1 0 0<br />

1 2 1 0 6<br />

4 -1 2 1 8<br />

B =<br />

⎡<br />

⎢<br />

⎣<br />

amh<br />

CARRY orlata<br />

2 0<br />

−1 1<br />

⎤<br />

c T F = [0,1] T −[1,0]<br />

CARRY<br />

orlata<br />

⇒<br />

− �u T − �u T b<br />

�<br />

B−1 Scelta la base B = [A2,A4] si ha<br />

⎥ ⎦, B−1 =<br />

⎡<br />

⎢<br />

⎣<br />

1 1<br />

4 2<br />

⎡<br />

⎢<br />

⎣<br />

B −1 Ah b<br />

-1 0 -1 -6<br />

1/2 0 1/2 3<br />

1/2 1 9/2 11<br />

c T F = [1,0]T −[8/9,−2/9]<br />

⎤<br />

1/2 0<br />

1/2 1<br />

⎤<br />

Nuova CARRY<br />

⎥ ⎦, uT = [1,0] b =<br />

⎡<br />

⎡<br />

⎢<br />

⎣ 3<br />

11<br />

⎥<br />

⎦ = [−1,0]⇒(h=1)Ah = B−1 ⎢<br />

⎣ 1<br />

4<br />

⎡<br />

⎢<br />

⎣<br />

1 0<br />

2 1<br />

⎤<br />

⇒<br />

⎥<br />

⎦ = [5/9,2/9]<br />

Soluzione ottima x1 = 22/9,x2 = 16/9,z = 32/9<br />

⎤<br />

� B −1 b<br />

⎤<br />

⎥<br />

⎦<br />

⎥<br />

⎦ =<br />

⎡<br />

⎢<br />

⎣ 1/2<br />

9/2<br />

�<br />

B−1 �<br />

Ah<br />

�<br />

b<br />

-8/9 2/9 0 -32/9<br />

4/9 -1/9 0 16/9<br />

1/9 2/9 1 22/9<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori<br />

⎤<br />

⎥<br />


Generazione di Colonne AA 2009/10 7<br />

Generazione di Colonne<br />

Dato il seguente problema di programmazione lineare<br />

(P) z(P) = Min<br />

s.t.<br />

n�<br />

cijxj<br />

j=1<br />

n�<br />

j=1<br />

aijxj = bi, i = 1,...,m<br />

xj ≥ 0,j = 1,...,n<br />

abbiamo visto che la soluzione base associata ad una base B di A puó<br />

essere migliorata se posto<br />

risulta ∆ < 0.<br />

∆ = min<br />

j=1,...,n [cj −cBB −1 Aj] (1)<br />

In generale perció il problema é quello di determinare il valore ∆ del<br />

sottoproblema (1).<br />

Abbiamo visto come questo puó essere fatto per problemi di programmazione<br />

lineare utilizzando il simplesso revisionato e che puó risultare<br />

proibitivo se il numero di colonne é elevato.<br />

Vedremoinseguitocheperalcuniproblemi lastrutturadelsottoproblema(1)étalepercuipossaessererisoltosenzaconsiderareesplicitamente<br />

tutte le variabili j.<br />

Ilmetodoprendeilnomedigenerazionedicolonne (columngeneration)<br />

perché nella risoluzione del sottoproblema (1) le colonne/variabili del<br />

problema vengono generate solo quando servono.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 8<br />

Algoritmo Generazione di Colonne<br />

Step 1. Scegli una base ammissibile iniziale B.<br />

Step 2. Calcola xB = B −1 b.<br />

Step 3. Determina la variabile j ∗ con costo ridotto<br />

c ∗ j = c ∗ j −c T BB −1 A ∗ j minimo.<br />

Step 4. Se c ∗ ≥ 0 STOP, altrimenti costruisci la<br />

nuova base B e vai allo Step 2.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 9<br />

Problema del taglio monodimensionale<br />

(Cutting Stock Problem, Gilmore e Gomory (1960))<br />

Sia I un insieme di n oggetti ognuno di lunghezza pari a li, i =<br />

1,...,n.<br />

Sia ni il numero di pezzi che si devono produrre per ogni oggetto i,<br />

i = 1,...,n.<br />

Sia L la lunghezza delle lastre a disposizione dalle quali tagliare gli<br />

oggetti necessari.<br />

Uno schema di taglio (o pattern) é una possibile configurazione di<br />

taglio degli oggetti I su di una lastra.<br />

Ad esempio, dati i seguenti 3 oggetti:<br />

Oggetto li ni<br />

(cm)<br />

A 5 150<br />

B 7 200<br />

C 9 300<br />

e lastre di lunghezza L = 20 cm, alcune configurazioni di taglio sono le<br />

seguenti.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 10<br />

Pattern 1<br />

20<br />

7 9 4<br />

Setting 1<br />

Pattern 2<br />

20 20<br />

Altre configurazioni:<br />

5 5 7 3<br />

Setting 2<br />

Pattern 3<br />

20<br />

5 5 9 1<br />

Setting 3<br />

Pattern 1 Pattern 2 Pattern 3 Pattern 4 Pattern 5<br />

A (5 cm) 0 2 2 4 1<br />

B (7 cm) 1 1 0 0 2<br />

C (9 cm) 1 0 1 0 0<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 11<br />

Sia J l’insieme degli indici di tutte le possibili configurazioni di taglio.<br />

Sia inoltre aij il numero di volte in cui l’oggetto i é tagliato nella configurazione<br />

j, i ∈ I, j ∈ J.<br />

L’obiettivo del problema é quello di tagliare dalle lastre tutti i pezzi<br />

necessari minimizzando il numero di lastre necessarie.<br />

Sia yj una variabile non negativa intera rappresentante il numero di<br />

volte che la configurazione j ∈ J é usata per tagliare i pezzi.<br />

La formulazione matematica del problema é la seguente:<br />

(P) Min<br />

�<br />

yj<br />

j∈J<br />

� �� �<br />

numero di lastre<br />

�<br />

aijyj<br />

j∈J<br />

� �� �<br />

n. di pezzi i<br />

≥ ni, ∀i ∈ I<br />

yj ≥ 0 intera , ∀j ∈ J<br />

Si noti che la cardinalitá dell’insieme J puó essere grande.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 12<br />

Si consideri il rilassamento lineare di P, ovvero:<br />

(LP) Min<br />

�<br />

yj<br />

j∈J<br />

� �� �<br />

numero di lastre<br />

�<br />

aijyj<br />

j∈J<br />

� �� �<br />

n. di pezzi i<br />

≥ ni, ∀i ∈ I<br />

yj ≥ 0, ∀j ∈ J<br />

Sia LP ′ il problema LP dove l’insieme J delle configurazioni é sostituito<br />

dall’insieme J ′ ⊂ J (si supponga che J ′ sia tale da garantire che<br />

LP ′ ammette una soluzione ammissibile).<br />

Si risolva il problema LP ′ e siano ui,i ∈ I, la variabile duale associata<br />

ai vincoli di LP ′ .<br />

Il costo ridotto di ogni configurazione j ∈ J é dato da:<br />

Se risulta<br />

cj = 1− �<br />

aijui<br />

i∈I<br />

min<br />

j∈J\J ′[cj] < 0<br />

allora la soluzione base corrente non é ottima per LP.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 13<br />

Siccome i costi ridotti cj, j ∈ J ′ , sono non negativi:<br />

�<br />

min<br />

j∈J\J ′[1−<br />

aijui]<br />

i∈I<br />

�<br />

= min[1−<br />

aijui]<br />

j∈J i∈I<br />

e ció equivale a risolvere il seguente problema<br />

Min 1− �<br />

�<br />

i∈I<br />

uizi<br />

i∈I<br />

lizi ≤ L<br />

zi ≥ 0 intera ,∀i ∈ I<br />

dove zi, i ∈ I é, rappresenta il numero di volte che l’oggetto i é tagliato<br />

sulla nuova configurazione.<br />

Il problema (2) é equivalente al seguente problema di knapsack intero<br />

Max<br />

�<br />

uizi<br />

i∈I<br />

�<br />

i∈I<br />

lizi ≤ L<br />

zi ≥ 0 intera ,∀i ∈ I<br />

Il generatore di colonne é in questo caso un problem di knapsack intero<br />

risolubile in tempo pseudopolinomiale.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori<br />

⎫<br />

⎪⎬<br />

⎪⎭<br />

⎫<br />

⎪⎬<br />

⎪⎭<br />

(2)


Generazione di Colonne AA 2009/10 14<br />

Algoritmo generazioni di colonne per il<br />

Cutting Stock Problem<br />

Step 1. Si generi un insieme iniziale J ′ di configurazioni di taglio in<br />

modo tale che il problema LP ′ ammetta una soluzione<br />

ammissibile;<br />

Step 2. Si risolva il problema LP ′ definito sull’insieme di<br />

configurazioni J ′ . Sia x ∗ la soluzione ottima primale e<br />

sia u ∗ la corrispondente soluzione duale;<br />

Step 3. Si risolva il seguente problema di knapsack intero:<br />

⎧<br />

⎪⎨<br />

⎪⎩<br />

Max<br />

Step 4. Se �<br />

�<br />

u<br />

i∈I<br />

∗ izi<br />

�<br />

i∈I<br />

lizi ≤ L<br />

zi ≥ 0 intera ,∀i ∈ I<br />

Sia z ∗ la soluzione ottima.<br />

i∈I<br />

u ∗ iz ∗ i ≤ 1, stop, x ∗ é la soluzione ottima,<br />

altrimenti aggiungi a J ′ la colonna data dalla soluzione z ∗<br />

(nuova configurazione) e vai allo Step 2.<br />

Modelli per le Decisioni - M. Dell’Amico/M. Iori


Generazione di Colonne AA 2009/10 15<br />

Branch & Price<br />

Nel caso di problemi di Programmazione Lineare, l’algoritmo column<br />

generation determina la soluzione ottima del problema.<br />

Nel caso di problemi di Programmazione Intera, l’algoritmo column<br />

generation applicato al rilassamento lineare del problema puó terminare<br />

con una soluzione che risulta frazionaria.<br />

In questo caso é necessario applicare un’algoritmo di tipo branch and<br />

boundperdeterminarelasoluzioneottimainteradoveilcalcolodellower<br />

bound avviene utilizzando la tecnica column generation.<br />

Questi metodi prendono il nome di metodi branch and price.<br />

P 1<br />

...<br />

Albero decisionale<br />

P 0<br />

P ... 2 Pq Modelli per le Decisioni - M. Dell’Amico/M. Iori

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!