Seconda parte

Transcript

Seconda parte
Parte II:
Ottimalità, rilassamenti e bound
Sommario
• Definizioni di bound primali e duali.
• Rilassamento di un problema di OC.
• Esempi di rilassamenti per il problema del TSP:
– Il rilassamento 1-albero.
– Il rilassamento 2-abbinamento.
• Bound primali per il TSP:
– Nearest Neighbor e Insertion.
– Algoritmi approssimati (Double Tree, Christofides).
• Bound dal rilassamento lineare:
– Il rilassamento lineare del knapsack.
– Bound primali: algoritmo greedy.
• Bound per dualità.
• Formulazioni di PL.
• Formulazioni ideali e matrici TU.
Ottimalità, rilassamenti e bound
Consideriamo il seguente problema
z* = max {cTx : x ∈ X, X ⊆ {0,1}n }
dove z* è il valore della soluzione ottima x*.
Domanda: In che modo è possibile certificare che la soluzione x*
è ottima?
In generale, se disponessimo di un algoritmo che genera le due
sequenze di soluzioni:
zUB 1 > zUB 2 > …> zUB h > z*
zLB 1 < zLB 2 < …< zLB k < z*
potremmo fornire come criterio di arresto
zUB h - zLB k < ε (> 0)
Lower (upper) bound
Bound primali
Ogni soluzione x ∈ X ammissibile è un lower (upper) bound
per un problema di massimizzazione (minimizzazione)
zUB 1
zUB 2
z*
zLB 2
zLB 1
z*
Upper (lower) bound
Bound duali
Al contrario dei bound primali, trovare upper (lower) bound
di buona qualità per problemi di massimo (minimo) è
tipicamente difficile.
Buoni bound duali si ottengono attraverso lo studio delle
proprietà strutturali del problema di OC.
Le proprietà di un problema di OC si caratterizzano tramite:
1. Rilassamenti del problema
2. Definizione e studio di problemi duali.
Rilassamento
Definizione: Il problema
(RP) zR = max {f(x) : x ∈ T, T ⊆ Rn } (zR = min {f(x) : x ∈ T, T ⊆ Rn })
si definisce rilassamento del problema
(P) z = max {cTx : x ∈ X, X ⊆ {0,1}n } (z = min {cTx : x ∈ X, X ⊆ {0,1}n })
se e solo se:
i)
X ⊆ T,
ii)
f(x) > cTx per ogni x ∈ X (f(x) < cTx per ogni x ∈ X)
Proprietà 1: Se RP è un rilassamento di P, allora zR > z* (zR < z*).
Proprietà 2: Se xR sol. ottima di RP è ammissibile per P allora xR = x*.
Esempi di rilassamenti
Problema del commesso viaggiatore (simmetrico).
Dati: grafo G = (V, E); pesi sugli archi ce per ogni arco e ∈E.
Domanda: trovare il ciclo hamiltoniano di peso minimo.
Definizione: Un 1-albero è un sottografo di G che consiste di due
archi adiacenti al nodo 1 più gli archi di un albero ricoprente i nodi
{2, …, n}.
1
Esempio
2
5
3
4
Rilassamenti per il TSP
Osservazione: Un ciclo hamiltoniano è un particolare 1-albero.
1
2
5
3
4
Pertanto, il problema
Dati: grafo G = (V,E), pesi sugli archi ce per ogni arco e ∈E.
Domanda: trovare l’1-albero di peso minimo.
è un rilassamento del problema del TSP, perché l’insieme X di tutti
i cicli hamiltoniani è contenuto nell’insieme T di tutti gli 1-alberi.
Rilassamenti per il TSP
Definizione: Dato un grafo G = (V, E), un 2-abbinamento su
G è un insieme di archi M tale che ogni nodo in V è estremo
di esattamente due archi in M.
1
2
6
5
3
4
Un 2-abbinamento forma un insieme di cicli disgiunti.
Rilassamenti per il TSP
Osservazione: Un ciclo hamiltoniano è un particolare 2abbinamento, difatti è un 2-abbinamento privo di sottocicli
(subtour).
1
2
6
5
3
4
Pertanto, il problema
Dati: grafo G = (V,E), pesi sugli archi ce per ogni arco e ∈E
Domanda: trovare il 2-abbinamento di peso minimo
è un rilassamento del problema del TSP, perché l’insieme X di tutti i
cicli hamiltoniani è contenuto nell’insieme T di tutti i 2-abbinamenti.
Un esempio
Consideriamo la seguente istanza del problema del
Commesso Viaggiatore:
1
2
3
4
5
6
1
1
99
99
99
1
2
1
10
99
99
1
3
99
10
1
1
99
4
99
99
1
1
99
5
99
99
1
1
-
6
1
1
99
99
10
-
Un esempio
1
2
6
3
5
4
1
2
3
4
5
6
1
-
1
99
99
99
1
2
1
-
10
99
99
1
3
99
10
-
1
1
99
4
99
99
1
-
1
99
5
99
99
1
1
-
10
6
1
1
99
99
-
Un esempio
1
Il 2 abbinamento di peso minimo
ha valore 6
2
6
3
5
4
1
2
3
4
5
6
1
1
99
99
99
1
2
1
10
99
99
1
3
99
10
1
1
99
4
99
99
1
1
99
5
99
99
1
1
10
6
1
1
99
99
10
-
Un esempio
1
L’1-albero di peso minimo ha
valore 15
2
6
3
5
4
1
2
3
4
5
6
1
1
99
99
99
1
2
1
10
99
99
1
3
99
10
1
1
99
4
99
99
1
1
99
5
99
99
1
1
10
6
1
1
99
99
10
-
Un esempio
1
Il ciclo hamiltoniano di peso
minimo ha valore 24
2
6
3
5
4
1
2
3
4
5
6
1
1
99
99
99
1
2
1
10
99
99
1
3
99
10
1
1
99
4
99
99
1
1
99
5
99
99
1
1
10
6
1
1
99
99
10
-
Un esempio (2)
1
Il 2 abbinamento di peso minimo
ha valore 24
2
6
3
5
4
1
2
3
4
5
6
1
-
1
99
99
99
1
2
1
-
5
99
99
1
3
99
5
-
10
1
99
4
99
99
10
-
10
99
5
99
99
1
10
-
5
6
1
1
99
99
5
-
Un esempio (2)
1
L’1-albero di peso minimo
ha valore 19
2
6
3
5
4
1
2
3
4
5
6
1
1
99
99
99
1
2
1
5
99
99
1
3
99
5
10
1
99
4
99
99
10
10
99
5
99
99
1
10
5
6
1
1
99
99
5
-
Un esempio (2)
1
Il ciclo hamiltoniano di peso
minimo ha valore 32
2
6
3
5
4
1
2
3
4
5
6
1
1
99
99
99
1
2
1
5
99
99
1
3
99
5
10
1
99
4
99
99
10
10
99
5
99
99
1
10
5
6
1
1
99
99
5
-
Ricapitolando…
Abbiamo definito per il TSP due lower bound con le seguenti
proprietà:
1. Sono lower bound “combinatori”, ovvero si ottengono tramite la
soluzione di un problema di OC.
2. Tutti e due i problemi la cui soluzione genera i lower
“facili”, ovvero hanno complessità polinomiale.
bound
sono
La proprietà 2. è una proprietà chiave per ogni bound duale.
Infatti, se il calcolo del bound fosse un problema NP-completo
sappiamo che calcolare il bound diventa almeno tanto difficile
quanto risolvere il problema stesso.
Domanda: Come si possono calcolare bound primali (ovvero
soluzioni ammissibili di buona qualità) per il problema del TSP?
Algoritmi euristici
Definizione: Un algoritmo A si dice euristico per un
problema P se restituisce una soluzione ammissibile zA che
non è garantito essere la soluzione ottima.
Definizione: Sia P un problema di minimizzazione. Un
algoritmo euristico si dice δ-approssimato se
1. ha complessità polinomiale, e
2. per ogni istanza I di P con soluzione ottima z*(I), si ha
zA(I) / z*(I) < δ
(1)
Osservazione: Se P è un problema di massimo, allora δ < 1
e la condizione (1) vale con il segno di >.
Euristiche per il TSP
Sia G = (V, E) un grafo completo e sia cuv il costo di ciascun
arco uv ∈ E.
Euristiche costruttive: tentano di costruire un “buon” ciclo
hamiltoniano a partire da un sottociclo eventualmente vuoto.
Euristiche migliorative: a partire da una soluzione
ammissibile, si tenta di migliorarla attraverso miglioramenti
“locali”.
Euristica Nearest Neighbor
Input: G = (V,E).
Output: ciclo hamiltoniano T.
procedure nearest_neighbor ()
Scegli un vertice u ∈ V qualsiasi;
W = V \ {u}, aggiungi u alla lista T
while |W| > 0 {
scegli v ∈ W tale che cuv = min {cuj : j ∈ W}
Aggiungi {v} alla lista T
W = W \ {v}
u = v
}
Esempio Nearest Neighbor
1000
2
4
5
1
2
La soluzione di valore 1005 è ottima?
Esempio Nearest Neighbor
1000
2
4
5
1
2
La soluzione ottima vale 12.
Osservazione: il rapporto zA(I)/z*(I) può essere reso grande
a piacere.
Euristiche di inserimento
Euristiche di inserimento
Euristiche di inserimento
Euristiche di inserimento
Input: G=(V,E).
Output: ciclo hamiltoniano T.
procedure insertion_heuristic ()
Inizializza T con un sottociclo
W = V /T;
while (|W| > 0) {
scegli un vertice u ∈ W;
scegli la posizione in cui inserire u
in T;
inserisci u in T;
elimina u da W;
}
Selezione del vertice da inserire
Definizione: Si definisce distanza di un vertice u da un ciclo
T il peso del più piccolo arco che collega il vertice ad un
altro qualsiasi vertice del ciclo.
T = (1, 2, .., k) ⇒ dist (u, T) = min { cuv: v ∈ T}.
Nearest Insertion:
Inserisci il vertice u che minimizza dist (u, T), u ∉T.
Farthest Insertion:
Inserisci il vertice u che massimizza dist (u, T), u ∉T.
Selezione della posizione di
inserimento
Osservazione: Scegliere la posizione equivale a scegliere l’arco
da eliminare nel ciclo T. Un vertice può essere inserito in ogni
posizione di T.
Siano T = (v1, v2, …, vn) il ciclo corrente e c(T) il costo di T e sia
u il nodo da aggiungere al ciclo.
Se c(T(i)) è il costo del ciclo ottenuto da T inserendo il nodo u
nella posizione i-esima, il costo di inserimento è pari a
c(T(i)) - c(T).
Si seleziona la posizione che minimizza c(T(i)) - c(T).
Esempio
7
9
9
2
d=7
14
5
12
1
3
d=1
6
Esempio
T = {1, 2, 3}
7
2
9
9
3
2
d=7
1
5
12
1
3
d=1
14
6
Esempio
7
2
9
9
3
2
1
5
12
1
3
14
6
C = 21
Esempio
7
2
9
9
3
2
1
5
12
1
3
14
6
C = 16
Esempio
7
2
9
9
2
3
4
1
5
12
1
3
14
6
C=7
Altre regole di selezione del
vertice
Random Insertion:
Si sceglie un vertice a caso fra quelli non ancora inseriti
nel ciclo.
Cheapest Insertion:
Si sceglie il vertice che può essere aggiunto al ciclo con
il minimo aumento di costo.
Una proprietà strutturale
Si dice che la matrice delle distanze di un grafo G soddisfa
la disuguaglianza triangolare se comunque prendo un
triangolo e1, e2, e3 in G si ha cei + cej > cek per i ≠ j ≠ k, i, j, k
∈ {1, 2, 3}
5
6
4
5
7
4
Richiamo
Definizione: G = (V, E) è un grafo euleriano se e solo se il grado
di ogni nodo è pari.
Se G = (V, E) è un grafo euleriano e v è un vertice di G allora è
possibile costruire un percorso che inizia e finisce in v e che
attraversa ogni arco esattamente una volta.
Teorema: Sia H = (V, F) un grafo completo con la matrice dei
costi che soddisfa la disuguaglianza triangolare. Sia G = (V, E) un
sottografo euleriano connesso di H. H contiene un ciclo
hamiltoniano di lunghezza al più Σe∈E ce.
Dimostrazione (idea)
2
1
3
5
Sottografo euleriano
4
Come posso ricavare un ciclo hamiltoniano?
Poiché vale la disuguaglianza triangolare, c25 < c23 + c35.
Euristica Double Tree
1. Calcola un minimo albero ricoprente K.
2. Raddoppia gli archi di K, formando un percorso
euleriano.
3. Ricava un ciclo hamiltoniano dal percorso euleriano.
Indichiamo con zHDT il valore della soluzione che si ottiene
applicando l’euristica Double Tree.
Da un percorso euleriano ad
un ciclo hamiltoniano
Consideriamo un percorso euleriano (v1, …, vk).
procedure obtain_hamiltonian ()
T = {v1}, i=2, v = v1
while |T| < n {
if vi ∉ T
T = T ∪ {vi}
collega v a vi
v = vi
i ++
}
collega v a v1
T è un ciclo hamiltoniano.
Esempio
9
4
10
2
5
1
8
3
11
6
7
Tour euleriano (5,4,5,3,2,3,1,3,5,6,5,8,9,8,10,8,7,11,7,8,5)
Tour hamiltoniano (5,4,5,3,2,3,1,3,5,6,5,8,9,8,10,8,7,11,7,8,5)
Proprietà
Double tree è un algoritmo 2-approssimato per il TSP.
Dimostrazione:
1. z* > zTREE (1-albero è un rilassamento per TSP).
2. Per costruzione, la lunghezza del “doppio albero” è 2 * zTREE.
3. zHDT < 2 * zTREE.
Pertanto:
zHDT / z* < 2 * zTREE / zTREE = 2.
Euristica di Christofides
1. Calcola un minimo albero ricoprente K.
2. Sia V ’⊆ V l’insieme dei vertici che hanno grado dispari
in K.
3. Trova il matching perfetto M di peso minimo sui nodi V’’.
4. M ∪ K è un percorso euleriano.
5. Ricava un ciclo hamiltoniano dal percorso euleriano.
Indichiamo con zHCH il valore della soluzione che si ottiene
applicando l’euristica di Christofides.
Esempio
Matching perfetto
9
4
10
2
5
1
3
8
11
6
7
Tour euleriano (1,2,3,6,5,4,9,8,10,11,7,8,5,3,1)
Nodi di grado dispari
Tour hamiltoniano (1,2,3,6,5,4,9,8,10,11,7,8,5,3,1)
Proprietà
L’algoritmo di Christofides per il TSP è 3/2-approssimato.
Dimostrazione:
1. z* > zTREE (1-albero è un rilassamento per TSP)
Siano {t1, t2, ..., t2k} i vertici di grado dispari del minimo albero
ricoprente etichettati nell’ordine in cui si incontrano nel ciclo
hamiltoniano ottimo.
2
Esempio:
T* = {1, 2, 3, 4, 5, 6}
3
1
4
Min albero ricoprente in rosso
{t1, t2, ..., t2k} = {1, 3, 5, 6}
6
5
Dimostrazione
Sia C il ciclo formato dai vertici {t1, t2, ..., t2k} e z(C) il suo costo.
Si ha che:
1.
C è l’unione di 2 matching perfetti
{t1t2, t3t4, ... t2k-1t2k} ∪ {t2t3, t4t5, ... t2kt1}
e quindi z(C) > 2zM, con zM valore del matching perfetto di costo
minimo.
2.
z(C) < z* per la disuguaglianza triangolare. Difatti ognuno degli archi
di C ha un costo minore o uguale al corrispondente sottocammino in
T.
Pertanto, z* > z(C) > 2 zM, ovvero zM < z*/2.
Quindi:
zHCH < zTREE + zM < z* + z*/2 < 3/2 z*
Il problema della bisaccia
Avete a disposizione un budget b per gli investimenti dell’anno
2008.
Ad ogni progetto è associato
- un costo aj (> 0)
- un guadagno atteso cj (>0).
Problema: Scegliere l’insieme di progetti in modo che sia
massimizzato il guadagno atteso senza eccedere il budget b.
Se ogni progetto può essere attivato non solo per intero ma
anche in parte si parla di knapsack continuo.
Il knapsack continuo
Consideriamo il seguente problema
max ∑ j =1 c j x j
n
st
∑
n
j =1
ajxj ≤ b
(KRL)
0 ≤ x j ≤ 1 per j = 1, ..., n
KRL è un rilassamento del problema di knapsack 0-1.
Infatti, la collezione degli insiemi ammissibili del problema
di knapsack 0-1 è contenuta nella regione ammissibile del
problema di knapsack continuo.
Il knapsack continuo
Come si risolve il problema di knapsack continuo?
Essendo formulato come problema di Programmazione Lineare,
si può risolvere utilizzando il metodo del simplesso.
In alternativa: Supponiamo di riordinare gli elementi della
bisaccia in modo che:
h
c1 c2
cn
≥
≥ ... ≥
a1 a2
an
e sia h l’indice minimo per cui
∑a
j
>b
j =1
La soluzione x1 = 1, x2 = 1,..., xh −1 = 1, xh = f , xh +1 = 0,..., xn = 0 con
h −1


