Programmazione Lineare
INTERA III
Matrici (totalmente) Unimodulari
Def:
A  Zmxn si dice Unimodulare

ogni sua sottomatrice quadrata di rango massimo
ha determinante +1 o -1
Def:
A  Zmxn si dice Totalmente Unimodulare (TUM)

ogni sua sottomatrice quadrata ha determinante
+1 o -1
TH:
se A e b sono interi e A è unimodulare allora il
sistema Ax=b x0 ha soluzioni intere
TH:
se A e b sono interi e A è totalmente
unimodulare allora i sistemi
Ax  b x0 e Ax  b x0
hanno soluzioni intere
Molti problemi su reti di flusso
godono di questa proprietà
Una matrice A con elementi 0, ±1 è TUM se
valgono le seguenti condizioni: (cond suff)
a) ogni colonna contiene al più due elementi non
nulli;
b) gli indici {1,…,m} delle righe di A possono
essere partizionati in due insiemi tali che ogni
colonna con i due elementi non nulli di segno:
- uguale, allora gli indici delle righe
corrispondenti appartengono a insiemi diversi;
- opposto, allora gli indici delle righe
corrispondenti appartengono allo stesso
insieme.
Ricordiamo la rappresentazione di un grafo tramite la matrice di incidenza
nodi-archi:
sia G=(N,A) un grafo orientato di n nodi N = {1..n} e
m archi A = { (i,j)  arco da i a j }
allora
la matrice E ha una riga iN e una colonna (ij)A.
La colonna (i,j) ha valori:
0 in ogni componente  i,j
-1 nella componente i,
+1 nella componente j.
• Verificare se la matrice E di incidenza nodi-archi di un grafo orientato
è TUM.
Cosa ne consegue? I vincoli dei principali problem di flusso (cammino di costo
minimo, flusso Massimo, flusso di costo minimo, accoppiamento) si descrivono
attraverso la matrice di incidenza e il vettore dei termini noti
• Cosa accade per grafi Non Orientati G=(V,E)?
Nei grafi non orientati E ha solo componenti +1 e 0.
esempio
sia G=(N,A) il grafo orientato in figura, con n=6, m=8.
Costruiamo la matrice E, di 6 righe e 8 colonne
La colonna (i,j) ha valori:
0 in ogni componente i,j
-1 nella componente i,
+1 nella componente j.
(12) (13) (24) (35) (43) (46) (52) (56)
2
1
2
3
4
5
6
-1
+1
4
-1
-1
+1
+1
-1
+1
+1
-1
-1
+1
+1
6
1
-1 -1
+1
3
5
esempio
Ma se G=(N,A) non fosse orientato ?
Costruiamo la matrice E, di 6 righe e 8 colonne
La colonna (i,j) ha valori:
0 in ogni componente i,j
+1 nella componente i,
+1 nella componente j.
2
4
(12) (13) (24) (35) (43) (46) (52) (56)
1
2
3
4
5
6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1 +1
+1
6
1
3
5
La matrice E è ancora totalmente unimodulare.
E’ vero per tutti i grafi non orientati o esistono casi specifici in cui E non è TUM?
Di che proprietà gode il grafo G?
Proviamo a fare una visita in ampiezza da 1 colorando in modo alterno i nodi visitiati
a livello pari e a livello dispari
esempio
visita in ampiezza da 1 colorando in modo alterno i nodi visitiati a livello pari e a livello dispari
La procedura da lo stesso risultato a partire da ogni nodo!!
2
4
(12) (13) (24) (35) (43) (46) (52) (56)
1
2
3
4
5
6
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1 +1
+1
6
1
3
5
Grafi con questa propietà si dicono BIPARTITI
Una definizione analoga è che contengono solo cicli con numero pari di archi
Accoppiamento di massima cardinalità
su grafo bipartito
G=(N,A) è bipartito

