• Non ci sono risultati.

Branch-and-bound per T SP

N/A
N/A
Protected

Academic year: 2021

Condividi "Branch-and-bound per T SP"

Copied!
138
0
0

Testo completo

(1)

Branch-and-bound per T SP

Anche qui, rispetto allo schema generale visto in precedenza dobbiamo specificare:

(2)

Branch-and-bound per T SP

Anche qui, rispetto allo schema generale visto in precedenza dobbiamo specificare:

come si calcola un lower bound su un sottinsieme;

(3)

Branch-and-bound per T SP

Anche qui, rispetto allo schema generale visto in precedenza dobbiamo specificare:

come si calcola un lower bound su un sottinsieme;

come si effettua il branching;

(4)

Branch-and-bound per T SP

Anche qui, rispetto allo schema generale visto in precedenza dobbiamo specificare:

come si calcola un lower bound su un sottinsieme;

come si effettua il branching;

come si individuano soluzioni ammissibili con cui,

eventualmente, aggiornare il valore dell’upper bound U B.

(5)

Richiamo: modello matematico TSP

min P

i∈V

P

j∈V : j6=i vijxij P

i∈V, i6=j xij = 1 ∀ j ∈ V P

j∈V, j6=i xij = 1 ∀ i ∈ V P

i∈U, j∈V \U xij ≥ 1 ∀ U ⊆ V : 2 ≤| U |≤| V | −2 xij ∈ {0, 1} ∀ i, j ∈ V, i 6= j

(6)

Lower bound L (S)

Supponiamo di voler ottenere un lower bound L(S) sull’intera regione ammissibile S del problema.

(7)

Lower bound L (S)

Supponiamo di voler ottenere un lower bound L(S) sull’intera regione ammissibile S del problema.

Per ottenere questo considereremo un rilassamento diverso da quello lineare. Il rilassamento che verrà preso in

considerazione è quello ottenuto omettendo i vincoli X

i∈U, j∈V \U

xij ≥ 1

(8)

Lower bound L (S)

Supponiamo di voler ottenere un lower bound L(S) sull’intera regione ammissibile S del problema.

Per ottenere questo considereremo un rilassamento diverso da quello lineare. Il rilassamento che verrà preso in

considerazione è quello ottenuto omettendo i vincoli X

i∈U, j∈V \U

xij ≥ 1

Si noti che l’omissione di alcuni vincoli è un caso

particolare di rilassamento lagrangiano in cui si pone λ = 0

(9)

Rilassamento

min P

i∈V

P

j∈V : j6=i vijxij P

i∈V, i6=j xij = 1 ∀ j ∈ V P

j∈V, j6=i xij = 1 ∀ i ∈ V

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

(10)

Piccola modifica

In un circuito hamiltoniano non possiamo avere archi (i, i) (detti loop).

(11)

Piccola modifica

In un circuito hamiltoniano non possiamo avere archi (i, i) (detti loop).

Possiamo comunque inserirli usando un opportuno

accorgimento consistente nell’attribuire a essi una distanza infinita, cioè vii = ∞.

(12)

Piccola modifica

In un circuito hamiltoniano non possiamo avere archi (i, i) (detti loop).

Possiamo comunque inserirli usando un opportuno

accorgimento consistente nell’attribuire a essi una distanza infinita, cioè vii = ∞.

Con questa modifica avremo il seguente rilassamento:

min P

i∈V

P

j∈V vijxij P

i∈V xij = 1 ∀ j ∈ V P

j∈V xij = 1 ∀ i ∈ V

(13)

Come risolverlo?

Associamo al nostro grafo originario G = (V, A) un grafo bipartito G = (V1 ∪ V2, A). I due insiemi V1 e V2 sono

ottenuti sdoppiando i nodi in V , cioè per ogni nodo i ∈ V se ne faranno due copie, il nodo ai ∈ V1 e il nodo bi ∈ V2

(14)

Come risolverlo?

Associamo al nostro grafo originario G = (V, A) un grafo bipartito G = (V1 ∪ V2, A). I due insiemi V1 e V2 sono

ottenuti sdoppiando i nodi in V , cioè per ogni nodo i ∈ V se ne faranno due copie, il nodo ai ∈ V1 e il nodo bi ∈ V2

