Programmazione Lineare INTERA II … continua

Slides:



Advertisements
Presentazioni simili
1/20 NP completezza. 2/20 Problemi astratti Un problema è un’entità astratta (es. il TSP). Una istanza del problema è un suo caso particolare in cui vengono.
Advertisements

Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA
Programmazione lineare: un esempio Mix produttivo ottimo con risorse vincolate Materiale di studio: M. Fischetti, Lezioni di RO, Cap. 3. Libreria Progetto.
Programmazione Lineare INTERA II
Lezioni di Ricerca Operativa Corso di Laurea in Informatica
Programmazione lineare: un esempio Mix produttivo ottimo con risorse vincolate Materiale di studio: M. Fischetti, Lezioni di RO, Cap. 3. Libreria Progetto.
Disequazioni in una variabile. LaRegola dei segni La disequazione A(x) · B(x) > 0 è soddisfatta dai valori di per i quali i due fattori A(x) e B(x) hanno.
Prof.ssa Rossella Petreschi Lezione del 3/12/2013 del Corso di Algoritmica GRAFI e PLANARITA’ Lezione n°15.
Lezione n° 14 Teoria della dualità: - Teorema forte della dualità - Teorema degli scarti complementari Lezioni di Ricerca Operativa Corso di Laurea in.
x : variabile indipendente
© 2007 SEI-Società Editrice Internazionale, Apogeo
SUMMERMATHCAMP TARVISIO, AGOSTO 2017
= 2x – 3 x Definizione e caratteristiche
LA CIRCONFERENZA.
Progettare algoritmi veloci usando strutture dati efficienti
Cammini minimi in grafi:
Definizione di logaritmo
Branch and Bound Lezione n°19 Prof.ssa Rossella Petreschi
L’integrale indefinito
La circonferenza nel piano cartesiano
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Equazioni differenziali - introduzione
Branch and Bound Lezione n°14 Prof.ssa Rossella Petreschi
x : variabile indipendente
Approssimazione Lezione n°20 Prof.ssa Rossella Petreschi
Le disequazioni DEFINIZIONE DISEQUAZIONI EQUIVALENTI
La circonferenza nel piano cartesiano
Algoritmi Avanzati a.a.2013/2014 Prof.ssa Rossella Petreschi
4 < 12 5 > −3 a < b a > b a ≤ b a ≥ b
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Lezione n°17 Prof.ssa Rossella Petreschi
x : variabile indipendente
Raccogliamo x al primo membro e 2 al secondo:
Equazioni differenziali
Insiemi di punti: altre caratteristiche
Algoritmi e Strutture Dati
Macchine sequenziali Capitolo 4.
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Elevamento a potenza di G. CALVI
Usi (meno scontati) della visita DFS
Programmazione Intera
Introduzione.
Appunti di analisi matematica: Integrale Definito
ANALISI DELLE DISTRIBUZIONI STATISTICHE
Approssimazione Lezione n°15 Prof.ssa Rossella Petreschi
Lezione n°11 Prof.ssa Rossella Petreschi
Lezione n°12 Prof.ssa Rossella Petreschi
Lezione n°18 Prof.ssa Rossella Petreschi
I numeri relativi DEFINIZIONE. Si dicono numeri relativi tutti i numeri interi, razionali e irrazionali dotati di segno (positivo o negativo). ESEMPI Numeri.
ABBINAMENTO Lezione n°13
Algoritmi per il flusso nelle reti
Branch and Bound Lezione n°18 Prof.ssa Rossella Petreschi
Equazioni di 2°grado Introduzione.
Ordinamento in tempo lineare
Cammini di costo minimo su un grafo pesato
Ricerca Operativa 2a parte
Schema generale, visita in ampiezza e profondità.
Algoritmi e Strutture Dati
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi
Usi (meno scontati) della visita DFS
Algoritmi Avanzati Prof.ssa Rossella Petreschi
Algoritmi e Strutture dati a.a.2010/2011 Prof.ssa Rossella Petreschi
Backtracking Lezione n°17 Prof.ssa Rossella Petreschi
Esercizio Dato un albero binario, definiamo altezza minimale di un nodo v la minima distanza di v da una delle foglie del suo sottoalbero, definiamo invece.
Cammini minimi in grafi:
Matrici e determinanti
Il problema del flusso nelle reti
La retta Esercitazioni Dott.ssa Badiglio S..
I sistemi di equazioni di 1° grado
Transcript della presentazione:

Programmazione Lineare INTERA II … continua

Disuguaglianze valide ad hoc per problemi di PLI Classi note di disuguaglianze Knapsack cover GUB cover Flow cover Cliques Implication Gomory Mixed-Integer rounding

Definizione di Disuguaglianza Valida Dato un problema di PLI del tipo P = max cx: Axb, xZn, il vincolo axa0 e’ una disuguaglianza valida per P se è soddisfatto da ogni soluzione (intera) di P. Dato x* punto di ottimo del rilassamento continuo di P: PPL= max cx: Axb una disuguaglianza valida si dice essere un taglio se tale disuguaglianza è violata da x* cioè si verifica che ax*>a0

Tagli e bound Se aggiungo un taglio alla formulazione di un problema di PLI, l’insieme delle soluzioni ammissibili (intere) rimane tale, ma il bound associato al rilassamento continuo delle nuova formulazione migliora avendo eliminato il precedente punto di ottimo del rilassamento continuo. c x*

Disuguaglianze valide generabili in modo automatico su base algebrica Disuguaglianze di Chvatal Tagli di Gomory sviluppo teorico anni 70  algoritmo cutting plane Inapplicate fino agli anni 90 (integrazione nei metodi di B&B  Branch and Cut)