N=N1 N2
A  N1N2
Gli archi descrivono le
possibili coppie (matching)
Quante coppie al più?
Max ijA xij:
jN2 xij1 iN1
iN1 xij1 jN2,
xij{0,1}
esercizio
• Scrivere la matrice di incidenza del grafo in
figura, numerando da 1 a n1 i nodi in N1 e da
(n1+1) a (n1+ n2) i nodi in N2.
1
2
6
7
8
3
9
4
10
5
11
12
La matrice E dei vincoli è TUM
• Dimostrazione: le colonne soddisfano alla condizione (a) (due soli
elementi  0) e alla condizione (b) se partizioniamo gli indici delle
righe secondo la partizione dei nodi corrispondenti nei due
sottoinisiemi di nodi N1 e N2.
• Posso risolvere il problema con la programmazione lineare 
l’accoppiamento di massima cardinalita’ su grafi bipartiti e’ un
problema FACILE
• Esistono algoritmi polinomiali appositi (+ efficienti del simplesso)
• ? Quanto incide il fatto che il grafo sia bipartito? ....
Th Konig
Se G è bipartito allora 
Il matching di massima cardinalità ha lo stesso valore del vertex
cover minimo
(total dual integrality)
Vertex Cover:
Dato il grafo non orientato G=(V,E) determinare il numero MINIMO di vertici
tali per cui ogni arco in E ha almeno uno dei due estremi selezionato
Dim:
sapendo che la matrice dei vincoli è TUM, scrivere il duale del problema di
matching, verificare se la nuova matrice èTUM, e applicare il teorema forte
di dualità
Accoppiamento di massima
cardinalità su grafo qualunque
G=(V,E), E = insieme delle coppie possibili
Max ijE xij:
ijS(i) xij  1  iN
xij{0,1}
b
e
d
a
S(i) è l’insieme degli archi incidenti nel nodo i
Ad esempio, la stella del nodo a è
S(a) = {(a,b), (a,d), (a,c)}
g
f
c
Accoppiamenti e cicli dispari
• La soluzione intera ha al + k/2 archi  ciclo di k archi,
con k dispari
• La soluzione continua può avere valore ½
su ogni arco del ciclo
Il vincolo
ijCk xij  k/2
per Ck ciclo dispari
è una disuguaglianza valida
Complessità del problema di matching
di massima cardinalità su grafi qualsiasi
Ck è un ciclo dispari di k archi
Il politopo
P={xij: ijS(i) xij  1 iN, ijCk xij  k/2 Ck, 0xij1}
è l’inviluppo convesso dei vettori di matching  risolvo il problema con la
PL se so descrivere tutti i vincoli..ma.. un numero esponenziale di cicli??
Se esiste una descrizione implicita polinomiale del politopo allora il problema
è in P anche se il politopo ha un numero esponenziale di facce:
Si può dimostrare che esiste un algoritmo polinomiale per la generazione dei
tagli violati del tipo ijCk xij  k/2 (separazione)
 la separazione per i vincoli ijCk xij  k/2 è polinomiale
 il problema dell’accoppiamento di masssima cardinalità su grafi qualsiasi è
polinomiale
 Infatti esistono algoritmi esatti ad hoc polinomiali
