Esercizio sul problema del massimo flusso in un grafo tramite PL

Un grafo è composto da 8 nodi e archi con vincoli di capacità. Devo calcolare il massimo flusso come problema di programmazione lineare (PL). Tutti gli archi non indicati espressamente nel problema sono considerarsi con capacità nulla.

Archi Capacità
(s,1) 6
(s,5) 3
(1,4) 5
(1,3) 9
(2,5) 3
(2,t) 6
(3,6) 2
(4,5) 4
(4,2) 6
(5,1) 5
(5,6) 2
(6,2) 7
(6,t) 2

Per prima cosa costruisco il grafo.

Si tratta di un grafo orientato.

il grafo del problema

Le variabili del problema sono le quantità di flusso passanti da un nodo a un altro.

Ad esempio xs1 indica il flusso da s a 1

Le altre variabili sono xs2, x12, x13, x23, x2t, x34, x36, x42, x43, x52, x54, x6t, xts.

Nota. Per indicare le variabili ho combinato in pedice il nodo di partenza (da) e di arrivo (a). $$ x_{da a} $$ Pertanto, la variabile x13 indica il flusso sull'arco dal nodo 1 al nodo 3.

Tutte le variabili sono maggiori o uguali a zero (non negative).

$$ x \ge 0 $$

Ogni variabile deve rispettare anche il vincolo di capacità del proprio arco.

$$ x_{s1} \le 6 \\ x_{s5} \le 3 \\ x_{13} \le 9 \\ x_{14} \le 5 \\ x_{25} \le 3 \\ x_{2t} \le 6 \\ x_{36} \le 2 \\ x_{45} \le 4 \\ x_{42} \le 6 \\ x_{51} \le 5 \\ x_{56} \le 2 \\ x_{62} \le 7 \\ x_{6t} \le 2 $$

Sono le variabili e i primi vincoli del sistema lineare che sto costruendo.

Ora aggiungo un arco virtuale di massimo carico da t a s con capacità infinita.

E ovviamente aggiungo nel sistema lineare anche un'altra variabile xts non negativa (xts>0).

l'arco virtuale

Il problema del massimo flusso da t a s consiste nella massimizzazione della variabile xts

Quindi, la funzione obiettivo del sistema di programmazione lineare è la seguente

$$ max \: x_{ts} $$

Per ultimare il sistema devo soltanto aggiungere i vincoli di equilibrio del flusso.

A ogni nodo associo un vincolo di equilibrio del flusso.

A cosa serve?. In pratica, in ogni nodo il flusso in entrata è uguale al flusso in uscita. Non può esserci né riduzione, né incremento del flusso.

Ad esempio, il nodo s ha un arco in entrata (xts) e due archi in uscita (xs1, xs5).

Pertanto, il vincolo di equilibrio del flusso è

$$ x_{ts} - x_{51} - x_{s5} = 0 $$

Per il nodo 1 il vincolo di equilibrio del flusso è

$$ x_{s1} + x_{s1} - x_{14}- x_{13} = 0 $$

Per il nodo 2

$$ x_{42} + x_{62} - x_{25}- x_{2t} = 0 $$

Per il nodo 3

$$ x_{13} - x_{36} = 0 $$

Per il nodo 4

$$ x_{14} - x_{42}- x_{45} = 0 $$

Per il nodo 5

$$ x_{45}+x_{25}+x_{s5} - x_{51}- x_{56} = 0 $$

Per il nodo 6

$$ x_{36} + x_{56} - x_{62}- x_{6t} = 0 $$

Arrivato a questo punto ho tutti gli elementi per costruire il sistema di programmazione lineare.

$$ max \: x_{ts} $$

$$ \begin{cases} x_{ts} - x_{s1} - x_{s5} = 0 \\ x_{s1} + x_{51} - x_{14}- x_{13} = 0 \\ x_{42} + x_{62} - x_{25}- x_{2t} = 0 \\ x_{13} - x_{36} = 0 \\ x_{14} - x_{42}- x_{45} = 0 \\ x_{45}+x_{25}+x_{s5} - x_{51}- x_{56} = 0 \\ x_{36} + x_{56} - x_{62}- x_{6t} = 0 \\ x_{s1},x_{s5},x_{13},x_{14}, x_{25}, x_{2t}, x_{36}, x_{42}, x_{45},x_{51}, x_{56},x_{62}, x_{6t} \ge 0 \\ x_{s1} \le 6 \\ x_{s5} \le 3 \\ x_{13} \le 9 \\ x_{14} \le 5 \\ x_{25} \le 3 \\ x_{2t} \le 6 \\ x_{36} \le 2 \\ x_{45} \le 4 \\ x_{42} \le 6 \\ x_{51} \le 5 \\ x_{56} \le 2 \\ x_{62} \le 7 \\ x_{6t} \le 2 \end{cases} $$

A questo punto risolvo il problema lineare con l'algoritmo del simplesso.

E così via.

 


 

Segnalami un errore, un refuso o un suggerimento per migliorare gli appunti

FacebookTwitterLinkedinLinkedin
knowledge base

La teoria dei grafi