Column Generation
Column Generation
Column Generation
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