1
Fork 0
mirror of https://github.com/Steffo99/appunti-magistrali.git synced 2024-11-28 04:44:19 +00:00
appunti-steffo/9 - Algoritmi distribuiti/2 - Algoritmi di approssimazione/3 - Approssimazione di commesso viaggiatore/approssimazione di problema del commesso viaggiatore con branch-and-bound.md

2.5 KiB

algoritmo di approssimazione di problema del commesso viaggiatore.

Funzionamento

[!Summary] Il grafo viene diviso in più sottografo, di cui si cercano i rispettivi circuito hamiltoniano problema di minimizzazione.

branch-and-bound

Si seleziona un nodo di un grafo:

Per ciascuna selezione possibile di due arco di un grafo incidenti su di esso, si crea un nuovo branch-and-bound che esclude tutti gli altri.

[!Example]-

1-tree con nodi selezionabili evidenziati

!Branch 1.svg

Tre dei sei branch risultanti

!Branch 1A.svg

!Branch 1B.svg

!Branch 1C.svg

branch-and-bound

Per ciascun branch-and-bound:

  1. si crea un sottografo escludendo il nodo di un grafo in questione tutti gli arco di un grafo incidenti su esso
  2. si determina il minimum spanning tree del grafo
  3. si selezionano i due arco di un grafo pertinenti al branch-and-bound in questione
  4. si unione minimum spanning tree e due arco di un grafo, formando un 1-tree
  5. si usa come valore di bounding il funzione costo dell'1-tree

[!Example]-

Grafo pesato iniziale

!Grafo pesato iniziale.svg

Selezionato il nodo 1

!Bound 1.svg

[!Success] Correttezza

Il funzione costo di un circuito hamiltoniano può essere visto come la somma di:

Nell'effettuare il branch-and-bound, non siamo sicuri che il minimum spanning tree determinato sia anche un circuito hamiltoniano, ma sappiamo che qualsiasi altra selezione di archi avrà sicuramente un costo maggiore.

branch-and-bound

Vengono eliminati i branch-and-bound: