mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-25 19:44:18 +00:00
62 lines
2.5 KiB
Markdown
62 lines
2.5 KiB
Markdown
|
[[algoritmo di approssimazione]] di [[problema del commesso viaggiatore]].
|
||
|
|
||
|
## Funzionamento
|
||
|
|
||
|
> [!Summary]
|
||
|
> Il [[grafo]] viene diviso in più [[sottografo|sottografi]], di cui si cercano i rispettivi [[circuito hamiltoniano|circuiti hamiltoniani]] [[problema di minimizzazione|minimi]].
|
||
|
|
||
|
### [[branch-and-bound|Branch]]
|
||
|
|
||
|
Si seleziona un [[nodo di un grafo|nodo]]:
|
||
|
- 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|archi]] incidenti su di esso, si crea un nuovo [[branch-and-bound|branch]] 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|Bound]]
|
||
|
|
||
|
Per ciascun [[branch-and-bound|branch]]:
|
||
|
1. si crea un [[sottografo]] escludendo il [[nodo di un grafo|nodo]] in questione tutti gli [[arco di un grafo|archi]] incidenti su esso
|
||
|
2. si determina il [[minimum spanning tree]] del grafo
|
||
|
3. si selezionano i due [[arco di un grafo|archi]] pertinenti al [[branch-and-bound|branch]] in questione
|
||
|
4. si [[unione|uniscono]] [[minimum spanning tree]] e due [[arco di un grafo|archi]], formando un **[[1-tree]]**
|
||
|
5. si usa come valore di bounding il [[funzione costo|costo]] dell'[[1-tree]]
|
||
|
|
||
|
> [!Example]-
|
||
|
>
|
||
|
> #### Grafo pesato iniziale
|
||
|
> ![[Grafo pesato iniziale.svg]]
|
||
|
>
|
||
|
> #### Selezionato il nodo 1
|
||
|
> ![[Bound 1.svg]]
|
||
|
|
||
|
> [!Success] Correttezza
|
||
|
>
|
||
|
> Il [[funzione costo|costo]] di un [[circuito hamiltoniano]] può essere visto come la somma di:
|
||
|
> - il [[funzione costo|costo]] di un [[percorso di un grafo|percorso]] che collega i [[nodo di un grafo|nodi]] del [[sottografo]] del [[branch-and-bound|branch]] (uno [[spanning tree]])
|
||
|
> - il [[funzione costo|costo]] dei due [[arco di un grafo|archi]] che collegano il [[nodo di un grafo|nodo]] escluso e il [[sottografo]]
|
||
|
>
|
||
|
> Nell'effettuare il [[branch-and-bound|bounding]], 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|Pruning]]
|
||
|
|
||
|
Vengono eliminati i [[branch-and-bound|branch]]:
|
||
|
- con un [[entità|nodo]] di [[grado di un nodo|grado]] $\leq 1$
|
||
|
- senza un [[grafo connesso]]
|