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:
- se questa è la prima iterazione, se ne seleziona uno qualsiasi;
- altrimenti, uno che ha grado
\geq 3
nell'1-tree; - se non ce ne sono, abbiamo trovato il circuito hamiltoniano minimo locale.
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
Tre dei sei branch risultanti
branch-and-bound
Per ciascun branch-and-bound:
- si crea un sottografo escludendo il nodo di un grafo in questione tutti gli arco di un grafo incidenti su esso
- si determina il minimum spanning tree del grafo
- si selezionano i due arco di un grafo pertinenti al branch-and-bound in questione
- si unione minimum spanning tree e due arco di un grafo, formando un 1-tree
- si usa come valore di bounding il funzione costo dell'1-tree
[!Example]-
Grafo pesato iniziale
Selezionato il nodo 1
[!Success] Correttezza
Il funzione costo di un circuito hamiltoniano può essere visto come la somma di:
- il funzione costo di un percorso di un grafo che collega i nodo di un grafo del sottografo del branch-and-bound (uno spanning tree)
- il funzione costo dei due arco di un grafo che collegano il nodo di un grafo escluso e il sottografo
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:
- con un entità di grado di un nodo
\leq 1
- senza un grafo connesso