Inoltre, ad ogni arco (i, j) ∈ A si associa l’arco (ai, bj) ∈ A, a cui si associa il valore vij.

(15)

Come risolverlo?

Associamo al nostro grafo originario G = (V, A) un grafo bipartito G = (V1 ∪ V2, A). I due insiemi V1 e V2 sono

ottenuti sdoppiando i nodi in V , cioè per ogni nodo i ∈ V se ne faranno due copie, il nodo ai ∈ V1 e il nodo bi ∈ V2

Inoltre, ad ogni arco (i, j) ∈ A si associa l’arco (ai, bj) ∈ A, a cui si associa il valore vij.

A questo punto il grafo G è bipartito completo (includendo gli n archi (ai, bi), i ∈ V , corrispondenti ai loop con vii = ∞).

(16)

Sul grafo bipartito

xij ∈ {0, 1} ∀ (i, j) ∈ A ↔ xij ∈ {0, 1} ∀ (ai, bj) ∈ A

(17)

Sul grafo bipartito

xij ∈ {0, 1} ∀ (i, j) ∈ A ↔ xij ∈ {0, 1} ∀ (ai, bj) ∈ A X

i∈V

X

j∈V

vijxij X

ai∈V1

X

bj∈V2

vijxij

(18)

Sul grafo bipartito

xij ∈ {0, 1} ∀ (i, j) ∈ A ↔ xij ∈ {0, 1} ∀ (ai, bj) ∈ A X

i∈V

X

j∈V

vijxij X

ai∈V1

X

bj∈V2

vijxij X

i∈V

xij = 1 ∀ j ∈ V X

ai∈V1

xij = 1 ∀ bj ∈ V2

(19)

Sul grafo bipartito

xij ∈ {0, 1} ∀ (i, j) ∈ A ↔ xij ∈ {0, 1} ∀ (ai, bj) ∈ A X

i∈V

X

j∈V

vijxij X

ai∈V1

X

bj∈V2

vijxij X

i∈V

xij = 1 ∀ j ∈ V X

ai∈V1

xij = 1 ∀ bj ∈ V2 X

j∈V

xij = 1 ∀ i ∈ V ↔ X

bj∈V2

xij = 1 ∀ ai ∈ V1

(20)

Continua

Quindi, sul grafo G possiamo riscrivere il nostro rilassamento in questo modo:

min P

ai∈V1

P

bj∈V2 vijxij P

ai∈V1 xij = 1 ∀ bj ∈ V2 P

bj∈V2 xij = 1 ∀ ai ∈ V1

xij ∈ {0, 1} ∀ ai ∈ V1, bj ∈ V2

(21)

Continua

Quindi, sul grafo G possiamo riscrivere il nostro rilassamento in questo modo:

min P

ai∈V1

P

bj∈V2 vijxij P

ai∈V1 xij = 1 ∀ bj ∈ V2 P

bj∈V2 xij = 1 ∀ ai ∈ V1

xij ∈ {0, 1} ∀ ai ∈ V1, bj ∈ V2 Ribadiamo che nelle soluzioni ammissibili di questo

problema si consente anche la presenza di archi (ai, bi) che non corrispondono ad archi del problema T SP . Tuttavia, il fatto che a tali archi sia associato un valore +∞ ci

garantisce che nessuna soluzione ottima del problema conterrà tali archi.

(22)

Continua

Notiamo che il problema riformulato in questo modo è un problema di assegnamento dove i due insiemi da

accoppiare sono V1 e V2. Questo ci consente di utilizzare l’algoritmo ungherese per il calcolo del lower bound L(S).

(23)

Continua

Notiamo che il problema riformulato in questo modo è un problema di assegnamento dove i due insiemi da

accoppiare sono V1 e V2. Questo ci consente di utilizzare l’algoritmo ungherese per il calcolo del lower bound L(S). In particolare, notiamo che il calcolo del lower bound

richiede un tempo di calcolo polinomiale, come richiesto.

(24)

Continua

Una volta ottenuta una soluzione del problema di assegnamento con insieme di archi:

(aik, bjk) k = 1, . . . , n

questa corrisponde alla seguente collezione di archi nel grafo originario:

(ik, jk) k = 1, . . . , n.

(25)

Continua

Sono possibili due casi:

la soluzione forma un circuito hamiltoniano, cioè

appartiene alla regione ammissibile S: in tal caso essa rappresenta anche la soluzione ottima del problema T SP ;

(26)

Continua

Sono possibili due casi:

la soluzione forma un circuito hamiltoniano, cioè

appartiene alla regione ammissibile S: in tal caso essa rappresenta anche la soluzione ottima del problema T SP ;

la soluzione ottenuta è una collezione di sottocircuiti.

(27)

Branching del nodo radice

Ci occuperemo ora di specificare come viene partizionata la regione ammissibile S in più sottinsiemi. Abbiamo visto che se non siamo nel caso fortunato in cui la soluzione del rilassamento è un circuito hamiltoniano, tale soluzione è una collezione di sottocircuiti.

(28)

Branching del nodo radice

Ci occuperemo ora di specificare come viene partizionata la regione ammissibile S in più sottinsiemi. Abbiamo visto che se non siamo nel caso fortunato in cui la soluzione del rilassamento è un circuito hamiltoniano, tale soluzione è una collezione di sottocircuiti.

Forniremo una semplice regola di suddivisione il cui scopo è quello di impedire il formarsi nei nodi figli di almeno uno dei sottocircuiti nella collezione.

(29)

Continua

Prendiamo il sottocircuito della collezione con meno archi (con scelta arbitraria se ve ne è più di uno). Indichiamo con {(i1, j1), (i2, j2), . . . , (ir, jr)} gli archi di tale sottocircuito.

(30)

Continua

Prendiamo il sottocircuito della collezione con meno archi (con scelta arbitraria se ve ne è più di uno). Indichiamo con {(i1, j1), (i2, j2), . . . , (ir, jr)} gli archi di tale sottocircuito.

Il primo nodo figlio viene ottenuto imponendo che in esso non sia presente l’arco (i1, j1) (cioè si impone xi1,j1 = 0),

(31)

Continua

Prendiamo il sottocircuito della collezione con meno archi (con scelta arbitraria se ve ne è più di uno). Indichiamo con {(i1, j1), (i2, j2), . . . , (ir, jr)} gli archi di tale sottocircuito.

Il primo nodo figlio viene ottenuto imponendo che in esso non sia presente l’arco (i1, j1) (cioè si impone xi1,j1 = 0), il secondo nodo figlio viene ottenuto imponendo che sia

presente l’arco (i1, j1) ma non sia presente l’arco (i2, j2) (cioè si impone xi1,j1 = 1, xi2,j2 = 0),

(32)

Continua

Prendiamo il sottocircuito della collezione con meno archi (con scelta arbitraria se ve ne è più di uno). Indichiamo con {(i1, j1), (i2, j2), . . . , (ir, jr)} gli archi di tale sottocircuito.

Il primo nodo figlio viene ottenuto imponendo che in esso non sia presente l’arco (i1, j1) (cioè si impone xi1,j1 = 0), il secondo nodo figlio viene ottenuto imponendo che sia

presente l’arco (i1, j1) ma non sia presente l’arco (i2, j2) (cioè si impone xi1,j1 = 1, xi2,j2 = 0), e così via fino al

r-esimo figlio in cui si impone che siano presenti gli archi (ik, jk), k = 1, . . . , r − 1, ma non sia presente l’arco (ir, jr) (cioè si impone xik,jk = 1, k = 1, . . . , r − 1, xir,jr = 0).

(33)

Esempio

Sottocircuito 1 → 2 → 1.

(34)

Esempio

Sottocircuito 1 → 2 → 1. Tabella valori di x12 e x21

x12 x21

0 0

0 1

1 0

1 1

(35)

Esempio

Sottocircuito 1 → 2 → 1. Tabella valori di x12 e x21

x12 x21

0 0

0 1

1 0

1 1

Combinazione valori da escludere: x12 = x21 = 1 (corrisponde al sottocircuito).

(36)

Esempio

Sottocircuito 1 → 2 → 1. Tabella valori di x12 e x21

x12 x21

0 0

0 1

1 0

1 1

Combinazione valori da escludere: x12 = x21 = 1 (corrisponde al sottocircuito).

Primo nodo figlio → x12 = 0.

(37)

Esempio

Sottocircuito 1 → 2 → 1. Tabella valori di x12 e x21

x12 x21

0 0

0 1

1 0

1 1

Combinazione valori da escludere: x12 = x21 = 1 (corrisponde al sottocircuito).

Primo nodo figlio → x12 = 0.

Secondo nodo figlio → x12 = 1 e x21 = 0.

(38)

Sottinsiemi di S di forma particolare

Siano dati due sottinsiemi di archi A0, A1 ⊆ A con A0 ∩ A1 = ∅.

(39)

Sottinsiemi di S di forma particolare

Siano dati due sottinsiemi di archi A0, A1 ⊆ A con A0 ∩ A1 = ∅.

I sottinsiemi di S che ci interessano sono:

S(A0, A1) = {C = (V, AC) ∈ S : ∀ (i, j) ∈ A1 : (i, j) ∈ AC, ∀ (i, j) ∈ A0 : (i, j) 6∈ AC},

ovvero in S(A0, A1) abbiamo tutti i circuiti hamiltoniani che contengono sicuramente gli archi in A1 e che sicuramente non contengono gli archi in A0.

(40)

Nota bene

L’intera regione ammissibile S coincide con un particolare sottinisieme di forma S(A0, A1) con A0 = A1 = ∅, cioè:

S = S(∅, ∅)

(41)

Calcolo del lower bound per S (A

0

, A

1

)

Il calcolo si effettua come quello del lower bound per S e cioè risolvendo un problema di assegnamento. Rispetto al calcolo del lower bound per S vanno presi i seguenti due accorgimenti:

per ogni (i, j) ∈ A0 si ponga vij = +∞: ciò impedisce la formazione della coppia (ai, bj) e quindi l’introduzione dell’arco (i, j);

(42)

Calcolo del lower bound per S (A

0

, A

1

)

Il calcolo si effettua come quello del lower bound per S e cioè risolvendo un problema di assegnamento. Rispetto al calcolo del lower bound per S vanno presi i seguenti due accorgimenti:

per ogni (i, j) ∈ A0 si ponga vij = +∞: ciò impedisce la formazione della coppia (ai, bj) e quindi l’introduzione dell’arco (i, j);

per ogni (i, j) ∈ A1 si escludano gli elementi ai e bj dal problema di assegnamento (essi sono già accoppiati tra loro). Si riduce di uno la dimensione del problema di

assegnamento.

(43)

Continua

Indichiamo con:

(aik, bjk) k = 1, . . . , ℓ

la soluzione del problema di assegnamento. A questi

corrisponde il seguente insieme di archi nel grafo originario:

As = {(ik, jk), k = 1, . . . , ℓ}.

(44)

Continua

Indichiamo con:

(aik, bjk) k = 1, . . . , ℓ

la soluzione del problema di assegnamento. A questi

corrisponde il seguente insieme di archi nel grafo originario:

As = {(ik, jk), k = 1, . . . , ℓ}.

Il lower bound per il sottinsieme S(A0, A1) è pari a L(S(A0, A1)) = X

(i,j)∈A1∪As

vij.

(45)

Soluzione ammissibile?

Se l’insieme di archi As ∪ A1 forma un circuito hamiltoniano, cioè appartiene alla regione ammissibile S, il suo valore

coincide con il valore del lower bound trovato e possiamo utilizzare tale valore per aggiornare, eventualmente, l’upper bound U B (NB: in tal caso il sottinsieme viene cancellato).

(46)

Soluzione ammissibile?

Se l’insieme di archi As ∪ A1 forma un circuito hamiltoniano, cioè appartiene alla regione ammissibile S, il suo valore

coincide con il valore del lower bound trovato e possiamo utilizzare tale valore per aggiornare, eventualmente, l’upper bound U B (NB: in tal caso il sottinsieme viene cancellato).

Altrimenti l’insieme di archi As ∪ A1 conterrà dei sottocircuiti.

(47)

Branching di S (A

0

, A

1

)

Si ripete quanto già visto per il nodo radice con una piccola differenza:

tra i sottocircuiti formati dagli archi As ∪ A1 si prende quello che contiene meno archi in As (gli archi in A1 sono già

fissati e non possono essere rimossi).

(48)

Esempio

Sia S(A0, A1) con:

A0 = {(1, 7)} A1 = {(1, 2); (2, 3)}, e sia

As ∪ A1 = {(1, 2); (2, 3); (3, 4); (4, 1); (5, 6); (6, 7); (7, 5)}.

(49)

Esempio

Sia S(A0, A1) con:

A0 = {(1, 7)} A1 = {(1, 2); (2, 3)}, e sia

As ∪ A1 = {(1, 2); (2, 3); (3, 4); (4, 1); (5, 6); (6, 7); (7, 5)}.

Dei due sottocircuiti in A1 ∪ As, cioè:

1 → 2 → 3 → 4 → 1 5 → 6 → 7 → 5

(50)

Esempio

Sia S(A0, A1) con:

A0 = {(1, 7)} A1 = {(1, 2); (2, 3)}, e sia

As ∪ A1 = {(1, 2); (2, 3); (3, 4); (4, 1); (5, 6); (6, 7); (7, 5)}.

Dei due sottocircuiti in A1 ∪ As, cioè:

1 → 2 → 3 → 4 → 1 5 → 6 → 7 → 5 quello con meno archi in As è:

1 → 2 → 3 → 4 → 1

(51)

Continua

Indichiamo con {(i1, j1), (i2, j2), . . . , (it, jt)} gli archi del sottocircuito che appartengono ad As. Il primo nodo figlio viene ottenuto imponendo che in esso non sia presente l’arco (i1, j1) (cioè si impone xi1,j1 = 0),

(52)

Continua

Indichiamo con {(i1, j1), (i2, j2), . . . , (it, jt)} gli archi del sottocircuito che appartengono ad As. Il primo nodo figlio viene ottenuto imponendo che in esso non sia presente l’arco (i1, j1) (cioè si impone xi1,j1 = 0), il secondo nodo figlio viene ottenuto imponendo che sia presente l’arco (i1, j1) ma non sia presente l’arco (i2, j2) (cioè si impone xi1,j1 = 1, xi2,j2 = 0),

(53)

Continua

Indichiamo con {(i1, j1), (i2, j2), . . . , (it, jt)} gli archi del sottocircuito che appartengono ad As. Il primo nodo figlio viene ottenuto imponendo che in esso non sia presente l’arco (i1, j1) (cioè si impone xi1,j1 = 0), il secondo nodo figlio viene ottenuto imponendo che sia presente l’arco (i1, j1) ma non sia presente l’arco (i2, j2) (cioè si impone

xi1,j1 = 1, xi2,j2 = 0), e così via fino al t-esimo figlio in cui si impone che siano presenti gli archi (ik, jk), k = 1, . . . , t − 1, ma non sia presente l’arco (it, jt) (cioè si impone

xik,jk = 1, k = 1, . . . , t − 1, xit,jt = 0).

(54)

Nell’esempio

Il primo nodo figlio viene ottenuto imponendo x34 = 0.

(55)

Nell’esempio

Il primo nodo figlio viene ottenuto imponendo x34 = 0.

Il secondo nodo figlio viene ottenuto imponendo x34 = 1 e x41 = 0.

(56)

Nota bene

Con questa regola di branching i nodi figli di un dato nodo continueranno ad essere sottinsiemi della regione

ammissibile di forma S(A0, A1).

(57)

Nota bene

Con questa regola di branching i nodi figli di un dato nodo continueranno ad essere sottinsiemi della regione

ammissibile di forma S(A0, A1).

Infatti, rispetto al nodo padre il primo nodo figlio aggiungerà l’arco (i1, j1) in A0, il secondo nodo figlio aggiungerà l’arco (i1, j1) in A1 e l’arco (i2, j2) in A0, il terzo nodo figlio

aggiungerà gli archi (i1, j1) e (i2, j2) in A1 e l’arco (i3, j3) in A0, e così via.

(58)

Nell’esempio

Primo nodo figlio:

A0 = {(1, 7); (3, 4)} A1 = {(1, 2); (2, 3)}

(59)

Nell’esempio

Primo nodo figlio:

A0 = {(1, 7); (3, 4)} A1 = {(1, 2); (2, 3)}

Secondo nodo figlio:

A0 = {(1, 7); (4, 1)} A1 = {(1, 2); (2, 3); (3, 4)}

(60)

Osservazione

Nel calcolo del lower bound per un dato nodo dell’albero è possibile risparmiare computazioni sfruttando quelle già fatte per il nodo padre, in particolare, utilizzando la tabella finale individuata dall’algoritmo ungherese per il nodo padre e con le opportune modifiche per il nodo figlio. Questo

verrà illustrato tramite gli esempi.

(61)

Lower bound per TSP simmetrico

Vogliamo ora definire una nuova tecnica di calcolo di lower bound per il problema TSP nel caso simmetrico, ovvero il caso in cui:

vij = vji ∀ i, j ∈ V.

(62)

Definizione: 1-tree

Dato un grafo G = (V, A) non orientato e un suo nodo

a ∈ V , chiamiamo 1-tree un sottografo Q = (V, AQ) di G con le seguenti proprietà:

(63)

Definizione: 1-tree

Dato un grafo G = (V, A) non orientato e un suo nodo

a ∈ V , chiamiamo 1-tree un sottografo Q = (V, AQ) di G con le seguenti proprietà:

in AQ ci sono esattamente due archi incidenti sul nodo a;

(64)

Definizione: 1-tree

Dato un grafo G = (V, A) non orientato e un suo nodo

a ∈ V , chiamiamo 1-tree un sottografo Q = (V, AQ) di G con le seguenti proprietà:

in AQ ci sono esattamente due archi incidenti sul nodo a;

se escludo da Q il nodo a e i due archi incidenti su di esso, mi rimane un albero sull’insieme di nodi V \ {a}.

(65)

Definizione: 1-tree

Dato un grafo G = (V, A) non orientato e un suo nodo

a ∈ V , chiamiamo 1-tree un sottografo Q = (V, AQ) di G con le seguenti proprietà:

in AQ ci sono esattamente due archi incidenti sul nodo a;

se escludo da Q il nodo a e i due archi incidenti su di esso, mi rimane un albero sull’insieme di nodi V \ {a}. In particolare, da questa definizione segue che | AQ |=| V |.

(66)

Esempio

Dato il grafo con V = {a, b, c, d, e} e

A = {(a, b); (a, c); (b, c); (b, e); (c, d); (d, a); (d, e)}, il sottografo con

AQ = {(a, b); (d, a); (b, c); (b, e); (d, e)}

è un 1-tree.

(67)

Osservazione

Si può notare che ogni circuito hamiltoniano è un 1-tree.

(68)

Osservazione

Si può notare che ogni circuito hamiltoniano è un 1-tree.

Infatti, in un circuito hamiltoniano su ogni nodo incidono esattamente due archi ed inoltre togliendo un nodo a qualsiasi e i due archi del circuito incidenti su di esso si ottiene un albero sull’insieme di nodi V \ {a}.

(69)

Osservazione

Si può notare che ogni circuito hamiltoniano è un 1-tree.

Infatti, in un circuito hamiltoniano su ogni nodo incidono esattamente due archi ed inoltre togliendo un nodo a qualsiasi e i due archi del circuito incidenti su di esso si ottiene un albero sull’insieme di nodi V \ {a}.

Il viceversa non è vero (lo 1-tree dell’esempio non è un circuito hamiltoniano).

(70)

Quindi ...

... se indichiamo con S l’insieme degli 1-tree su un grafo G, tale insieme contiene la regione ammissibile S del

problema TSP.

(71)

Quindi ...

... se indichiamo con S l’insieme degli 1-tree su un grafo G, tale insieme contiene la regione ammissibile S del

problema TSP.

In altre parole, il problema

Q=(V,AminQ)∈S

X

(i,j)∈AQ

vij

risulta essere un rilassamento per il problema TSP

simmetrico e la sua risoluzione restituisce un lower bound per il valore ottimo del problema TSP.

(72)

Calcolo del lower bound

Passo 1. Si risolva il problema MST sul grafo ottenuto scartando da G = (V, A) il nodo a prescelto e tutti gli

archi incidenti su di esso. Sia AT l’insieme di archi della soluzione trovata;

(73)

Calcolo del lower bound

