1 Lunedí 20 Aprile 2015 1 Istituto di Analisi dei Sistemi ed Informatica IASI - CNR
Rilassamento di un problema Rilassare un problema di Programmazione Matematica vuol dire trascurare alcuni (tutti i) suoi vincoli Sia dato il seguente problema di Programmazione Matematica min / max x f (x) s.t. g f (x) 0 g d (x) 0 vincoli facili vincoli difficili (P) Possiamo rilassarlo trascurando i vincoli difficili g d (x) 0: min / max x f (x) s.t. g f (x) 0 (P R )
Rilassamento di un problema e Bounding Indichiamo con x la soluzione ottima di (P) x R la soluzione ottima di (P R) In che relazione sono f (x ) e f (x R )? f (x R ) f (x ) f (x R ) f (x ) (per prob. di minimo) (per prob. di massimo) Inoltre, data una soluzione ammissibile x di (P), in che relazione sono f ( x) e f (x )? f ( x) f (x ) f ( x) f (x ) (per prob. di minimo) (per prob. di massimo)
Upper e lower bound di un problema di minimo Per un problema di minimo vale quindi la seguente relazione: Quindi, diciamo che: f (x R ) f (x ) f ( x) f (xr ) è un lower bound di (P); f ( x) è un upper bound di (P).
Upper e lower bound di un problema di massimo Per un problema di massimo vale quindi la seguente relazione: Quindi, diciamo che: f ( x) f (x ) f (x R ) f (xr ) è un upper bound di (P); f ( x) è un lower bound di (P).
Un caso fortunato Consideriamo il problema (P) in forma di minimo e sia: x R soluzione di (P R) g d (x R ) 0, cioè x R ammisibile per (P) Dato che f (x R ) f (x ), cosa si può concludere? x R è ottima per (P).
Problema min y + 0.01x s.t. 1 x 1 0 y 1 y x 2 0 NON è un problema di PL
Problema 1.5 1 0.5 0 0.5 1.5 1 0.5 0 0.5 1 1.5
Problema approssimato Però: è un problema di PL. ( 1, 0) è soluzione ottima min y + 0.01x s.t. 1 x 1 0 y 1 ( 1, 0) viola il vincolo y mx + q con m = 2, q = 1 ( 1, 0) non è soluzione di min y + 0.01x s.t. 1 x 1 0 y 1 y 2x 1
Problema approssimato 1.5 1 0.5 0 0.5 1.5 1 0.5 0 0.5 1 1.5
Problema approssimato Però: è un problema di PL. min y + 0.01x s.t. 1 x 1 0 y 1 y 2x 1 ( 1/2, 0) è soluzione ottima ( 1/2, 0) viola il vincolo y mx + q con m = 1, q = 0.25 ( 1/2, 0) non è soluzione di min y + 0.01x s.t. 1 x 1 0 y 1 y 2x 1 y x 0.25
Problema approssimato 1.5 1 0.5 0 0.5 1.5 1 0.5 0 0.5 1 1.5
Problema approssimato Però: è un problema di PL. min y + 0.01x s.t. 1 x 1 0 y 1 y 2x 1 y x 0.25 ( 1/4, 0) è soluzione ottima ( 1/4, 0) viola il vincolo y 0.5x 0.0625 ( 1/4, 0) non è soluzione di min y + 0.01x s.t. 1 x 1 0 y 1 y 2x 1 y x 0.25 y 0.5x 0.0625
Problema approssimato 1.5 1 0.5 0 0.5 1.5 1 0.5 0 0.5 1 1.5
Oracolo di separazione Dato un punto ( x, ȳ) soluzione del problema approssimato, è una procedura che 1 genera un vincolo y mx + q violato da ( x, ȳ) oppure 2 conclude che tutti i vincoli y mx + q sono soddisfatti
ATTENZIONE!! min y + 0.01x s.t. 1 x 1 0 y 1 y mx + q x [ 1, 1], m = 2 x, q = x 2 NON è un problema di PL
Introduzione Dato un problema di PL min{c x : x P}, di quali informazioni sul poliedro P abbiamo DAVVERO bisogno per risolvere il problema? Se disponessimo di una rappresentazione esterna di P, ovvero: P = {x R n : Ax b}, è ben noto che potremmo, in linea di principio, risolvere il problema usando il Metodo del Simplesso. In altri termini, la conoscenza di una rappresentazione esterna di P è una condizione sufficiente per l applicazione del metodo del simplesso. È anche una condizione necessaria? No
Oracolo di Separazione Abbiamo visto mediante alcuni esempi che per risolvere il problema è possibile acquisire informazioni sulla struttura di P non mediante la sua rappresentazione esterna, bensí da una sua rapprsentazione implicita realizzata per mezzo di un cosiddetto Oracolo di Separazione o generazione di righe. Un Oracolo di Separazione è una procedura che, dato un vettore x R n, fornisce una disequazione a x a 0 appertenente al sistema Ax b e tale che a x < a 0 (vincolo violato) oppure conclude che tutte le disequazioni di Ax b sono soddisfatte da x
Algoritmo di Soluzione Dinamico (primale) Supponiamo che il poliedro P sia limitato Algoritmo con generazione di righe (a) Definire un sottoproblema min{c x : Dx d} (problema corrente) con D sottomatrice di A con q m righe ed n colonne. (b) Risolvere il problema corrente (p.es. utilizzando il metodo del simplesso). Se il problema corrente è inammissibile allora lo è anche il problema completo. In caso contrario sia x R n la soluzione ottima del problema corrente. (c) Invocare l oracolo di separazione sul punto x. Se viene generato un vincolo violato da x, aggiungerlo al problema corrente e tornare al passo (b). (d) Se, invece, l oracolo di separazione conclude che tutti i vincoli del problema completo sono soddisfatti da x, allora x è la soluzione ottima del problema completo.
Introduzione Così come esistono problemi lineari con un numero elevatissimo di vincoli, esistono altrettanti problemi lineari (p.es. quelli che si ottengono per dualità) con un numero elevatissimo di variabili. Anche in questo caso è possibile definire un algoritmo di soluzione dinamico che tratta in modo implicito le (numerosissime) variabili del problema min{c x : Ax b, x 0 n } Tale metodo risolve (che chiameremo duale) una sequenza di problemi parziali min{c D z : Dz b, z 0 q} con D sottomatrice di A con m righe e q n colonne, e c D sottovettore di c associato alle colonne di D.
Oracolo di Generazione di Colonne (o variabili) Supponiamo, per semplicità, che il problema parziale si ammissibile e limitato Siano z R q e λ R m la coppia primale-duale di soluzioni ottime del problema parziale. Notiamo che la soluzione x = ( z, 0 n q ) è una soluzione ammissibile per il problema primale completo. Inoltre abbiamo che c D z = c x = b λ. Se λ è ammissibile per il problema duale completo (ovvero se A λ c), allora per il teorema della dualità forte le soluzioni x e λ sono una coppia di soluzioni ottime per i problemi primale e duale completi.
Oracolo di Generazione di Colonne (o variabili) Supponiamo, al contrario, che λ non sia ammissibile per il duale completo. Ció vuol dire che esiste un vincolo duale aj λ c j violato da λ ovvero tale che aj λ > c j. Notiamo che il vincolo duale a j λ c j non appartiene al duale parziale in quanto violato dalla soluzione λ che è ottima per il duale parziale. A questo punto, modifichiamo il problema duale parziale aggiungendo il vincolo a j λ c j. Tale modifica del duale parziale corrisponde all aggiunta della variabile x j al primale parziale e, di conseguenza, all aggiornamento della matrice D mediante l aggiunta della colonna j-esima
Algoritmo di Soluzione Dinamico (duale) Supponiamo che il poliedro P sia limitato e non vuoto Algoritmo con generazione di colonne (a) Definire un sottoproblema parziale iniziale min{c D z : Dz b, z 0 q} (problema corrente) non vuoto con D = D 0 sottomatrice di A con m righe e q n colonne. (b) Risolvere il problema corrente (p.es. utilizzando il metodo del simplesso). Siano z e λ le soluzioni ottime della coppia primale-duale corrente. (c) Applicare l Algoritmo di Generazione di Colonne per generare un vincolo violato duale e corrsipondente colonna primale. Se tale colonna viene generata, aggiungerla al problema corrente e tornare al passo (b). (d) Se, invece, nessuna colonna viene generata, allora il vettore x = ( z, 0 n q ) è una soluzione ottima del problema originario.
Algoritmo di Soluzione Dinamico (primale-duale) Supponiamo che il poliedro P sia limitato e non vuoto (a) Definire un sottoproblema parziale iniziale min{c D z : Dz b, z 0 q} (problema corrente) con D sottomatrice di A con p m righe e q n colonne. (b) Risolvere il problema parziale (p.es. utilizzando il metodo del simplesso). Siano z R q e λ R p le soluzioni ottime della coppia primale-duale corrente. (c) Invocare l oracolo di separazione sul punto x = ( z, 0 n q). Se viene generato un vincolo violato da x, aggiungerlo al problema corrente (agg. solo i coefficienti delle colonne attaulmente presenti nel problema corrente) e tornare al passo (b). (d) Se nessun vincolo è stato generato al passo (c), applicare l Algoritmo di Generazione di Colonne per generare una colonna del problema originale. Se tale colonna viene generata, aggiungerla al problema corrente e tornare al passo (b). (e) Se, invece, nessuna colonna viene generata, allora il vettore x = ( z, 0 n q) è una soluzione ottima del problema originario e λ la soluzione ottima duale corrispondente.
Descrizione del problema G = (V, E) grafo orientato con V insieme dei nodi ed E insieme degli archi. Siano S e T due nodi di V. Supponiamo che a ciascun arco (u, v) E sia associato un peso o lunghezza d u,v 0. Problema: Determinare il sottoinsieme P E di lunghezza totale (somma delle lunghezze degli archi (u, v) P) minima e tale che esista un cammino da S a T composto esclusivamente di archi appartenenti a P. Nota: Siccome d u,v 0, si ha che P è l insieme degli archi di un cammino di lunghezza minima tra i nodi S e T.
Formulazione del problema Per ogni arco (u, v) E, indichiamo con x u,v una variabile binaria tale che { 1 se (u, v) P x u,v = 0 altrimenti Funzione obiettivo: peso di P = (u,v) E x u,v d u,v. Definizione (Taglio e ST-Taglio) Sia X V un sottoinsieme di nodi e X = V \ X. Il sottoinsieme (X, X ) = {(u, v) E : u X, v X oppure v X, u X } è un taglio nel grafo. (X, X ) è un ST-taglio se S X e T X.
Formulazione del problema Vincoli: ogni ST taglio deve contenere almeno un arco appartenente a P. Tradotto in formule: Formulazione: min s.t. (u,v) K (u,v) E (u,v) K x u,v 1, x u,v d u,v x u,v 1, per ogni ST-taglio K x u,v {0, 1}, (u, v) E. per ogni ST-taglio K
Esempio 15 5 7 20 44 S 14 9 6 2 18 24 30 3 2 5 6 11 19 16 4 6 T Formulazione e soluzione in AMPL
Descrizione del problema Dato un grafo G = (V, E), con V = {1, 2,..., n} e E = V V, e assegnate delle lunghezze δ uv ad ogni arco (u, v) E, si vuole determinare il ciclo di lunghezza minima che passa una ed una sola volta per ogni nodo del grafo. Formulazione: min s.t. (u,v) E (k,v) E (u,k) E x u,v l u,v x u,v 0, 1, x k,v = 1, x u,k = 1, (u,v) E,u X,v V \X k V k V (u, v) E x u,v >= 1, X V.
Esempio (8 città) Città: Amsterdam Berlino Bruxelles Lisbona Madrid Parigi Roma Vienna Am Be Br Li Ma Pa Ro Vi Am 0 685 200 2270 1805 505 1770 1180 Be 685 0 775 3065 2540 1130 1530 630 Br 200 775 0 2070 1560 295 1545 1135 Li 2270 3065 2070 0 660 1790 2675 2975 Ma 1805 2540 1560 660 0 1260 2030 2450 Pa 505 1130 295 1790 1260 0 1440 1265 Ro 1770 1530 1545 2675 2030 1440 0 1130 Vi 1180 630 1135 2975 2450 1265 1130 0 Formulazione e soluzione in AMPL