b − ∑aj 


j
=
1
 è ottima per (KLR).
f =
ah
Dimostrazione
Supponiamo, senza perdita di generalità, che gli elementi del
problema soddisfino
c
c1 c2
> >> ... > n
a1 a2
an
e sia xLP = (x1, …, xn) la soluzione ottenuta con la formula
precedente. Consideriamo una soluzione x’ ottima, diversa da xLP.
Ora, x’ differisce da xLP per almeno un elemento x’k con k > h.
Infatti, se x’ fosse diversa da xLP soltanto perché x’h= 0, allora x’
non sarebbe ottima. Ciò significa che esiste un indice i < h tale che
x’i < 1 e un indice k > h tale che x’k > 0.
Sia
d = min{ak x'k , ai (1 − xi )}
Per costruzione, d > 0. Consideriamo la soluzione:
Dimostrazione
x = ( x'1 , x'2 ,..., xi ,.., xk ,..., x'n )
che si ottiene da x’ sostituendo x’i e x’k con:
d
xk = x 'k −
ak
x è ammissibile. Infatti:
∑ j =1 a j x j =∑ j =1 a j x' j +
n
n
d
xi = x'i +
ai
ai d ak d <
−
=b
ai
ak
Inoltre, cx > cx'. Infatti:
 ci ck 
n


∑ j =1 c j x j =∑ j =1 c j x' j +d  a − a  > ∑ j =1 c j x' j
k 
 i
n
n
Ma, allora, la soluzione x’ non è ottima (contraddizione).
Bound primale per il knapsack
Il seguente algoritmo, applicato agli elementi della bisaccia
riordinati secondo il criterio
c1 c2
cn
≥
≥ ... ≥
a1 a2
an
restituisce, invece una soluzione ammissibile per il problema di
knapsack:
Algorithm Greedy_knapsack ()
d = 0; z = 0;
for (j = 1; j < n; j ++) {
if (d + aj < b) then
xj = 1;
d = d + aj;
z = z + cj;
else xj = 0;
}
return z;
Ricapitolando
Abbiamo definito per il knapsack 0-1 un upper bound con le
seguenti proprietà:
1. L’upper bound è “continuo”, nel senso che si ottiene dalla
soluzione di un problema di Programmazione Lineare e non
da un problema di OC.
2. L’upper bound può essere calcolato con un algoritmo più
efficiente rispetto al metodo del simplesso e polinomiale.
Domanda: Può
rilassamento?
essere
generalizzata
questa
tecnica
di
Sostituendo la “stipula” x ∈ {0, 1} con il vincolo 0 < x < 1 di una
formulazione di un problema di PL-{0,1}, si ottiene sempre un
rilassamento denominato Rilassamento Lineare.
Dualità
Definizione: Due problemi di ottimizzazione
z = max {f(x) : x ∈X}
w = min {g(y) : y ∈Y }
formano una coppia duale “debole” se f(x) < g(y) per ogni x ∈X e y
∈Y.
Se z = w si dice che formano una coppia duale “forte”.
Vantaggio fondamentale rispetto al rilassamento:
Per ottenere un bound attraverso il rilassamento, il problema
rilassato va risolto all’ottimo. Invece, per una coppia duale ogni
soluzione ammissibile y ∈Y (x ∈X) è un upper (lower) bound per z
(w).
Esempi
1. Il problema di trovare un matching di massima cardinalità
e quello di trovare un node cover di minima cardinalità
formano una coppia duale debole per ogni grafo G.
2. Il problema di trovare un insieme stabile di massima
cardinalità e quello di trovare un edge cover di minima
cardinalità formano una coppia duale debole per ogni grafo
G.
Entrambe queste coppie di problemi godono della dualità
forte se G è bipartito (Teorema di Konig e Teorema di
Gallai).
Formulazioni
Consideriamo il seguente problema di Knapsack 0-1
max (5x1 + 2x2)
st
3x1 + 4x2 < 6
x ∈ {0,1}2
Insiemi ammissibili
F = {(0, 0), (0, 1), (1, 0)}
Rappresentiamo sul piano gli insiemi ammissibili.
Insiemi ammissibili
x2
(0, 1)
(0, 0)
(1, 1)
(1, 0)
x1
Formulazione
Un poliedro P è una formulazione di un problema di OC se
e solo se P ∩ {0,1}n = F
x2
x1
Il rilassamento lineare …
Il problema di knapsack 0-1
max 5x1 + 2x2
3x1 + 4x2 < 6
x ∈ {0,1}2
ha come rilassamento lineare
max 5x1 + 2x2
3x1 + 4x2 < 6
x1 > 0
x2 > 0
x1 < 1
x2 < 1
… è un poliedro …
x2
3x1 + 4x2 < 6
x2 < 1
x1 < 1
x1 > 0
x2 > 0
x1
… ovvero, è una formulazione
x2
x1
Gerarchia di formulazioni
Quando una formulazione è “migliore” di un’altra?
Definizione: Se un poliedro P1, formulazione di F, è contenuto
in P2, formulazione di F, diciamo che P1 è migliore di P2.
In generale
P1 ⊆ P2 ⊆ P3 …
Esiste una formulazione “ideale”?
Formulazione ideale
“Geometricamente” la formulazione ideale coincide con il
più piccolo poliedro contenente F.
x2
x1
Come si ottiene la formulazione ideale?
Proprietà
Osservazione: Ogni vertice del poliedro associato alla
“formulazione ideale” è in corrispondenza biunivoca con un
insieme ammissibile.
Definizione: Dati due vettori x1 e x2 di Rn si definisce
combinazione convessa il vettore
y = λx1 + (1 – λ) x2 con λ ∈ [0, 1]
Esempio:
x1
y
x2
Involucro convesso
Definizione: L’insieme di tutte le possibili combinazioni
convesse di un insieme di vettori X di Rn prende il nome di
involucro convesso e si indica con conv(X).
Osservazione: conv(X) è un poliedro.
Pertanto, la formulazione ideale di F è conv (F).
Calcolo di conv (F)
In linea di principio …
Dati gli insiemi ammissibili
F = {(0, 0), (0, 1), (1, 0)}
y ∈ conv(F) se e solo se si può esprimere come
 y1 
0
0
1 
  = λ1   + λ2   + λ3  
0
1 
0
 y2 
λ1 + λ2 + λ3 = 1
λ1, λ2 , λ3 ≥ 0
… a questo punto
Attenzione: questo sistema è nello spazio Rn+m, se m sono gli
insiemi ammissibili.
Quindi per ottenere la formulazione ideale è necessario
“proiettare” il sistema nello spazio Rn.
A questo scopo è possibile utilizzare l’algoritmo di FourierMotzkin che consente di “eliminare” le variabili λ.
Punto della situazione
Dato un problema di OC
1. Elenco tutti gli insiemi ammissibili.
2. Rappresento gli insiemi ammissibili come vettori a
componenti in {0,1}.
3. Scrivo l’involucro convesso applicando la definizione.
4. Con l’algoritmo di Fourier-Motzkin elimino i coefficienti
della combinazione convessa e ottengo una formulazione
ideale nello spazio Rn.
5. Applico il metodo del simplesso e trovo la soluzione
ottima.
È efficiente questo algoritmo?
Efficienza del calcolo di conv(F)
Problemi del precedente algoritmo
1. Gli insiemi ammissibili sono tipicamente in numero
esponenziale.
2. L’algoritmo
polinomiale.
di
Fourier-Motzkin
non
ha
complessità
Però sappiamo che una formulazione ideale esiste sempre e
quindi
1. Caso MOLTO fortunato: abbiamo una formulazione che è
proprio la formulazione ideale.
2. Tentiamo di
approssimare la formulazione ideale
costruendo una gerarchia di formulazioni a partire da una
formulazione iniziale.
Gerarchia di formulazioni
Quando una formulazione è “migliore” di un’altra?
Definizione: Se un poliedro P1, formulazione di F, è
contenuto in P2, formulazione di F, diciamo che P1 è migliore
di P2.
In generale, una gerarchia di formulazioni è costituita da un
insieme di poliedri P1 ⊆ P2 ⊆ P3 …
Esempio
Consideriamo un problema di knapsack con il vincolo che
l’oggetto k può essere scelto se e solo se nella bisaccia sono
stati scelti gli oggetti i e j.
Formulazione 1.
max
st
cTx
ax ≤ b
xk ≤ xi
xk ≤ x
j
x ∈ { 0 ,1 } n
Formulazione 2.
max c T x
st
ax ≤ b
2 xk ≤ xi + x
x ∈ { 0 ,1 } n
j
Esempio (II)
Il rilassamento lineare della Formulazione 1 è migliore
di quello della Formulazione 2.
Infatti, il vincolo
2 xk ≤ xi + x
j
è implicato dai vincoli
xk ≤ xi
xk ≤ x
j
Quindi, P1 ⊆ P2.
Formulazione ideale
La formulazione del problema di knapsack NON è una
formulazione ideale.
Domanda: Esistono casi “fortunati” in cui la formulazione
coincide con la formulazione ideale?
E’ possibile “caratterizzare” le formulazioni ideali in modo da
riconoscerle in tempo polinomiale?
Il caso “fortunato”
Consideriamo il seguente problema di PL in forma standard, in
cui A è una matrice intera e b è un vettore intero:
min cTx
Ax = b
x>0
con rg (A) = m < n.
Se il problema ammette soluzione ottima finita, allora il metodo
del simplesso restituisce la soluzione ottima in corrispondenza
di una SBA del tipo:
-1
x



B
b
B
*

x =   = 

x
0
 N 

Il caso “fortunato” (II)
Osservazione: Se la base ottima B ha determinante
det(B )= + 1, allora RL ha una soluzione intera.
Infatti:
B–1 = Ba/det(B), dove Ba è la matrice aggiunta. Gli
elementi di Ba sono tutti prodotti di termini di B.
Pertanto Ba è una matrice intera e, poiché det(B)=+1,
B–1 è ancora intera.
Pertanto la soluzione di base xB = B–1b è intera per
ogni intero b.
Matrici unimodulari
Definizione: Una matrice A intera m × n (m < n) si dice
unimodulare se ogni sua sottomatrice B di dimensioni m × m
ha det(B) = {-1, 0, +1}.
Dall’osservazione precedente si ottiene il seguente risultato:
Teorema: Se A è una matrice unimodulare e b è un vettore
intero, il poliedro P = {Ax = b, x > 0} è intero.
Matrici totalmente unimodulari
Consideriamo ora il rilassamento lineare di una formulazione di
PL-{0,1}. In generale, sarà del tipo:
min cTx
Ax ≥ b
(P )
x>0
Per portare questo problema in forma standard bisogna inserire le
variabili di slack y:
min cTx
Ax –Iy = b
x, y > 0
(P’)
Matrici totalmente unimodulari
Definizione: Una matrice A si dice TOTALMENTE
UNIMODULARE (TU) se ogni sottomatrice quadrata di A ha
determinante {0, +1, -1}.
Proprietà delle matrici TU
Una matrice A è TU se e solo se
i)
la matrice trasposta AT è TU.
ii)
la matrice (A, I) è TU.
Teorema
Teorema (Hoffman-Kruskal [1956]):
Sia A una matrice intera. Il poliedro P definito da Ax ≥ b, x ≥
0 è intero per ogni vettore intero b se e solo se A è TU.
Attenzione: Il teorema non vale se P = {x ∈ Rn; Ax = b}.
Infatti, in questo caso P può essere intero ma A può non
essere TU.
Condizioni per la TU
Osservazione: Se A è TU, allora aij ∈{-1, 0, 1}.
Teorema: A è TU se
i) aij ∈{-1, 0, 1}
ii) Ogni colonna ha al più due coefficienti non nulli
iii) Esiste una partizione (M1, M2) dell’insieme delle righe M
tale che ogni colonna j contenente due coefficienti non nulli
soddisfa
∑
i∈M 1
aij = ∑i∈M aij
2
Osservazione:
- se la colonna j contiene due elementi aij ≠ 0 e akj ≠ 0 dello stesso
segno allora i∈ M1 e k∈ M2.
- se la colonna j contiene due elementi aij ≠ 0 e akj ≠ 0 di segno
opposto allora i, k ∈ M1 oppure i,k ∈ M2.
Dimostrazione
Dobbiamo dimostrare che ogni sottomatrice quadrata B di A ha
det(B)∈{–1, 0, 1}.
Procediamo per induzione:
Se B è una sottomatrice 1×1, banalmente det(B)∈{–1,0,1}.
Supponiamo ora che la tesi valga per ogni sottomatrice di A di
dimensioni (n – 1)×(n – 1) e consideriamo una sottomatrice B n×n.
•
Se B contiene una colonna nulla, det(B) = 0.
Dimostrazione
•
Se B contiene una colonna con un unico elemento diverso da
zero, allora det(B) = +det(B’), dove B’ è di ordine (n – 1)×(n – 1).
Pertanto, dall’ipotesi induttiva, det(B)∈{–1,0,1}.
•
Se ogni colonna di B contiene due elementi ≠ 0, dall’ipotesi si
ottiene
∑
i∈ M 1
a ij = ∑ i∈ M a ij
Questo implica che det(B) = 0.
2
Esempi di matrici TU
G (N, A) grafo diretto
2
a
e
3
i
d
c
1
b
h
l
f
4
g
A Matrice di incidenza
nodi-archi
M1= M, M2 = ∅
6
5
1
2
3
4
5
6
a b c d e f
g h i
l
1
1
0
0
0
0
0
0
0
0
-1 0
-1 1
1
0
0
0
0
0
0
0
0
0
-1 -1 0
1
1
0
0
-1 1
0
0
1
1
0
0
0
0
0
0
-1 0
0
-1 -1 0
1
0
0
0
0
0
0
0
0
-1 -1
Formulazione del problema di
cammino minimo
Dati: G (N, A) grafo diretto, due nodi (s, t), vettore c ∈R+|A|
z =min ∑( i , j )∈A cij xij
st
∑
∑
∑
k∈∂ + ( i )
xik − ∑k∈∂ − ( i ) xki = 1 per i = s
k∈∂ + ( i )
xik − ∑k∈∂ − ( i ) xki = 0 per ogni i ∈V \ {s, t}
k∈∂ + ( i )
xik − ∑k∈∂ − ( i ) xki = −1 per i = t
x ∈ {0,1}|A|
Cammino minimo
z =min ∑( i , j )∈A cij xij
st
1
Ax =  0 
 
− 1
x≥0
x ≤1
x ∈ {0,1}|A|
La stipula di interezza può essere
rimossa in quanto A è TU
Matrice di incidenza di grafi
bipartiti
1
a
4
b
2
d
3
5
c
e
M2
1
2
3
4
5
a
1
0
0
1
0
b
0
1
0
1
0
c
0
1
0
0
1
d
0
0
1
1
0
e
0
0
1
0
1
M1
Esercizio: Quali problemi di OC noti ammettono una formulazione
avente come matrice dei coefficienti la matrice di incidenza di un
grafo bipartito?
Matrici di incidenza
Domanda:Tutte le matrici di incidenza sono TU?
NO!!!
1
a
3
b
c
2
1
2
3
a
1
0
1
b
1
1
0
c
0
1
1