….dice Chvatal dato il problema di programmazione lineare intera (P) min{cx : Axb, xZ+n } (A, b, c di componenti intere non negative) ogni disuguaglianza del tipo ax  a0, tale che a0 e ogni componente di a = [a1,..,an] sono ottenute come parte intera inferiore della combinazione conica delle righe di A|b con coefficienti uR+m allora la disuguaglianza così ottenuta, ax  a0 è anche una disuguaglianza valida per P. (è soddisfatta da tutte le soluzioni intere di P)

esempio max x1 + x2 + x3 x1 + x2  1 x2 + x3  1 x1 + x3  1 x0, xiZ, i=1,…,3 Interpretazione: determinare un accoppiamento di massima cardinalità in un grafo completo di ordine 3 (detto Clique o K3) Ogni variabile x (arco) rappresenta una coppia: Il primo vincolo dice che il nodo a può stare in coppia o con b o con c ma non con entrambi (o scelgo la coppia (ab) o scelgo la coppia (ac) oppure non scelgo nessuna delle due coppie). Analoga interpretazione per gli altri due vincoli Esistono 3 soluzioni ottime intere equivalenti, corrispondenti a selezionare uno qualsiasi dei tre archi (coppie) (quindi o x1 o x2 o x3 uguale a 1). Quindi il valore dell’ottimo intero ad esempio, zI*=1 e xI*=[1,0,0] (oppure [0,1,0] o [0,0,1] ) PERO’ L’ottimo del rilassamento continuo del modello è zLP*=3/2 con xLP*=[½, ½, ½]. L’ “integrality gap” (differenza relativa tra bound e ottimo) associato a questa istanza è (3/2-1)/1, quindi dell’ordine del 50% Vediamo come sia possibile rafforzare il modello in modo da migliorare (diminuire) il valore del rilassamento continuo e restringere questo gap. a x1 b x2 x3 c

max x1 + x2 + x3 x1 + x2  1 x2 + x3  1 x1 + x3  1 x0, xiZ, i=1,…,3 a x1 b u1 u2 u3 x2 x3 c Prendiamo come moltiplicatori dei tre vincoli i tre numeri reali, u1=u2=u3=1/2, e facciamo la combinazione conica dei vincoli, utilizzando come vettore dei coefficienti il vettore u = [½, ½, ½] NB in questo esempio ogni colore è associato a un vincolo La disuguaglianza di Chvátal così ottenuta è: ½ + ½ x1 + ½ + ½ x2 + ½ + ½ x3  ½ + ½ + ½=1 cioè x1 + x2 + x3  1. Aggiungendo tale disuguaglianza al sistema, la soluzione ottima del rilassamento continuo diventa intera e l’integrality gap è annullato

Un altro risultato teorico Chvatal dimostra che: è sufficiente un numero finito di tali disuguaglianze per definire la formulazione ideale di P, attraverso vincoli che descrivono la convex hull (inviluppo convesso) dei punti interi di P (se conoscessimo la formulazione ideale del problema si otterrebbe l’ottimo intero risolvendo un problema di PL !!) Ma tali vincoli sono in numero esponenziale dato x* ottimo del rilassamento continuo corrente,  sempre un vettore di moltiplicatori u tale che la disuguaglianza uTAx≤uTb è violata da x* QUINDI? Poichè lo scopo è trovare l’ottimo intero z* e NON anche ottenere l’intera descrizione ideale di P, sono interessato alla generazione delle sole disuguaglianze che sono anche tagli. …vale a dire, quelle disuguaglianze valide che sono violate dalla soluzione ottima del rilassamento continuo corrente Questa osservazione è alla base del metodo noto come Cutting Plane 

Algoritmo Cutting Plane Procedure metodo_piani_di_taglio: begin ottimo:= false; repeat x* := RisolviPL(P) ! x*= ottimo del rilassamento continuo if x* intero then ottimo:= true else begin Genera_taglio (x*, a:a0); Aggiungi_taglio(P, a:a0) end until ottimo end. Esiste una procedura per la generazione automatica dei tagli di Chvatal, proposta da Gomory, che sfrutta la soluzione di base associata a x*

Tagli di Gomory xh + jN atj xj = bt x*h + jN atj x*j > bt Dato P= min {cx: Ax=b, x0 , xZn}, siano: B la base ottima del rilassamento continuo, A = [AB-1A] diventa la matrice [I, N] nel tableau associato alla base ottima, con N=AB-1AN e sia b=AB-1b i valori della soluzione di base xB (xN=0). Se x*=[xB,xN]=[b,0] non è intero  allora  un indice hB: x*h è frazionario ( bt è frazionario). Sia t l’indice di riga del vincolo su cui xh ha il pivot (x*h= bt). Il vincolo nel tableau è xh + jN atj xj = bt Passando ai troncamenti, genero un taglio per x* come segue, prendendo il floor dei coefficienti: xh + jN atj xj ≤ bt  1) trattandosi di una disuguaglianza di tipo  ed essendo x0, vale sicuramente xh + jN atj xj ≤ bt . 2) il secondo step, che sostituisce a bt il suo floor, è dovuto ai vincoli di interezza. Tale disuguaglianza è valida per le soluzioni intere di P, ma in x* è violata, perchè vale x*h + jN atj x*j > bt il vincolo è violato da x* (diventa x*h ≤  t  essendo x*j =0 jN) poichè per ipotesi x*h è frazionario Il nuovo vincolo viene aggiunto alla matrice corrente, in forma di uguaglianza, aggiungendo una apposita variabile di slack intera, secondo una procedura detta di ORLATURA della matrice che aggiunge una riga e una colonna ad ogni iterazione. Queste operazioni, computazionalmente poco onerose nei solver di PLI ,sono implementate solo nelle prime iterazioni poiche’ il procedimento perde via via di efficacia (i tagli risultano progressivamente meno profondi).

