mirror of
https://github.com/Steffo99/appunti-magistrali.git
synced 2024-11-29 05:14:18 +00:00
75 lines
2.2 KiB
Markdown
75 lines
2.2 KiB
Markdown
|
[[algoritmo di approssimazione]] di [[minimal vertex cover problem]] che fa uso di [[relax-and-round]].
|
||
|
|
||
|
## Funzionamento
|
||
|
|
||
|
> [!Summary]
|
||
|
> Si converte il problema da [[campo degli interi|intero]] a [[continuo]], lo si risolve con un algoritmo di [[programmazione lineare]], e poi si arrotonda la soluzione in direzione opposta a quella dell'ottimizzazione che si sta effettuando.
|
||
|
|
||
|
### Definizione
|
||
|
|
||
|
Si chiede di assegnare una variabile booleana $Optimal_{Node}$ a ciascun [[nodo di un grafo|nodo]]:
|
||
|
- $0$ se il [[nodo di un grafo|nodo]] non è parte della [[soluzione ottima]]
|
||
|
- $1$ se lo è
|
||
|
|
||
|
Si stabilisce un vincolo per descrivere un [[vertex cover]]:
|
||
|
|
||
|
$$
|
||
|
\def \varNodeA {{\color{LightCoral} Node_A}}
|
||
|
\def \varNodeB {{\color{Coral} Node_B}}
|
||
|
|
||
|
\forall\ (\varNodeA, \varNodeB) \in Edges :
|
||
|
\begin{cases}
|
||
|
\\
|
||
|
Optimal_{\varNodeA} + Optimal_{\varNodeB} \geq 1
|
||
|
\\\
|
||
|
\end{cases}
|
||
|
$$
|
||
|
|
||
|
> [!Tip]- Significato del vincolo
|
||
|
> "Per ogni [[arco di un grafo|arco]], scegli almeno uno dei due [[nodo di un grafo|nodi]] ai suoi estremi.
|
||
|
|
||
|
Infine, si definisce la [[funzione obiettivo]] come:
|
||
|
$$
|
||
|
\min \sum_{Node}^{Nodes} Optimal_{Node}
|
||
|
$$
|
||
|
|
||
|
### [[relax-and-round|Rilassamento]]
|
||
|
|
||
|
Invece di richiedere di assegnare variabili [[numero booleano|booleane]], richiediamo al risolutore di [[programmazione lineare]] di assegnare variabili [[numero reale|reali]]:
|
||
|
$$
|
||
|
0 \leq Relaxed_{Node} \leq 1
|
||
|
$$
|
||
|
|
||
|
### [[relax-and-round|Arrotondamento]]
|
||
|
|
||
|
Si selezionano tutti i [[nodo di un grafo|nodi]] tali che:
|
||
|
$$
|
||
|
\frac{1}{2} \leq Relaxed_{Node}
|
||
|
$$
|
||
|
|
||
|
## [[algoritmo corretto|Correttezza]]
|
||
|
|
||
|
> [!Success]
|
||
|
> Si forma un [[vertex cover]] valido.
|
||
|
|
||
|
## [[fattore di approssimazione|Fattore di approssimazione]]
|
||
|
|
||
|
Possiamo notare che, da come abbiamo effettuato l'arrotondamento:
|
||
|
$$
|
||
|
Relaxed_{Node} \leq \frac{1}{2} \cdot Optimal_{Node}
|
||
|
$$
|
||
|
Portando dall'altra parte:
|
||
|
$$
|
||
|
2 \cdot Relaxed_{Node} \leq Optimal_{Node}
|
||
|
$$
|
||
|
|
||
|
Allora, questa disuguaglianza sarà applicabile anche alla [[funzione costo]]:
|
||
|
$$
|
||
|
2 \cdot \sum_{Node}^{Nodes} Relaxed_{Node} \leq \sum_{Node}^{Nodes} Optimal_{Node}
|
||
|
$$
|
||
|
|
||
|
Questo significa che il [[funzione costo|costo]] della versione rilassata è al massimo il doppio di quella [[soluzione ottima|ottimale]], e che quindi il [[fattore di approssimazione]] è:
|
||
|
$$
|
||
|
\Large 2
|
||
|
$$
|