...

simplesso rivisto - Università di Bologna

by user

on
Category: Documents
13

views

Report

Comments

Transcript

simplesso rivisto - Università di Bologna
19/05/2004
Programmazione Matematica:
VI – Estensioni dell’algoritmo del
Simplesso
Daniele Vigo
D.E.I.S. – Università di Bologna
[email protected]
rev. 1.0 – Aprile 2004
Algoritmo del Simplesso
• L’algoritmo del Simplesso ad ogni pivot richiede
l’aggiornamento dell’intero tableau Y (m+1)×(n+1)
• Principalmente questo serve per trovare la colonna
su cui fare il pivoting (calcolo costi ridotti)
–c*0
0
c'FT
B–1d
I
B–1F
soluzione (serve)
D. Vigo
costi ridotti (basta
trovarne uno < 0)
di questa parte serve
solo la colonna su cui
si fa il pivot
Pmat.Rev.2
1
19/05/2004
1. Algoritmo del Simplesso Rivisto
• Prevede l’aggiornamento esplicito di una matrice
(m+1)×(m+1), che chiamiamo K
• K(0) matrice iniziale, K(i) matrice all’iterazione i
• I costi ridotti e le colonne aggiornate su cui si fa il
pivot vengono generate solo se e quando
necessario
• tempo per iterazione O(m2) << O(nm)
D. Vigo
Pmat.Rev.3
Informazioni del Tableau
• Il tableau corrente è quello iniziale moltiplicato
per l’inversa della base corrente
0
cBT
cFT
–c*0
0
c'FT
d
B
F
B–1d
I
B–1F
D. Vigo
Pmat.Rev.4
2
19/05/2004
Informazioni del Tableau (2)
• Se il tableau iniziale contiene una matrice identità
con costi ridotti 0, nelle iterazioni successive in
quella parte del tableau c’è B−1
0
0
cFT
–c*0
−cBT B−1
c'FT
d
I
F
B–1d
B−1
B–1F
K(0)
K(i)
• Conoscere K(i) è sufficiente per il pivoting
D. Vigo
Pmat.Rev.5
Pivoting rivisto
• Dato il tableau originale Y = (A, c, d ) ed K(i):
1. Generazione dei costi ridotti (pricing)
•
si calcolano una colonna per volta finchè non se ne
trova uno negativo (s) o si termina senza trovarne
c’j = cj − cB B−1 Aj = cj − cB K(i) Aj
2. Generazione della colonna (column generation)
A’j = B−1Aj = K(i) Aj
3. Determinazione dell’elemento pivot (riga r)
4. Aggiornamento di K(i+1) per la prossima
iterazione
D. Vigo
Pmat.Rev.6
3
19/05/2004
Vantaggi
• Nel pricing ci si può fermare alla prima colonna a
costo negativo (Es. regola di Bland)
• Per la column generation oltre a K(i) basta la
matrice A originale
• se A è sparsa la column generation se ne avvantaggia ed
è molto veloce
• La matrice K(i) può essere memorizzata in forma
prodotto (molto più compatta)
K(i) = Pi … P1 K(0) = Pi … P1
dove ogni Pi è un vettore
D. Vigo
Pmat.Rev.7
2. Problema in forma di massimo
•
•
L’algoritmo del simplesso fa riferimento alla
forma standard (f.ob. di minimo)
Se la funzione obiettivo è di massimo:
1. la si trasforma in forma di minimo
2. si usa la condizione di ottimalità modificata per la
funzione obiettivo di massimo:
“la base corrente è ottima se tutte le variabili non in
base hanno costo ridotto non positivo (≤ 0)”
D. Vigo
Pmat.Rev.8
4
19/05/2004
3. Variabili con upper bound
• E’ molto frequente che le variabili oltre ai lower
bound (xj ≥ 0) abbiano anche upper bound (xj ≤ hj)
• Il problema risultante
min
c Tx
Ax
x
x
=d
≥0
≤h
• Può essere trattato ponendo gli upper bound in forma
standard xj + xja = hj
• si aggiungono fino ad n vincoli e variabili slack!
D. Vigo
Pmat.Rev.9
Variabili con upper bound (2)
• Gli upper bound si possono trattare in modo
implicito (come i lower bound)
• Soluzione Base Ammissibile Estesa (SBAE):
le n–m variabili fuori base possono essere
• al lower bound (xj = 0)
• all’upper bound (xj = hj)
• Ai fini dell’ottimalità i ruoli delle variabili fuori
base sono diversi:
• se al l. b. può solo aumentare e conviene se c’j < 0
• se all’u. b. può solo diminuire e conviene se c’j > 0
D. Vigo
Pmat.Rev.10
5
19/05/2004
Criterio di ottimalità estesa
• Per un problema di minimo una SBAE è ottima se
il costo ridotto di ogni variabile fuori base è:
• c’j ≥ 0 se la variabile è al lower bound (xj = 0)
• c’j ≤ 0 se la variabile è all’upper bound (xj = hj)
• Il metodo del simplesso visto fin qui si estende
facilmente per trattare implicitamente le SBAE
D. Vigo
Pmat.Rev.11
Forma canonica estesa
• Supponiamo di definire due variabili non negative:
xj+ = xj (l.b.) e xj– = hj – xj (u.b.)
• In questo caso il test di ottimalità è sempre c’j ≥ 0
per entrambe
• In una data iterazione il simplesso usa una sola
delle due variabili xj+ = xj e xj– = hj – xj
• Si usa un vettore di flag ej ={+,–} per sapere quale
• Il tableau rappresenta quindi le equazioni:
n
∑y
j =1
D. Vigo
e
ij
x j j = yi 0
i = 1, K, m
Pmat.Rev.12
6
19/05/2004
Pivoting esteso
•
•
Determina una variabile xj fuori base con c’j < 0
determina θjE = min{αj, θj, γj } con:
•
•
•
αj = hj
θj = min { yi0/yij con yij > 0}
γj = min {(yi0 − hβ(i))/yij con yij < 0}
1. Se θjE = αj la variabile xj va al bound opposto
a) sottrai hj volte la colonna j dalla colonna 0
b) moltiplica la colonna j per −1 (cambia anche ej)
c) la base non cambia
D. Vigo
Pmat.Rev.13
Pivoting esteso (2)
2. Se θjE = θj = min { yi0/yij con yij > 0} (su riga k)
a) la variabile xβ(k) attualmente in base esce dalla base al
suo vecchio bound (eβ(k) non cambia)
b) esegui il pivot sull’elemento ykj
3. Se θjE = γj = min {(yi0 − hβ(i))/yij con yij < 0}
(su riga k)
a) la variabile xβ(k) attualmente in base esce dalla base al
bound opposto (eβ(k) cambia)
b) sottrai hβ(k) da yk0 , cambia il segno di ykβ(k) ed eβ(k)
c) esegui il pivot sull’elemento ykj
D. Vigo
Pmat.Rev.14
7
19/05/2004
Esempio
min 2x1
s.t. x1
+x2 +3x3 −2x4 +10x5
+x3 −x4 +2x5
x2 +2x5 +2x4 + x5
0 ≤ x1 ≤ 7, 0 ≤ x2 ≤ 10, 0 ≤ x3
0 ≤ x4 ≤ 5, 0 ≤ x5 ≤ 3
=5
=9
≤ 1,
x1
x2
x3
x4
x5
−z
0
2
1
3
−2
10
x1
5
1
0
1
−1
2
x2
9
0
1
2
2
1
+
+
+
+
+
e
D. Vigo
Pmat.Rev.15
Esempio (2)
x1
x2
x3
x4
x5
−z
−19
0
0
−1
−2
5
x1
5
1
0
1
−1
2
x2
9
0
1
2
2
1
+
+
+
+
+
e
pivot su colonna x4:
αj
θj
γj
=2
D. Vigo
= hj = 5
= min { yi0/yij con yij > 0} = 9/2
= min {(yi0 − hβ(i))/yij con yij < 0}
Í
Pmat.Rev.16
8
19/05/2004
Esempio (3)
Caso 3. Se θjE = min {(yi0 − hβ(i))/yij con yij < 0}
(su riga k =1)
a) la variabile xβ(1)= x1 esce dalla base al bound
opposto (eβ(k) cambia)
b) sottrai hβ(1)= 7 da y10 , cambia il segno di y11 ed e1
c) esegui il pivot sull’elemento y14
x1
x2
x3
x4
x5
−z
−19
0
0
−1
−2
5
x1
−2
−1
0
1
−1
2
x2
9
0
1
2
2
1
−
+
+
+
+
e
D. Vigo
Pmat.Rev.17
Esempio (4)
x1
x2
x3
x4
x5
−z
−15
2
0
−3
0
1
x4
2
1
0
−1
1
−2
x2
5
−2
1
4
0
5
−
+
+
+
+
e
pivot su colonna x3:
αj
θj
γj
=3
D. Vigo
= hj = 1
= min { yi0/yij con yij > 0} = 5/4
= min {(yi0 − hβ(i))/yij con yij < 0}
Í
Pmat.Rev.18
9
19/05/2004
Esempio (5)
Caso 1. Se θjE = αj , x3 va al bound opposto
a) sottrai h3=1 volte la colonna 3 dalla colonna 0
b) moltiplica la colonna 3 per −1 (cambia anche e3)
c) la base non cambia
x1
x2
x3
x4
x5
−z
−12
2
0
3
0
1
x4
3
1
0
1
1
−2
x2
1
−2
1
−4
0
5
−
+
−
+
+
e
Stop !
x1 = 7, x2 = 1, x3 = 1, x4 = 3, x5 = 0
D. Vigo
Pmat.Rev.19
Generazione di colonne
• In molti casi A e c di un problema PL o PLI sono
definiti implicitamente da una regola di
costruzione ed hanno un numero di elementi n >>1
• Il numero di elementi di A e c in base è m << n
• A e c servono solo per calcolare i costi ridotti ed
individuare le variabili da far entrare in base
• Se è possibile valutare i costi ridotti sulla base
della regola implicita non è necessario costruire
esplicitamente tutto il problema ma solo le
colonne che via via entrano in base
D. Vigo
Pmat.Rev.20
10
19/05/2004
Esempio: Bin Packing Problem
• m tipi di oggetti, per ogni tipo (i =1,…,m)
• wi dimensione di un oggetto di tipo i
• bi quantitativo richiesto
• n numero totale di oggetti = Σi=1,…,m bi
• n contenitori (bin), ciascuno di capacità K
• impaccare tutti gli oggetti nel minor numero
possibile di contenitori in modo che la somma
delle dimensioni degli oggetti inseriti in ogni
contenitore non superi la capacità K
• Modelli PLI con numero polinomiale di variabili
D. Vigo
Pmat.Rev.21
Modello di Gilmore–Gomory
• Primo esempio di generazione di colonne (1963)
• Pattern di caricamento: vettore di m elementi che
specifica il numero di oggetti di ciascun tipo
inseriti in un bin (in modo ammissibile)
• Es. m=5, w=(2,3,4,5,7), b=(20,10,30,15,20), K=10
• a1=(5,0,0,0,0), a2=(0,2,1,0,0), …
• aij = oggetti di tipo i nel pattern j
• J = insieme di tutti i pattern ammissibili
• |J| enorme (cresce esponenzialmente con m ed n)
D. Vigo
Pmat.Rev.22
11
19/05/2004
Modello di Gilmore–Gomory (2)
• xj = numero di volte in cui il pattern j è usato
(GG)
min
Σj∈J
Σj∈J
aij xj ≥ bi
xj
(i = 1, …, m)
≥ 0 intero
xj
(j∈J)
• Il vincolo potrebbe essere anche = ma non serve
• Consideriamo il rilassamento continuo (accettabile
se all’ottimo le x>0 sono abbastanza grandi)
D. Vigo
Pmat.Rev.23
Modello di Gilmore–Gomory (3)
• Supponiamo di conoscere J’⊆ J con |J’|<<|J| tale che
le colonne di J’ contengano una soluzione
ammissibile (= base) di (GG)
• Ad es. J’ ricavato da una soluzione euristica
• Risolviamo il problema rispetto a J’:
•
•
•
•
x’ soluzione primale (xj=0 j∈J\J’), u soluzione duale
la soluzione x’ è ottima se i costi ridotti c’j ≥ 0, j∈J
Pricing: trova una colonna da inserire in base (la migliore)
ossia trova un pattern ∉J’ con costo ridotto minimo
(
)
min c' j = min 1 − ua j = 1 − max ua j
j∈J
D. Vigo
j∈J
j∈J
Pmat.Rev.24
12
19/05/2004
Modello di Gilmore–Gomory (4)
• Pricing: trova un pattern ammissibile con il minimo
costo ridotto (se negativo va inserito in J’ altrimenti
stop: base ottima)
• ai = numero di oggetti di tipo i nel pattern
z = max
Σi=1,...,m
uiai
Σi=1,...,m wiai ≤ K
ai ≥ 0 intero (i=1,...,m)
• è un Knapsack intero !
• se z ≤ 0 la soluzione è ottima !
D. Vigo
Pmat.Rev.25
Esempio
•
•
•
•
•
m=5, w=(2,3,4,5,7), b=(20,10,30,15,20), K=10
soluzione/base iniziale: deve usare tutti i tipi
a1=(1,1,1,0,0), a2=(0,0,0,2,0), a3=(0,0,0,0,1)
mancano due colonne: slack di alcuni vincoli
Per soddisfare b3=30 bisogna usare a1 30 volte,
quindi 1 e 2 sono prodotti in eccesso e si possono
usare a1a=(–1,0,0,0,0) ed a2a=(0,–1,0,0,0)
D. Vigo
Pmat.Rev.26
13
19/05/2004
Esempio (2)
• Risoluzione rilassamento iniziale:
• si ricava la soluzione x=(30,15/2,20,0,0), che si arrotonda
in x=(30,8,20,0,0) che richiede 58 bin, la soluzione duale è
u=(0,0,1,1/2,1)
• Il pricing genera la colonna a4=(0,0,2,0,0) e z = 2
• Pivot sulla nuova colonna: base=(a1,a2,a3,a4,a2a)
• si ottiene x=(20,15/2,20,5,10), arrotondata in
x=(20,8,20,5,10) che richiede 53 bin ed u=(1/2,0,1/2,1/2,1)
D. Vigo
Pmat.Rev.27
Esempio (3)
• Il pricing genera la colonna a5=(5,0,0,0,0) e z = 5/2
• Pivot sulla nuova colonna: base=(a1,a2,a3,a4,a5)
• (nessuno slack sui vincoli)
• si ottiene x=(10,15/2,20,10,2), arrotondata in
x=(10,8,20,10,2) che richiede 50 bin ed
u=(1/5,3/10,1/2,1/2,1)
• Il pricing genera la colonna a6=(0,1,0,0,1) e z =
13/10
• Pivot sulla nuova colonna: base=(a6,a2,a3,a4,a5)
• si ottiene x=(10,15/2,10,15,4), arrotondata in
x=(10,8,10,15,4) che richiede 47 bin ed u=(1/5,0,1/2,1/2,1)
D. Vigo
Pmat.Rev.28
14
19/05/2004
Esempio (4)
• Il pricing genera la colonna a7=(1,0,0,0,1) e z = 6/5
• Pivot sulla nuova colonna: base=(a6,a2,a7,a4,a5)
• si ottiene x=(10,15/2,10,15,2), arrotondata in
x=(10,8,10,15,2) che richiede 45 bin ed
u=(1/5,1/5,1/2,1/2,4/5)
• Il pricing genera la colonna a8=(1,0,2,0,0) e z = 6/5
• Pivot sulla nuova colonna: base=(a6,a2,a3,a4,a8)
• si ottiene x=(10,15/2,10,5,10), arrotondata in
x=(10,8,10,5,10) che richiede 43 bin ed u=(0,0,1/2,1/2,1)
D. Vigo
Pmat.Rev.29
Esempio (5)
• Il pricing genera nuovamente la colonna
a3=(0,0,0,0,1) e z = 1
• La colonna fuori base a costo ridotto minimo ha costo
ridotto nullo: la base corrente è ottima !
• La soluzione ottima frazionaria è:
• base=(a6,a2,a3,a4,a8), x=(10,15/2,10,5,10), e usa 42,5 bin
• La soluzione intera arrotondata è:
• base=(a6,a2,a3,a4,a8), x=(10,8,10,5,10), e 43= ⎡42,5⎤ bin
Î soluzione ottima per il problema intero !
D. Vigo
Pmat.Rev.30
15
Fly UP