Esempio numerico min -x1 - x2 -3x1 + 12x2 + x3 = 30 6x1 - 3x2 + x4 = 8 xiZ+ La soluzione ottima del problema continuo è xB = [62/21, 68/21], B = {1,2}, N={3,4} e AB-1 = 1/21 1 4 2 1 Quindi il sistema originario, premoltiplicato per AB-1, diventa [I, N] x = b x1 + 1/21 x3 + 4/21 x4 = 62/21 x2 + 2/21 x3 + 1/21 x4 = 68/21 Applicando la procedura ad entrambe le componenti frazionarie della soluzione, sia x1 che x2, produciamo rispettivamente per ciascuna riga, i due nuovi vincoli corrispondenti ai due tagli di Gomory : x1 + 0 x3 + 0 x4  2,  x1 2 essendo 1/21= 4/21=2/21=0 x2 + 0 x3 + 0 x4  3  x2 3 essendo 62/21=2, 68/21=3 che sono entrambi violati dalla soluzione continua corrente x*=[62/21, 68/21, 0, 0]

esercizio Aggiungere i due tagli di gomory prodotti all’esempio precedente, e risolvere nuovamente il problema continuo con Xpress Riapplicare la procedura fino all’esaurimento (fino a quando non si possono generare ulteriori tagli)

Aspetti pratici Il solo algoritmo Cutting Plane realizzato utilizzando i soli tagli di Gomory non è efficace in pratica: si osserva una progressiva perdita di efficacia dei tagli via via generati. MA diventa uno strumento molto potente se embedded in un Branch and Bound, unito alla generazione di tagli ad hoc per particolari strutture del problema  Branch and Cut IDEA alla base della procedura di Branch and Cut: Ad ogni nodo dell’albero di BB genero tagli fino a che sono efficaci. Se la soluzione è ancora frazionaria allora si procede con il Branching. Vediamo alcuni tagli ad hoc per singoli problemi di ottimizzazione combinatoria, che sono basati sulla ( sfruttano la) specifica struttura del singolo problema. Si osservi che il loro studio permette di applicare questi tagli a ogni formulazione di PLI in cui un qualsiasi sottoinsieme dei vincoli abbia tale struttura. Ad esempio molti modelli contengono almeno un vincolo del tipo axb, x≥0. Se la funzione obiettivo del modello è di massimo e se tutti i coefficienti sono non negativi, allora posso applicare all’intero problema i tagli sviluppati per il problema di Knapsack intero associate al vincolo axb.

Tagli di tipo “cover” riferimento per lo studio: folder “materiale didattico integrativo in pdf” sul minisito del corso, file “cover-inequalities.pdf” (DeGiovanni, DiSumma) Dato un problema di Massimo P a variabili binarie xj per jJ, e un vincolo del tipo ax  a0 di coefficienti ai0, si definisce una cover un insieme di k variabili Ck tali che non possono essere contemporaneamente in soluzione, in quanto la somma dei loro pesi supera la capacità dello zaino. Si può descrivere questo fatto attraverso un vincolo che impedisce che le variabili associate agli oggetti della cover siano tutte contemporaneamente a valore 1. S(jCk) xj  k-1 Infatti se le variabili xj sono tutte a valore 1 il vincolo è violato. Le cover possibili sono però in numero esponenziale, dell’ordine dei sottoinsiemi di J, quindi non posso aggiungerle tutte. Ad esempio una cover ovvia è data da tutti gli oggetti in I Si cerca di focalizzarsi su quelle più “significative” per l’ammissibilità intera e più efficaci dal punto di vista del rafforzamento del bound.

S(jCk) xj  k-1 è una disuguaglianza valida per P Tagli di tipo “cover” Focalizziamoci sulle cover minimali: si dice cover minimale del vincolo un gruppo di k variabili Ck tali per cui vale che: - Se le variabili sono tutte a valore 1 il vincolo è violato (infatti Ck è una cover) Non appena una qualsiasi variabile assume valore 0, il vincolo è soddisfatto (è sufficiente verificarlo per la variabile con coefficiente aj più piccolo) TH: S(jCk) xj  k-1 è una disuguaglianza valida per P

Esempio S(jCk) x*j > k-1 Max z = 9x1 + 5x2 + 6x3 + 4x4: xj {0,1} x*=[ 5/6, 1, 0, 1 ] zL= 16,5 Sono cover derivate dal vincolo 1 i due insiemi seguenti, C3 e C2 C3 = {1,2,4}, C2 = {1,3} La cover C3 è violata da x* (poichè 5/6+1+1 > 2) mentre C2 no (5/6+0 < 1). Quindi C2 NON SERVE!!! Cioè, se aggiunta al modello, la disuguaglianza associata (x1 + x3  1) non ha effetto sul valore ottimo del rilassamento continuo zL , che determina il bound Come generare solo cover violate? Cioè tali che S(jCk) x*j > k-1 Risolvendo un nuovo problema di ottimizzazione!!! Detto problema di SEPARAZIONE Infatti il nuovo vincolo separa x* dalle soluzioni intere di P Implementiamo il modello con Xpress e risolviamone il rilassamento continuo, ottenendo x*