Un altro esempio:
il Minimum Spanning Tree
Dato
un grafo G=(V,E) non orientato
un vettore dei costi c:E→R+,
determinare il sottografo connesso
di costo minimo
Oss.
Un albero di copertura T è un sottografo
minimale per la connessione (rimuovendo un arco (i,j) qualsiasi da T l’insieme
degli archi rimanenti non forma + un grafo connesso, e si crea un TAGLIO, cioè una
partizione dei nodi V in due sottoinsiemi Q e V\Q con iQ, jV\Q non connessi fra
loro),
massimale per l’assenza di cicli (aggiungendo a T un qualsiasi arco (i,j), il
nuovo grafo contiene un CICLO che include l’arco (i,j) )
Ciascuna delle due definizioni offre lo spunto per un modello valido di PLI.
I due modelli (per tagli e per cicli) sono entrambi corretti (definiscono lo stesso insieme
di punti interi) e con un numero esponenziale di vincoli, ma il loro rilassamento
continuo (e il bound associato) è molto diverso.
Un modello di PLI per il MST:
modello basato sui tagli
Min ijE cij xij tale che:
ijE xij = n-1
cardinalità
iQ,jQ xij 1  QV, Q
connessione O(2n)
xij{0,1}
interezza
Data una soluzione intera x* (sottografo di n-1 archi) del rilassamento dato dalla cancellazione di
(alcuni dei) vincoli di connessione, esiste un algoritmo polinomiale per verificare la connessione
del sottografo:  visita sul grafo indotto dalla soluzione corrente x* .
Utilizzando i soli archi (i,j) con xij*=1, a partire dal nodo 1 visito tutti i nodi raggiungibili.
Se posso visitare tutti i nodi in V allora la soluzione e’ un albero di copertura.
Se al contrario x* viola il vincolo di connessione per un certo insieme di nodi Q, tale vincolo
viene introdotto esplicitamente nel modello, e si riottimizza il nuovo problema (procedimento
iterativo) fino alla soluzione del problema.
NB ad ogni iterazione risolvo un problema di PLI (potenzialmente richiede un B&B)…
Possiamo fare meglio?
Rilassamento continuo del
modello basato sui tagli per il MST
Min ijE cij xij tale che:
ijE xij = n-1
cardinalità
iQ,jQ xij 1  QV
connessione O(2n)
xij[0,1]
rilassamento continuo dei vincoli di interezza
Supponiamo di risolvere il rilassamento continuo di un modello rilassato ottenuto esplicitando solo
un sottoinsieme dei vincoli di taglio.
E’ possibile generare eventuali vincoli violati per mezzo di una procedura di complessità
polinomiale? (….o equivalentemente…)
…data una soluzione del rilassamento continuo x* esiste una procedura polinomiale per verificare il
soddisfacimento di tutti i vincoli di connessione non presenti?
Premesso che
il problema di determinare la quantità massima di flusso che può attraversare una rete
capacitata da un nodo s a un nodo t è un problema polinomiale (problema di flusso massimo)
• Utilizzo x* come capacità degli archi,
• Oriento la rete facendo corrispondere ad ogni [i,j]E una coppia di archi (i,j) e (j,i) A,
• Risolvo un problema di flusso massimo per ogni scelta della coppia di nodi s e t fra i nodi della
rete,
se ogni flusso massimo ha valore  1 allora TUTTI I vincoli di taglio sono rispettati, inclusi quelli non
esplicitati, altrimenti si genera il nuovo vincolo (è relativo al taglio di capacità minima associato
al flusso massimo <1) e si riottimizza
MST: modello basato sui tagli vs
modello basato sui sottocicli
Min ijE cij xij tale che:
ijE xij = n-1
cardinalità
iQ,jQ xij 1  QV
connessione O(2n)
xij{0,1}
vincoli di interezza
Abbiamo appena visto che è possibile risolvere il rilassamento continuo di questa
formulazione in tempo polinomiale (poichè il problema di separazione lo è).
Ho risolto il problema di MST senza dover fare branching? La soluzione ottenuta è intera?
Questo modello è una formulazione ideale dell’MST?
(l’ottimo del rilassamento continuo ha coordinate intere per ogni istanza?)
NO!! (Può essere necessaria una fase di Branch & Bound..)
Ma lo è una seconda formulazione di PLI. Si tratta della formulazione basata sui cicli in cui la
struttura ad albero è imposta attraverso i vincoli di subtour breaking
Min ijE cij xij tale che:
ijE xij = n-1
cardinalità
i,jQ xij  |Q|-1  QV
subtour breaking O(2n)
xij{0,1}
vincoli di interezza
MST: modello per tagli vs modello per sottocicli
Min ijE cij xij tale che:
ijE xij = n-1
iQ,jQ xij 1  QV
xij{0,1}
FORMULAZIONI
DI PLI
EQUIVALENTI
Min ijE cij xij tale che:
ijE xij = n-1
i,jQ xij  |Q|-1  QV
xij{0,1}
Pcut  Zn  Pcycle  Zn
Pcycle
Pcut
Min ijE cij xij tale che:
ijE xij = n-1
iQ,jQ xij 1  QV
xij[0,1]
Pcut
CONTIENE
Pcycle
Min ijE cij xij tale che:
ijE xij = n-1
i,jQ xij  |Q|-1  QV
xij[0,1]
Il politopo del rilassamento continuo della versione per tagli (detto Pcut)
CONTIENE (è una formulazione meno aderente)
il politopo del rilassamento continuo della versione per sottocicli (detto Pcycle).
Teorema:
Il politopo del rilassamento continuo della versione per tagli Pcut
CONTIENE il politopo del rilassamento continuo della versione per sottocicli Pcycle.
Min ijE cij xij t.c.:
ijE xij = n-1
iQ,jQ xij 1  QV
xij[0,1]
Pcut
CONTIENE Pcycle
Min ijE cij xij t.c.:
ijE xij = n-1
i,jQ xij  |Q|-1  Q  V
xij[0,1]
1) dimostriamo che una generica soluzione di Pcycle appartiene anche a Pcut
Consideriamo il vincolo di cardinalita’
ijE xij = n-1
Dato un qualunque sottoinsieme Q  V, gli archi in E si possono suddividere tra
quelli interni a Q, quelli interni a V\Q e quelli appartenenti al taglio d(Q)
Quindi ijE xij = i,jQ xij + i,jV/Q xij + i,jd(Q) xij = n-1
Sia x una soluzione in Pcycle,
allora x rispetta sia il vincolo di cardinalità che i vincoli di subtour breaking, per cui vale
i,jQ xij  |Q| - 1
i,jV/Q xij  |V\Q| -1
da cui i,jd(Q) xij  n-1 – (|Q|-1 + |V\Q|-1) = n -1 -n +2 =1
quindi x è anche una soluzione di Pcut
Teorema:
Il politopo del rilassamento continuo della versione per tagli Pcut
CONTIENE il politopo del rilassamento continuo della versione per sottocicli Pcycle.
2) dimostriamo che esiste una istanza per cui una soluzione di Pcut non appartiene a Pcycle
Consideriamo il grafo a sx in figura, in cui i costi degli archi sono rappresentati in blu.
L’albero ottimo ha costo 2 (es l’albero formato dagli archi {(ab), (bc), (bd), (ae)})
Nella figura a dx è rappresentata in rosso la soluzione ottima di Pcut, di costo 3/2.
Questo dimostra che Pcut non ha ottimo intero, quindi non è una formulazione ideale.
Inoltre la soluzione ottima di Pcut non è ammissibile per Pcycle, infatti la somma delle variabili
associate al set di nodi C=(b, c, d) ha valore 5/2=2.5 > 2.
Non e’ possibile riallocare parte di tale valore sugli altri archi C senza aumentare il costo della
soluzione (gli archi del ciclo C sono gli unici a costo 0) ne’ ridurne il valore senza violare il vincolo
di cardinalita’ (S xijE = 4)
a
b
a
b
1
1
0
c
1/2
d
1
c
1/2
0
1
e
1/2
0
1
1/2
e
d
Teorema:
Pcycle è una formulazione ideale per MST:
Il politopo del rilassamento continuo della versione per sottocicli Pcycle
ha opttimo intero per ogni istanza di MST
Min ijE cij xij t.c.:
ijE xij = n-1
i,jQ xij  |Q|-1  Q  V
xij[0,1]
Pcycle
Domandiamoci se sia facile risolvere Pcycle.
La polimialità dell’algoritmo dell’elissoide permette di dimostrare che
la complessità dell’algoritmo di separazione è la stessa del problema.
Quindi risolvere Pcycle è facile se, data x* soluzione ottima di un modello in cui
solo un sottoinsieme dei vincoli di subtour breaking è stato esplicitato, è
facile determinare, se esiste, un vincolo violato da x*.
Si tratta di determinare se esiste un insieme di nodi Q: jiQ x*ij >|Q|-1 oppure
verificare che non esiste.
Si può ricondurre alla soluzione di un problema di Flusso Massimo utilizzando
x* per la definizione delle capacità degli archi.
Vedi slides in 08.PLI1b