Teoremi
I risultati del corso, divisi per capitolo: enunciato, a che cosa servono nelle tracce e la dimostrazione spiegata.
Geometria della PL
teoremaOttimo locale e ottimo globale
dimostrazione completaSia un problema con convesso e convessa. Ogni soluzione ottima locale è anche ottima globale. In particolare, in un problema di PL ogni ottimo locale è globale.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Ottimo locale e ottimo globale
Intuizione
Da un ottimo locale si guarda un punto qualsiasi lungo il segmento che li unisce: vicino all'ottimo la funzione non scende, e la convessità impedisce che scenda più avanti.
All'esame
Giustifica perché un ottimo locale di un PL è già l'ottimo globale: trovato un ottimo locale non serve cercare altrove.
Dimostrazione illustrata
1 / 4Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Quando un insieme è convesso?
- Quando una funzione è convessa? Una funzione lineare lo è?
Risposte
- Quando per ogni e ogni il punto sta ancora in : l'insieme contiene il segmento fra due suoi punti qualsiasi.
- Quando : fra due punti il grafico sta sotto la corda. Una funzione lineare la soddisfa con l'uguaglianza, quindi è convessa.
Se una delle due risposte non torna, conviene rileggere le definizioni di insieme convesso e di funzione convessa prima di andare avanti.
Il problema
Un punto è ottimo locale se esiste tale che per ogni in . Il confronto riguarda solo i punti vicini, e in generale non dice niente su quelli lontani.
Su si minimizzi . Con i punti di vicini a sono quelli di , e lì : è ottimo locale. L'ottimo globale però è , con valore . La funzione è lineare, quindi il guaio sta nell'insieme, che ha un buco fra 1 e 2. Il teorema esclude questa situazione quando è convesso (niente buchi) e è convessa.
L'idea
Si prende un qualsiasi e si vuole . Se non c'è niente da dimostrare, quindi sia .
Sul segmento da a si sceglie il punto , con vicino a 1. Di servono tre fatti, e ciascuno usa un'ipotesi diversa:
- perché è convesso;
- sta nell'intorno di , perché e basta prendere ; quindi per l'ottimalità locale;
- perché è convessa.
Messe in fila:
Si porta a sinistra e resta . Dato che , dividendo il verso non cambia: . Per questo serve in senso stretto, ed è il motivo per cui si è escluso .
Perché vale nella PL
La funzione obiettivo è lineare, quindi convessa. La regione ammissibile è un poliedro. Ogni vincolo, qualunque sia il verso, definisce un insieme convesso, perché : se e sono entrambi , oppure , oppure , la combinazione lo è anche. Il poliedro è l'intersezione di questi insiemi, e un'intersezione di convessi è convessa: il teorema si applica a ogni problema di PL.
Dove si inciampa di solito
- Credere che il teorema dia un ottimo unico. Dice solo che ogni ottimo locale ha il valore migliore; in un PL gli ottimi possono essere un intero lato, tutti con lo stesso valore.
- Dimenticare la convessità di e controllare solo : l'esempio con ha una funzione lineare e il teorema fallisce.
- Confondere "locale" con "nessun vertice adiacente migliora". Il teorema parla dell'intorno . Per passare da "nessun vertice adiacente migliora" a "ottimo locale" serve un argomento a parte (da un vertice ci si allontana muovendosi lungo combinazioni dei suoi lati); il teorema copre solo il passo da locale a globale.
- Applicarlo a un massimo senza pensarci. Per serve concava; nella PL non cambia nulla, perché e è ancora lineare.
Fonti: slide Teorema_Convessita (Teorema 2, Proprietà 1); dispensa, Proprietà 6.0.1.
teoremaTeorema 2.6.3 (vertice, punto estremo, SBA)
schema della dimostrazioneSia un poliedro non vuoto e sia . Sono equivalenti: è un vertice di ; è un punto estremo di ; è una soluzione di base ammissibile.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 2.6.3 (vertice, punto estremo, SBA)
Intuizione
Un angolo del poliedro si vede in tre modi: non sta in mezzo a un segmento, è l'unico minimo di qualche funzione lineare, attiva vincoli indipendenti. Il terzo si controlla con un sistema lineare.
All'esame
Permette di passare dal disegno al tableau: il vertice trovato sul grafico è una SBA, e i suoi vincoli attivi dicono quali variabili stanno fuori base.
Schema illustrato
1 / 4Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
- Quando un vincolo (oppure , oppure ) si dice attivo in ? E un vincolo di segno ?
- Nel piano, quando due vincoli attivi individuano un solo punto?
Risposte
- Quando vale con l'uguaglianza: . Il vincolo è attivo se .
- Quando i loro vettori dei coefficienti sono linearmente indipendenti (non paralleli): il sistema delle due equazioni ha determinante non nullo e una sola soluzione.
Se la seconda non torna, conviene ripassare il legame fra indipendenza lineare e sistemi con soluzione unica.
Tre definizioni dello stesso punto
Gli "angoli" di un poliedro si possono definire in tre modi.
- Punto estremo: non si scrive come con diversi da , cioè non sta in mezzo a un segmento di .
- Vertice: esiste un vettore per cui è l'unico punto di minimo di su .
- Soluzione di base ammissibile (SBA): , tutti i vincoli di uguaglianza sono attivi e fra i vincoli attivi ce ne sono linearmente indipendenti.
Per controllare le prime due bisognerebbe passare in rassegna infiniti segmenti o infiniti vettori ; la terza si verifica con un sistema lineare. Il teorema dice che le tre definizioni individuano gli stessi punti, quindi un angolo visto sul disegno si conferma con un conto.
Un esempio
Si prenda il poliedro
con vertici , , , . Si guardi con le tre definizioni.
SBA: in sono attivi (a) e (b). I vettori e sono indipendenti (determinante ), e rispetta tutti i vincoli.
Punto estremo: se con e , la quantità vale al più 3 in e in , e la loro media pesata vale 3; allora vale 3 in entrambi. Lo stesso per (b). Quindi e risolvono lo stesso sistema di (a) e (b), che ha la sola soluzione : .
Vertice: sommando (a) e (b) si ottiene , cioè su tutto , con l'uguaglianza solo dove (a) e (b) sono entrambi attivi, cioè solo in . Con , è l'unico minimo.
Per confronto, il punto medio del lato attiva il solo vincolo , sta in mezzo a un segmento di , e nessuna lo rende unico minimo, perché è la media di e .
Perché le tre cose coincidono
Basta un giro di tre implicazioni, ciascuna delle quali generalizza un pezzo dell'esempio.
- Vertice implica punto estremo. Se è l'unico minimo di e fosse , allora sarebbe la media pesata di e , entrambi maggiori di : impossibile.
- Punto estremo implica SBA. Se i vincoli attivi non contengono vettori indipendenti, esiste una direzione ortogonale a tutti. Spostandosi di i vincoli attivi restano uguaglianze e quelli non attivi, che hanno un margine, restano soddisfatti per piccolo. Allora è il punto medio fra e , e non è estremo.
- SBA implica vertice. Si sceglie come la somma dei vettori dei vincoli attivi, scritti nella forma (per questo nell'esempio compare il segno meno). Su vale , con l'uguaglianza solo se tutti quei vincoli sono attivi, e l'indipendenza lascia una sola soluzione.
Dal disegno al tableau
In forma standard ogni vincolo attivo è una variabile nulla: la slack del vincolo, oppure la di un vincolo di segno. Con le slack , il vertice diventa : e stanno fuori base, e in base. Il vertice attiva (b) e , quindi e la base è , con .
Dove si inciampa di solito
- Prendere una soluzione di base per una SBA. attiva (a) e , due vincoli indipendenti, ma viola (b) perché . Il teorema richiede .
- Contare i vincoli attivi senza guardare l'indipendenza. Se il problema contiene e , ogni punto della retta ne attiva due, ma sono la stessa retta.
- Pensare che più di vincoli attivi escludano il vertice. Con anche , in i vincoli attivi sarebbero tre e resterebbe un vertice, degenere. Il teorema parla di punti: un vertice degenere corrisponde a più basi diverse.
Fonti: dispensa §2.6, Teorema 2.6.3.
teoremaTeoremi 2.6.5 e 2.6.7 (vertici e ottimo in un vertice)
schema della dimostrazioneUn poliedro non vuoto ha almeno un punto estremo se e solo se non contiene una retta; in particolare ne hanno uno i poliedri limitati e quelli in forma standard. Se ha almeno un punto estremo, il problema su o ha valore ottimo , oppure ha una soluzione ottima finita in un punto estremo di .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teoremi 2.6.5 e 2.6.7 (vertici e ottimo in un vertice)
Intuizione
Se non contiene una retta, da ogni punto ci si sposta fino a un vertice senza peggiorare il valore. Quindi o il valore scende senza limite, o il migliore dei vertici è ottimo.
All'esame
È il motivo per cui nella soluzione grafica si controllano solo i vertici, e per cui il simplesso può muoversi solo fra SBA.
Schema illustrato
1 / 4Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
- Che cos'è un punto estremo di un poliedro , e come si riconosce algebricamente?
- Che cosa vuol dire che un problema ha valore ottimo ?
Risposte
- Un punto di che non sta in mezzo a un segmento contenuto in . Per il Teorema 2.6.3 coincide con una soluzione di base ammissibile: rispetta tutti i vincoli e ne rende attivi linearmente indipendenti.
- Che per ogni numero esiste un punto ammissibile con : la funzione obiettivo scende senza limite e nessun punto è ottimo.
Se la prima risposta non torna, conviene rileggere il Teorema 2.6.3 su vertici, punti estremi e SBA.
Quando un poliedro ha un vertice
Il Teorema 2.6.5 dice quando c'è almeno un vertice, il Teorema 2.6.7 che allora l'ottimo, se finito, sta in un vertice.
contiene una retta se esistono e con per ogni reale. Il semipiano contiene la retta (direzione ) e non ha vertici. Aggiungendo la regione non contiene più rette e compaiono i vertici e .
Una retta toglie tutti i vertici. Se per ogni , deve essere : altrimenti, mandando verso o , il termine diventa negativo quanto si vuole. Allora è ortogonale a tutti i vettori dei vincoli, e da ogni punto ci si muove lungo restando in . Ogni è il punto medio fra e , quindi nessuno è estremo.
Senza rette, invece, un vertice si costruisce partendo da un punto . Se i vincoli attivi in non contengono vettori indipendenti, esiste ortogonale a tutti, e lungo la retta i vincoli attivi restano attivi. La retta non sta tutta in , quindi in almeno un verso si incontra un vincolo nuovo , con . Questo vincolo è indipendente da quelli di prima, che erano ortogonali a . Fermandosi lì, i vincoli attivi indipendenti aumentano di uno. Dopo al più passi se ne hanno , cioè una SBA.
Non contengono rette i poliedri limitati, che stanno in una scatola da cui ogni retta esce, e quelli in forma standard: con , lungo una componente con diventa negativa in uno dei due versi.
Ottimo in un vertice
Si ripete la costruzione di prima, scegliendo il verso di in base alla funzione obiettivo. Da un che non è un vertice si prende con , così spostandosi il valore non peggiora. Le possibilità sono due:
- si incontra un vincolo nuovo: si ottiene un punto con più vincoli attivi indipendenti e valore non peggiore, e si ripete;
- non si incontra mai un vincolo: se il valore scende senza limite e l'ottimo è ; se si usa il verso opposto, che ha lo stesso valore e, dato che non contiene rette, prima o poi incontra un vincolo.
Così da ogni punto di si arriva a un vertice che vale almeno altrettanto, oppure si scopre che l'ottimo è . I vertici sono in numero finito, perché le soluzioni di base lo sono: il migliore di essi batte tutti i punti di ed è ottimo.
Ne segue anche che, quando ha un vertice, non esiste un terzo esito con l'estremo inferiore finito ma non raggiunto, come in su .
Un esempio
Su , con vertici e :
| Obiettivo | Esito |
|---|---|
| ottimo nel vertice | |
| ottimo su tutto il segmento fra i due vertici | |
| , lungo con |
Togliendo resta il semipiano: vale ancora 1, ma gli ottimi formano una retta e non c'è un vertice dove trovarli. Per questo il Teorema 2.6.7 chiede che abbia un punto estremo.
Dove si inciampa di solito
- Pensare che una regione illimitata dia sempre . Nella tabella la regione è illimitata e due obiettivi su tre hanno un ottimo finito: decide la direzione di .
- Leggere "l'ottimo è in un vertice" come "ogni ottimo è un vertice". Con sono ottimi anche i punti interni del segmento; il teorema garantisce che fra gli ottimi c'è almeno un vertice.
- Su una regione illimitata, confrontare solo i valori nei vertici. Con il vertice migliore vale , ma il problema è illimitato. Prima va escluso che una direzione che resta in faccia scendere l'obiettivo.
Fonti: dispensa §2.6.6-2.6.7, Teoremi 2.6.5, 2.6.6, 2.6.7 e Corollario 2.6.2.
Il simplesso
teoremaTeorema 2.7.1 (condizioni di ottimalità)
schema della dimostrazioneSia una soluzione ammissibile di base con matrice di base e costi ridotti . Se , allora è ottima. Se è ottima e non degenere, allora .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 2.7.1 (condizioni di ottimalità)
Intuizione
Il costo ridotto dice di quanto cambia il costo facendo entrare . Se nessuno è negativo, nessuno spostamento da fa scendere il costo.
All'esame
È il test della verifica col simplesso: la base del vertice trovato sul grafico è ottima se la riga 0 del suo tableau è tutta .
Schema illustrato
1 / 4Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
- In una SBA con base , quanto vale il costo ridotto di una variabile di base?
- Quando una SBA si dice degenere?
Risposte
- Zero. è il vettore unitario , quindi . Per questo il test guarda solo le variabili fuori base.
- Quando almeno una variabile di base vale 0, cioè quando più di componenti di sono nulle.
Se le risposte non tornano, rileggi come si costruisce una soluzione di base in forma standard: e .
Che cosa misura un costo ridotto
Da una SBA ci si sposta facendo crescere una sola variabile fuori base da 0 a , con le altre fuori base ferme a 0. Perché resti vera, le variabili di base compensano: ne viene la -esima direzione di base , con e . Lungo il costo vale , e
Quindi è la variazione del costo per ogni unità di che entra. Il teorema usa il segno di questi numeri per decidere se è ottima, con un'eccezione nel verso inverso.
Perché basta
Prendi un punto ammissibile qualsiasi e guarda lo spostamento . Vale , e le sue componenti fuori base sono , perché in valevano 0. Un vettore con è fissato dalle sue componenti fuori base: quelle di base si ricavano risolvendo con . Perciò è la somma delle direzioni di base , ognuna con peso , e il costo cambia di
Con pesi e costi ridotti tutti la somma è , quindi nessun punto di costa meno di .
Perché il verso inverso chiede la non degenerazione
Supponi ottima con per qualche . Se è non degenere, , e per abbastanza piccolo anche resta . La direzione è allora ammissibile e abbassa il costo di , contro l'ottimalità di .
Se è degenere, una variabile di base può valere 0 e avere componente negativa in : qualunque la manda sotto zero. In quel caso la direzione esce subito da e il costo ridotto negativo non prova niente.
Due esempi
con , , , , in forma standard con la slack e le surplus , . Nel vertice la base è e il tableau è
| riga 0 | 0 | 0 | 0 | |||
| 0 | 0 | 1 | ||||
| 1 | 0 | 0 | ||||
| 0 | 1 | 0 |
I costi ridotti fuori base valgono : la SBA è ottima, con costo . Dalla riga di si legge , cioè ogni unità di o di alza il costo di .
Nel secondo esempio la SBA è ottima ma ha un costo ridotto negativo. con , : l'unico punto ammissibile è , quindi è ottimo. Con la base si ha , una SBA degenere, e . La direzione di base porta subito sotto zero. Un pivot con passa alla base , dove : il punto è lo stesso, e ora il test passa.
Dove si inciampa di solito
- Leggere il teorema come "ottima se e solo se ". In generale vale solo la prima implicazione; la seconda richiede che la SBA sia non degenere.
- Credere che escluda soltanto i vertici adiacenti migliori. Il conto su vale per ogni punto di , vicino o lontano.
- Pensare che un costo ridotto nullo fuori base violi la condizione. ammette gli zeri: far entrare quella variabile lascia il costo invariato.
Fonti: dispensa §2.7.1, Teorema 2.7.1.
teoremaTeorema 2.7.3 (terminazione senza degenerazione)
schema della dimostrazioneSe la regione ammissibile è non vuota e ogni soluzione ammissibile del problema è non degenere, il metodo del simplesso termina dopo un numero finito di iterazioni, con una base ottima oppure con un vettore tale che , e , e allora il valore ottimo è .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 2.7.3 (terminazione senza degenerazione)
Intuizione
Senza degenerazione ogni pivot fa un passo positivo e abbassa il costo: nessuna base può tornare, e le basi sono finite.
All'esame
Spiega i due modi in cui finisce il simplesso: riga 0 tutta , oppure una colonna entrante senza elementi positivi (problema illimitato).
Schema illustrato
1 / 4Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
- In un'iterazione entra con e . Come si calcola il passo , e di quanto cambia il costo?
- Al massimo quante basi diverse può avere una matrice di dimensione ?
Risposte
- , e il costo cambia di .
- Al più , i modi di scegliere colonne fra . Molte scelte hanno colonne dipendenti o danno , ma il limite resta finito.
Se non tornano, rileggi il Teorema 2.7.1 e come si costruisce la direzione di base .
Il problema
Il simplesso passa da una base all'altra, e a priori niente gli impedisce di tornare su una base già visitata e ripetere da lì la stessa sequenza per sempre. Il teorema dice che senza SBA degeneri questo non succede, e che il metodo si ferma in uno di due modi.
Perché nessuna base si ripete
- Se la SBA corrente è non degenere, per ogni . Ogni rapporto con è allora positivo, e così il loro minimo: .
- Il costo cambia di , un positivo per un negativo, quindi scende strettamente.
- Una base fissa la sua SBA (, ) e quindi il suo costo. Se una base ricomparisse, il costo tornerebbe a un valore già toccato, mentre i costi visitati scendono sempre. Ogni base compare al più una volta.
- Le basi sono al più , quindi le iterazioni sono finite. Con e il limite è 20.
La non degenerazione serve al passo 1. Se una variabile di base vale 0 e ha , il rapporto minimo è 0: la base cambia, il punto e il costo no. Allora il passo 3 cade, perché basi diverse possono avere lo stesso costo, e una serie di questi pivot può riportare a una base già vista.
Come finisce
Il metodo si ferma solo a uno dei due test.
- Tutti i : per il Teorema 2.7.1 la SBA è ottima. Nel tableau la riga 0 è tutta .
- Qualche , ma . La direzione con , e le altre componenti nulle ha (perché ), per costruzione e . Ogni punto con resta in : le uguaglianze tengono perché , la non negatività perché e sono . Il costo scende senza limite e il valore ottimo è . Nel tableau la colonna entrante non ha elementi positivi.
L'ipotesi serve a partire: un problema ammissibile in forma standard ha almeno una SBA da cui cominciare.
Un esempio
con , , slack . Si parte dalla base :
| riga 0 | 0 | 0 | 0 | |
| 1 | 1 | 1 |
Entra . L'unico rapporto è , quindi esce con e il costo passa da 0 a . Dopo il pivot (alla riga 0 si somma la riga di ):
| riga 0 | 1 | 0 | 1 | |
| 1 | 1 | 1 |
Ora e sotto c'è solo , così il metodo si ferma nel secondo modo. La direzione è , con e : i punti soddisfano tutti e costano . Il problema ha solo queste due SBA (con la base verrebbe ), entrambe con la variabile di base pari a 1, quindi l'ipotesi del teorema vale.
Dove si inciampa di solito
- Credere che il simplesso termini sempre. Con SBA degeneri può ciclare, e serve una regola di pivot come quella di Bland.
- Leggere "colonna senza elementi positivi" come "problema senza soluzioni". I punti ammissibili ci sono, e infiniti: è il costo a non avere un minimo.
- Mettere nel test del rapporto anche le righe con . Lungo quelle variabili restano uguali o crescono, quindi non limitano .
Fonti: dispensa §2.7.2, Teorema 2.7.3.
proposizioneCorrettezza dell'aggiornamento della riga 0
dimostrazione completaNel simplesso tabellare, dopo ogni pivot la riga 0 vale , dove è la nuova base: contiene e i costi ridotti della nuova base.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Correttezza dell'aggiornamento della riga 0
Intuizione
La riga 0 resta meno una combinazione delle righe di ; gli zeri sotto le colonne della nuova base fissano quale combinazione.
All'esame
Garantisce che nel tableau basta trattare la riga 0 come le altre righe: dopo il pivot vi si leggono subito i costi ridotti e il valore della funzione obiettivo.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Con base , che cosa contengono le righe del tableau, scritte come formule?
Risposte
Le righe da 1 a sono . La riga 0 è : il costo cambiato di segno e i costi ridotti.
Se non torna, rileggi la definizione di costo ridotto.
Il problema
Nel pivot la riga 0 viene trattata come le altre: le si somma un multiplo della riga di pivot che azzera l'elemento nella colonna entrante . Le righe da 1 a diventano per costruzione. Per la riga 0 l'operazione impone un solo zero, eppure la proposizione dice che dopo il pivot la riga è proprio .
La forma della riga 0 si conserva
Riscritta, la riga 0 è
cioè meno una combinazione lineare delle righe di . Anche la riga di pivot è una combinazione di quelle righe, , con la riga -esima di . Sommarne un multiplo alla riga 0 cambia solo i coefficienti, quindi dopo il pivot la riga 0 è per qualche vettore .
Quale
Sulla nuova riga 0 si sanno due cose.
- Nella colonna il pivot mette 0, quindi .
- Nella colonna con , una variabile che resta in base, la riga 0 aveva già 0. Nel vecchio tableau quella colonna è , e la riga di pivot vi ha 0 perché ; sommarne un multiplo lascia lo 0, cioè .
Sono le colonne di , quindi , e siccome è invertibile . Nella colonna 0, dove ha 0, resta .
Un controllo sui numeri
con , , , tutte le variabili . Nel vertice la base è . Gli zeri sulle tre colonne di base danno , , , cioè . Allora e sulle colonne , e la riga 0 è : la stessa del tableau di quella base.
Dove si inciampa di solito
- Pensare che durante il pivot qualcuno scelga . Nessuno lo calcola: lo fissano gli zeri sulle colonne di base.
- Aggiornare a parte il numero in alto a sinistra. È la colonna 0 della stessa operazione di riga.
Fonti: slide Correttezza_Aggiornamento_Riga0.
Convergenza e base iniziale
teoremaTeorema 2.7.4 (terminazione con la regola di Bland)
dimostrazione completaIl metodo del simplesso con la regola di Bland (entra la variabile di indice minimo con costo ridotto negativo, esce la variabile di indice minimo fra quelle che realizzano il rapporto minimo) termina dopo un numero finito di pivot.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 2.7.4 (terminazione con la regola di Bland)
Intuizione
Con Bland un ciclo porta a calcolare lo stesso numero in due modi con segni opposti: il ciclo non può esistere.
All'esame
Dice perché nelle tracce si usa Bland: anche con SBA degeneri il simplesso non cicla.
Dimostrazione illustrata
1 / 5Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Che cos'è un pivot degenere e perché non fa scendere il costo?
- Se è la soluzione di base associata a , che cosa misura il costo ridotto ?
Risposte
- È un pivot in cui il test del rapporto dà , perché una variabile di base che vale 0 ha l'elemento positivo nella colonna entrante. La variabile entrante resta a 0, quindi il punto e il costo restano gli stessi.
- Di quanto cambia il costo se la variabile fuori base sale di 1 e le variabili di base si aggiustano per restare in .
Se la seconda risposta non torna, conviene rivedere le condizioni di ottimalità.
Il problema
Il teorema di terminazione senza degenerazione funziona perché il costo scende a ogni pivot: nessuna base può ripresentarsi e le basi sono finite. Con i pivot degeneri il costo può restare fermo, e se una base già vista torna la regola, che è deterministica, ripete gli stessi pivot all'infinito: il simplesso cicla.
La regola di Bland sembra arbitraria: entra la variabile di indice minimo fra quelle con costo ridotto negativo, esce quella di indice minimo fra le righe che realizzano il rapporto minimo. Eppure un ciclo con questa regola porta a una contraddizione sul segno di un numero.
Il lemma che serve
Sia una soluzione di base con matrice e costi ridotti , e sia una qualunque soluzione di , anche non ammissibile. Allora
Il penultimo passaggio usa , l'ultimo il fatto che le componenti fuori base di sono nulle. I costi ridotti di una base misurano quindi lo scarto di costo fra la sua soluzione e ogni altra soluzione del sistema.
L'idea della dimostrazione
Si suppone per assurdo che il simplesso con Bland cicli. Durante il ciclo il costo non può scendere, altrimenti la base di partenza non tornerebbe; quindi ogni pivot ha e la soluzione non cambia mai. Ogni variabile che entra o esce nel ciclo è fuori base in qualche momento, perciò vale 0 per tutto il ciclo. Le righe su cui avviene un pivot ospitano solo variabili di questo tipo, quindi hanno 0 in colonna 0. Le altre righe tengono sempre la stessa variabile di base e Bland non le sceglie mai, come non sceglie mai le colonne delle variabili che non entrano. Togliendo queste righe e colonne nessuna scelta cambia, e resta un problema che cicla con la colonna 0 tutta nulla: da qui in poi si lavora su questo.
Sia l'indice più grande fra le variabili che entrano durante il ciclo. Poiché entra, prima o poi deve anche uscire. Si guardano due tableau:
- , quando sta per entrare; i suoi costi ridotti sono , con soluzione di base ;
- , quando sta per uscire ed entra ; il pivot è sulla riga di . Anche entra nel ciclo, quindi .
Che cosa dice Bland in ciascun tableau:
- in entra , quindi e per ogni ;
- in entra , quindi il suo costo ridotto è ;
- in esce : tutte le righe hanno rapporto , perché la colonna 0 è nulla, quindi pareggiano tutte quelle con . Se una variabile di base con avesse , Bland farebbe uscire lei. Quindi e per le righe con variabile di base di indice minore di .
Da si costruisce una soluzione facendo salire a 1:
La risolve : le righe di dicono , e con e le altre fuori base a 0 si ottiene proprio . Non è di base né ammissibile, ma il lemma non lo chiede. Il suo costo è quello della soluzione corrente più il costo ridotto di in , cioè , perché la soluzione corrente di ha lo stesso costo di .
Il conto del segno
Il lemma applicato a e dà
Ora si calcola la stessa somma termine per termine:
- : e , quindi il prodotto è positivo;
- : , e vale 0, 1 oppure , quindi il prodotto è ;
- : non entra mai nel ciclo; se è in base in ha , se è fuori base lo resta anche in e non è , quindi .
La somma è strettamente positiva, contro il segno trovato col lemma. Il ciclo non esiste, e poiché le basi sono finite il simplesso termina.
Un esempio
Si risolve con , , , , partendo dalle slack .
| Pivot | Entra | Rapporti | Esce | Punto, costo | |
|---|---|---|---|---|---|
| 1 | (pareggio con ) | , | |||
| 2 | , | ||||
| 3 | , |
Al primo pivot entra , con costo ridotto , anche se e hanno : conta l'indice, non il valore. Il pareggio fra e lascia in base a valore 0, e infatti il secondo pivot è degenere: la base cambia, il punto no. La riga 0 finale è , tutta non negativa: è ottimo.
Dove si inciampa di solito
- Prendere il minimo sul numero di riga invece che sull'indice della variabile di base. La regola guarda la numerazione delle variabili, fissata una volta per tutte.
- Credere che Bland eviti i pivot degeneri. Li permette, come nel secondo pivot dell'esempio; impedisce solo che una base torni.
- Mescolare i due tableau nel conto finale. I costi ridotti vengono da , mentre e il segno negativo vengono da : il lemma serve proprio a confrontare dati di due basi diverse.
Fonti: dispensa §2.7.5, Lemma 2.7.1 e Teorema 2.7.4; slide Convergenza_Simplesso_RegolaBland; slide Regola_di_Bland.
teoremaTeorema 2.7.5 (regola lessicografica)
dimostrazione completaSe nel primo tableau tutte le righe tranne la riga 0 sono lessicograficamente positive e si sceglie la variabile uscente con la regola lessicografica, allora (a) le righe restano lessicograficamente positive, (b) la riga 0 aumenta strettamente in senso lessicografico, (c) il simplesso termina dopo un numero finito di iterazioni.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 2.7.5 (regola lessicografica)
Intuizione
Rompendo i pareggi in ordine lessicografico, la riga 0 cresce a ogni pivot anche quando il costo resta fermo, quindi nessuna base si ripete.
All'esame
È l'alternativa a Bland contro i cicli: si sceglie la riga uscente confrontando in ordine lessicografico le righe divise per l'elemento della colonna entrante.
Dimostrazione illustrata
1 / 4Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Quale fra e è lessicograficamente maggiore?
- Il vettore è lessicograficamente positivo?
Risposte
- : la differenza è e la sua prima componente non nulla è positiva.
- Sì: un vettore è lessicograficamente positivo se la sua prima componente non nulla è positiva, e qui è . Il dopo non conta.
La regola
Nel test del rapporto due righe possono pareggiare: ne esce una sola, e la variabile dell'altra resta in base con valore 0, pronta a dare più avanti un pivot degenere. La regola lessicografica decide il pareggio guardando il resto della riga. Si sceglie la colonna entrante con un criterio qualunque, si prende , si divide per ogni riga con , colonna 0 compresa, ed esce la variabile della riga lessicograficamente minima.
La prima componente di una riga divisa è , quindi la riga minima ha anche il rapporto minimo: la regola sceglie sempre fra le righe che pareggiano nel test del rapporto. La scelta è anche unica, perché due righe divise uguali sarebbero due righe proporzionali di , e allora non avrebbe rango .
Perché termina
L'ipotesi è che all'inizio tutte le righe tranne la riga 0, lette con la colonna 0 in testa, siano lessicograficamente positive. La (b) si appoggia sulla (a) e la (c) sulla (b).
(a) Sia la riga di pivot. La riga viene divisa per e resta positiva. Per una riga ci sono tre casi:
- : per annullare si somma alla riga un multiplo positivo della riga , e la somma di due vettori lessicograficamente positivi è lessicograficamente positiva;
- : la riga non cambia;
- : la nuova riga è . La parentesi è lessicograficamente positiva perché la riga è stata scelta come minima e la scelta è unica; moltiplicarla per non cambia il segno.
(b) Il costo ridotto della variabile entrante è negativo e va portato a 0, quindi alla riga 0 si somma volte la riga . Il moltiplicatore è positivo e la riga è lessicograficamente positiva per la (a): la riga 0 cresce strettamente in senso lessicografico.
(c) La riga 0 è determinata dalla base: contiene nell'angolo e nel resto. Se una base tornasse, tornerebbe anche la stessa riga 0, che invece cresce strettamente a ogni pivot. Nessuna base si ripete, le basi sono al più , e il simplesso termina.
In un pivot degenere l'angolo della riga 0, che è meno il costo, resta fermo; per la (b) la riga cresce comunque in una componente successiva, ed è questo che impedisce a una base di tornare.
L'ipotesi iniziale non è restrittiva: rinominando le variabili in modo che quelle in base siano le prime , ogni riga ha in testa e, se questo è 0, il primo elemento non nullo dopo è l'1 della sua colonna di base.
Un esempio
Si risolve con , , , , partendo dalle slack . Le righe iniziali hanno 20 in colonna 0, quindi sono positive.
Entra . Le righe di e pareggiano al rapporto 10; divise per 2 diventano
Coincidono nelle prime due componenti, e alla terza : esce . La nuova riga di è , positiva grazie all'1 sotto .
Entra poi ed esce con . La riga 0 passa da a : l'angolo resta 100, ma la terza componente sale da a 0.
Dove si inciampa di solito
- Dimenticare la colonna 0 nel confronto. Senza di lei la riga scelta può non avere il rapporto minimo, e dopo il pivot qualche variabile di base diventa negativa.
- Confrontare le righe senza dividerle per . Il confronto vale solo fra righe divise.
Fonti: dispensa §2.7.5, Definizione 2.7.4 e Teorema 2.7.5; slide Convergenza_Simplesso_RegolaLessicografica.
proposizioneEsito della Fase I (metodo delle due fasi)
dimostrazione completaSia la soluzione ottima del problema ausiliario con , e . Se il problema originario non è ammissibile; se , è una soluzione ammissibile di base del problema originario, e le artificiali rimaste in base a valore nullo si fanno uscire con un pivot su un elemento non nullo della loro riga, oppure si cancella la riga se è tutta nulla sotto le variabili originali.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Esito della Fase I (metodo delle due fasi)
Intuizione
Le artificiali danno una base di partenza; minimizzare la loro somma dice se il problema vero ha soluzioni e, se sì, consegna una SBA per la Fase II.
All'esame
Serve quando la traccia chiede le due fasi o non c'è una base pronta: si legge l'angolo della riga 0 alla fine della Fase I e si decide se il problema è ammissibile.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Perché nel problema ausiliario si chiede ?
- Che cosa si legge nell'angolo della riga 0 di un tableau?
Risposte
- Perché la soluzione di partenza è , , con le artificiali in base, ed è ammissibile solo se . Le righe con si moltiplicano prima per .
- Meno il valore della funzione obiettivo nella soluzione corrente: nella Fase I è , con .
Il problema
Il simplesso parte da una soluzione ammissibile di base, e non sempre ce n'è una pronta. Le artificiali ne forniscono una a costo di cambiare il problema: una soluzione con qualche non rispetta . La Fase I cerca di portarle tutte a zero minimizzando . Le artificiali si aggiungono solo alle righe che non hanno già una slack pronta, quindi la somma corre su quelle righe.
Per la riga 0 iniziale si parte dall'obiettivo, che ha coefficiente 1 sotto ogni artificiale e 0 altrove, ma le artificiali sono in base e i loro costi ridotti devono valere 0. Sottraendo all'obiettivo ogni riga che contiene un'artificiale si azzerano quei costi: la riga 0 è meno la somma delle righe con un'artificiale, con 0 sotto le artificiali e nell'angolo.
Il problema ausiliario ha sempre un ottimo: è ammissibile e , quindi non è illimitato, e con la regola di Bland il simplesso termina. Il teorema dice come leggere quell'ottimo .
I due esiti
vuol dire problema non ammissibile. Se esistesse con , la coppia sarebbe ammissibile per l'ausiliario con . Siccome non è mai negativo, il minimo varrebbe 0, contro . Sul tableau finale lo si vede dall'angolo, che vale .
vuol dire che e , quindi è ammissibile per il problema originario. Resta da vedere che è di base, cioè che c'è una base fatta solo di colonne di che lo produce.
- Se nessuna artificiale è in base, la base finale è già fatta di colonne di : si cancellano le colonne delle artificiali e si passa alla Fase II.
- Se un'artificiale è ancora in base, nella sua riga vale 0. Si guardano gli elementi della riga sotto le variabili vere.
Nel secondo caso, se c'è un elemento non nullo sotto , si fa pivot lì, anche se è negativo. Il test del rapporto non serve: la riga ha 0 in colonna 0, dividerla per l'elemento di pivot lascia 0, e alle altre righe si sottrae un multiplo di una riga che ha 0 in colonna 0. La colonna 0 non cambia, quindi la soluzione resta e resta ammissibile, ma in base c'è un'artificiale in meno. L'elemento di pivot è non nullo, quindi le nuove colonne di base sono ancora indipendenti.
Se invece la riga è tutta nulla sotto le variabili vere, quella riga dice che una combinazione delle righe di è nulla: il vincolo è ridondante e la riga si cancella. Con di rango questo caso non capita. Ripetendo una delle due mosse per ogni artificiale rimasta, resta una base fatta di colonne di con soluzione .
Un esempio
Con i vincoli e , , nessuna riga è pronta: servono e . Colonne nell'ordine , colonna 0 in testa.
| colonna 0 | |||||
|---|---|---|---|---|---|
| riga 0 | |||||
Per Bland entra . I rapporti sono e , pareggio, ed esce , di indice minore. Dopo il pivot:
| colonna 0 | |||||
|---|---|---|---|---|---|
| riga 0 | |||||
Nessun costo ridotto è negativo e l'angolo è 0: . Però è ancora in base, e la sua riga è nulla sotto e : il secondo vincolo è il doppio del primo. Si cancella la riga, poi le colonne delle artificiali, e la Fase II parte da con base .
Dove si inciampa di solito
- Scrivere la riga 0 con 1 sotto le artificiali e dimenticare di sottrarre le loro righe. Così i costi ridotti delle variabili in base non sono nulli e il tableau non è in forma canonica.
- Concludere che il problema è inammissibile perché un'artificiale è ancora in base alla fine. Conta il valore di : se è 0, l'artificiale vale 0 e si toglie.
- Guardare tutta la riga dell'artificiale per decidere se è nulla. Contano solo le colonne delle variabili vere: sotto le artificiali possono esserci numeri non nulli, come il dell'esempio.
Fonti: dispensa §2.7.6 e Figura 2.14.
Programmazione lineare intera
proposizioneRilassamento continuo e criterio di bounding
dimostrazione completaSia (PLI) con e sia (PLI-c) il suo rilassamento continuo. Se anche ; se entrambi hanno ottimo, (lower bound; in un problema di massimo la disuguaglianza si rovescia); se un ottimo del rilassamento è intero, è ottimo anche per la PLI; se la PLI è illimitata, lo è anche il rilassamento. Nel Branch & Bound per un minimo, se l'ottimo del rilassamento del nodo soddisfa , nessuna soluzione intera del sottoalbero di migliora e il nodo si chiude (criterio di bounding).
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Rilassamento continuo e criterio di bounding
Intuizione
Tutto viene da : il minimo su un insieme più grande non può essere più alto. Il valore del rilassamento è quindi una soglia sotto la quale nessuna soluzione intera scende.
All'esame
Giustifica le tre chiusure di un nodo nel Branch & Bound (rilassamento vuoto, ottimo intero, bound non migliore di ) e il verso giusto del confronto: nel minimo, nel massimo.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Se e è una funzione definita su , come si confrontano e ?
Risposte
. Il punto che realizza il minimo su sta anche in , quindi su si può fare almeno altrettanto bene. Nel massimo vale il contrario: .
Se non torna, rileggi la definizione di problema di ottimo e di regione ammissibile.
Il problema
Una PLI chiede il minimo di sui punti interi del poliedro , cioè su . Il simplesso lavora su e si ferma in un vertice, che in genere non è intero. Togliendo l'interezza si ottiene il rilassamento continuo, che il simplesso risolve. La proposizione elenca che cosa il rilassamento dice del problema intero.
L'idea
Ogni punto intero di è un punto di , e tutti i fatti dell'enunciato vengono da questa inclusione .
- Se , non ci sono punti di cui prendere quelli interi: .
- Il minimo su è preso su un insieme più grande, quindi . È la domanda di controllo con e .
- Se l'ottimo del rilassamento è intero, sta in e vale . Nessun punto di scende sotto quel valore, quindi è ottimo anche per la PLI.
- Se la PLI è illimitata, ci sono punti di con costo basso quanto si vuole. Sono punti di , quindi anche il rilassamento è illimitato.
Le implicazioni inverse sono false: il rilassamento può avere un ottimo, o essere illimitato, mentre è vuoto. Con non esiste un intero, qualunque siano gli altri vincoli.
Un esempio
con , intero. I vertici del rilassamento sono , con valore 39 e con valore , quindi l'ottimo continuo è 39. In un massimo il rilassamento dà un upper bound. Fra i punti interi, con si arriva a e al valore 33; con resta , cioè , e il valore 32. L'ottimo intero è con 33, sotto 39. Arrotondare a porta fuori da , perché ; arrotondarlo a dà solo 21.
Il criterio di bounding
Nel Branch & Bound il nodo ha la regione intera , cioè con in più i vincoli di branching del cammino dalla radice, e il rilassamento . La stessa disuguaglianza vale per il nodo: ogni soluzione intera che si troverebbe ramificando da sta in , quindi costa almeno . Sia il valore della migliore soluzione intera già trovata. Se , nel sottoalbero di nessuna soluzione fa meglio, e il nodo si chiude senza generare figli. Con l'uguaglianza si chiude lo stesso, perché al più si troverebbe una soluzione che vale quanto quella già in mano.
Gli altri due modi di chiudere un nodo sono il primo e il terzo fatto applicati a : se il rilassamento è vuoto anche lo è, e se il suo ottimo è intero il nodo è risolto.
Dove si inciampa di solito
- Sbagliare il verso nel massimo. Lì il rilassamento è un upper bound e il nodo si chiude quando ; il valore iniziale di è , mentre nel minimo è .
- Lasciare aperto un nodo con bound uguale a .
- Controllare il bounding solo quando il nodo nasce. Quando migliora vanno ricontrollati i nodi ancora attivi: uno che prima andava ramificato può ora chiudersi.
- Arrotondare l'ottimo continuo e prenderlo per l'ottimo intero.
Fonti: dispensa §3.2 e §3.2.1; dispensa §3.4.1, criterio di bounding.
teoremaTeorema 3.2.1 (matrice unimodulare, vertici interi)
dimostrazione completaSia unimodulare, cioè ogni sua sottomatrice quadrata di ordine ha determinante in , e sia . Allora il poliedro ha solo vertici interi. Quindi, se il rilassamento continuo ha ottimo, il simplesso ne trova uno intero, che è ottimo anche per la PLI.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 3.2.1 (matrice unimodulare, vertici interi)
Intuizione
Un vertice è , e nell'inversa di una matrice intera l'unico denominatore è . Se non resta nessuna frazione.
All'esame
Si verifica calcolando il determinante di tutte le sottomatrici di ordine (le candidate basi): se valgono tutte , o e è intero, basta risolvere il rilassamento con il simplesso.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Come si scrive algebricamente un vertice di ? E come si ottiene l'inversa di una matrice ?
Risposte
Un vertice è una soluzione di base ammissibile: scelta una base (cioè colonne linearmente indipendenti di ), e . Per vale .
Se non torna, rileggi l'equivalenza fra vertice, punto estremo e soluzione di base ammissibile.
Il problema
Il simplesso si ferma in un vertice, che in genere ha coordinate frazionarie anche quando e sono interi. Se tutti i vertici di fossero interi, l'ottimo trovato dal simplesso sul rilassamento continuo sarebbe intero, e un ottimo intero del rilassamento è ottimo anche per la PLI. Il teorema dà una condizione su che garantisce vertici interi.
L'idea
Ogni vertice è , per qualche base . Con intero basta che sia intera, perché prodotti e somme di interi sono interi. L'inversa si scrive con i cofattori:
dove è senza la riga e la colonna . Il determinante di una matrice intera è una somma di prodotti dei suoi elementi, quindi è intero: tutti gli lo sono. Le frazioni possono nascere solo dalla divisione per .
è unimodulare se ogni sua sottomatrice quadrata di ordine ha determinante , o . Lo 0 è ammesso perché fra le scelte di colonne ci sono anche quelle dipendenti, che non sono basi. Una base invece è invertibile, quindi e resta . Allora è intera, è intero, e ogni vertice di è intero.
Le basi sono matrici perché, come in forma standard, le righe di sono linearmente indipendenti; una riga che è combinazione delle altre va tolta prima.
Un esempio
Con si confrontano
| Colonne | in | soluzione con | in | soluzione con |
|---|---|---|---|---|
| 1 e 2 | 1 | 2 | ||
| 1 e 3 | 1 | 2 | ||
| 2 e 3 | 1 | , non ammissibile | 1 | , non ammissibile |
è unimodulare e ha due vertici, entrambi interi. non lo è: la base delle colonne 1 e 2 è , con , e : il denominatore 2 è proprio .
Dove si inciampa di solito
- Pensare che la condizione sia necessaria. È solo sufficiente: con e un adatto, per esempio in , il vertice è intero lo stesso.
- Dimenticare che serve anche intero. Con e i vertici sono frazionari.
- Controllare solo le basi ammissibili. La definizione chiede tutte le sottomatrici di ordine , perché cambiando cambiano le basi ammissibili.
- Confondere unimodulare con totalmente unimodulare, che chiede determinante in per le sottomatrici quadrate di ogni ordine.
Fonti: dispensa §3.2.2, Definizione 3.2.1 e Teorema 3.2.1.
teoremaTeorema 3.2.3 e Corollario 3.2.1 (trasporto)
dimostrazione completaLa matrice dei vincoli del problema del trasporto, cioè la matrice di incidenza nodo-arco del grafo bipartito , è totalmente unimodulare: ogni sua sottomatrice quadrata, di qualunque ordine, ha determinante , o . Di conseguenza, se le offerte e le domande sono intere, ogni soluzione di base del trasporto è intera, e il simplesso applicato al rilassamento continuo restituisce un piano di spedizione ottimo intero.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 3.2.3 e Corollario 3.2.1 (trasporto)
Intuizione
Ogni colonna ha due 1, uno fra le righe dei fornitori e uno fra quelle dei clienti. Una sottomatrice quadrata o ha righe dipendenti, o ha una colonna con un solo 1 lungo cui si sviluppa il determinante, e si scende di ordine fino a un numero che vale 0 o 1.
All'esame
Giustifica perché nel trasporto e nell'assegnamento non serve imporre l'interezza: con offerte e domande intere il simplesso sul rilassamento si ferma in una soluzione di base, che è intera.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Come si calcola un determinante sviluppandolo lungo una colonna? E che cosa vale il determinante di una matrice con righe linearmente dipendenti?
Risposte
Lungo la colonna : , con la matrice senza riga e colonna . Se la colonna ha un solo elemento non nullo, la somma ha un solo termine. Con righe dipendenti il determinante vale 0.
Se non torna, rileggi il Teorema 3.2.1 sulla matrice unimodulare: qui se ne usa la conclusione.
Il problema
Nel trasporto ci sono fornitori con offerte , clienti con domande e una variabile per ogni coppia. I vincoli sono per ogni fornitore e per ogni cliente. Le quantità spedite dovrebbero essere intere, ma il modello chiede solo . Il teorema garantisce che il simplesso restituisce comunque un piano intero, purché offerte e domande siano intere.
Com'è fatta la matrice
C'è una riga per nodo e una colonna per variabile. La colonna di ha un 1 nella riga del fornitore , un 1 in quella del cliente , e zeri altrove: è la matrice di incidenza del grafo bipartito . Con , colonne :
f11 f12 f21 f22
fornit. 1 1 1 0 0
fornit. 2 0 0 1 1
cliente 1 1 0 1 0
cliente 2 0 1 0 1
L'idea
Si prende una sottomatrice quadrata di ordine , con righe e colonne qualsiasi. Ogni sua colonna è un pezzo di una colonna di , quindi contiene al più due 1: al più uno fra le righe dei fornitori e al più uno fra quelle dei clienti. Sono possibili tre casi.
- Una colonna è tutta nulla: .
- Ogni colonna ha due 1. Sommando le righe dei fornitori si ottiene un 1 in ogni colonna, e lo stesso sommando quelle dei clienti. Le due somme sono uguali, quindi le righe sono dipendenti e .
- Nessuna colonna è nulla, ma almeno una ha un solo 1. Sviluppando lungo quella colonna resta un termine solo: , dove è ancora una sottomatrice di .
Su si rifà lo stesso esame. A ogni passo ci si ferma con determinante 0 oppure si scende di un ordine cambiando al più il segno; all'ordine 1 resta un solo elemento, che vale 0 o 1. Il determinante di partenza è quindi oppure .
Sulla matrice dell'esempio: righe fornitore 1, fornitore 2, cliente 1 e colonne danno
La colonna di ha un solo 1, in posizione . Lo sviluppo dà . La matrice intera cade invece nel secondo caso: fornitore 1 più fornitore 2 dà , come cliente 1 più cliente 2, e il determinante è 0.
Dalla matrice al piano intero
Totalmente unimodulare vuol dire determinante in per le sottomatrici quadrate di ogni ordine, quindi in particolare per quelle di ordine pari al numero di righe: la matrice è anche unimodulare. Le righe però non sono indipendenti, per il secondo caso applicato a tutta : una è ridondante e si toglie. La matrice che resta è ancora totalmente unimodulare, perché le sue sottomatrici sono sottomatrici di . Con offerte e domande intere il Teorema 3.2.1 dice allora che ogni soluzione di base è intera.
Per il Teorema 3.2.2 un'istanza bilanciata, con , ha un ottimo finito. Il simplesso lo trova in una soluzione di base, e quella è intera.
Dove si inciampa di solito
- Dire che ogni soluzione ammissibile è intera. Lo sono quelle di base. Con e il punto rispetta tutti i vincoli.
- Dimenticare il bilanciamento. Se l'offerta supera la domanda si aggiunge un cliente fittizio, se è minore un fornitore fittizio, con costi di solito nulli.
- Nel terzo caso, sviluppare lungo una colonna con due 1. Restano due termini con segni da controllare, e il determinante non si riduce a quello di una sola matrice più piccola.
Fonti: dispensa §3.2.2, Esempio 3.2.2, Teorema 3.2.2, Definizione 3.2.2, Teorema 3.2.3 e Corollario 3.2.1.
proposizioneValidità del taglio di Gomory
dimostrazione completaSia l'ottimo del rilassamento continuo letto sul tableau ottimo, e sia la riga in cui è in base, con l'insieme degli indici fuori base e frazionario. Se tutte le variabili, slack comprese, devono essere intere, il vincolo è un taglio: lo soddisfano tutte le soluzioni intere e lo viola .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Validità del taglio di Gomory
Intuizione
Arrotondare per difetto i coefficienti abbassa il membro di sinistra perché le variabili sono ; nei punti interi quel membro è un intero, quindi sta sotto anche a . In invece vale , che supera la sua parte intera.
All'esame
Si sceglie una riga del tableau ottimo con termine noto frazionario, si arrotondano verso il basso coefficienti e termine noto (anche i negativi: ), e per disegnare il taglio si sostituiscono le slack con le variabili originali.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Quanto valgono , e ? E che cosa dice, come equazione, una riga del tableau ottimo?
Risposte
, , : la parte intera inferiore è il più grande intero che non supera il numero, anche per i negativi. La riga in cui è in base dice , con gli indici fuori base. È una combinazione dei vincoli, quindi vale per ogni soluzione ammissibile, non solo per .
Se non torna, rileggi come si legge una soluzione di base sul tableau.
Il problema
Un taglio per è un vincolo che tutti i punti interi di rispettano e che viola. Aggiunto al rilassamento, toglie senza perdere soluzioni intere, e il rilassamento si risolve di nuovo. Il taglio di Gomory si ricava direttamente dal tableau ottimo.
L'idea
Si sceglie una riga del tableau ottimo con termine noto frazionario: la variabile in base vale in , quindi è una componente frazionaria. La riga è
Si arrotonda due volte, e ogni arrotondamento usa un'ipotesi diversa.
Per i coefficienti serve : da e segue . Sommando, per ogni punto ammissibile
Per il termine noto serve l'interezza. In un punto intero il membro di sinistra è una somma di interi per interi, quindi è un intero. Un intero che non supera non supera nemmeno . Così ogni punto intero soddisfa
Qui servono intere anche le slack, perché fra le fuori base ci sono anche loro. Lo sono se i vincoli hanno coefficienti e termini noti interi: per questo, prima di aggiungere le slack, si moltiplica ogni vincolo per il minimo comune multiplo dei denominatori. Con e la slack varrebbe ; scritto , vale 1.
Resta da vedere che viola il taglio. In le variabili fuori base valgono 0, quindi il membro di sinistra è . Siccome è frazionario, . Con intero l'arrotondamento non cambierebbe niente e resterebbe ammissibile.
Un esempio
con e . Il tableau ottimo dà e la riga di è . Arrotondando, : il taglio , che viola.
Dopo il taglio, con la nuova slack , il simplesso arriva a e la riga di è . Ora c'è un coefficiente negativo: , e il taglio è . Per disegnarlo si sostituisce : viene . I punti interi ammissibili sono , , e , e lo rispettano tutti; no. Sul rilassamento successivo il simplesso arriva a , intero.
Dove si inciampa di solito
- Arrotondare a 0. Nel secondo taglio darebbe , che toglie l'ottimo intero .
- Lasciare il taglio scritto con le slack e cercare di disegnarlo così.
- Dimenticare che il taglio aggiunto richiede una sua slack, intera anche lei.
Fonti: dispensa §3.3, Definizione 3.3.1; dispensa §3.3.1, disuguaglianza (3.3) ed Esempio 3.3.1.
Zaino e programmazione dinamica
proposizioneOttimalità del greedy per lo zaino frazionario
schema della dimostrazioneSiano gli oggetti rinumerati in modo che , con e per ogni , e sia l'oggetto critico, cioè quello per cui . La soluzione , , è ottima per lo zaino frazionario . L'algoritmo greedy che la costruisce richiede tempo .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Ottimalità del greedy per lo zaino frazionario
Intuizione
Ogni chilo di capacità va all'oggetto che rende di più per chilo: qualunque altra soluzione sposta capacità verso oggetti con rapporto più basso, e ci perde.
All'esame
Giustifica il primo punto dell'esercizio sullo zaino: si ordina per , si carica fino all'oggetto critico e se ne prende la frazione che entra. Lo stesso calcolo dà il bound di ogni nodo nel Branch & Bound per lo zaino 0/1.
Schema illustrato
1 / 4Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Il problema
Nello zaino frazionario ogni oggetto si può caricare anche in parte: è la frazione presa, e porta di profitto per chili. Il greedy ordina gli oggetti per profitto al chilo , li carica interi finché entrano e del primo che non entra, l'oggetto critico , prende la frazione che riempie lo zaino:
Per lo zaino 0/1 la stessa regola sbaglia, quindi che dia l'ottimo nella versione frazionaria va dimostrato. Con e oggetti (peso, profitto) , , , i rapporti sono 6, 5 e 4: il greedy prende i primi due, 3 chili e profitto 16, e il terzo non entra più. Gli oggetti 2 e 3 insieme pesano 5 e valgono 22. Nella versione frazionaria invece il greedy prende anche del terzo oggetto e arriva a , che è l'ottimo frazionario.
L'idea
Chiama il rendimento dell'oggetto critico. Gli oggetti prima di rendono almeno al chilo e il greedy li ha presi interi; quelli dopo rendono al più e il greedy li ha lasciati fuori. Una soluzione diversa può solo prendere meno dei primi () o più degli ultimi (), cioè spostare chili da oggetti che rendono più di a oggetti che rendono meno.
Per renderlo un conto si scrive e si confronta termine a termine:
- per vale e , quindi ;
- per vale e : moltiplicare un numero negativo per un rapporto più piccolo dà un numero più grande, e la stessa disuguaglianza regge;
- per è un'uguaglianza.
Sommando,
L'uguaglianza dice che il greedy riempie lo zaino, e lo fa grazie all'ipotesi : senza, l'oggetto critico non esisterebbe e si caricherebbe tutto. L'ultimo viene dall'ammissibilità di .
Il tempo è quello dell'ordinamento, ; il caricamento è una scansione in .
Un esempio
e quattro oggetti (peso, profitto): , , , . I rapporti sono circa , , e , quindi l'ordine è 2, 3, 1, 4. Entrano interi 2, 3 e 1: 6 chili, profitto 9. Restano 3 chili e l'oggetto 4 ne pesa 7, quindi è critico e ne entrano , con profitto . Risultato con .
Qui . Togliere un chilo dell'oggetto 1, che rende al chilo, per caricare un altro chilo dell'oggetto 4, che rende , fa scendere il profitto di .
Dove si inciampa di solito
- Ordinare per profitto invece che per . Un oggetto che vale molto può pesare abbastanza da rendere poco al chilo: nell'esempio il profitto più alto è dell'oggetto 1, ma rende di più al chilo il 2.
- Fermarsi al primo oggetto che non entra senza prenderne la frazione. Si ottiene una soluzione 0/1, che in generale non è l'ottimo frazionario e lascia lo zaino non pieno.
- Prendere come valore dello zaino 0/1 sugli stessi dati. Il valore frazionario ne è solo un limite superiore: nell'esempio l'ottimo 0/1 è con profitto .
Fonti: dispensa §3.4.5, Figura 3.27; appunti, Es. 5.2.1.
proposizioneRicorrenza della programmazione dinamica per lo zaino 0/1
schema della dimostrazionePer e sia il massimo profitto con i soli oggetti e capacità . Lo zaino 0/1 ha sottostruttura ottima, e valgono e, per , se , se . Il valore ottimo è , e una soluzione ottima si ricostruisce risalendo da : se , altrimenti e si passa a .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Ricorrenza della programmazione dinamica per lo zaino 0/1
Intuizione
In una soluzione ottima l'oggetto o resta fuori o entra; in entrambi i casi gli altri oggetti formano una soluzione ottima di uno zaino più piccolo, che la tabella ha già calcolato.
All'esame
È la regola con cui si riempie la tabella della PD casella per casella: si confrontano la casella sopra e quella sopra spostata di colonne più . Poi si ricostruisce la soluzione dall'ultima casella.
Schema illustrato
1 / 4Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Il problema
Nello zaino 0/1 ogni oggetto entra intero o resta fuori. Il greedy per rapporto qui non basta, e provare tutti i sottoinsiemi è troppo. La programmazione dinamica risolve una famiglia di zaini più piccoli, dal più semplice in su, e ricava ciascuno dai precedenti con una regola fissa, la ricorrenza.
I sottoproblemi sono
il miglior profitto usando solo i primi oggetti in uno zaino di capacità . Due indici perché un oggetto che entra consuma capacità: per decidere sull'oggetto serve sapere quanto si può fare con gli altri sia a capacità piena sia a capacità ridotta. Il problema vero è .
L'idea: l'oggetto entra o resta fuori
Prendi una soluzione ottima del sottoproblema e guarda solo l'oggetto .
- . I primi oggetti di pesano al più , quindi sono ammissibili per e valgono al più .
- , possibile solo se . L'oggetto porta e occupa chili; gli altri pesano al più , quindi valgono al più .
In entrambi i casi la parte di sui primi oggetti è ottima per il suo zaino più piccolo, perché sostituendola con una migliore si migliorerebbe . È la proprietà che si chiama sottostruttura ottima.
Ne viene che non supera il massimo fra le due opzioni. Non è nemmeno più piccolo, perché entrambe si realizzano: una soluzione ottima di con è ammissibile per , e lo è anche una soluzione ottima di con , che pesa al più . Quindi
La condizione iniziale è : senza oggetti il profitto è zero per ogni capacità. Ogni casella dipende solo dalla riga sopra, quindi si riempie la tabella riga per riga, da a .
La soluzione, oltre al valore, si legge all'indietro. Partendo da : se l'oggetto si può lasciare fuori e ; altrimenti l'oggetto è entrato, e si passa alla colonna . Quando i due valori sono uguali tutte e due le scelte sono ottime, e la regola sceglie di lasciare fuori.
Un esempio
e tre oggetti (peso, profitto): , , .
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 6 | 6 | 6 | 6 | 6 |
| 2 | 0 | 6 | 10 | 16 | 16 | 16 |
| 3 | 0 | 6 | 10 | 16 | 18 | 22 |
Per esempio : con 3 chili conviene prendere l'oggetto 2 e lasciare 1 chilo all'oggetto 1. . . Nella riga 3 le colonne 0, 1, 2 copiano la riga sopra perché l'oggetto 3 pesa 3.
Ricostruzione: , quindi e si va alla colonna . , quindi e colonna 0. , quindi . Risultato , peso 5, profitto 22.
Dove si inciampa di solito
- Usare , con l'indice invece di . Così l'oggetto può entrare più volte, e si risolve un altro problema.
- Ricostruire la soluzione andando avanti dalla prima riga. Le scelte si leggono solo all'indietro, da , perché la capacità lasciata agli oggetti dipende dalle scelte sugli oggetti che vengono dopo, e la si conosce solo partendo da .
- Dimenticare la riga . Senza di essa la prima riga di oggetti non ha da dove copiare.
Fonti: dispensa §3.5 e §3.5.1, Figura 3.31, Esempio 3.5.1; appunti, Es. 5.2.1.
proposizioneComplessità pseudopolinomiale della PD per lo zaino 0/1
dimostrazione completaL'algoritmo di programmazione dinamica per lo zaino 0/1 basato su richiede tempo . Il tempo è polinomiale nel valore di ma non nella lunghezza dell'input, in cui occupa circa bit: l'algoritmo è pseudopolinomiale, e la sua esistenza non contraddice il fatto che lo zaino 0/1 sia NP-arduo.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Complessità pseudopolinomiale della PD per lo zaino 0/1
Intuizione
La tabella ha una colonna per ogni valore da 0 a , e cresce esponenzialmente con il numero di cifre usate per scriverlo: un bit in più raddoppia il lavoro.
All'esame
Serve nelle domande di teoria su che cosa vuol dire pseudopolinomiale e sul confronto fra metodi: con piccolo conviene la PD, con molto grande il Branch & Bound.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Quanti bit servono per scrivere in binario il numero 5000?
- Che cosa vuol dire che un problema è NP-arduo?
Risposte
- 13, perché . In generale un intero occupa circa bit.
- Che non si conosce un algoritmo che lo risolva in tempo polinomiale nella lunghezza dell'input, e che trovarne uno darebbe un algoritmo polinomiale per tutti i problemi di . Si congettura che , cioè che un tale algoritmo non esista.
Se le risposte non tornano, rileggi la definizione di algoritmo polinomiale: il tempo è limitato da un polinomio nella dimensione dell'input.
Il conto
L'algoritmo riempie la tabella dei valori , con da 0 a e da 0 a : sono caselle. Ogni casella costa un tempo costante, perché la ricorrenza legge al più due caselle della riga sopra, fa una somma e un confronto. La ricostruzione della soluzione sale di una riga per passo, quindi fa passi. Il totale è .
Perché non è polinomiale
sembra un polinomio, ma è un valore dell'input e non la sua lunghezza. Chi scrive l'istanza scrive pesi, profitti e in binario, e per usa circa bit. Rispetto a quei bit il numero di colonne è
esponenziale: ogni bit aggiunto a raddoppia la larghezza della tabella, mentre l'input cresce di un solo bit. Un tempo polinomiale nel valore dei numeri ma non nella loro lunghezza si chiama pseudopolinomiale.
Un esempio
e oggetti (peso, profitto) , , : la tabella ha caselle e l'ottimo è con profitto 22.
Moltiplica per 1000 tutti i pesi e la capacità: , pesi 1000, 2000, 3000. Le soluzioni ammissibili non cambiano, e l'ottimo resta con profitto 22. L'input si allunga di una decina di bit per ogni peso (5 si scrive con 3 bit, 5000 con 13), ma la tabella passa a caselle. Per il Branch & Bound invece non cambia niente: il bound si calcola con il greedy sui rapporti , che sono tutti divisi per 1000 e restano nello stesso ordine, quindi l'albero è identico.
Perché non contraddice la NP-arduità
Lo zaino 0/1 è NP-arduo, quindi non ci si aspetta un algoritmo polinomiale nella lunghezza dell'input. La PD non lo è: con dell'ordine di ogni numero si scrive con circa bit, l'input ne ha circa e la tabella ha circa caselle, un numero esponenziale. È veloce solo sulle istanze in cui è piccolo, per esempio limitato da un polinomio in . Su quella famiglia di istanze il problema si risolve in tempo polinomiale, e la NP-arduità non lo esclude, perché riguarda il caso con numeri arbitrari.
Per questo con piccolo conviene la PD e con molto grande il Branch & Bound.
Dove si inciampa di solito
- Pensare che il tempo dimostri che lo zaino è difficile. Un algoritmo lento è solo coerente con la NP-arduità; per dimostrarla serve una riduzione da un problema già noto come NP-arduo.
- Credere che pseudopolinomiale voglia dire "quasi polinomiale" in ogni caso. Con e cento oggetti la tabella ha circa caselle, anche se l'istanza si scrive con poche migliaia di bit.
Fonti: dispensa §3.5.1, Figura 3.31; appunti, §7.
Grafi, alberi e cammini
teoremaTeorema 4.2.1 (garanzia di 2-approx-vc)
dimostrazione completaSia un grafo non orientato e sia un vertex cover di cardinalità minima. L'algoritmo 2-approx-vc, che finché restano archi scoperti ne sceglie uno, , mette in entrambi gli estremi e toglie tutti gli archi incidenti in o in , restituisce in tempo un vertex cover con .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 4.2.1 (garanzia di 2-approx-vc)
Intuizione
Gli archi scelti non hanno estremi in comune, quindi qualunque vertex cover, anche l'ottimo, prende almeno un nodo diverso per ciascuno; l'algoritmo ne prende due.
All'esame
Si scrive quando si chiede quanto è buono 2-approx-vc: con l'insieme degli archi scelti, e . La garanzia vale per il vertex cover non pesato.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Nel grafo con archi , , , , , , , l'insieme è un vertex cover?
Risposte
No. Un vertex cover deve toccare ogni arco con almeno un estremo, e l'arco non tocca né 2 né 4. Aggiungendo 5 si ottiene , che li copre tutti.
Se non torna, rileggi la definizione di vertex cover e il suo modello con per ogni arco.
Il problema
Trovare un vertex cover con il minimo numero di nodi è un problema difficile: non si conosce un algoritmo polinomiale che dia . Il teorema dice che un algoritmo molto semplice, in tempo , trova un vertex cover grande al più il doppio dell'ottimo. Resta da capire come si confronta con senza conoscere .
L'idea
L'algoritmo tiene l'insieme degli archi ancora scoperti. Finché non è vuoto ne sceglie uno qualsiasi, , mette in sia sia e toglie da tutti gli archi che toccano o , perché ora sono coperti. Si ferma quando è vuoto, cioè quando ogni arco ha un estremo in : per questo è un vertex cover.
Per il confronto si guarda l'insieme degli archi scelti. Ogni scelta aggiunge due nodi nuovi (gli estremi di un arco scoperto non stanno ancora in , se no l'arco sarebbe coperto), quindi
Gli archi di non hanno estremi in comune: scelto , ogni altro arco che tocca o esce da e non può più essere scelto. Ora si prende un vertex cover qualsiasi, anche quello ottimo. Deve coprire ogni arco di , quindi contiene almeno un estremo di ciascuno, e siccome gli archi di non condividono nodi questi estremi sono tutti diversi. Dunque
e mettendo insieme le due relazioni . La seconda relazione vale per ogni vertex cover, quindi non serve sapere quale sia l'ottimo: basta contare gli archi di , che l'algoritmo conosce.
Il costo viene dal fatto che ogni arco esce da una volta sola.
Un esempio
Sul grafo della domanda iniziale si sceglie prima : e spariscono gli archi , , , , , . Resta , che si sceglie: , con .
L'ottimo ha 3 nodi. Il triangolo ne vuole almeno due, e ogni coppia lascia scoperto un arco: lascia , lascia , lascia . invece basta. Quindi e .
Il fattore 2 non si può migliorare con questa analisi: su un grafo con un solo arco l'algoritmo prende due nodi e all'ottimo ne basta uno.
Dove si inciampa di solito
- Togliere da solo l'arco scelto. Allora un arco scelto dopo potrebbe toccare o , gli archi di non sarebbero più disgiunti e la disuguaglianza cadrebbe.
- Usare la garanzia per il vertex cover pesato. L'algoritmo ignora i pesi: con il solo arco , e , prende peso 101 contro un ottimo di 1.
Fonti: dispensa §4.2.2, Teorema 4.2.1 e Figura 4.7.
teoremaTeorema 4.3.1 (MST e tagli) e correttezza di Kruskal
dimostrazione completaSia connesso, con costi tutti diversi, e sia un albero di copertura minimo. Per ogni arco vale se e solo se esiste , , tale che è l'arco di costo minimo del taglio . Di conseguenza l'algoritmo di Kruskal, che esamina gli archi per costo non decrescente e prende quelli che collegano due componenti diverse, restituisce un albero di copertura minimo; con costi uguali resta corretto e trova uno degli alberi ottimi.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 4.3.1 (MST e tagli) e correttezza di Kruskal
Intuizione
Se l'arco più economico di un taglio restasse fuori dall'albero, aggiungerlo chiuderebbe un ciclo che attraversa il taglio anche con un arco più caro, e scambiandoli l'albero costerebbe meno. Kruskal prende ogni volta l'arco più economico del taglio attorno a una componente.
All'esame
Giustifica perché Kruskal trova l'ottimo: ogni arco preso è il più economico del taglio attorno alla componente di uno dei suoi estremi, e quelli scartati, con , chiuderebbero un ciclo.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
A un albero di copertura si aggiunge un arco che non ne fa parte, e poi si toglie un altro arco del ciclo che si è formato. Che cosa si ottiene?
Risposte
Un altro albero di copertura. Aggiungendo un arco a un albero si chiude esattamente un ciclo; togliendo un arco di quel ciclo i suoi estremi restano collegati dal resto del ciclo, quindi il grafo resta connesso, e gli archi tornano .
Se non torna, rileggi le proprietà degli alberi: connesso con archi, un solo cammino fra due nodi, un ciclo per ogni arco aggiunto.
Il problema
Il modello di PLI dell'albero di copertura minimo ha un vincolo contro i cicli per ogni sottoinsieme di nodi, cioè vincoli. Eppure Kruskal lo risolve prendendo gli archi in ordine di costo, senza mai tornare su una scelta. Il Teorema 4.3.1 spiega perché basta: riconosce gli archi dell'albero ottimo guardando un taglio alla volta.
Il taglio di un insieme di nodi, non vuoto e diverso da , è
l'insieme degli archi che attraversano il confine di . Il teorema suppone il grafo connesso, se no un albero di copertura non esiste, e i costi tutti diversi, così l'arco più economico di un taglio è unico.
L'idea: lo scambio
Sia un albero di copertura minimo. Il teorema dice che un arco sta in se e solo se è il più economico di qualche taglio, e le due direzioni si dimostrano con lo stesso scambio di archi.
Se è il più economico di , sta nell'albero. Si suppone di no e lo si aggiunge: si chiude un ciclo. Il ciclo passa da a attraverso e, per tornare al punto di partenza, deve riattraversare il confine con un altro arco del taglio. Tutti gli archi del ciclo tranne sono dell'albero, quindi anche . Siccome è il più economico del taglio, , e togliendo si ottiene un albero di copertura di costo
che contraddice la minimalità di .
Se sta nell'albero, è il più economico di un taglio. Togliendolo l'albero si spezza in due componenti; si prende come una delle due. L'unico arco dell'albero che attraversa è . Se un altro arco del taglio costasse meno, rimettendo al posto di le due componenti si ricollegherebbero in un albero di costo , di nuovo assurdo.
Perché Kruskal è corretto
Kruskal ordina gli archi per costo e tiene in l'etichetta della componente del nodo . Esamina gli archi in ordine: se i due nodi sono già collegati e l'arco chiuderebbe un ciclo, quindi lo scarta; se lo prende e fonde le due componenti.
Un arco preso è il più economico del taglio attorno alla componente di . Ogni arco più economico è già stato esaminato: se è stato preso, sta dentro una componente; se è stato scartato, i suoi estremi erano già nella stessa componente. Le componenti si fondono e non si dividono mai, quindi nessuno di quegli archi attraversa il confine di una componente attuale. Per il teorema, ogni arco preso sta in . Kruskal ne prende , quanti ne ha , quindi l'insieme che restituisce è proprio .
Con costi uguali il ragionamento regge scegliendo un ordine fra gli archi alla pari: Kruskal trova uno degli alberi ottimi, tutti dello stesso costo.
Un esempio
Archi di costo 1, 3, 5, 5, 6, 9, 9. Kruskal li prende nell'ordine, e per ognuno c'è il taglio che lo giustifica:
| Arco preso | Taglio | Archi del taglio | Costo totale |
|---|---|---|---|
| 1, 5, 6, 9 | 1 | ||
| 3, 5, 5, 6, 9 | 4 | ||
| 5, 9 | 9 | ||
| 5, 9 | 14 |
Qui i costi non sono tutti diversi, ma i quattro tagli della tabella hanno ciascuno un minimo unico. Con 4 archi, cioè , l'albero è completo e costa 14.
Lo scambio si vede sull'albero , , , , che costa 17. Nel taglio ci sono (3), (6) e (9): il più economico, , manca. Aggiungendolo si chiude il ciclo , che attraversa il taglio anche con ; togliendo il costo scende a .
Dove si inciampa di solito
- Dire che un arco non sta nell'albero perché c'è un taglio in cui non è il più economico. Per il teorema un arco resta fuori solo se non è il più economico di nessun taglio. resta fuori perché ogni taglio che separa 2 da 5 è attraversato anche dal cammino dell'albero, con archi di costo 1 e 3.
- Pensare che Kruskal scarti gli archi cari. Scarta solo quelli con ; un arco di costo alto entra se è l'unico che collega due componenti.
- Nella fusione cambiare l'etichetta solo di . Devono prendere l'etichetta tutti i nodi con etichetta , altrimenti un confronto successivo può far entrare un arco che chiude un ciclo.
Fonti: dispensa §4.3.1, Teorema 4.3.1 e Figure 4.9, 4.10, 4.11; dispensa §4.3.2, Figura 4.13.
teoremaTeorema 4.5.1 (correttezza di Dijkstra)
dimostrazione completaSia un grafo orientato con per ogni arco, sia con e, per ogni , sia il costo minimo di un cammino da a . Se , allora è il costo minimo di un cammino da a . Per questo l'algoritmo di Dijkstra, che a ogni iterazione rende permanente l'etichetta temporanea minima, restituisce l'albero dei cammini minimi da .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 4.5.1 (correttezza di Dijkstra)
Intuizione
Ogni cammino verso deve uscire da con un arco del taglio, e lì ha già speso almeno il minimo ; con costi non negativi il resto del cammino non fa scendere il conto.
All'esame
Spiega perché Dijkstra richiede e perché un'etichetta resa permanente non cambia più: con un arco negativo l'ultima disuguaglianza della dimostrazione non vale.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
Il cammino di costo minimo da a è . Che cosa si può dire del suo tratto da a ?
Risposte
È un cammino minimo da a . Se ce ne fosse uno più economico, sostituendolo e aggiungendo l'arco si arriverebbe a spendendo meno. Per questo il costo minimo fino a si può cercare nella forma , con il costo minimo fino al penultimo nodo.
Se non torna, rileggi la definizione dell'albero dei cammini minimi e del vettore dei predecessori.
Il problema
Dijkstra calcola i cammini minimi da a tutti i nodi di un grafo orientato con costi . Ogni nodo ha un'etichetta , il costo del miglior cammino trovato finora. A ogni iterazione l'algoritmo prende il nodo con l'etichetta temporanea più piccola, la dichiara permanente, cioè definitiva, e aggiorna i vicini: per ogni , se pone e .
Il dubbio è che un'etichetta venga fissata troppo presto: un cammino che passa per nodi non ancora esaminati potrebbe arrivare con un costo più basso. Il teorema dice che con costi non negativi questo non succede.
L'idea
Sia un insieme di nodi che contiene , e per ogni sia già il costo minimo da a . Fra gli archi che escono da , cioè quelli del taglio , si prende quello che rende minimo ; sia . Il teorema afferma che è il costo minimo da a .
Il valore si raggiunge: è il cammino minimo fino a più l'arco . Resta da vedere che nessun cammino da a costa meno. parte da , che sta in , e arriva in , che sta fuori; quindi c'è un primo arco con cui esce da . Si spezza in tre pezzi: da a , l'arco , da a . Allora
La prima disuguaglianza vale perché è un cammino da a e è il minimo fra questi, la seconda perché è fatto di archi con costo , la terza perché è un arco del taglio e era il minimo. Solo la seconda usa l'ipotesi sui costi.
Dal teorema all'algoritmo
L'algoritmo non scorre gli archi del taglio: prende l'etichetta temporanea minima. Le due scelte coincidono perché, per ogni nodo fuori da , vale il minimo di sugli archi che arrivano da (oppure se non ce ne sono). Ogni volta che un nodo entra in l'algoritmo esamina la sua stella uscente e abbassa le etichette dove conviene, quindi questa proprietà resta vera. Allora la più piccola etichetta temporanea è proprio , e per il teorema è già il costo minimo.
Si procede per induzione. All'inizio e è corretto, perché con costi non negativi nessun cammino costa meno di 0. Ogni iterazione aggiunge a un nodo con l'etichetta giusta, e dopo iterazioni tutte le etichette sono costi minimi. Una permanente non cambia più: essendo già il minimo, nessun può scendere sotto.
Un esempio
Archi di costo 1, 5, 5, 1, 6, 4, 2, 3, 9, 1, 3, 1, 1, con . Dopo due iterazioni , con e . Gli archi che escono da danno
| Arco | |
|---|---|
Il minimo è , quindi diventa permanente. Le etichette temporanee in quel momento sono , , , , cioè per ogni nodo il minimo dei valori della tabella che vi arrivano (per il nodo 4, il minimo fra 5 e 2). Il cammino diretto costa 5 ed esce da con un arco che vale già 5, più di 2.
Continuando, i nodi diventano permanenti nell'ordine (fra 5 e 6, entrambi a 5, si prende quello di indice minore), con e albero , , , , , .
Dove si inciampa di solito
- Usare Dijkstra con un arco negativo. Con di costo 1, di costo 3 e di costo , il nodo 2 diventa permanente con , ma costa 0. Nella catena cade la seconda disuguaglianza: il tratto costa .
- Confondere l'etichetta temporanea con il costo minimo. Fuori da , è solo il miglior costo fra i cammini che prima di toccano soltanto nodi di , ed è un limite superiore del costo minimo.
- Pensare che debba essere un cammino minimo. Basta che sia un cammino da a : per questo costa almeno .
Fonti: dispensa §4.5.1, Teorema 4.5.1 e Figure 4.28, 4.29.
proposizioneRicorrenza di Floyd-Warshall e cicli negativi
schema della dimostrazioneSia un grafo orientato con costi e sia il costo minimo di un cammino da a con nodi intermedi in , dove , se e altrimenti. Se non ha cicli di costo negativo, per vale e è il costo del cammino minimo da a . Se ha un ciclo di costo negativo, durante il calcolo un elemento della diagonale diventa negativo, e l'algoritmo lo segnala.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Ricorrenza di Floyd-Warshall e cicli negativi
Intuizione
Un cammino minimo che può usare i nodi fino a o evita o ci passa una volta sola: nel secondo caso è un cammino fino a seguito da uno da , entrambi con intermedi fino a .
All'esame
Giustifica l'aggiornamento , delle tracce, il costo e il controllo della diagonale per scoprire un ciclo negativo.
Schema illustrato
1 / 3Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
Un cammino da a passa due volte per il nodo . Che cosa contiene, e che cosa succede al costo se lo si toglie?
Risposte
Contiene un ciclo, il tratto da di nuovo a . Togliendolo resta un cammino da a che costa quanto prima meno il costo del ciclo: se il ciclo ha costo il cammino non peggiora, se è negativo peggiora.
Se non torna, rileggi che cosa sono un cammino semplice e un ciclo in un grafo orientato.
Il problema
Si vogliono i cammini minimi fra tutte le coppie di nodi, con costi anche negativi. Dijkstra non va bene, perché con un arco negativo può rendere definitiva un'etichetta sbagliata. Floyd-Warshall usa la programmazione dinamica: costruisce la risposta allargando, un nodo alla volta, l'insieme dei nodi da cui i cammini possono passare. Se il grafo ha un ciclo di costo negativo, se ne accorge.
La ricorrenza
Si numerano i nodi da 1 a e si definisce come il costo minimo di un cammino da a i cui nodi intermedi, cioè quelli diversi dagli estremi, stanno tutti in . Con non sono ammessi intermedi: se l'arco esiste, se manca, e . Con sono ammessi tutti i nodi, quindi è il costo del cammino minimo.
Per passare da a si guarda il cammino minimo da a con intermedi fino a , che può comportarsi in due modi.
- Non passa per . Allora i suoi intermedi stanno in e il suo costo è .
- Passa per . Senza cicli negativi si può supporre che ci passi una volta sola, perché un secondo passaggio chiuderebbe un ciclo che si toglie senza aumentare il costo. Allora si spezza in : un tratto da a e uno da a . In nessuno dei due è intermedio, perché ne è un estremo, quindi entrambi hanno intermedi in e costano almeno e . D'altra parte, attaccando i due tratti migliori si arriva a con costo , e se nasce un ciclo lo si toglie senza spendere di più.
Il migliore dei due casi è
Insieme ai costi l'algoritmo tiene la matrice dei predecessori: è il nodo che precede sul cammino da . All'inizio . Quando conviene passare per , l'ultimo arco del nuovo cammino è l'ultimo arco del tratto da a , quindi .
Una matrice sola
Lo pseudocodice usa una sola matrice , aggiornata sul posto, invece delle matrici . Si può perché durante l'iterazione la riga e la colonna non cambiano: per il confronto è con , dato che , e lo stesso per . I valori che servono restano quindi quelli di .
Il costo è di iterazioni, una per ogni , ciascuna con coppie da confrontare: .
I cicli negativi
Ogni valore che l'algoritmo scrive è il costo di un percorso effettivo da a , eventualmente con nodi ripetuti. Sulla diagonale parte da 0 e cambia solo se , cioè se c'è un percorso chiuso da a di costo negativo. Un percorso chiuso di costo negativo contiene un ciclo di costo negativo, perché si scompone in cicli e la somma dei loro costi è negativa.
Viceversa, se c'è un ciclo negativo, al più tardi all'iterazione del suo nodo di indice massimo la somma per un altro nodo del ciclo non supera il costo del ciclo, e diventa negativo. L'algoritmo controlla la diagonale e, appena trova un valore negativo, si ferma.
Un esempio
Archi di costo 1, 5, 5, 1, 6, 4, 2, 3, 9, 1, 3, 1, 1. All'iterazione servono le coppie con e finiti: in 1 entrano archi da 6 (costo 3) e da 7 (costo 1), da 1 escono archi verso 2 (costo 1) e 4 (costo 5).
| Coppia | Confronto | Esito |
|---|---|---|
| , | ||
| , | ||
| , | ||
| resta |
All'iterazione il valore 8 scende: , il cammino , e . Con più nodi ammessi il costo può solo scendere; qui 5 è già il valore finale.
Per un ciclo negativo basta il grafo con di costo 1 e di costo . Già con , sulla riga 2, : la diagonale diventa negativa e l'algoritmo si ferma.
Dove si inciampa di solito
- Mettere il ciclo su dentro quelli su e . La ricorrenza ha bisogno che tutti i siano pronti prima di passare a , quindi è il ciclo più esterno.
- Aggiornare con . Il predecessore di è l'ultimo nodo prima di , che è solo se l'arco è proprio l'ultimo tratto; in generale è .
- Leggere costi minimi nella matrice di un grafo con un ciclo negativo. Lì la ricorrenza non vale, perché girare ancora sul ciclo abbassa il costo e il caso "passa per una volta sola" non basta più: l'unica informazione utile è il valore negativo sulla diagonale.
Fonti: dispensa §4.5.2 e Figura 4.35.
Progetti e flussi
proposizioneDurata minima di un progetto (CPM e cammino critico)
schema della dimostrazioneSia il grafo aciclico di un progetto, con i nodi in ordine topologico e la durata su ogni attività . Il valore ottimo di è la lunghezza del cammino più lungo da 1 a . Il CPM la calcola in come , con e . Esiste sempre almeno un cammino critico, cioè un cammino da 1 a di attività con slittamento , e ogni cammino critico è un cammino più lungo.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Durata minima di un progetto (CPM e cammino critico)
Intuizione
Le attività di un cammino si fanno una dopo l'altra, quindi il progetto dura almeno quanto il cammino più lungo; facendo accadere ogni evento appena possibile non dura di più.
All'esame
Giustifica perché negli esercizi sul progetto la durata minima si legge in e perché si cercano le attività a slittamento nullo: formano un cammino più lungo.
Schema illustrato
1 / 3Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
- Nel grafo di un progetto, che cosa rappresentano un arco e un nodo?
- Che cosa vuol dire che i nodi sono numerati in ordine topologico, e perché si può sempre fare?
Risposte
- Un arco è un'attività, con costo uguale alla sua durata . Un nodo è un evento: l'istante in cui le attività che vi entrano sono finite e quelle che ne escono possono partire.
- Vuol dire che per ogni arco vale . Si può fare perché il grafo è aciclico: un ciclo vorrebbe dire che un'attività aspetta la propria fine.
Se la seconda risposta non torna, conviene rivedere come si costruisce il grafo del progetto.
Il problema
Con istante in cui accade l'evento , la durata minima è il valore ottimo di
Il vincolo dice che l'evento non accade prima della fine dell'attività . È un problema di PL, ma il suo valore ottimo si legge sul grafo.
Perché la durata minima è il cammino più lungo
Sia la lunghezza del cammino più lungo da 1 a .
Nessuna soluzione scende sotto . Su un cammino i vincoli degli archi si concatenano: , poi , e così via. Sommandoli, i intermedi si cancellano e resta , cioè la lunghezza del cammino. Questo vale per ogni cammino, quindi .
Il valore si raggiunge. Si pone uguale alla lunghezza del cammino più lungo da 1 a (un cammino da 1 c'è sempre, perché il nodo iniziale è uno solo). Per ogni arco , il cammino più lungo fino a seguito da è un cammino fino a , quindi . Tutti i vincoli valgono e .
Che cosa calcola il CPM
Il CPM calcola questi scorrendo i nodi in ordine topologico:
L'ordine topologico garantisce che i predecessori di abbiano indice minore, quindi un valore già calcolato. Il massimo dà il cammino più lungo fino a : un cammino del genere entra in con un ultimo arco , e il tratto precedente arriva in con lunghezza al più . Ogni arco si guarda una volta: .
La fase all'indietro parte da e calcola , l'istante più tardo per l'evento che lascia partire in tempo tutte le attività uscenti. Anche questa costa . Per induzione all'indietro : per ogni vale . Lo slittamento misura quanto può ritardare l'attività se le altre rispettano i tempi.
Perché un cammino critico c'è sempre
Si parte da e si risale scegliendo ogni volta un arco che realizza il massimo, cioè con . Se , lo slittamento di quell'arco è . Inoltre , e insieme a dà : da si ripete lo stesso passo. All'inizio per definizione, e si arriva fino a 1 perché ogni altro nodo ha almeno un arco entrante.
Anche un cammino critico trovato in un altro modo è un cammino più lungo. Slittamento nullo vuol dire , e dalla catena segue . Sommando lungo il cammino si ottiene .
Un esempio
Cinque attività con durate 5, 3, 4, 10 e 2: , , , , .
| Nodo | ||
|---|---|---|
| 1 | ||
| 2 | ||
| 3 | ||
| 4 | ||
| 5 |
Gli slittamenti sono 0 per , per , per , per e per . Risalendo da 5: il massimo in 4 viene da 2 (), quello in 2 da 1. Il cammino critico è , lungo ; l'altro cammino, , dura 14.
Dove si inciampa di solito
- Prendere come l'istante più tardo in cui può partire l'attività . Quell'istante è : nell'esempio può partire fino a , mentre .
- Dire critica un'attività perché i suoi due estremi hanno . Conta lo slittamento: un'ipotetica attività di durata 6 da 1 a 4 avrebbe estremi con e slittamento .
- Sommare gli slittamenti di attività sullo stesso cammino. e hanno 3 ciascuna, ma il loro cammino dura 14 contro 17: insieme possono ritardare di 3, non di 6.
Fonti: dispensa §4.6.1, modello (PG) e nota sul cammino più lungo; dispensa §4.6.2, Definizioni 4.6.2 e 4.6.3, Proprietà 4.6.1, Figura 4.43; dispensa Es. 5.2.9.
teoremaTeoremi 4.7.1 e 4.7.2 (flusso attraverso una sezione)
dimostrazione completaSia un flusso ammissibile da a su una rete e sia una sezione, con e . Allora il flusso che attraversa la sezione, , è uguale al valore del flusso , e .
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teoremi 4.7.1 e 4.7.2 (flusso attraverso una sezione)
Intuizione
Quello che esce da deve attraversare ogni sezione, perché i nodi intermedi non trattengono flusso; e attraverso una sezione non passa più della capacità degli archi uscenti.
All'esame
Dà il limite superiore da scrivere prima di Ford-Fulkerson, per esempio , e permette di controllare un flusso calcolando su una sezione qualsiasi.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Quali sono le due condizioni che rendono ammissibile un flusso da a ?
Risposte
- Su ogni arco ; in ogni nodo diverso da e da la conservazione , cioè quanto entra tanto esce.
Se la risposta non torna, conviene rivedere la definizione di rete di flusso.
Il problema
Una sezione divide i nodi in due parti: , che contiene la sorgente, e , che contiene il pozzo. Il primo teorema dice che il flusso netto che la attraversa, uscente meno entrante, vale sempre , qualunque sezione si scelga. Il secondo dice che non supera , la somma delle capacità degli archi che escono da .
Il primo fatto non è ovvio perché il flusso può attraversare la sezione più volte, avanti e indietro, e il teorema parla solo del saldo.
La dimostrazione del primo
Si somma, sui nodi di , il flusso uscente meno quello entrante. Il nodo contribuisce , per definizione di valore del flusso. Ogni altro nodo di contribuisce 0 per la conservazione, e qui serve l'ipotesi : il pozzo è l'unico nodo, oltre a , dove la conservazione non vale. La somma è quindi .
La stessa somma si conta arco per arco:
- un arco con entrambi gli estremi in compare due volte, con nel termine di e con in quello di , e si cancella;
- un arco che esce da compare solo nel termine della coda, con il segno ;
- un arco che entra in compare solo nel termine della testa, con il segno ;
- un arco con entrambi gli estremi fuori da non compare.
Resta , quindi .
La dimostrazione del secondo
La prima disuguaglianza toglie una somma di flussi, che sono non negativi; la seconda usa . Con il primo teorema si ottiene per ogni flusso ammissibile e ogni sezione.
Un esempio
Rete con sorgente 1 e pozzo 3, archi e capacità 1, 5, 3, 5, 1, 6, 4, 3, 1, 9, 2, 1. Il flusso ha , , , , , , , e 0 sugli altri archi. Il suo valore è .
Con escono gli archi , , , , , , con flusso , ed entrano e , con flusso . Quindi . La capacità è . Già la sezione dà un limite migliore, , e lo dà prima di aver calcolato qualsiasi flusso.
Dove si inciampa di solito
- Mettere in anche le capacità degli archi entranti. Il loro flusso si sottrae, quindi per il limite superiore il caso peggiore è che valga 0: nell'esempio e non entrano in .
- Dimenticare di sottrarre il flusso entrante quando si calcola . Con si otterrebbe 11, più del valore del flusso.
- Prendere un insieme che contiene o non contiene . Non è una sezione, e la somma della prima dimostrazione non dà più .
Fonti: dispensa §4.7.3, Definizioni 4.7.4-4.7.6, Teoremi 4.7.1 e 4.7.2.
teoremaTeorema 4.7.3 (max flow/min cut)
schema della dimostrazioneUn flusso ammissibile su una rete è massimo se e solo se esiste una sezione con . In tal caso è una sezione di capacità minima: il valore del flusso massimo è uguale alla capacità minima di una sezione.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Teorema 4.7.3 (max flow/min cut)
Intuizione
Ogni sezione è un tetto per ogni flusso. Quando non ci sono più percorsi aumentanti, i nodi ancora raggiungibili da formano una sezione il cui tetto è toccato.
All'esame
È la verifica finale dell'esercizio di massimo flusso: i nodi etichettati nell'ultima ricerca di Ford-Fulkerson danno , e certifica che il flusso è massimo.
Schema illustrato
1 / 3Scorri l'immagine o usa Avanti.
Schema della dimostrazione
Prima di leggere
- Che cos'è un percorso aumentante, e di quanto si aumenta il flusso lungo di esso?
- Che cosa dicono i teoremi sul flusso attraverso una sezione?
Risposte
- È un percorso da a che usa archi in avanti non saturi () e archi all'indietro non scarichi (). Si aumenta di , il minimo fra i residui degli archi in avanti e i flussi degli archi all'indietro: si aggiunge sui primi e lo si toglie sui secondi.
- Che per ogni sezione , e che per ogni flusso ammissibile e ogni sezione.
Se la seconda risposta non torna, conviene rivedere i teoremi sul flusso attraverso una sezione.
Il problema
Ogni sezione dà un tetto a ogni flusso, quindi il flusso massimo non supera la capacità minima di una sezione. Il teorema dice che i due valori coincidono sempre, e dà il modo di verificarlo: basta esibire un flusso e una sezione con .
Il verso facile
Se , ogni altro flusso ammissibile ha valore al più , quindi è massimo. Ogni altra sezione ha capacità almeno , quindi è minima.
Il verso difficile: la sezione dei nodi etichettati
Sia massimo. Allora non esiste un percorso aumentante: lungo di esso il flusso resterebbe ammissibile e crescerebbe di .
Si prende come l'insieme dei nodi che si raggiungono da con percorsi aumentanti parziali, cioè i nodi che l'algoritmo di etichettatura riesce a etichettare. Contiene e non contiene , altrimenti ci sarebbe un percorso aumentante, quindi è una sezione, e gli archi che la attraversano sono di due tipi.
- Un arco con e è saturo. Se avesse , da si etichetterebbe anche .
- Un arco con e è scarico. Se avesse , da si etichetterebbe percorrendo l'arco all'indietro.
Quindi , e per il teorema del flusso attraverso una sezione .
Un flusso massimo esiste: con capacità finite il problema è un PL ammissibile (il flusso nullo va bene) e limitato da . Applicando il verso difficile a un flusso massimo si trova una sezione con capacità uguale al suo valore, che per il verso facile è minima: il flusso massimo e la capacità minima coincidono.
Un esempio
Rete con sorgente 1 e pozzo 3, archi e capacità 1, 5, 3, 5, 1, 6, 4, 3, 1, 9, 2, 1. Ford-Fulkerson arriva al flusso di valore 7 con , , , , , , , .
L'ultima ricerca etichetta 1, poi 4 (perché ) e 6 (perché ). Da 1 l'arco è saturo. Da 4 gli archi e sono saturi e l'arco entrante è scarico. Da 6 l'arco è saturo e è scarico. Nessun altro nodo si etichetta, e con
Dove si inciampa di solito
- Credere che la sezione minima sia unica. Nell'esempio anche ha capacità , con archi uscenti , , , . Ford-Fulkerson restituisce quella dei nodi etichettati.
- Trarre conclusioni da una sezione qualsiasi. dice solo che il flusso non supera 9; serve l'uguaglianza per concludere.
- Chiedere che gli archi entranti in siano saturi. Devono essere scarichi: il loro flusso si sottrae da .
Fonti: dispensa §4.7.3, Teorema 4.7.3; dispensa §4.7.4, Figura 4.51 (sezione restituita da Ford-Fulkerson); dispensa Es. 5.2.8.
proposizioneFord-Fulkerson con capacità intere
dimostrazione completaSe tutte le capacità sono intere e finite, l'algoritmo di Ford-Fulkerson che parte dal flusso nullo mantiene un flusso intero, aumenta di almeno 1 a ogni iterazione e termina dopo al più aumenti, con . Ogni ricerca di un percorso aumentante costa , quindi l'algoritmo costa , e il flusso che restituisce è un flusso massimo intero.
Idea, all'esame e dimostrazione +Chiudi approfondimento −
Ford-Fulkerson con capacità intere
Intuizione
Con numeri interi ogni aumento vale almeno 1, e il valore del flusso non può superare la capacità degli archi che escono da : gli aumenti sono finiti.
All'esame
Risponde alle domande su complessità e interezza: con capacità intere Ford-Fulkerson costa , che è pseudopolinomiale, e trova un flusso massimo intero.
Dimostrazione illustrata
1 / 3Scorri l'immagine o usa Avanti.
Dimostrazione
Prima di leggere
- Che cosa restituisce Ford-Fulkerson quando non trova più percorsi aumentanti, e perché quel flusso è massimo?
- Che cosa vuol dire che un algoritmo è pseudopolinomiale?
Risposte
- Il flusso corrente e la sezione dei nodi etichettati nell'ultima ricerca. Gli archi che escono da sono saturi e quelli che entrano sono scarichi, quindi , e per il teorema max flow/min cut il flusso è massimo.
- Che il suo tempo è polinomiale nella dimensione della rete e nel valore dei numeri in ingresso, non nella loro lunghezza in bit. Un numero si scrive con circa bit, quindi un tempo proporzionale a può essere esponenziale nella lunghezza dell'ingresso.
Se la prima risposta non torna, conviene rivedere il teorema max flow/min cut.
Il problema
Ford-Fulkerson parte dal flusso nullo e lo aumenta lungo un percorso aumentante finché ne trova uno. Con capacità intere si dimostra che si ferma e si contano le iterazioni. Le capacità razionali si riportano a questo caso moltiplicandole tutte per il minimo comune denominatore.
Il flusso resta intero
All'inizio , che è intero. Se e le capacità sono interi, sono interi anche i residui: sugli archi in avanti, su quelli all'indietro. Gli archi del percorso hanno residuo positivo, quindi è il minimo di interi positivi, cioè un intero . Dopo l'aumento ogni è cambiato di , di o di niente, e resta intero.
Quante iterazioni
A ogni iterazione cresce di . Il limite sulle sezioni applicato a dà
perché da escono al più archi, ciascuno di capacità al più . Partendo da 0 si fanno quindi al più aumenti, più l'ultima ricerca, quella che fallisce. Qui servono capacità finite: con un arco di capacità uscente da il limite non direbbe nulla.
Il costo di una ricerca
Nella ricerca con le etichette ogni nodo si etichetta al più una volta, entra una volta nella coda e, quando lo si elabora, se ne guardano gli archi uscenti e quelli entranti. Ogni arco si esamina quindi al più due volte, una dalla coda e una dalla testa. Ricostruire il percorso dal pozzo costa al più passi. In tutto la ricerca costa , e moltiplicando per il numero di iterazioni si ottiene .
Un esempio
Nella rete con sorgente 1 e pozzo 3, archi e capacità 1, 5, 3, 5, 1, 6, 4, 3, 1, 9, 2, 1, gli archi sono e . Il limite grossolano è aumenti, quello più fine . Ford-Fulkerson ne fa 4, con , e una quinta ricerca senza esito: il flusso massimo vale .
Il fattore può pesare davvero, come in questa rete a rombo: archi , , , di capacità e un arco di capacità 1. Bastano due aumenti, lungo e . Se invece i percorsi scelti alternano e , che usa all'indietro, ognuno ha , e per arrivare al valore servono iterazioni. Con sono due milioni di ricerche su una rete di cinque archi, mentre per scrivere bastano una ventina di bit. Il tempo è polinomiale nel valore delle capacità e non nella loro lunghezza: l'algoritmo è pseudopolinomiale, come la programmazione dinamica per lo zaino.
Interezza
Quando l'algoritmo si ferma, il flusso è intero per il primo conto e massimo per il teorema max flow/min cut. Quindi un problema di massimo flusso con capacità intere ha sempre un flusso massimo intero. L'unimodularità della matrice dei vincoli porta alla stessa conclusione; qui il flusso intero lo costruisce l'algoritmo.
Dove si inciampa di solito
- Dire che le iterazioni sono esattamente . È un limite superiore, perché può superare 1: nell'esempio bastano 4 aumenti per il valore 7.
- Chiamare polinomiale . Dipende dal valore di , che può essere esponenziale nel numero di bit dell'ingresso.
- Credere che ogni flusso massimo sia intero. Il teorema garantisce che ne esiste uno intero, quello trovato dall'algoritmo. Con un arco di capacità 1 seguito da due strade parallele da a , anch'esse di capacità 1, mandare su ciascuna strada è un flusso massimo non intero.
Fonti: dispensa §4.7.4, complessità dell'algoritmo di Ford-Fulkerson; dispensa §4.7.2, punto b (soluzione ottima intera).





![Un arco scelto, due nodi presi. L'algoritmo sceglie un arco scoperto [i, j], mette in V' tutti e due gli estremi e toglie ogni arco che tocca i o j. Si ferma quando non restano archi scoperti, quindi V' è un vertex cover.](/_next/image?url=%2Fillustrations%2Ftheorems%2Fatlas-6.webp&w=3840&q=75)