Aggiungere il vincolo relativo alla cover C2 model ModelName uses "mmxprs"; forward procedure stampa declarations x1, x2, x3, x4: mpvar Objective:linctr k : integer end-declarations 6*x1 + 3*x2 + 5*x3 + 2*x4 <= 10 x3 + x4 <=1 -x1 + x3 <= 0 -x2 + x4 <= 0 x1 <= 1 x2 <= 1 x3 <= 1 x4 <= 1 Objective := 9*x1 + 5*x2 + 6*x3 + 4*x4 k:=1 maximize(Objective) stampa x1 + x3 <= 1 k:=k+1 x1 + x2 +x4 <=2 procedure stampa writeln("\niterazione ",k,"\n", getobjval, "\tx(1)=", getsol(x1), "\tx(2)=", getsol(x2), "\tx(3)=", getsol(x3), "\tx(4)=", getsol(x4)) end-procedure end-model OUTPUT iterazione 1 16.5 x(1)=0.833333 x(2)=1 x(3)=0 x(4)=1 iterazione 2 iterazione 3 14.5 x(1)=0.5 x(2)=1 x(3)=0.5 x(4)=0.5 Aggiungere il vincolo relativo alla cover C2 non modifica la soluzione ottima continua x* poiche’ C2 non e’ violata da x* Al contrario, il vincolo relativo alla cover C1 è violato da x* la nuova soluzione ottima del rilassamento continuo cambia, e il bound associato migliora (da 16.5 scende a 14.5)

C è una cover derivata dal vincolo ax  a0  SiC aixi* > a0 Separazione per le cover inequalities: Problema di ottimizzazione associato: come individuare tra le tante cover, quella + violata da x* (ottimo continuo corrente). Si chiama separazione perchè il vincolo prodotto costituisce un iperpiano di separazione tra x* e le soluzioni intere di P Def. C è una cover derivata dal vincolo ax  a0  SiC aixi* > a0 Usiamo una variabile binaria zi per denotare l’appartenenza di un elemento i alla cover C. Vogliamo ∑i aizi > a0 (una cover, quindi la capacità è superata) ∑i (1-x*i) zi < 1 (il cui vincolo sia violato da x*) NB: x* è nota quindi la uso come dato del nuovo problema, inoltre vale (1-x*i)0 poiche’ 0  x 1. Perche’???

Problema di Separazione per le cover: ..infatti, la cover vieta di avere contemporaneamente a 1 tutti i suoi elementi, ed è espressa nella disuguaglianza S (jCk) xj  k-1 Per cui è violata nel punto x* se S (jCk) xj* > k-1 Voglio imporre come vincolo, nel problema di ricerca della cover “migliore”, che la cover sia violata da x*, cioè che per i valori correnti di x* valga S(jCk) x*j > k-1 Opero delle trasformazioni di equivalenza a questa disuguaglianza: - Sottraggo k a entrambi i membri: - k + S(jCk) x*j > k - 1 - k = -1 - Porto –k dentro la sommatoria, distribuendo sui k addendi: S(jCk) (x*j -1) > -1 - Moltiplico i membri per -1: S(jCk) (1-x*j ) < 1 Giungendo così all’espressione finale del vincolo ∑i (1-x*i) zi < 1 che impone di selezionare solo cover violate da x*, attraverso il valore delle variabili z che si sostituiscono all’indicazione nella sommatoria «j nella cover» (j Ck), Poichè cerco la cover + violata, minimizzo l’espressione ∑i (1-x*i) zi E’ un NUOVO PROBLEMA di OTTIMIZZAZIONE!!!

Se il valore ottimo della funzione obiettivo è  1 Cercare il vincolo di cover + violato (risolvere il problema di separazione), equivale a risolvere il problema di ottimizzazione: Min ∑i(1-x*i)zi tale che ∑i ai zi > a0, zi0,1 ristretto alle sole i con x*i>0, Si tratta di un problema di zaino binario di dimensioni molto ridotte. Nota che, poiché i coefficienti ai e a0 sono interi e le zi binarie, il vincolo ∑i ai zi > a0 diventa ∑i ai zi  a0 +1 Ricordiamo che il problema di zaino binario, anche se NP-Hard, è risolvibile in modo esatto da algoritmi pseudopolinomiali (tramite la programmazione dinamica) Quindi risolvere il problema di separazione tramite questa procedura è computazionalmente gestibile. Se il valore ottimo della funzione obiettivo è  1 allora TUTTI i vincoli di cover indotti dal vincolo [a,a0] sono soddisfatti da x*, altrimenti abbiamo generato la disuguaglianza di cover + violata, la aggiungiamo all’insieme dei vincoli e iteriamo la procedura risolvendo nuovamente il rilassamento continuo.

Lifting di un vincolo di cover (cenni) Liftare una disuguaglianza significa renderla + efficacie, aumentando lo spazio in cui tale vincolo è definito, in modo tale che sia sempre rispettato dalle soluzioni intere del problema ma escluda ulteriori soluzioni frazionarie. Un modo semplice di liftare una disuguaglianza originata da una cover C è quello di aggiungere nella sommatoria degli elementi della parte sx della disuguaglianza, ogni elemento il cui coefficiente “peso” sia maggiore di quello di tutti gli elementi della cover stessa, lasciando inalterato il rhs. Il principio su cui è basata questa operazione è il seguente: sia wmax il peso dell’elemento più pesante nella cover C. Allora, qualsiasi elemento di peso > wmax, se sostituito a un qualunque elemento della cover C produce un insieme di elementi il cui peso supera certamente il limite a0 quindi il numero massimo di elementi contemporaneamente selezionabili all’interno del nuovo insieme resta come prima al più k-1 (il rhs precedente). Non avremmo potuto affermare questa proprietà se avessimo aggiunto elementi di peso inferiore a wmax. Esempio: X = { x∊{0,1}7 : 11x1 + 6x2 + 6x3 + 5x4 + 5x5 + 4x6 + x7  19 } L’insieme di indici C={3,4,5,6} è una cover, poichè 6+5+5+4 = 20 > 19. La disugaglianza x3+ x4+ x5+ x6  3 può essere rafforzata aggiungendo sia x1che x2. in quanto il loro coefficiente è maggiore o uguale a quello degli elementi in C. Il nuovo vincolo diventa x1+x2+x3+x4+x5+x6  3 quindi una disuguaglianza in R6 e si chiama “extended cover” Possiamo fare altro?

