KNAPSACK TSP - di.unito.itlocatell/didattica/ro2/Esatti-sl.pdf · Algoritmi esatti La teoria ci...

Preview:

Citation preview

Algoritmi esatti

La teoria ci dice che per problemi difficili (come ilKNAPSACK o, ancora di più, il TSP ) i tempi di risoluzionedelle istanze, calcolati tramite analisi worst-case, tendono acrescere in modo esponenziale rispetto alla lorodimensione.

Tuttavia questo non vuol dire che si deve sempre rinunciarea risolvere le istanze di tali problemi in modo esatto.

Esistono per essi algoritmi esatti in grado di risolvere ancheistanze di dimensioni tutt’altro che banali. Ad esempio, conalgoritmi particolarmente sofisticati e con una elevatapotenza di calcolo si sono risolti anche problemi TSP con15.000 nodi.

– p. 1/48

Enumerazione implicita

Molti algoritmi esatti si basano sul concetto dienumerazione implicita delle soluzioni.

Questa consiste nello scartare, tramite opportune tecniche,sottinsiemi di elementi della regione ammissibile senzadover valutare esplicitamente per ciascuno di essi lafunzione obiettivo, avendo stabilito che in tali sottinsieminon vi possono essere soluzioni migliori rispetto alla migliorsoluzione nota.

L’enumerazione implicita si contrappone alla già citataenumerazione esplicita dove la funzione obiettivo vienevalutata in ogni elemento della regione ammissibile.

– p. 2/48

Approcci esatti che vedremo

In questo capitolo vedremo due classi di algoritmi esatti:

algoritmi branch-and-bound;

algoritmi di programmazione dinamica.

Per illustrare tali algoritmi, mostreremo un algoritmobranch-and-bound applicato al problema KNAPSACK euno applicato al problema TSP , mentre per laprogrammazione dinamica mostreremo un esempioapplicato al problema KNAPSACK.

– p. 3/48

Modello KNAPSACK - variabili

Associamo ad ogni oggetto i una variabile binaria xi taleche

xi =

