Parte V:
Rilassamento Lagrangiano
Tecnica Lagrangiana
Consideriamo il seguente problema di Programmazione Lineare Intera:
P1L I min cTx Ax > b
Cx > d
x > 0, intera in cui
• A = matrice m x n
• C = matrice m1 x n
• b = vettore di dimensione m
• d = vettore di dimensione m1
• x, c = vettori di dimensione n
Tecnica Lagrangiana
Supponiamo che
● P1
L I sia un problema difficile, e
● min cTx Cx > d
x > 0, intera
sia un problema facile.
In altre parole, stiamo supponendo che i vincoli Ax > b siano quelli che complicano la risoluzione del problema.
Tecnica Lagrangiana
Costruiamo allora un nuovo problema P2L I “inserendo” nella funzione obiettivo i vincoli complicati nel modo seguente:
P2L I min cTx – λT(Ax – b) Cx > d
x > 0, intera
λ∈Rm+ = vettore dei moltiplicatori di Lagrange
P2L I = problema Lagrangiano
L(λ) = min{cTx – λT(Ax – b): Cx > d, x > 0, intera }= funzione Lagrangiana
Tecnica Lagrangiana
Per ogni valore di λ > 0 fissato, la soluzione ottima del problema lagrangiano costituisce un bound duale sull'ottimo del problema originario. Infatti, il problema lagrangiano corrisponde ad un rilassamento (lagrangiano) del problema iniziale.
Proposizione: Sia z* il valore della soluzione ottima di P1L I.
Per ogni vettore non negativo λ si ha L(λ) < z*.
Tecnica Lagrangiana
Dim. Per ogni soluzione ammissibile x di P1L I si ha Ax > b ⇒ Ax – b > 0.
Poiché λ > 0, abbiamo che λT(Ax – b) > 0.
Pertanto, per ogni vettore non negativo λ si ha z* = min{cTx : Ax > b, Cx > d, x > 0, intera}
> min {cTx – λT(Ax – b): Ax > b, Cx > d, x > 0, intera}
> min {cTx – λT(Ax – b): Cx > d, x > 0, intera} = L(λ).
Duale Lagrangiano
L'obiettivo di questo approccio è quello di determinare il vettore λ*
che fornisce il miglior lower bound L(λ*) per z*.
Per calcolare λ* è necessario risolvere il seguente problema di ottimizzazione
L(λ*) = max{L(λ): λ > 0}.
denominato duale Lagrangiano.
Perché si utilizza la denominazione di duale?
Duale Lagrangiano
Consideriamo un problema lineare della forma
PL = min{cTx : Ax > b, x > 0}
ed applichiamo il rilassamento lagrangiano sui vincoli Ax > b L(λ) = min{(cT – λA)x + λb: x > 0}.
Il duale lagrangiano avrà la forma
L(λ*) = max{L(λ): λ > 0}= max{min{(cT – λA)x + λb: x > 0}, λ > 0}.
Per λ fissato, se (cT – λA) < 0 la corrispondente componente di x sarà posta a +∞ e quindi L(λ) = –∞.
Poiché il duale lagrangiano è in forma di max ha senso considerare solo quei vettori λ per cui (cT – λA) > 0. Pertanto il duale lagrangiano può essere riscritto nella forma
L(λ*) = max{λb: (cT – λA) > 0, λ > 0}
che corrisponde proprio al duale di PL.
Rilassamento lagrangiano e rilassamento lineare
Che relazione esiste tra il bound ottenibile con il rilassamento lineare zRL e quello ottenibile con il rilassamento lagrangiano L(λ*)?
Teorema: L(λ*) > zRL.
Pertanto il rilassamento lagrangiano è almeno tanto buono quanto il rilassamento lineare.
Tuttavia l'efficacia del rilassamento lagrangiano è legata all'efficienza con cui si riesce a risolvere il duale Lagrangiano.
Condizioni di ottimalità
per il rilassamento lagrangiano
● La soluzione ottima del rilassamento lagrangiano potrebbe non essere ammissibile per P1L I a causa dei vincoli rilassati.
● Inoltre, se anche la soluzione del rilassamento lagrangiano è ammissibile, non è detto che essa sia ottima per P1L I.
Proposizione(condizione sufficiente): Se, per un fissato valore di λ*, si ha che
1. La soluzione ottima xL* del problema lagrangiano è ammissibile per P1LI
2. (λ*)T(AxL* – b) = 0
allora xL* è una soluzione ottima anche per P1L I.
Condizioni di ottimalità
per il rilassamento lagrangiano
Dim: Per definizione, fissato λ, L(λ) = min{cTx – λT(Ax – b)}.
Dalla condizione 2, si ottiene che L(λ*) = cTxL*.
Inoltre L(λ*) è un lower bound per l'ottimo di P1L I, ossia cTxL* = L(λ*) < cTx
per ogni soluzione ammissibile x.
Dalla condizione 1. sappiamo che xL* è ammissibile per P1L I e
pertanto deduciamo che xL* è anche ottima per P1L I.
Soluzione del duale lagrangiano
Consideriamo il problema lagrangiano
e sia X = {x1, ..., xH} l'insieme di punti interi che soddisfano i vincoli di P2L I.
Per un dato λ, in ciascun punto xh, la funzione lagrangiana assume il valore (cT – λTA)xh + λTb, per h = 1, ..., H. Pertanto,
L(λ) = min {(cT – λTA)x1 + λTb, (cT – λTA)x2 + λTb,
...
(cT – λTA)xH + λTb}
P2L I min cTx – λT(Ax – b) Cx > d
x > 0, intera
Soluzione del duale lagrangiano
Pertanto
L(λ) = max v
v < (cT – λTA)xh + λTb per h = 1, ..., H λ > 0
Ricordiamo che:
Una funzione f: Rn → R si dice concava se per ogni coppia x1, x2∈Rn e per ogni α, 0 < α < 1, risulta
αf(x1) + (1 – α)f(x2) < f(x1 + (1 – α)x2).
L(λ) è una funzione continua, lineare a tratti e concava.
Funzione lagrangiana per m = 1
λ L(λ)
λ*
L(λ*)
(cT – λaT)x1 + λTb
(cT – λaT)x2 + λTb
(cT – λaT)x3 + λTb (cT – λaT)x4 + λTb
(cT – λaT)x5 + λTb
Soluzione del duale lagrangiano
Pertanto risolvere il duale lagrangiano significa determinare il punto di massimo della funzione L(λ).
Osserviamo che L(λ) è una funzione non differenziabile.
Uno dei metodi più utilizzati per risolvere il duale lagrangiano è il metodo del subgradiente, che può essere applicato a funzioni continue ma non differenziabili.
Metodo del subgradiente
Def: Data L(λ) concava e un punto λ ∈ Rm in cui L non è differenziabile un subgradiente di L in λ è un vettore s ∈Rm tale che, per qualsiasi altro punto λ'∈ Rm, si ha
L(λ') – L(λ) < sT(λ' – λ)
Osservazione 1: Possono esistere molti vettori s che soddisfano la relazione precedente.
Osservazione 2: Se L fosse differenziabile il suo unico subgradiente in λ sarebbe il suo gradiente ∇L(λ).
Osservazione 3: λ* è un punto di ottimo per la funzione L(λ) se 0 è un subgradiente di L in λ*.
Metodo del subgradiente
Il metodo del subgradiente per il calcolo di λ* consiste nel generare una successione di valori λ(0), λ(1), ..., λ(k), … convergente a λ* in cui
λ(k+1)= λ(k)+ θ(k)d(k) con
– d(k) = direzione di spostamento
– θ(k) = passo opportunamente specificato
Se il passo è scelto in maniera opportuna, l'algoritmo del subgradiente converge a λ*.
Scelta del subgradiente
Teorema: Siano λ(k) ∈ Rm e x(k) ∈ Zn+ due vettori tali che
L(λ(k)) = min{cTx – λ(k)T(Ax – b): Cx > d, > 0, intera}
= cTx(k) – λ(k)T(Ax(k) – b).
Allora il vettore (b – Ax(k)) è un subgradiente di L(λ) in λ(k).
Dim: Per un generico vettore λ risulta:
L(λ) = min{cTx + λT(b– Ax): Cx > d, > 0, intera}
< cTx(k) + λT(b– Ax(k))
= cTx(k) + λ(k)T(b– Ax(k)) + (λ – λ(k))(b– Ax(k)) = L(λ(k)) + (b– Ax(k))(λ – λ(k))
Dalla definizione di subgradiente segue la tesi.
Scelta del passo
La scelta del passo θ(k) è fondamentale per la convergenza o meno ad un punto di massimo λ*.
Inoltre, nel caso di convergenza, la scelta di θ(k) ne influenza notevolmente la velocità.
Se la sequenza θ(k) soddisfa le condizioni lim θ(k) = 0
∑
θ(k) = +∞allora la successione {λ(k)} generata scegliendo d(k) = s(k)/||s(k)||
converge a λ*.
k→ +∞
k=0 +∞
Algoritmo del subgradiente
Input: L(λ), λ(0) =punto iniziale , KMAX = massimo numero di iterazioni senza miglioramento 1. Inizializzazione k := 1.
2. Per un dato λ(k), calcola la soluzione x(k) del problema Lagrangiano.
3. s(k) := b − Ax(k). Se s(k) = 0, STOP 4. θ(k) := (zUB − L(λ(k – 1)))/||s(k) ||
5. λ(k+1) := λ(k) + θ(k) s(k)/||s(k) ||
6. k := k + 1
7. Se il lower bound non è migliorato nelle ultime K
MAX iterazioni, STOP, altrimenti vai al passo 2.
Esempio: TSP simmetrico
Una delle applicazioni più efficaci della tecnica lagrangiana è quella del TSP simmetrico.
Dati
• G = (V, E) grafo completo, |V| = n
• cij = costo associato all'arco ij, per ogni ij ∈E
determinare un ciclo hamiltoniano su G di costo minimo.
Per formulare il TSP simmetrico, definiamo
• S = sottoinsieme di nodi di V
• E(S) = archi con entrambi gli estremi in S
• δ(S) = archi con un estremo in S ed uno in V\S.
Esempio: TSP simmetrico
Consideriamo le variabili binarie xij = 1 se l'arco ij appartiene al ciclo hamiltoniano, xij = 0 altrimenti.
Formulazione:
min
∑
cijxij
∑
xij = 2 per ogni i ∈V∑
xij < |S|– 1 2 < |S| < n–1 xij ∈{0, 1} per ogni ij ∈Eij∈E
ij∈δ(i)
ij∈E(S)
Esempio: TSP simmetrico
I vincoli
∑ xij = 2 per ogni i ∈V
indicano che su ogni nodo del grafo devono incidere esattamente due archi del ciclo hamiltoniano.
ij∈δ(i)
ij∈E(S)
I vincoli
∑ xij < |S|– 1 2 < |S| < n–1
garantiscono che nessun sottografo indotto dai nodi in S contenga sottocicli.
Tali vincoli sono in numero esponenziale (O(2n))!
Esempio: TSP simmetrico
Tuttavia alcuni degli (O(2n)) vincoli sono superflui.
Infatti, consideriamo un nodo arbitrario, sia esso v = 1, e scriviamo i vincoli soltanto per i sottoinsiemi S che non contengono tale nodo.
Una soluzione ammissibile per il TSP con questi vincoli corrisponde ancora ad un ciclo hamiltoniano.
Se, per assurdo, non fosse un ciclo hamiltoniano dovrebbe contenere un sottociclo. In realtà, dai vincoli di uguaglianza deduciamo che dovrebbe contenere almeno due sottocicli. Di questi, uno sicuramente non conterrà il nodo v = 1. Ma allora, per questo sottociclo il vincolo precedente sarebbe violato!!!
∑ xij < |S|– 1 2 < |S| < n–1, 1 ∉S
ij∈E(S)
Esempio: TSP simmetrico
Pertanto possiamo riformulare il problema come segue:
Formulazione:
min
∑
cijxij∑
xij = 2
∑
xij = 2 per ogni i ∈V
∑
xij < |S|– 1 2 < |S| < n–1, 1 ∉S∑
xij = nij∈E
ij∈δ(1)
ij∈E(S)
ij∈E
ij∈δ(i)
Esempio: TSP simmetrico
Dato che il problema così formulato è difficile da risolvere, proviamo ad applicare il rilassamento lagrangiano rilassando gli n – 1 vincoli di uguaglianza sui nodi
Problema Lagrangiano:
L(
λ
) =min∑
cijxij –∑ λ
i( ∑
xij – 2)∑
xij = 2
∑
xij < |S|– 1 2 < |S| < n–1, 1 ∉S∑
xij = nxij ∈{0, 1} per ogni ij ∈E
ij∈E
ij∈δ(1)
ij∈E(S)
ij∈E
ij∈δ(i) i =2
n
Esempio: TSP simmetrico
Le soluzioni ammissibili del problema lagrangiano sono tutti gli 1-alberi sul grafo iniziale in cui ogni arco ij ha peso
cij –
λ
i –λ
jPertanto, il problema lagrangiano è facile da risolvere.
Ad una generica iterazione i, dato il moltiplicatore
λ ' ,
scegliamos(i) = 2 –
∑
x'ijdove x' è la soluzione ottima del corrispondente problema lagrangiano L(
λ '
). Osserviamo che||s||2=
∑ ( ∑
x'ij – 2)2i =2 n
ij∈δ(i) ij∈δ(i)