Lifting di un vincolo di cover (continua) Una disuguaglianza di cover C, è un vincolo aderente al politopo (una faccia del politopo) nello spazio RC (ristretto alle sole variabili della cover) se la cover è minimale. E’ possibile applicare il processo di lifting in modo da ottenere un vincolo in Rn tale che resti il + possibile aderente al politopo? Ordiniamo gli indici delle variabili C secondo un criterio qualsiasi e prendiamo la prima (es. xh). Lo scopo è liftare la cover ineq SIC xi  |C|-1 dallo spazio RC nello spazio RC{h} . Dobbiamo rispondere alla seguente domanda: quale è il massimo valore che può assumere il parametro b affinche’ il vincolo b xh + SIC xi  |C|-1 sia una disuguaglianza valida per ogni soluzione intera del seguente problema di zaino binario definito nello spazio RC{j} : ahxh + SIC aixi  Q ? Se xh=0 il vincolo è soddisfatto per ogni soluzione intera essendo C una cover. Se xh=1, otteniamo il problema Max b tale che b + Max {SIC xi tale che (ah + SIC ai xi)  Q }  |C|-1 Da cui b  |C|-1 - Max {SIC xi tale che SIC ai xi  Q-ah } Il problema è un problema di zaino binario ma assai più semplice del problema di partenza, di dimensioni inferiori e risolvibile per ispezione, data la particolare funzione obiettivo. Lo si risolve, si setta il valore di b e si itera scegliendo la variabile successiva.

Lifting di un vincolo di cover (continua) Esempio: sia P il problema di zaino binario P={max wx tale che x∊{0,1}7 e 11x1+ 6x2+ 6x3+ 5x4+ 5x5+ 4x6+ x7  19} e sia C={x3, x4, x5, x6} una cover per P  SiCxi  |C|-1  x3+x4+x5+x6  3 e’ una disuguaglianza valida per P ed e’ “facet defining” per il problema di zaino in RC dato da PC={max wx, tale che x∊{0,1}4 e 6x3+5x4+5x5+4x6 19} Ciò significa che il vincolo è aderente alla frontiera di PCR4 per un sottospazio di dimensione 4-1=3, e quindi ne definisce una “faccetta”. Partiamo dalla variabile x1. Vogliamo liftare il vincolo in RC{1} secondo la procedura illustrata in precedenza. Occorre determinare b* = max b: b + x3+x4+x5+x6  3 è soddisfatta da ogni soluzione intera del problema 6x3+5x4+5x5+4x6 19-11 = 8, con x∊{0,1}4 Il valore della soluzione ottima di max { x3+x4+x5+x6 tale che 6x3+ 5x4+ 5x5+ 4x6  8, con x∊{0,1}4 } è 1 (si verifica facilmente per ispezione), quindi b*= max b: (b + 1)  3 vale 2, e otteniamo il vincolo di cover liftato 2x1 + x3+ x4+ x5+ x6  3

Lifting di un vincolo di cover (continua) Ora liftiamo il vincolo 2x1 +x3+x4+x5+x6  3 rispetto alla variabile x2. Ripetendo i passaggi precedenti, dobbiamo risolvere il problema di zaino max {2x1+x3+x4+x5+x6 tale che 11x1+6x3+5x4+5x5+4x6  19-6 = 13, xi{0,1} } Ci sono diverse soluzioni intere con valore ottimo 2, quali: x1=1, x3=x4=x5=x6=0, x1=x3=x6=0, x4=x5=1, x1=x4=x5=0, x3=x6=1, Quindi b*= max b: b + 2 3  b*= 1, il che produce la seguente cover inequality liftata in RC{1,2} 2x1+x2+x3+x4+x5+x6  3. Iteriamo il procedimento su x7 per liftare il vincolo in R7. Il problema max {2x1+x2+x3+x4+x5+x6 t.c. 11x1+6x2+6x3+5x4+5x5+4x6  19-1=18, xi{0,1} } ha come valore ottimo 3, associato a diverse soluzioni intere quali x2=x3=x4=1, x1=x5=x6=0, ma anche x4=x5=x6=1, x1=x2=x3=0. Quindi b*= max b: b + 3 3  b*= 0, per cui il coefficiente massimo che può assumere x7 nella cover liftata è 0 per cui il vincolo di cover mantiene la stessa formulazione anche in R7. Il procedimento ha termine con la garanzia che il vincolo ottenuto è aderente a CH(X(P)), la combinazione convessa di tutte le soluzioni intere del problema di zaino binario di partenza. Ogni ordinamento delle variabili C da potenzialmente origine a un vincolo differente. Quindi il procedimento andrebbe iterato per ogni possibile ordinamento. Svolgere questa parte per esercizio. Riferimento bibliografico, L. Wolsey, Integer Programming, cap 9.3, pg147-151

Note ed esercizi Utilizzando Xpress, in modo manual liftare ciascuna delle cover ottenute, secondo tutti gli ordinamenti delle variabili non appartenenti alla cover Implementare in Xpress un procedimento iterativo che dato un tale ordinamento, implementa automaticamente il lifting. Utili integrazioni sono in https://en.wikipedia.org/wiki/Knapsack_problem Il progettino 3 richiede di implementare la separazione per il problema di Zaino binario MultiDimensionale, liftando le cover (vedi Integer Programming pg. 147-151

Voli da a td ta freq (settimanale) Un altro esempio di taglio generabile automaticamente dai solver: i tagli di tipo clique Esercizio: Formula il problema di Air Crew Scheduling settimanale per il seguente input: Voli da a td ta freq (settimanale) A B 8:00 9:00 1,2,3,4,5 B C 10:00 11:00 1,2,3,4,5,6,7 C D 13:00 14:00 1,2,3,4,5,6 C A 15:00 16:00 1,2,3,4,5,6,7 D A 15:00 16:00 1,2,3,4,5,7 A B 17:00 18:00 1,2,3,4,5,6,7 B C 11:00 12:00 1,2,3,4,5 Regole: 1h fra 2 voli consecutivi; non + di 6h di volo al giorno in un turno; A,C,D sono basi, turni di al + 2 giorni.

(T2,i) = i: v6 / i+1: v2, v3, v5 per i=1,2,3,4 Sono (alcuni fra i) possibili turni (colonne del modello di Set Partitioning) le seguenti sequenze di voli, indicati come (T_numturno, giorno inizio) = giorno: volo1,volo2.. / giorno+1: volo1,volo2.. (T1,i) = i: v1,v7,v4 per i=1,2,3,4,5 (T2,i) = i: v6 / i+1: v2, v3, v5 per i=1,2,3,4 (T3,i) = i: v1, v2, v3, v5 per i=1,2,3,4,5 (T4,i) = i: v6 / i+1: v7,v4 per i=7,1,2,3,4 (T5,i) = i: v1, v2, v4 per i=1,2,3,4,5 (T6,i) = i: v6 / i+1: v7, v3, v5 per i=7,1,2,3,4 (T7,i) = i: v5, v6 / i+1: v2, v3 per i=7 (T8,i) = i: v6 / i+1: v2, v4 per i=1,2,3,4,5,6,7 OSSERVAZIONE: Ci sono delle incompatibilità tra coppie di turni in giorni specifici, Esempio: non possono essere nella stessa soluzione (T1,2) e (T4,1) perche’ entrambi coprono i voli v7 e v4 del giorno 2. Queste incompatibilità sono molto semplici da individuare per ispezione esaustiva

che modellizzano le incompatibilità appena descritte nell’esempio. Esercizio Posso migliorare il valore del rilassamento continuo delll’esempio? SI Aggiungendo tagli di CLIQUE violati che modellizzano le incompatibilità appena descritte nell’esempio. Disegnare G=(N,A) il grafo delle incompatibilità o grafo dei conflitti, che rappresenta l’impossibilità di scegliere nella stessa soluzione due turni che coprono lo stesso volo. Nel grafo G =(N,A) l’insieme dei nodi N coincide con l’insieme dei turni (Tj,i) (variabili del modello di set partitioning) e gli archi collegano coppie di turni incompatibili. Formalmente,  un nodo uN  turno,  un arco (u,w)A  coppia di turni u, w che coprono lo stesso volo v. Utilizzo il grafo G per derivare una nuova disuguaglianza per ogni clique massimale Q (non posso scegliere + di un turno per ogni Q). Utilizzare il modellino in Mosel per il calcolo della clique massimale, sull’istanza rappresentata al grafo dei conflitti G. Sia CN tale clique, allora posso aggiungere alla matrice dei vincoli del modello di set partitioning anche il vincolo (Σu∊C xu ≤1 ). Valutare quanto il nuovo vincolo modifichi il valore del rilassamento continuo del modello. Posso modificare il problema affinchè la nuova disuguaglianza sia violata dal rilassamento continuo del problema corrente? Come utilizzare il valore della soluzione continua corrente?