Passo 1. Si risolva il problema MST sul grafo ottenuto scartando da G = (V, A) il nodo a prescelto e tutti gli

archi incidenti su di esso. Sia AT l’insieme di archi della soluzione trovata;

Passo 2. Si aggiungano ad AT i due archi (a, k) e (a, h) a distanza minima tra tutti quelli incidenti sul nodo a

prescelto.

(74)

Calcolo del lower bound

Passo 1. Si risolva il problema MST sul grafo ottenuto scartando da G = (V, A) il nodo a prescelto e tutti gli

archi incidenti su di esso. Sia AT l’insieme di archi della soluzione trovata;

Passo 2. Si aggiungano ad AT i due archi (a, k) e (a, h) a distanza minima tra tutti quelli incidenti sul nodo a

prescelto.

Passo 3. Si restituisca Q = (V, AQ) con AQ = AT ∪ {(a, k); (a, h)}.

(75)

Tempi di calcolo

Risoluzione del problema MST in tempo polinomiale (ad esempio con l’algoritmo greedy).

(76)

Tempi di calcolo

Risoluzione del problema MST in tempo polinomiale (ad esempio con l’algoritmo greedy).

Calcolo dei due valori minimi in tempo polinomiale.

Quindi

(77)

Tempi di calcolo

Risoluzione del problema MST in tempo polinomiale (ad esempio con l’algoritmo greedy).

Calcolo dei due valori minimi in tempo polinomiale.

Quindi i tempi di calcolo complessivi sono polinomiali.

(78)

Nota bene

La scelta del nodo a è arbitraria.

(79)

Nota bene

La scelta del nodo a è arbitraria.

Al costo di un maggiore sforzo computazionale, si possono anche calcolare | V | diversi lower bound scegliendo come nodo a tutti i nodi del grafo G e calcolando per ciascuno di essi il lower bound.

(80)

Nota bene

La scelta del nodo a è arbitraria.

Al costo di un maggiore sforzo computazionale, si possono anche calcolare | V | diversi lower bound scegliendo come nodo a tutti i nodi del grafo G e calcolando per ciascuno di essi il lower bound.

Come lower bound complessivo del problema originario si utilizza il migliore (ovvero il più grande) tra tutti i | V | lower bound calcolati.

(81)

Lower bound per sottoproblemi

Per il calcolo del lower bound di un sottoproblema

S(A0, A1), si utilizza la stessa procedura imponendo però la presenza degli archi in A1 ed escludendo quella degli archi in A0 sia nella risoluzione del problema MST sia

nell’individuazione dei due archi incidenti sul nodo a.

(82)

Lower bound per sottoproblemi

Per il calcolo del lower bound di un sottoproblema

S(A0, A1), si utilizza la stessa procedura imponendo però la presenza degli archi in A1 ed escludendo quella degli archi in A0 sia nella risoluzione del problema MST sia

nell’individuazione dei due archi incidenti sul nodo a.

In particolare, si può risolvere il problema MST sempre con l’algoritmo greedy ma:

(83)

Lower bound per sottoproblemi

Per il calcolo del lower bound di un sottoproblema

S(A0, A1), si utilizza la stessa procedura imponendo però la presenza degli archi in A1 ed escludendo quella degli archi in A0 sia nella risoluzione del problema MST sia

nell’individuazione dei due archi incidenti sul nodo a.

In particolare, si può risolvere il problema MST sempre con l’algoritmo greedy ma:

inizializzando l’insieme di archi AT non con l’insieme vuoto ma con tutti gli archi in A1 non incidenti sul nodo a;

(84)

Lower bound per sottoproblemi

Per il calcolo del lower bound di un sottoproblema

S(A0, A1), si utilizza la stessa procedura imponendo però la presenza degli archi in A1 ed escludendo quella degli archi in A0 sia nella risoluzione del problema MST sia

nell’individuazione dei due archi incidenti sul nodo a.

In particolare, si può risolvere il problema MST sempre con l’algoritmo greedy ma:

inizializzando l’insieme di archi AT non con l’insieme vuoto ma con tutti gli archi in A1 non incidenti sul nodo a;

non considerando gli archi in A0 durante l’esecuzione

(85)

Inoltre ...

