7.4 Il metodo potenziale¶
Parte 3 · Flussi · Capitolo 7 · Capitolo 7: Trasporto e assegnamento · Dispensa, volume 3 (PDF) · Esercizi: Trasporto e assegnamento
- Scriviamo i vincoli (7.1c) come \(-\sum_{i \in P} x_{ij}=-d_j\), i vincoli di conservazione del destinazioni e utilizzare una variabile duale libera \(\pi_v\), il potenziale del nodo \(v\), per il vincolo di ogni nodo \(v \in P \cup D\), entra Capitolo 4.
Utilizzando una variabile duale libera \(\pi_v\) per il vincolo di ciascun nodo \(v \in P \cup D\), il modello duale del modello \(\mathrm{TP}\) è:
Questo modello LP è denominato modello \(D(\mathrm{TP})\).
-
Con il costo ridotto di \(\bar{c}_{ij}=c_{ij}-\pi_i+\pi_j\) di Capitolo 4, il vincolo duale \(\eqref{ta:dcons}\) equivale a richiedere \(\bar{c}_{ij} \ge 0\).
-
Aggiungere la stessa costante a tutti i potenziali non modifica i costi ridotti né, se l'istanza è bilanciata, il valore della funzione obiettivo \(\eqref{ta:dobj}\). Normalizziamo con \(\pi_{m+n}=0\) il potenziale dell'ultima destinazione.
-
Per ogni \(\vet{x}\) che soddisfa i vincoli (7.1b) e (7.1c), i potenziali si sommano su riga per riga e colonna per colonna:
\[ \sum_{i \in P}\sum_{j \in D} (\pi_i-\pi_j)\,x_{ij}=\sum_{i \in P} a_i\,\pi_i-\sum_{j \in D} d_j\,\pi_j , \]e da \(c_{ij}=\bar{c}_{ij}+\pi_i-\pi_j\),
\[ \sum_{i \in P}\sum_{j \in D} c_{ij}\,x_{ij}=\sum_{i \in P}\sum_{j \in D}\bar{c}_{ij}\,x_{ij}+\sum_{i \in P} a_i\,\pi_i-\sum_{j \in D} d_j\,\pi_j . \]Questo è il Lemma «costo e costo ridotto» del Capitolo 4 per la rete bipartita.
Definizione 7.9: potenziali di una base
I potenziali di una base \(T\) sono i valori \(\pi_v\), \(v \in P \cup D\), tali che
- I potenziali associati a una base esistono e sono univoci. A partire da \(\pi_{m+n}=0\), una cella base \((i,j)\) con un estremo già noto permette di calcolare l'altro: \(\pi_i=\pi_j+c_{ij}\) o \(\pi_j=\pi_i-c_{ij}\). Ogni nodo viene raggiunto lungo il suo percorso unico nell'albero da \(m+n\), che ne forza il valore.
Teorema 7.10: criterio di ottimalità
Sia \(\bar{\vet{x}}\) la soluzione di base ammissibile di una base \(T\), con potenziali \(\vet{\pi}\). Se \(\bar{c}_{ij} \ge 0\) per ogni cella, allora \(\bar{\vet{x}}\) è ottimale per il modello \(\mathrm{TP}\), \(\vet{\pi}\) è ottimale per il modello \(D(\mathrm{TP})\), e
Se inoltre \(\bar{c}_{ij}>0\) per ogni cella esterna a \(T\), allora \(\bar{\vet{x}}\) è l'unica soluzione ottimale.
Dimostrazione
Usiamo l'identità sopra. Lascia che \(z_\pi=\sum_{i \in P} a_i\pi_i-\sum_{j \in D} d_j\pi_j\).
-
Per \(\bar{\vet{x}}\): \(\bar{c}_{ij}=0\) su \(T\) e \(\bar{x}_{ij}=0\) all'esterno di \(T\), quindi \(\sum \bar{c}_{ij}\bar{x}_{ij}=0\) e il costo di \(\bar{\vet{x}}\) è \(z_\pi\).
-
Per ogni \(\vet{x}\) ammissibile: \(\bar{c} \ge 0\) e \(\vet{x} \ge \vet{0}\), quindi il suo costo è almeno \(z_\pi\); quindi \(\bar{\vet{x}}\) è ottimale. I potenziali soddisfano \(\eqref{ta:dcons}\), e il loro valore \(z_\pi\) equivale a un costo primario: da dualità debole sono ottimali.
-
Se \(\bar{c}_{ij}>0\) esterno a \(T\), uno \(\vet{x}\) ottimale ha \(\sum \bar{c}_{ij}x_{ij}=0\), quindi \(x_{ij}=0\) esterno \(T\): è la soluzione base di \(T\), ovvero \(\bar{\vet{x}}\) di Teorema 7.6. □
7.4.1 Il ciclo di una cella e il pivot¶
Lemma 7.11: il ciclo di una cella non basica
Sia \(T\) una base e \(e=(k,l) \notin T\). Le celle \(T \cup \{e\}\) contengono esattamente un ciclo \(C\), composto da \(e\) e da il percorso da \(l\) a \(k\) nell'albero. Scrivi \(C\) partendo da \(e\) e muovendoti prima lungo la riga \(k\), e dai il segno \(+\) alle celle in posizione dispari (\(e\) compreso) e \(-\) alle altre. Quindi ogni riga e ogni colonna che soddisfa \(C\) contiene esattamente una cella di \(C\) con segno \(+\) e una con segno \(-\).
Dimostrazione
Il ciclo è il ciclo fondamentale dell'arco \((k,l)\) (Proposizione «ciclo fondamentale» di Capitolo 1). Visita il nodi \(k,j_1,i_1,j_2,\dots,l\) alternativamente in \(P\) e in \(D\), quindi ha un numero pari di celle e due consecutive le celle condividono un nodo: le prime due condividono la riga \(k\), le due successive una colonna e così via. Ogni nodo di \(C\) si trova in esattamente due celle di \(C\), che sono consecutive lungo \(C\), l'ultima e la prima comprese: le loro posizioni sono parità diversa, quindi segni diversi. □
Teorema 7.12: il perno
Sia \(\bar{\vet{x}}\) la soluzione ammissibile di base di una base \(T\) con potenziali \(\vet{\pi}\), sia \(e \notin T\) con \(\bar{c}_e<0\), siano \(C^+\) e \(C^-\) le celle del suo ciclo con segno \(+\) e \(-\), e siano
raggiunto in una cella \(f^\ast \in C^-\). Per \(0 \le t \le \theta\), lasciare che \(\vet{x}(t)\) sia \(\bar{\vet{x}}\) con \(t\) aggiunto sulle celle di \(C^+\) e sottratto sulle celle di \(C^-\).
-
(a) \(\vet{x}(t)\) è fattibile e il suo costo è il costo di \(\bar{\vet{x}}\) più \(t\,\bar{c}_e\).
-
(b) \(T'=T \cup \{e\} \setminus \{f^\ast\}\) è una base e \(\vet{x}(\theta)\) è la sua soluzione fattibile di base.
Dimostrazione
-
Fattibilità. Per Lemma 7.11 ogni riga e colonna di \(C\) guadagna \(t\) su uno cella e perde \(t\) su un'altra, quindi tutte le somme rimangono invariate. Le celle di \(C^-\) mantengono \(\bar{x}_f-t \ge 0\) da \(t \le \theta\).
-
Costo. La variazione del costo è \(t\big(\sum_{C^+} c_{ij}-\sum_{C^-} c_{ij}\big)\). Ogni nodo di \(C\) si trova in una cella di \(C^+\) e una di \(C^-\), quindi \(\sum_{C^+}(\pi_i-\pi_j)=\sum_{C^-}(\pi_i-\pi_j)\), e la modifica è \(t\big(\sum_{C^+}\bar{c}_{ij}-\sum_{C^-}\bar{c}_{ij}\big)=t\,\bar{c}_e\): le altre celle di \(C\) sono base, con \(\bar{c}_{ij}=0\).
-
Nuova base. \(T'\) ha celle \(m+n-1\) e non ha ciclo: l'unico ciclo di \(T \cup \{e\}\) è \(C\), che contiene \(f^\ast\). Un insieme aciclico di archi \(m+n-1\) sui nodi \(m+n\) è uno albero ricoprente (Teorema «caratterizzazioni di un albero» del Capitolo 1). \(\vet{x}(\theta)\) è zero all'esterno di \(T'\), poiché \(x_{f^\ast}(\theta)=0\), quindi è la soluzione di base di \(T'\). □
Algoritmo: Il metodo potenziale
STOP: \(\bar{\vet{x}}\) è ottimale.-
Regole degli esempi. Nel passo 3 la cella in ingresso ha il costo ridotto più negativo (il più piccolo \(i\), poi \(j\), in parità). Nel passaggio 4 il ciclo viene scritto dalla cella in entrata che si muove prima lungo la sua riga e in uscita cella è la prima cella di \(C^-\) con \(\bar{x}_f=\theta\) in ordine riga-colonna.
-
Il metodo è noto anche come metodo u-v o metodo MODI (distribuzione modificata) e il ciclo come metodo stepping stone percorso: gli importi si muovono lungo di esso come sulle pietre al di là di un fiume.
Teorema 7.13: terminazione
Se \(\theta>0\) ad ogni iterazione, il metodo potenziale si ferma dopo un numero finito di iterazioni con una base ottimale soluzione fattibile e potenziali ottimali.
Dimostrazione
Con Teorema 7.12 ogni iterazione con \(\theta>0\) si sposta su una nuova base e diminuisce il costo di \(\theta\,|\bar{c}_e|>0\). Una base determina la sua soluzione di base (Teorema 7.6), quindi una base visitata due volte avrebbe due costi diversi: nessuna base si ripete. Esistono un numero finito di set di \(m+n-1\) celle, quindi il metodo si interrompe al passaggio 2 e si applica Teorema 7.10. □
-
Quando \(\theta=0\) il pivot è degenere: cambia la base, ma non la soluzione di base né il costo. Il metodo dei potenziali è l'algoritmo del simplesso sul modello \(\mathrm{TP}\): le celle di base sono le variabili di base, \(\bar{c}_{ij}\) sono i costi ridotti e il ciclo descrive come cambiano le variabili di base quando \(x_e\) cresce.
-
La regola anticiclaggio di Bland garantisce che nessuna base si ripeta, anche in presenza di pivot degeneri. Qui scegliamo come cella entrante la prima con \(\bar{c}_{ij}<0\) in ordine lessicografico e applichiamo la regola di uscita descritta nel Capitolo 7 «Condizioni di ottimalità e regole pivot» del modulo di Programmazione lineare.
La convenzione u-v
Molti libri di testo formulano il metodo \(u\)-\(v\) con \(u_i+v_j=c_{ij}\) sulle celle di base e \(\bar{c}_{ij}=c_{ij}-u_i-v_j\). Nella notazione di questo capitolo, si pone \(u_i=\pi_i\) per le origini e \(v_j=-\pi_j\) per le destinazioni. I costi ridotti coincidono; cambia soltanto il segno dei potenziali associati alle destinazioni.
7.4.2 Il metodo potenziale sull'istanza di trasporto¶
-
Partiamo dalla soluzione angolo nord-ovest di Esempio 7.5, di costo \(440\).
-
In ogni tableau le celle base (blu) contengono la quantità \(\bar{x}_{ij}\) in grassetto, e le altre celle la quantità ridotta costo \(\bar{c}_{ij}\); l'ultima colonna e l'ultima riga contengono i potenziali. La cella entrante è rossa e le celle del ciclo sono contrassegnate con \(\oplus\) e \(\ominus\).
Esempio 7.7: il metodo potenziale dall'angolo nord-ovest
Nella prima iterazione i potenziali della base nord-ovest provengono da \(\pi_7=0\), lungo l'albero:
Ad esempio, \(\bar{c}_{35}=c_{35}-\pi_3+\pi_5=1-6-2=-7\).
| Iterazione 1 | |||||
|---|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(7\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{10}\) | \(\mathbf{20}\) | \(-5\) | \(-4\) | \(7\) |
| \(2\) | \(7\) | \(\mathbf{5}\,\ominus\) | \(\mathbf{15}\) | \(\mathbf{10}\,\oplus\) | \(2\) |
| \(3\) | \(9\) | \(-7\,\oplus\) | \(-2\) | \(\mathbf{30}\,\ominus\) | \(6\) |
| \(\pi_j\) | \(6\) | \(-2\) | \(0\) | \(0\) | |
-
I costi ridotti negativi sono \(\bar{c}_{35}=-7\), \(\bar{c}_{16}=-5\), \(\bar{c}_{17}=-4\), \(\bar{c}_{36}=-2\); la cella \((3,5)\) entra nella base.
-
Il ciclo è \(\,(3,5)^{+},\ (3,7)^{-},\ (2,7)^{+},\ (2,5)^{-}\).
-
Le celle con segno \(-\) hanno \(\bar{x}_{37}=30\) e \(\bar{x}_{25}=5\): \(\theta=5\) e la cella \((2,5)\) lascia la base.
-
Il costo va da \(440\) a \(440+5\cdot(-7)=405\).
Nella rete l'arco entrante \((3,5)\) (rosso tratteggiato) chiude il ciclo \(3,5,2,7,3\) con l'albero.
Nella seconda iterazione il ciclo ha sei celle e visita tutte e tre le righe.
| Iterazione 2 | |||||
|---|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(7\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{10}\) | \(\mathbf{20}\,\ominus\) | \(-12\,\oplus\) | \(-11\) | \(14\) |
| \(2\) | \(14\) | \(7\) | \(\mathbf{15}\,\ominus\) | \(\mathbf{15}\,\oplus\) | \(2\) |
| \(3\) | \(16\) | \(\mathbf{5}\,\oplus\) | \(-2\) | \(\mathbf{25}\,\ominus\) | \(6\) |
| \(\pi_j\) | \(13\) | \(5\) | \(0\) | \(0\) | |
-
I costi ridotti negativi sono \(\bar{c}_{16}=-12\), \(\bar{c}_{17}=-11\), \(\bar{c}_{36}=-2\); la cella \((1,6)\) entra nella base.
-
Il ciclo è \(\,(1,6)^{+},\ (1,5)^{-},\ (3,5)^{+},\ (3,7)^{-},\ (2,7)^{+},\ (2,6)^{-}\).
-
Le celle con segno \(-\) hanno \(\bar{x}_{15}=20\), \(\bar{x}_{37}=25\) e \(\bar{x}_{26}=15\): \(\theta=15\) e la cella \((2,6)\) lascia la base.
-
Il costo va da \(405\) a \(405+15\cdot(-12)=225\).
| Iterazione 3 | |||||
|---|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(7\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{10}\) | \(\mathbf{5}\,\ominus\) | \(\mathbf{15}\) | \(-11\,\oplus\) | \(14\) |
| \(2\) | \(14\) | \(7\) | \(12\) | \(\mathbf{30}\) | \(2\) |
| \(3\) | \(16\) | \(\mathbf{20}\,\oplus\) | \(10\) | \(\mathbf{10}\,\ominus\) | \(6\) |
| \(\pi_j\) | \(13\) | \(5\) | \(12\) | \(0\) | |
-
L'unico costo ridotto negativo è \(\bar{c}_{17}=-11\): la cella \((1,7)\) entra nella base.
-
Il ciclo è \(\,(1,7)^{+},\ (1,5)^{-},\ (3,5)^{+},\ (3,7)^{-}\).
-
Le celle con segno \(-\) hanno \(\bar{x}_{15}=5\) e \(\bar{x}_{37}=10\): \(\theta=5\) e la cella \((1,5)\) lascia la base.
-
Il costo va da \(225\) a \(225+5\cdot(-11)=170\).
| Iterazione 4 | |||||
|---|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(7\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{10}\) | \(11\) | \(\mathbf{15}\,\ominus\) | \(\mathbf{5}\,\oplus\) | \(3\) |
| \(2\) | \(3\) | \(7\) | \(1\) | \(\mathbf{30}\) | \(2\) |
| \(3\) | \(5\) | \(\mathbf{25}\) | \(-1\,\oplus\) | \(\mathbf{5}\,\ominus\) | \(6\) |
| \(\pi_j\) | \(2\) | \(5\) | \(1\) | \(0\) | |
-
L'unico costo ridotto negativo è \(\bar{c}_{36}=-1\): la cella \((3,6)\) entra nella base.
-
Il ciclo è \(\,(3,6)^{+},\ (3,7)^{-},\ (1,7)^{+},\ (1,6)^{-}\).
-
Le celle con segno \(-\) hanno \(\bar{x}_{37}=5\) e \(\bar{x}_{16}=15\): \(\theta=5\) e la cella \((3,7)\) lascia la base.
-
Il costo va da \(170\) a \(170+5\cdot(-1)=165\).
| Iterazione 5 | |||||
|---|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(7\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{10}\) | \(10\) | \(\mathbf{10}\) | \(\mathbf{10}\) | \(3\) |
| \(2\) | \(3\) | \(6\) | \(1\) | \(\mathbf{30}\) | \(2\) |
| \(3\) | \(6\) | \(\mathbf{25}\) | \(\mathbf{5}\) | \(1\) | \(5\) |
| \(\pi_j\) | \(2\) | \(4\) | \(1\) | \(0\) | |
- Tutti i costi ridotti sono non negativi: la soluzione di base ammissibile è ottimale, con costo \(z=165\).
-
La soluzione ottimale è
\[ \tilde{x}_{14}=10,\quad \tilde{x}_{16}=10,\quad \tilde{x}_{17}=10,\quad \tilde{x}_{27}=30,\quad \tilde{x}_{35}=25,\quad \tilde{x}_{36}=5, \qquad z(\mathrm{TP})=165 . \]Ogni cella esterna alla base ha \(\bar{c}_{ij}>0\), quindi per Teorema 7.10 l'ottimo è unico.
-
I potenziali \(\tilde{\vet{\pi}}=(3,2,5,2,4,1,0)\) sono ottimali per il modello \(D(\mathrm{TP})\), con valore
\[ 30\,(3+2+5)-(10 \cdot 2+25 \cdot 4+15 \cdot 1+40 \cdot 0)=300-135=165 . \]Gurobi restituisce la stessa soluzione ottimale e i suoi valori duali coincidono con \(\tilde{\vet{\pi}}\).
-
Dalla soluzione a costo minimo di Esempio 7.6 il metodo necessita di un unico pivot: quella soluzione ha la base dell'iterazione \(4\) e la cella in ingresso \((3,6)\), con \(\theta=5\), fornisce l'ottimale.
7.4.3 Degeneracy¶
Esempio 7.8: un pivot degenerato
Consideriamo l'istanza
- Nella regola dell'angolo nord-ovest la prima cella scarica la riga \(1\) e la colonna \(4\) contemporaneamente. Solo la riga è incrociata esce, e la cella \((2,4)\) entra in \(T\) con l'importo \(0\): la soluzione, di costo \(250\), è degenere.
| passo | cella | importo | barrato |
|---|---|---|---|
| \(1\) | \((1,4)\) | \(30\) | riga \(1\) |
| \(2\) | \((2,4)\) | \(0\) | colonna \(4\) |
| \(3\) | \((2,5)\) | \(25\) | riga \(2\) |
| \(4\) | \((3,5)\) | \(5\) | colonna \(5\) |
| \(5\) | \((3,6)\) | \(25\) | riga \(3\), colonna \(6\) |
| Iterazione 1 | ||||
|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{30}\) | \(7\) | \(14\) | \(-7\) |
| \(2\) | \(\mathbf{0}\,\ominus\) | \(\mathbf{25}\,\oplus\) | \(7\) | \(-2\) |
| \(3\) | \(-10\,\oplus\) | \(\mathbf{5}\,\ominus\) | \(\mathbf{25}\) | \(5\) |
| \(\pi_j\) | \(-8\) | \(-4\) | \(0\) | |
-
L'unico costo ridotto negativo è \(\bar{c}_{34}=-10\): la cella \((3,4)\) entra nella base.
-
Il ciclo è \(\,(3,4)^{+},\ (3,5)^{-},\ (2,5)^{+},\ (2,4)^{-}\).
-
Le celle con segno \(-\) hanno \(\bar{x}_{35}=5\) e \(\bar{x}_{24}=0\): \(\theta=0\) e la cella \((2,4)\) lascia la base.
-
Il perno è degenere: la soluzione ed il suo costo \(z=250\) non cambiano, cambia solo la base.
Nella seconda iterazione è cambiata la base, quindi sono cambiate anche i potenziali: ora \(\bar{c}_{15}<0\).
| Iterazione 2 | ||||
|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{30}\,\ominus\) | \(-3\,\oplus\) | \(4\) | \(3\) |
| \(2\) | \(10\) | \(\mathbf{25}\) | \(7\) | \(-2\) |
| \(3\) | \(\mathbf{0}\,\oplus\) | \(\mathbf{5}\,\ominus\) | \(\mathbf{25}\) | \(5\) |
| \(\pi_j\) | \(2\) | \(-4\) | \(0\) | |
-
L'unico costo ridotto negativo è \(\bar{c}_{15}=-3\): la cella \((1,5)\) entra nella base.
-
Il ciclo è \(\,(1,5)^{+},\ (1,4)^{-},\ (3,4)^{+},\ (3,5)^{-}\).
-
Le celle con segno \(-\) hanno \(\bar{x}_{14}=30\) e \(\bar{x}_{35}=5\): \(\theta=5\) e la cella \((3,5)\) lascia la base.
-
Il costo va da \(250\) a \(250+5\cdot(-3)=235\).
| Iterazione 3 | ||||
|---|---|---|---|---|
| \(4\) | \(5\) | \(6\) | \(\pi_i\) | |
| \(1\) | \(\mathbf{25}\) | \(\mathbf{5}\) | \(4\) | \(3\) |
| \(2\) | \(7\) | \(\mathbf{25}\) | \(4\) | \(1\) |
| \(3\) | \(\mathbf{5}\) | \(3\) | \(\mathbf{25}\) | \(5\) |
| \(\pi_j\) | \(2\) | \(-1\) | \(0\) | |
- Tutti i costi ridotti sono non negativi: la soluzione di base ammissibile è ottimale, con costo \(z=235\).
La soluzione ottimale è unica, con costo \(235\), e Gurobi lo conferma.
-
La cella base con valore \(0\) deve essere mantenuta in \(T\): senza di essa le altre quattro celle non si estenderebbero sulle sei nodi e i potenziali non potevano essere calcolati.
-
Il perno degenere dell'iterazione \(1\) non abbassa il costo, ma si sposta su una base le cui potenziali rivelano una cella migliorante.
Il metodo dei potenziali calcola i potenziali della base (\(\bar{c}_{ij}=0\) sulle celle base, \(\pi_{m+n}=0\)), ferma quando ogni costo ridotto non è negativo e altrimenti sposta le unità \(\theta\) attorno al ciclo di una cella in entrata. Il riduzione dei costi di \(\theta\,|\bar{c}_e|\); con \(\theta=0\) cambia solo la base.