Conclusioni 1 SE E SOLO SE Se disponessimo di una formulazione ideale di un problema di PLI PI = min {cx: xX} = min {cx: Axb, x0, x intero} = min {cx : x PPLZn} (cioè conoscessimo l’espressione algebrica esplicita dei vincoli del politopo corrispondente all’inviluppo convesso delle soluzioni intere P*PPL ), allora potremmo risolvere PI con l’algoritmo del simplesso applicato a P*. Quando tale formulazione presenta un numero esponenziale di vincoli, tale procedimento è polinomiale (e quindi il problema di ottimizzazione appartiene alla classe P) SE E SOLO SE è possibile risolvere in tempo polinomiale il problema di separazione: dato x* ottimo di min {cx: Axb, x0} = min {min {cx : x PPL} si danno 2 casi: o vale che x*Zn e il problema PI è risolto all’ottimo oppure determino un taglio ax  a0 tale che ax  a0  xX ma ax* > a0

Formulazioni di PLI per MST Minimum Spanning Tree Il problema di MST consiste nel determinare l’albero di copertura di un grafo G=(V,E), non orientato e pesato cij ≥0  (i,j) E, di costo minimo. Un albero di copertura T è un sottografo connesso acicilico che raggiunge tutti i nodi. Un albero di copertura contiene n-1 archi (con n=|V|) E’ il sottografo minimale per la connessione, è il sottografo massimale aciclico. Ciascuna visione è alla base di una diversa formulazione di PLI La prima formulazione deve garantire la connessione (ogni coppia di nodi è collegata) Come si esprime la connessione di un grafo? Si vieta che non sia connesso!!!  si vieta che esistano tagli (partizioni dei nodi N1, N2) che non siano collegati da archi (almeno 1 arco) facenti parte dell’albero T. La famiglia di tagli più semplice è composta dalla partizione N1 = i, N2 = V\i  i V Il numero di tutti i possibili tagli però è esponenziale essendo O(2n-1), quindi dell’ordine di tutti i sottoinsiemi di V. Come si gestisce un insieme di vincoli di cardinalità esponenziale? La formulazione iniziale contiene solo gli n vincoli riferiti ai tagli del tipo N1=i, N2=V\i. Gli altri tagli sono generati on demand solo se violati. Procedura di separazione cerca il taglio più violato. Come? Per ogni coppia di nodi i e j V si risolve un problema di FLUSSO MASSIMO da i a j, usando i valori della soluzione continua corrente x*ij come le CAPACITA’ degli archi  POLINOMIALE

La separazione per MST: formulazione per cicli Introduciamo la seconda formulazione basata sulla aciclicità, detta formulazione per subtour breaking. i vincoli di subtour breaking sono i seguenti (impediscono la presenza in soluzione del ciclo C) S(ij)E(C) xij  |C|-1  ciclo C del grafo. Dato il vettore x*, soluzione ottima del rilassamento continuo, il problema di separazione consiste nel verificare se esiste un ciclo C la somma delle variabili dei cui archi sia maggiore della cardinalità del ciclo meno 1 Ricordiamo che x* è frazionario e ogni x*ij è compresa tra 0 e 1. Per risolvere il problema di separazione introduciamo un vettore di variabili y, definito come 1-x*, le cui componenti sono anch’esse comprese tra 0 e 1. Dato il ciclo C, se la somma delle y degli archi in C è strettamente minore di 1 allora il ciclo C viola il vincolo di subtour breaking. Nonostante siano presenti nel modello in numero esponenziale, anche questi tagli sono separabili con complessità polinomiale 

Esempio: il problema di separazione per MST (2) Dato il ciclo C e l’insieme degli archi che lo compongono E(C), se la somma delle y in E(C) è strettamente minore di 1 allora il ciclo C viola il vincolo di subtour. Dim. Vincolo di subtour: S(ij) E(C) xij  |C|-1 è violato se esiste un ciclo C tale che verifica la disuguaglianza S(ij) E(C) x*ij > |C|-1  (S(ij) E(C) x*ij)-|C| > -1  S(ij) E(C)(x*ij–1) > -1  S(ij) E(C)(1- x*ij) < 1  S(ij) E(C) yij < 1 Si tratta di individuare un ciclo di lunghezza (in funzione delle y) inferiore ad 1. Il problema si risolve cercando il ciclo di lunghezza minima (rispetto alle lunghezze “y”) e se tale valore è <1 allora abbiamo identificato un ciclo che viola il vincolo di subtour breaking. La ricerca del ciclo di lunghezza minima è risolvibile con l’algoritmo di Floyd Warshall (fra i tanti) che ha complessità polinomiale.

Esempio: il problema di separazione per MST (2) Ma sono sufficienti questi vincoli per descrivere le faccette del politopo associato alla convex hull delle soluzioni intere? NO, si dimostra con un controesempio, i.e., una soluzione frazionaria che soddisfa il vincolo di cardinalità e tutti i vincoli di subtour breaking MA non è un albero Nel grafo in figura, gli archi spessi valgono 1, gli altri ½ Preso qualsiasi sottoinsieme di nodi S, nessun ciclo su S, C(S), ha valore complessivo degli archi in C maggiore di |S|-1, quindi i vincoli : S(ij)C xij  |C|-1 sono rispettati. Eppure NON è un albero!!! 6 1 2 5 7 3 4

Esempio: il problema di separazione per MST (2) Ma sono sufficienti questi vincoli per descrivere le faccette del politopo associato alla convex hull delle soluzioni intere? NO, si dimostra con un controesempio, i.e., una soluzione frazionaria che soddisfa il vincolo di cardinalità e tutti i vincoli di subtour breaking MA non è un albero Nel grafo in figura, gli archi spessi valgono 1, gli altri ½ Preso qualsiasi sottoinsieme di nodi S, nessun ciclo su S, C(S), ha valore complessivo degli archi maggiore di |S|-1, quindi i vincoli : S(ij)C(S) xij  |S|-1 sono rispettati. Es. Per C=(1,2,3) la somma delle x del ciclo vale 2, 6 1 2 5 7 3 4

Esempio: il problema di separazione per MST (2) Ma sono sufficienti per descrivere le faccette del politopo associato alla convex hull delle soluzioni intere? NO, si dimostra con un controesempio, i.e., una soluzione frazionaria che soddisfa il vincolo di cardinalità e tutti i vincoli di subtour breaking e non è un albero Nel grafo in figura, gli archi spessi valgono 1, gli altri ½ Preso qualsiasi sottoinsieme di nodi C, nessun ciclo su S, C(S), ha valore complessivo degli archi maggiore di |S|-1, quindi i vincoli : S(ij) C(S) xij  |C|-1 sono rispettati. per C=(1,2,3,4) vale 3, 6 1 2 5 7 3 4

Esempio: il problema di separazione per MST (2) Ma sono sufficienti per descrivere le faccette del politopo associato alla convex hull delle soluzioni intere? NO, si dimostra con un controesempio, i.e., una soluzione frazionaria che soddisfa il vincolo di cardinalità e tutti i vincoli di subtour breaking e non è un albero Nel grafo in figura, gli archi spessi valgono 1, gli altri ½ Preso qualsiasi sottoinsieme di nodi C, nessun ciclo su S, C(S), ha valore complessivo degli archi maggiore di |S|-1, quindi i vincoli : S(ij) C(S) xij  |C|-1 sono rispettati. Per C=(1,2,4,3) vale 3. 6 1 2 5 7 3 4

Esempio: il problema di separazione per MST (2) Ma sono sufficienti per descrivere le faccette del politopo associato alla convex hull delle soluzioni intere? NO, si dimostra con un controesempio, i.e., una soluzione frazionaria che soddisfa il vincolo di cardinalità e tutti i vincoli di subtour breaking e non è un albero Nel grafo in figura, gli archi spessi valgono 1, gli altri ½ Preso qualsiasi sottoinsieme di nodi C, nessun ciclo su S, C(S), ha valore complessivo degli archi maggiore di |S|-1, quindi i vincoli : S(ij)C(S) xij  |C|-1 sono rispettati. per C=(1,3,2,4) vale 2. Per ottenere un albero dobbiamo imporre condizioni più stringenti 6 1 2 5 7 3 4 Occorre liftare i vincoli…….

Esempio: il problema di separazione per MST (2) Come liftare le disuguaglianze di subtour breaking? si sommano le variabili di TUTTI gli archi che insistono solo sui nodi del ciclo (insieme S di nodi, con |S|=|C|). Partiamo da S(ij)E(C) xij  |S|-1  ciclo C del grafo e lo liftiamo nello spazio di TUTTI gli archi con entrambi gli estremi in S (i nodi di C), che indichiamo con E(S) (detti anche archi interni a S) S(i,j)E(S) xij  |S|-1 Il nuovo problema di separazione diventa: determinare il sottoinsieme di nodi SV tale che la somma degli archi interni a S abbia valore MAGGIORE di |S|-1. La separazione di questi vincoli è nuovamente un problema FACILE Infatti diventa la soluzione di un problema di Flusso Massimo (Taglio Minimo) su di un grafo capacitato G(x*) che dipende dalla soluzione corrente x*

Esempio: il problema di separazione per MST (2) Introduciamo il grafo capacitato G(i) data la soluzione corrente x* Illustriamo il procedimento per un grafo completo di 5 nodi: Consideriamo una coppia di archi orientati (u,v) e (v,u) per ogni arco [u,v] in E, di capacità (x*uv / 2) pari alla metà c(s,u) = ½ ∑vV x*uv Introduciamo 2 nodi ausiliarii s e t, collegati a ciascun nodo v in V dagli archi (s,v) e (v,t). 2 c(u,t) =1  u 1 3 s t 5 4

Capacità di un taglio s-t Capacità di un taglio, dato c(u,v) = (x*uv / 2), c(u,t) =1  u, c(s,u) = ½ ∑vV x*uv Siano A(S,T) gli archi di un taglio s-t (quindi sS e tT). La sua capacità U(S,T) vale |S| (archi del tipo (u,t)  u in S) + ½ degli archi nella stella di u,  u in T + ½ degli archi del taglio = ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |S| + x*(E(T)) + ½ x*(S,T) + + ½ x*(S,T) = |S|+x*(E(V)) –x*(E(S)) Se |S|+x*(E(V)) –x*(E(S)) <|V|  allora S viola il vincolo FACILE!!!! 2 1 3 s t 5 4 Quindi risolvere la separazione equivale a cercare il taglio s-t di capacità minima e verificare se U(S,T)<|V|

Esempio: il problema di separazione per MST (2) Nonostante siano presenti nel modello in numero esponenziale, abbiamo visto che anche questi tagli sono separabili con complessità polinomiale. La formulazione per subtour breaking (liftata) del problema di MST è una formulazione ideale, poichè i vincoli di subtour breaking liftati determinano le faccette del politopo associato alla convex hull delle soluzioni intere.  Questo fatto fornisce la dimostrazione che MST è un problema POLINOMIALE Ne consegue che il problema di MST appartiene alla classe P (problemi “facili”). Infatti viene risolto all’ottimo da diversi algoritmi polinomiali, quali l’algoritmo di tipo Greedy proposto da Kruskal e la variante di Prim.

E’ alla base di Concorde, il miglior sw per il TSP Conclusioni 2 Quando solo alcune delle famiglie di vincoli che defiscono PI sono facilmente separabili, allora il problema non è in P. Un esempio è il TSP Ciò nonostante, nell’ambito di un processo di Branch & Bound (B&B), è comunque opportuno generare tutti quei vincoli che tagliano la soluzione continua ottima per rafforzare il bound. Questo avviene sia risolvendo la separazione in modo esatto per le sole famiglie di vincoli che ammettono un algoritmo esatto polinomiale, sia risolvendo la separazione in modo euristico per le altre classi di vincoli. Ne consegue che la soluzione ottenuta al termine di questo procedimento può avere componenti frazionarie. Solo a questo punto si ricorre al branching, con il vantaggio di disporre di un bound di migliore qualità e riducendo complessivamente i tempi del B&B Tale processo ibridizza il Branch and Bound con la generazione di tagli, tipica dell’algoritmo di Cutting Plane, e prende il nome di Branch & Cut (B&C) Nel Branch & Cut alcuni tagli possono essere validi solo localmente per il nodo corrente, poichè sono condizionati dagli specifici branching associati al cammino dal nodo radice al nodo corrente. Altri tagli, di carattere globale sono validi in ogni nodo dell’albero. La gestione efficiente di questi tagli richiede algoritmi ad hoc per non appesantire il solver, ma il procedimento risolutivo ottenibile secondo questa procedura si è dimostrato particolarmente efficacie per numerosi problemi NP-Hard. E’ alla base di Concorde, il miglior sw per il TSP