se in A1 non sono presenti archi incidenti sul nodo a, metteremo in AQ i due archi a distanza minima tra tutti quelli incidenti sul nodo a e al di fuori di A0;

(86)

Inoltre ...

se in A1 non sono presenti archi incidenti sul nodo a, metteremo in AQ i due archi a distanza minima tra tutti quelli incidenti sul nodo a e al di fuori di A0;

se in A1 è già presente un arco incidente sul nodo a questo entrerà in AQ insieme a quello a distanza

minima tra tutti quelli incidenti sul nodo a e al di fuori di A0 e A1;

(87)

Inoltre ...

se in A1 non sono presenti archi incidenti sul nodo a, metteremo in AQ i due archi a distanza minima tra tutti quelli incidenti sul nodo a e al di fuori di A0;

se in A1 è già presente un arco incidente sul nodo a questo entrerà in AQ insieme a quello a distanza

minima tra tutti quelli incidenti sul nodo a e al di fuori di A0 e A1;

se in A1 sono già presenti due archi incidenti sul nodo a, solo questi entreranno in AQ.

(88)

Esempio

Supponiamo di avere il seguente problema del TSP simmetrico

1 2 3 4 5

1 − 5 8 3 5

2 5 − 4 6 2

3 8 4 10 3

4 3 6 10 − 1

5 5 2 3 1

(89)

Esempio

Supponiamo di avere il seguente problema del TSP simmetrico

1 2 3 4 5

1 − 5 8 3 5

2 5 − 4 6 2

3 8 4 10 3

4 3 6 10 − 1

5 5 2 3 1

Proviamo a calcolare il lower bound per il sottoproblema S(A0, A1) con A0 = {(1, 3); (4, 5)} e A1 = {(1, 5); (2, 4)}.

Utilizziamo come nodo a il nodo 1.

(90)

Continua

Per prima cosa dobbiamo risolvere il problema MST

sull’insieme di nodi V \ {1} imponendo la presenza dell’arco (2, 4) che è in A1 ed escludendo quella degli archi in A0.

(91)

Continua

Per prima cosa dobbiamo risolvere il problema MST

sull’insieme di nodi V \ {1} imponendo la presenza dell’arco (2, 4) che è in A1 ed escludendo quella degli archi in A0.

Utilizzando l’algoritmo greedy con AT inizializzato con gli archi in A1 non incidenti sul nodo 1 (in questo caso il solo arco (2, 4)) ed escludendo la possibilità di inserire gli archi in A0, arriviamo al seguente albero su V \ {1}

AT = {(2, 4); (2, 5); (3, 5)}.

(92)

Continua

Notiamo che in A1 è presente l’arco (1, 5) incidente sul nodo 1.

(93)

Continua

Notiamo che in A1 è presente l’arco (1, 5) incidente sul nodo 1.

Ad AT dobbiamo quindi aggiungere, oltre a questo arco (1, 5), l’arco a distanza minima tra tutti quelli incidenti sul nodo 1 e al di fuori di A0 e A1, ovvero (1, 4).

Riferimenti

Documenti correlati

Moltiplicatori di Lagrange.

Questi esempi non esauriscono la classe delle funzioni integrabili: esistono anche funzioni integrabili discontinue in un insieme infinito di punti..

Suppose that we solve the continuous relaxation of a STSP with a limited number of subtour elimination constraints, and let x ∗ R ∈ [0, 1] |E| be an optimal solution.. Then the

• operazione di bound: valutazione ottimistica della funzione obiettivo per le soluzioni rappresentate da ciascun nodo (bound ), per evitare lo sviluppo completo di sotto-

L’albero di Branch-and-Bound corrente, rappresentato nella figura successiva, non ha alcun problema attivo, e dunque la soluzione intera corrente `e la migliore possibile... Il

Poiché per un problema di ottimizzazione combinatoria conosciamo i bound “primali” e i bound “duali”, l’idea è quella di utilizzare tali bound per enumerare gli

Poiché per un problema di ottimizzazione combinatoria conosciamo i bound “primali” e i bound “duali”, l’idea è quella di utilizzare tali bound per

Per ogni valore di λ > 0 fissato, la soluzione ottima del problema lagrangiano costituisce un bound duale sull'ottimo del problema originario.. Infatti, il