{

1 se l’oggetto i viene messo nello zaino0 altrimenti

Si avrà dunque xi ∈ {0, 1}.

– p. 4/48

Modello- il vincolo

L’unico vincolo nel problema KNAPSACK è quello che ilpeso complessivo degli oggetti inseriti nello zaino non devesuperare la capacità dello zaino e quindi:

n∑

i=1

pixi ≤ b.

– p. 5/48

Modello matematico - l’obiettivo

Il valore contenuto nello zaino è dato da:

n∑

i=1

vixi,

e tale valore è da massimizzare.

– p. 6/48

Modello matematico per il KNAPSACK

max∑n

i=1vixi

∑ni=1

pixi ≤ b

xi ∈ {0, 1} ∀ i ∈ {1, . . . , n}

Si noti l’estrema semplicità del modello per il problema diKNAPSACK dove appare un solo vincolo, che fa dacontrasto con la difficoltà del problema stesso.

– p. 7/48

Esempio

Istanza con b = 16 e:

i 1 2 3 4

vi 8 6 10 1

pi 7 7 13 4

Modello:

max 8x1 + 6x2 + 10x3 + x4

7x1 + 7x2 + 13x3 + 4x4 ≤ 16

x1, x2, x3, x4 ∈ {0, 1}

– p. 8/48

Modello matematicoTSP - variabili

Dato il grafo completo orientato G = (V,A), associamo adogni arco (i, j) ∈ A una variabile

xij =

{

1 se l’arco (i, j) fa parte del circuito hamiltoniano0 altrimenti

Quindi xij ∈ {0, 1}.

– p. 9/48

Modello matematico - i vincoli

Dal momento che la regione ammissibile del problema TSPè formata da circuiti hamiltoniani, dovremo:

introdurre vincoli che siano soddisfatti da tutti e soli gliassegnamenti di valori alle variabili coincidenti con circuitihamiltoniani.

– p. 10/48

Vincoli I

Per ogni circuito hamiltoniano si ha che in ogni vertice c’èesattamente un arco entrante nel vertice ed esattamenteuno che esce dal vertice:

Per ogni vertice j ∈ V :∑

i∈V, i 6=j

xij = 1,

(uno ed un solo arco entrante in j).

Per ogni vertice j ∈ V :∑

i∈V, i 6=j

xji = 1,

(uno ed un solo arco uscente da j).– p. 11/48

Esempio

Grafo orientato completo con 4 nodi e questa tabella didistanze:

1 2 3 4

1 − 1 6 7

2 1 − 3 6

3 2 4 − 5

4 5 3 6 −

– p. 12/48

Vincoli su archi uscenti

Nodo 1:x12 + x13 + x14 = 1

Nodo 2:x21 + x23 + x24 = 1

Nodo 3:x31 + x32 + x34 = 1

Nodo 4:x41 + x42 + x43 = 1

– p. 13/48

Vincoli su archi entranti

Nodo 1:x21 + x31 + x41 = 1

Nodo 2:x12 + x32 + x42 = 1

Nodo 3:x13 + x23 + x43 = 1

Nodo 4:x14 + x24 + x34 = 1

– p. 14/48

Ma...

... questi vincoli non sono sufficienti. Infatti, se è vero chesono soddisfatti da tutti i circuiti hamiltoniani, è anche veroche sono sodisfatti anche da soluzioni contenentisottocircuiti. Quindi ...

... sarà necessario introdurre una nuova classe di vincoliche siano sempre soddisfatti da tutti i circuiti hamiltonianima che non siano soddisfatti da tali soluzioni corrispondentia sottocircuiti.

– p. 15/48

Nell’esempio

Il seguente assegnamento di valori alle variabili:

x12 = x21 = x34 = x43 = 1

con tutte le altre variabili = 0, soddisfa i vincoli ma nonrappresenta un circuito hamiltoniano (rappresenta i duesottocircuiti 1 → 2 → 1 e 3 → 4 → 3).

– p. 16/48

Vincoli II

Per eliminare la formazione di sottocircuiti possiamo usarequesti vincoli:

∀ U ⊆ V : 2 ≤| U |≤| V | −2∑

i∈U, j∈V \U

xij ≥ 1,

che richiedono che per ogni possibile partizione di V in duesottinsiemi (ciascuno di cardinalità almeno pari a 2), deveesserci almeno un arco che va da un sottinsieme all’altro.

Questo esclude tutti i possibili sottocircuiti.

– p. 17/48

Nell’esempio

U = {1, 2} → x13 + x14 + x23 + x24 ≥ 1

(in particolare, questo vincolo esclude l’assegnamento di variabili precedente)

U = {1, 3} → x12 + x14 + x32 + x34 ≥ 1

U = {1, 4} → x12 + x13 + x42 + x43 ≥ 1

U = {2, 3} → x21 + x24 + x31 + x34 ≥ 1

U = {2, 4} → x21 + x23 + x41 + x43 ≥ 1

U = {3, 4} → x31 + x32 + x41 + x42 ≥ 1

– p. 18/48

In realtà ...

... metà di questi vincoli è ridondante: dati due sottinsiemitra loro complemementari, è sufficiente mettere il vincolorelativo ad uno solo di essi (ad esempio possiamo mettereuno solo dei due vincoli relativi a U = {1, 2} e U = {3, 4}).

– p. 19/48

Riassumendo ...

... l’insieme di vincoli che definisce tutti e soli i circuitihamiltoniani è il seguente:

i∈V, i 6=j xij = 1 ∀ j ∈ V∑

i∈V, i 6=j xji = 1 ∀ j ∈ V∑

i∈U, j∈V \U xij ≥ 1 ∀ U ⊆ V : 2 ≤| U |≤| V | −2

xij ∈ {0, 1} ∀ i, j ∈ {1, . . . , n}, i 6= j

– p. 20/48

Obiettivo

Tra tutti i circuiti hamiltoniani noi cerchiamo quello convalore minimo e quindi l’obiettivo del problema sarà ilseguente:

i,j∈V, i 6=j

vijxij .

Nell’esempio:

min x12 + 6x13 + 7x14 + x21 + 3x23 + 6x24 + 2x31 + 4x32 + 5x34 + 5x41 + 3x42 + 6x43

– p. 21/48

Modello matematico TSP

min∑

i,j∈V, i 6=j vijxij∑

i∈V, i 6=j xij = 1 ∀ j ∈ V∑

i∈V, i 6=j xji = 1 ∀ j ∈ V∑

i∈U, j∈V \U xij ≥ 1 ∀ U ⊆ V : 2 ≤| U |≤| V | −2

xij ∈ {0, 1} ∀ i, j ∈ {1, . . . , n}, i 6= j

– p. 22/48

Branch-and-bound

Tra le tecniche di risoluzione esatte per problemi difficili unamolto popolare è quella denominata branch-and-bound. Nedaremo una descrizione generale e ne vedremo poi unesempio applicato al problema KNAPSACK e unoapplicato al problema TSP .

Descriveremo l’algoritmo generico di branch-and-bound perproblemi di massimo. Di seguito segnaleremo le piccolevariazioni che vanno introdotte per problemi di minimo.

– p. 23/48

Componenti algoritmo:upper bound

Sia data la regione ammissibile S e la funzione obiettivo f

dell’istanza di un problema di ottimizzazione. Si consideriun sottinsieme T ⊆ S della regione ammissibile. Unalimitazione superiore o upper bound per T è un valore U(T )con la seguente proprietà

U(T ) ≥ f(x) ∀ x ∈ T.

– p. 24/48

Il calcolo dell’upper bound

Il valore U(T ) viene calcolato tramite una procedura chedeve cercare di soddisfare queste due proprietà in conflittotra loro:

i tempi di esecuzione della procedura devono esserebrevi (in particolare, il calcolo degli upper bound deverichiedere un tempo molto inferiore rispetto al temponecessario per risolvere l’intero problema);

il valore U(T ) deve essere il più vicino possibile almassimo valore di f su T .

Spesso la scelta di una procedura per il calcolo dell’upperbound è fortemente legata al particolare problema che sista risolvendo. Inoltre, non esiste un’unica procedura perun dato problema.

– p. 25/48

Upper bound e rilassamento

Un modo comunemente utilizzato per determinare un upperbound U(T ) è quello di determinare la soluzione di un suorilassamento.

Indichiamo con:α(f, T ) = max

x∈Tf(x),

il valore ottimo della funzione f sull’insieme T .Si definisce rilassamento del problema, un problema:

α(f ′, T ′) = maxx∈T ′

f ′(x)

dove:T ⊆ T ′ e f ′(x) ≥ f(x) ∀ x ∈ T.

– p. 26/48

Osservazione

Si ha che: α(f ′, T ′) ≥ α(f, T ).

Dimostrazione Sia x∗ ∈ T una soluzione ottima del problemasu T , cioè:

f(x∗) = α(f, T ),

e sia x′ ∈ T ′ una soluzione ottima del rilassamento, cioè:

f ′(x′) = α(f ′, T ′).

Si ha che x∗ ∈ T implica x∗ ∈ T ′. Inoltre, si ha:

f ′(x∗) ≥ f(x∗).

Infine, l’ottimalità di x′ implica f ′(x′) ≥ f ′(x∗) e quindi:

α(f ′, T ′) = f ′(x′) ≥ f ′(x∗) ≥ f(x∗) = α(f, T ),– p. 27/48

Un rilassamento già noto

Esistono molti possibili rilassamenti di un problema. Traquesti, uno che è già stato incontrato è il rilassamentolineare per problemi di PLI.

Sia dato il generico problema di PLI:

max cx

Ax ≤ b

x ≥ 0 x ∈ Zn.

– p. 28/48

Questo è un particolare problema di ottimizzazionecombinatoria con:

f(x) = cx T = {x ∈ Zn : Ax ≤ b, x ≥ 0}.

Il rilassamento lineare di tale problema è un particolarerilassamento con:

f ′(x) ≡ f(x) T ′ = {x ∈ Rn : Ax ≤ b, x ≥ 0},

– p. 29/48

Il rilassamento lineare coincide con questo problema di PL:

max cx

Ax ≤ b

x ≥ 0

NB: come richiesto, il rilassamento lineare, essendo unproblema di PL, è risolvibile in tempi molto più rapididell’originario problema di PLI.

– p. 30/48

Il rilassamento lagrangiano

Supponiamo che il nostro problema sia formulato comeproblema di PLI:

max cx

Ax ≤ b

Cx ≤ d

x ≥ 0 x ∈ Zn.

Quindi con:

f(x) = cx, T = {x ∈ Zn : Ax ≤ b, Cx ≤ d, x ≥ 0}.

– p. 31/48

Ipotesi

Supponiamo che i vincoli Ax ≤ b siano "facili" (ad esempio,A è TU e b è a coordinate tutte intere).

Qunidi eliminando i vincoli "difficili" Cx ≤ d resta unproblema di PLI facile da risolvere (basta risolverne ilrilassamento lineare).

Per eliminarli li spostiamo nell’obiettivo.

– p. 32/48

Continua

Dato un vettore λ ≥ 0, detto vettore dei moltiplicatori diLagrange, delle stesse dimensioni di d, il rilassamentolagrangiano è il seguente:

u(λ) = max cx + λ(d − Cx)

Ax ≤ b

x ≥ 0 x ∈ Zn.

conf ′(x) = cx + λ(d − Cx)

eT ′ = {x ∈ Zn : Ax ≤ b, x ≥ 0}.

– p. 33/48

Continua

Ovviamente, T ⊆ T ′. Inoltre, per ogni x ∈ T si ha che:

Cx ≤ d ⇒ ∀ λ ≥ 0 : λ(d− Cx) ≥ 0 ⇒ f ′(x) ≥ f(x).

Quindi sono soddisfatte le due condizioni che devonoessere soddisfatte da un rilassamento.

– p. 34/48

Infine ...

... notiamo che nel rilassamento lagrangiano rimangonosolo i vincoli "facili" e quindi esso può essere risolto intempo polinomiale, come viene richiesto per il calcolo di unupper bound.

Notiamo anche che ad ogni λ ≥ 0 distinto corisponde undiverso upper bound u(λ). Per ottenere il miglior upperbound possibile (ovvero il più piccolo), possiamo risolverequesto ulteriore problema:

minλ≥0

u(λ)

detto duale lagrangiano.

– p. 35/48

Caso particolare

Scegliendo λ = 0 abbiamo un caso particolare dirilassamento lagrangiano in cui i vincoli "difficili" delproblema vengono semplicemente eliminati.

– p. 36/48

Osservazione

In alcuni casi i vincoli "difficili" del problema sono vincoli diuguaglianza

Cx = d.

In tal caso, il rilassamento lagrangiano si definisce nellostesso modo ma i moltiplicatori di Lagrange relativi ai vincolidi uguaglianza non sono vincolati ad assumere solo valorinon negativi ma possono assumere anche valori negativi.

– p. 37/48

Lower bound

Un limite inferiore o lower bound per il valore ottimo delnostro problema è un valore LB che soddisfa la seguenteproprietà:

LB ≤ f(x∗) = maxx∈S

f(x).

– p. 38/48

Come si calcola?

Se prendiamo un qualsiasi elemento x ∈ S e valutiamo inesso la funzione f , il valore f(x) è già un lower bound, dalmomento che f(x) ≤ f(x∗).

Durante l’esecuzione di un algoritmo branch-and-bound lafunzione f viene valutata per molti elementi y1, . . . , yh ∈ S eper ognuno di essi si ha

f(yi) ≤ f(x∗) i = 1, . . . , h.

A noi interessa un valore LB il più possibile vicino alvalore ottimo del problema. Quindi, poniamo

LB = max{f(yi) : i = 1, . . . , h} ≤ f(x∗).

– p. 39/48

Ma ...

... da dove ricaviamo gli elementi di S in cui valutare lafunzione f durante l’esecuzione dell’algoritmo?

Se si ha a disposizione un’euristica è buona normavalutare f nel risultato di tale euristica;

durante lo stesso calcolo degli upper bound si possonoindividuare uno o più elementi di S e valutare in essi f .Ad esempio, se si calcola l’upper bound U(T ) tramite unrilassamento, nei casi in cui per la soluzione x′ ∈ T ′ ⊇ T

valga anche x′ ∈ T , allora si ha anche x′ ∈ S e si puòvalutare f in x′. In altri casi non si ha x′ ∈ T ma conopportune operazioni (quali arrotondamenti oapprossimazioni per eccesso/difetto di valori di variabili)si può determinare partendo da x′ 6∈ T una soluzionex′ ∈ T (un esempio di ciò lo incontreremo nell’algoritmobranch-and-bound per il problema dello zaino).

– p. 40/48

Branching

L’operazione di branching consiste nel rimpiazzare uninsieme T ⊆ S con una sua partizione T1, . . . , Tm. Si ricordiche T1, . . . , Tm formano una partizione di T se

T = ∪mi=1Ti Ti ∩ Tj = ∅ ∀ i 6= j.

La partizione può essere rappresentata tramite unastruttura ad albero: l’insieme T è un nodo dell’albero da cuipartono i rami (da qui il nome branching) verso i nodi dellapartizione, che vengono anche detti nodi successori o nodifigli del nodo T .

– p. 41/48

Cancellazione di sottinsiemi

Il punto chiave degli algoritmi di branch-and-bound è lacancellazione di sottinsiemi.Supponiamo che per un dato sottinsieme, T2 ad esempio, siabbia

U(T2) ≤ LB.

Ma questo vuol dire che

∀ x ∈ T2 f(x) ≤ U(T2) ≤ LB,

e cioè tra tutti gli elementi in T2 non ne possiamo trovarealcuno con valore di f superiore a LB, ovvero al migliorvalore di f osservato fino a questo momento. A questopunto posso cancellare il sottinsieme T2.

– p. 42/48

Cancellazione ed enumerazione implicita

La cancellazione equivale ad una enumerazione implicita: ilconfronto tra upper bound U(T2) del sottinsieme e lowerbound LB ci consente di scartare tutti gli elementi in T2

senza dover calcolare la funzione f in essi.

La regola di cancellazione appena introdotta ci fa capireperché vogliamo un valore di upper bound U(T2) il più vicinopossibile al valore ottimo di f sul sottinsieme T2 e un valoreLB il più possibile vicino al valore ottimo del problema:

in questo modo è più semplice cancellare il sottinsiemetramite la condizione U(T2) ≤ LB.

– p. 43/48

L’algoritmo branch-and-bound

Passo 1 Si ponga C = {S} e Q = ∅ (l’insieme C conterràsempre i sottinsiemi ancora da tenere in considerazionee inizialmente contiene l’intero insieme S, mentrel’insieme Q, inizialmente vuoto, conterrà tutti isottinsiemi cancellati). Si ponga k = 1. Si calcoli U(S) esi calcoli un valore per LB (eventualmente utilizzandoanche i risultati di un’euristica, se disponibile). Se nonsi dispone di soluzioni ammissibili, si ponga LB = −∞.

Passo 2 (Selezione di un sottinsieme) Si selezioni unsottinsieme T ∈ C. Tra le varie regole di selezionecitiamo qui quella di selezionare il sottinsieme T in Ccon il valore di upper bound più elevato, cioè

U(T ) = maxQ∈C

U(Q).

– p. 44/48

Passo 3 (Branching) Si sostituisca l’insieme T in C con lasua partizione in mk sottinsiemi T1, . . . , Tmk

, ovvero

C = C ∪ {T1, . . . , Tmk} \ {T}.

Passo 4 (Upper bounding) Si calcoli un upper bound U(Ti),i = 1, . . . ,mk per ogni sottinsieme della partizione.

Passo 5 (Lower bounding) Si aggiorni, eventualmente, ilvalore LB (si ricordi che il valore LB corrispondesempre al massimo dei valori di f osservati durantel’esecuzione dell’algoritmo).

– p. 45/48

Passo 6 (Cancellazione sottinsiemi) Si escludano da C tutti isottinsiemi Q per cui U(Q) ≤ LB, ovvero

C = C \ {Q : U(Q) ≤ LB}.

e si trasferiscano tali sottinsiemi in Q, cioè:

Q = Q∪ {Q : U(Q) ≤ LB}.

Passo 7 Se C = ∅: stop, il valore LB coincide con ilvalore ottimo f(x∗). Altrimenti si ponga k = k + 1 e siritorni al Passo 2.

– p. 46/48

Osservazione

Se C = ∅, LB è il valore ottimo del nostro problema (se èpari a −∞, allora S = ∅).

Questa affermazione è una conseguenza del fatto che, nelmomento in cui C = ∅, tutti i sottinsiemi cancellati fino a quelmomento, cioè la collezione Q di sottinsiemi, formano unapartizione dell’intero insieme S.

Quindi tra di essi ve ne è certamente uno, indicato conT ∗ ∈ Q, che contiene x∗. Ma poiché T ∗ è stato cancellato sidovrà avere

f(x∗) ≤ U(T ∗) ≤ LB ≤ f(x∗),

da cui segue immediatamente che LB = f(x∗).

– p. 47/48

Modifiche per problemi di minimo

ad un sottinsieme Q ⊆ S dovrà essere associato unvalore di lower bound L(Q);

al posto del valore LB avremo un valore UB con laproprietà

UB ≥ f(x∗) = minx∈S

f(x).

Il valore UB sarà il minimo tra i valori osservati dellafunzione obiettivo in punti della regione ammissibile S.

Il sottinsieme Q viene cancellato se è vero cheL(Q) ≥ UB.

Al Passo 2 della procedura di branch-and-bound siseleziona un nodo con lower bound più piccolo, ovveroun nodo T tale che

L(T ) = minQ∈C

L(Q).– p. 48/48

Recommended