Sei sulla pagina 1di 187

Appunti per il corso di Ricerca Operativa 1

Capitolo 1

Introduzione

La prima domanda da porsi riguarda gli scopi che si prefigge la Ricerca


Operativa. Possiamo definirla come uno strumento per prendere delle deci-
sioni che siano le migliori possibili secondo un criterio dato. Ogni volta che
dobbiamo prendere una decisione entrano in gioco le seguenti componenti:

DATI , che rappresentano tutti i valori noti a priori.

VARIABILI , che sono le entità controllate dal decisore; al variare di


esse varia anche il valore del criterio e tra tutti i possibili valori che
possono assumere si devono scegliere quelli che forniscono il miglior
valore possibile del criterio.

VINCOLI , che limitano le possibili scelte del decisore (i possibili valori


delle variabili).

OBIETTIVO , che coincide con il criterio fissato per confrontare le di-


verse possibili scelte del decisore.

Facciamo un esempio molto semplice di decisione. Dovete uscire di casa e


potete prendere con voi al massimo uno dei seguenti tre oggetti: un libro
che vale 10 Euro, una macchina fotografica che vale 100 Euro ed una borsa
da 25 Euro. Dovete decidere quale oggetto portare con voi, tenuto conto
che vi interessa prendere un oggetto di valore massimo. L’esempio è molto
banale e non c’è bisogno di scomodare la Ricerca Operativa per capire che
occorre prendere la macchina fotografica. Tuttavia in esso sono già presenti
tutte le componenti tipiche di una decisione:

DATI : sono i valori dei tre oggetti.

1
Tabella 1.1:
Farina Acqua Medicinali
TIPO I 10 10 30
TIPO II 30 20 10
TIPO III 20 40 5

Tabella 1.2:
TIPO I 14
TIPO II 5
TIPO III 4

VARIABILI : per ogni oggetto il decisore (cioé voi) deve decidere se


prenderlo oppure no.

VINCOLI : in questo caso è presente il vincolo che può essere preso al


massimo un oggetto.

OBIETTIVO : il criterio di scelta è rappresentato dal valore e quindi


l’obiettivo è quello di prendere l’oggetto di valore massimo.

Nel nostro esempio è molto semplice prendere la decisione migliore. Vedre-


mo però che in molte situazioni non è per nulla chiaro, a prima vista, capire
qual è la decisione migliore. Ad esempio si consideri il seguente problema.
Supponiamo di dover preparare dei pacchi per inviare degli aiuti. É pos-
sibile realizzare tre diversi tipi di pacchi con diversi contenuti di sacchetti
di farina, bottiglie d’acqua e medicinali. Più precisamente la Tabella 1.1
specifica i contenuti di ogni tipo di pacco. É stato inoltre assegnato un
indice di utilità per un’unità di ogni tipo di pacco. Gli indici sono riportati
nella Tabella 1.2. Infine è noto che la disponibilità di sacchetti di farina,
bottiglie d’acqua e medicinali è limitata. Più precisamente il numero mas-
simo disponibile di farina, acqua e medicinali è riportata nella Tabella 1.3.
La domanda che ci si pone è la seguente: quanti pacchi di ciascun tipo oc-
corre preparare se si vuole rendere massimo l’indice di utilità complessivo?
Rispetto all’esempio iniziale è ora più difficile stabilire qual è la cosa giusta

Tabella 1.3:
farina 5100
acqua 8000
medicinali 1805

2
da fare. Potrei realizzare solo pacchi del tipo I. In tal caso ne potrei rea-
lizzare al massimo 60 per il limite di disponibilità sui medicinali. L’utilità
complessiva risulterebbe pari a 60*14=840. Potrei realizzare solo pacchi
del tipo II. In tal caso ne potrei realizzare al massimo 170 per il limite di
disponibilità sui sacchetti di farina. L’utilità complessiva risulterebbe pari
a 170*5=850. Infine, potrei realizzare solo pacchi del tipo III. In tal caso
ne potrei realizzare al massimo 200 per il limite di disponibilità sulle bot-
tiglie d’acqua. L’utilità complessiva risulterebbe pari a 200*4=800. Delle
tre possibili soluzioni la migliore è la seconda. Ma queste tre decisioni non
coprono tutti i casi possibili. Infatti, potrei scegliere di fare un po’ di pacchi
di ciascun tipo. Quindi, a differenza dell’esempio iniziale non è per nulla
immediato scegliere la decisione migliore.
Un modo per risolvere problemi di decisione complessi é quello di rifor-
mularli come problemi di Programmazione Matematica ed utilizzare quindi
delle tecniche di risoluzione apposite per questi problemi. Come vedremo
questo sará proprio l’approccio che potremo utilizzare per il nostro esempio.
Nei problemi di Programmazione Matematica sono date n variabili di deci-
sione x1 , . . . , xn , l’obiettivo é rappresentato da una funzione f (x1 , . . . , xn )
delle n variabili, detta appunto funzione obiettivo, mentre i vincoli sono
rappresentati da disequazioni o equazioni di questo tipo:
gi (x1 , . . . , xn ) ≤ (o ≥ o =) 0.
Quindi la generica forma di un problema di Programmazione Matematica
é la seguente:
max (o min) f (x1 , . . . , xn )
gi (x1 , . . . , xn ) ≤ 0 i ∈ I1
gi (x1 , . . . , xn ) ≥ 0 i ∈ I2
gi (x1 , . . . , xn ) = 0 i ∈ I3
L’insieme dei punti che soddisfano tutti i vincoli viene chiamato regione
ammissibile del problema e nel seguito verrá indicato con Sa . Abbiamo
quindi:
Sa = { (x1 , . . . , xn ) : gi (x1 , . . . , xn ) ≤ 0, ∀ i ∈ I1
gi (x1 , . . . , xn ) ≥ 0, ∀ i ∈ I2
gi (x1 , . . . , xn ) = 0, ∀ i ∈ I3 }
Risolvere il problema di Programmazione Matematica vuol dire determinare
un punto (x∗1 , . . . , x∗n ) ∈ Sa , che verrá detto soluzione ottima del problema,
tale che
f (x∗1 , . . . , x∗n ) ≤ f (x1 , . . . , xn ) ∀ (x1 , . . . , xn ) ∈ Sa ,

3
se il problema é di minimo, oppure

f (x∗1 , . . . , x∗n ) ≥ f (x1 , . . . , xn ) ∀ (x1 , . . . , xn ) ∈ Sa ,

se il problema é di massimo. La Programmazione Matematica comprende


un grande numero di problemi. Tra questi quelli di Programmazione Li-
neare (in cui, come vedremo, rientra anche il nostro esempio precedente),
della quale ci occuperemo ampiamente nei capitoli successivi.

4
Capitolo 2

La Programmazione
Lineare

La generica forma dei problemi di Programmazione Matematica comprende


una grande varietá di problemi a cui corrispondono livelli di difficoltá molto
diversi e anche tecniche risolutive molto diverse. Qui ci concentreremo
su una importante sottoclasse di problemi di programmazione matematica
che si incontra in molte applicazioni pratiche, la classe dei problemi di
Programmazione Lineare (abbreviata con PL nel seguito). Nei problemi di
PL la funzione obiettivo é una funzione lineare, ovvero:
n
X
f (x1 , . . . , xn ) = cj xj
j=1

e lo stesso vale per i vincoli, che avranno la seguente forma:


n
X
aij xj ≤ (o ≥ o =) bi .
j=1

Quindi, il generico problema di PL avrá la seguente forma:


Pn
max (o min) j=1 cj xj
Pn
j=1 aij xj ≤ bi i ∈ I1
Pn
j=1 aij xj ≥ bi i ∈ I2
Pn
j=1 aij xj = bi i ∈ I3
Da questa formulazione possiamo notare quali sono le tre principali carat-
teristiche dei problemi di PL.

5
Proporzionalitá Il contributo di ogni variabile xj nell’obiettivo e nei vin-
coli é direttamente proporzionale al valore della variabile. Infatti,
nell’obiettivo il contributo é pari a cj xj mentre nei vincoli é aij xj .
Additivitá I contributi delle diverse variabili si sommano tra loro sia nel-
l’obiettivo che nei vincoli (si vedano le sommatorie che definiscono
obiettivo e vincoli).
Continuitá Le variabili xj possono assumere tutti i valori reali.
I programmi lineari sono molto importanti per almeno due ragioni:
1. molti problemi reali (tra cui, come vedremo fra breve, quello intro-
dotto in precedenza) hanno come modello matematico proprio un
programma lineare;
2. sono più semplici da risolvere rispetto ad altri modelli dove compaiono
termini non lineari. Per i programmi lineari esistono delle procedu-
re molto efficienti di risoluzione (come l’algoritmo del simplesso che
descriveremo in seguito).
Piú avanti vedremo un’altra importante classe di problemi, quelli di Pro-
grammazione Lineare Intera, che si differenziano da quelli di PL solo per
la rimozione della proprietá di continuitá (in essi le variabili potranno
assumere solo valori interi).

2.1 Formulazione dell’esempio degli aiuti uma-


nitari come problema di PL
Cominciamo con l’individuare le quattro componenti della decisione.
DATI : sono i valori riportati nelle tre tabelle 1.1-1.3.
VARIABILI : per ogni tipo di pacco il decisore deve decidere quanti
pacchi di quel tipo realizzare.
VINCOLI : in questo caso sono presenti i vincoli sulla disponibilità di
farina, acqua e medicinali.
OBIETTIVO : il criterio di scelta è rappresentato dall’utilità complessiva
dei pacchi, che si vuole massimizzare.
Un problema di questo tipo viene chiamato problema con vincoli di risorse.
In tali problemi vi sono sempre delle risorse (in questo caso farina, acqua e
medicinali) che vengono in qualche modo utilizzate (qui per fare i pacchi)

6
e delle quali si ha una disponibilità limitata.
Vediamo allora di procedere alla formulazione di un modello matematico
per questo problema. Indichiamo con:
x1 il numero di pacchi di tipo I da realizzare.
x2 il numero di pacchi di tipo II da realizzare.
x3 il numero di pacchi di tipo III da realizzare.
Queste sono le tre variabili del problema. Ora dobbiamo tradurre i vincoli e
l’obiettivo in formule matematiche. Abbiamo un vincolo sulla disponibilità
di sacchetti di farina. Come si può tradurre in linguaggio matematico? Un
pacco di tipo I contiene 10 sacchetti di farina. Quindi x1 pacchi di tipo I
richiedono
10x1
sacchetti di farina. Analogamente, un pacco di tipo II contiene 30 sacchetti
di farina e quindi x2 pacchi richiedono

30x2

sacchetti di farina. Infine, un pacco di tipo III contiene 20 sacchetti di


farina e quindi x3 pacchi richiedono

20x3

sacchetti di farina. La somma di questi tre valori restituisce il numero


complessivo di sacchetti utilizzati. Più precisamente, il valore
10x1 + 30x2 + 20x3

rappresenta il numero complessivo di sacchetti di farina utilizzati in corri-


spondenza dei valori x1 , x2 e x3 delle variabili. Noi sappiamo di non poter
utilizzare più di 5100 sacchetti di farina e tale vincolo si traduce quindi
nella seguente disequazione

10x1 + 30x2 + 20x3 ≤ 5100,

che è proprio la traduzione in linguaggio matematico del vincolo sulla dispo-


nibilità di sacchetti di farina. In modo completamente analogo si procede
per tradurre i vincoli sulla disponibilità di bottiglie d’acqua

10x1 + 20x2 + 40x3 ≤ 8000,

e sulla disponibilità di medicinali

30x1 + 10x2 + 5x3 ≤ 1805.

7
Per essere precisi a questi tre vincoli ne dobbiamo aggiungere altri tre che
non abbiamo specificato in precedenza perché banali: le quantità di pacchi
di ciascun tipo non possono essere negative (per esempio, non ha senso
parlare di -5 pacchi di tipo I). Mentre in una descrizione a voce del problema
questo tipo di vincoli è del tutto scontato, da un punto di vista matematico
non lo é e tali vincoli sono essenziali nella definizione del modello. In
linguaggio matematico essi si esprimono semplicemente in questo modo:
x1 ≥ 0 x2 ≥ 0 x3 ≥ 0.
L’insieme dei valori che si possono assegnare a x1 , x2 , x3 senza violare i
vincoli introdotti rappresenta l’insieme ammissibile Sa del problema. Ad
esempio, x1 = 20, x2 = 20, x3 = 30 è una soluzione ammissibile, mentre
x1 = 50, x2 = 60, x3 = 40 non lo è (viola il vincolo sulla disponibilità di
medicinali) e non lo è neppure x1 = −2, x2 = 20, x3 = 40 (viola il vincolo
di non negatività del numero di pacchi di tipo I).
Resta da definire l’obiettivo del problema. Un pacco di tipo I ha utilità
pari a 14, quindi x1 pacchi hanno utilità pari a
14x1 .
In modo del tutto analogo si vede che x2 pacchi di tipo II hanno utilità pari
a
5x2
e x3 pacchi di tipo III hanno utilità pari a
4x3 .
Quindi, sommando le utilità di ciascun tipo di pacco si ottiene l’utilità
complessiva pari a
14x1 + 5x2 + 4x3 .
Il nostro obiettivo è massimizzare tale valore.
Riassumendo, il modello matematico del nostro problema è il seguente:
massimizzare 14x1 + 5x2 + 4x3
tenuto conto che
10x1 + 30x2 + 20x3 ≤ 5100
10x1 + 20x2 + 40x3 ≤ 8000
30x1 + 10x2 + 5x3 ≤ 1805
x1 ≥ 0
x2 ≥ 0
x3 ≥ 0

8
Come si vede, abbiamo a che fare con un problema di PL. Per completezza
notiamo che ulteriori vincoli che si potrebbero introdurre sono quelli di
interezza delle variabili x1 , x2 , x3 : il numero di pacchi realizzati di ciascun
tipo deve essere un valore intero. In tal caso ci troveremmo di fronte ad
un problema di Programmazione Lineare Intera (si veda il capitolo 6). Qui
peró tralasceremo tali vincoli, ammettendo quindi anche la realizzazione di
un numero frazionario di pacchi di ciascun tipo.

2.2 I problemi di PL in forma canonica


Un tipo particolare di problemi di PL è rappresentato dai problemi di PL
in forma canonica, in cui l’obiettivo è sempre da massimizzare, i vincoli
sono tutti di ≤ e le variabili sono tutte vincolate ad assumere valori non
negativi, cioè
Pn
max j=1 cj xj
Pn
j=1 aij xj ≤ bi i = 1, . . . , m
xj ≥ 0 j = 1, . . . , n

Possiamo anche scrivere il problema di PL in forma canonica in forma piú


compatta introducendo vettori e matrici. Qui e nel seguito indicheremo i
vettori con lettere minuscole in grassetto e le matrici con lettere maiuscole
in grassetto. Indichiamo con:

• c ∈ Rn il vettore di dimensione n con componenti cj , j = 1, . . . , n,


ovvero:
c = (c1 c2 · · · cn );

• x ∈ Rn il vettore di variabili di dimensione n con componenti xj ,


j = 1, . . . , n, ovvero:

x = (x1 x2 · · · xn );

• ai ∈ Rn , i = 1, . . . , m, gli m vettori di dimensione n con componenti


aij , j = 1, . . . , n, ovvero:

ai = (ai1 ai2 · · · ain ).

Recuperando alcune cose di algebra lineare, ricordiamo che dati due vettori
della stessa dimensione n, indicati con p = (p1 · · · pn ) e q = (q1 · · · qn ),

9
il prodotto scalare tra questi vettori è definito come somma dei prodotti
delle singole componenti, ovvero:
n
X
pq = pj q j .
j=1

Un’importante proprietà del prodotto scalare è la seguente. Siano p, q1 , q2 ∈


Rn e α, β ∈ R. Allora:

p(αq1 + βq2 ) = α(pq1 ) + β(pq2 )

Possiamo anche generalizzare questa proprietà. Infatti, dati i vettori p, q1 , q2 , . . . , qt ∈


Rn e gli scalari α1 , α2 , . . . , αt ∈ R, si ha che
" t # t
X X
p[α1 q1 + α2 q2 + · · · + αt qt ] = p αi qi = αi (pqi ).
i=1 i=1

Si ricordano infine le definizioni di prodotto di matrice per vettore e di


vettore per matrice. Data una matrice A di ordine m × n (m righe e n
colonne)  
a11 . . . a1n
 .. .. .. 
 . . . 
am1 ... amn
ed un vettore p di dimensione n

p = (p1 · · · pn )

Il prodotto matrice-vettore è un vettore di dimensione m la cui componente


i è il prodotto scalare tra la i-esima riga di A e il vettore p:
n
X
aij pj
j=1

Data una matrice A di ordine m × n (m righe e n colonne)


 
a11 . . . a1n
 .. .. .. 
 . . . 
am1 ... amn

ed un vettore q di dimensione m

q = (q1 · · · qm )

10
Il prodotto vettore-matrice è un vettore di dimensione n la cui componente
j è il prodotto scalare tra la j-esima colonna di A e il vettore q:
m
X
aij qi
i=1

Tenuto conto di tutto questo possiamo riscrivere il problema di PL in forma


canonica nella seguente forma:

max cx
a i x ≤ bi i = 1, . . . , m
x≥0

Possiamo ulteriormente compattare la rappresentazione con l’introduzione


della matrice A ∈ Rm×n che ha tante righe quanti sono i vincoli del proble-
ma (m) e la cui i-esima riga é il vettore ai e del vettore b = (b1 · · · bm ) ∈
Rm di dimensione m con componenti bi , i = 1, . . . , m. Con l’introduzione di
questi possiamo riscrivere il problema di PL in forma canonica nel seguente
modo:

max cx
Ax ≤ b
x≥0

Se apparentemente i problemi di PL in forma canonica rappresentano un


sottinsieme dei problemi di PL, è in realtà possibile dimostrare che ogni
problema di PL ha un problema di PL in forma canonica ad esso equivalente,
come dimostra la seguente osservazione.
Osservazione 1 Dato un problema di PL, esiste un problema di PL in
forma canonica ad esso equivalente.
Dimostrazione Si può notare che
1. ogni problema di minimo può essere trasformato in un problema di
massimo sfruttando la seguente relazione

min cx = − max −cx

2. ogni vincolo di ≥ può essere trasformato in un vincolo di ≤ nel modo


seguente
ai x ≥ bi ⇒ −ai x ≤ −bi

11
3. ogni vincolo di = può essere trasformato in due vincoli di ≤ nel modo
seguente
ai x = bi ⇒ ai x ≤ bi , −ai x ≤ −bi

4. se abbiamo una variabile xj ≤ 0 possiamo sostituirla nei vincoli e


nell’obiettivo con la variabile

x′j = −xj ≥ 0

5. se abbiamo una variabile xj libera in segno, possiamo sostituirla nei


vincoli e nell’obiettivo con una differenza di variabili non negative

xj = x′j − x′′j x′j , x′′j ≥ 0

Come esercizio, si trasformi il seguente problema di PL in un problema di


PL in forma canonica

min x1 + x2 + x3
x1 + 2x2 − x3 ≤ 3
x1 + 4x2 + 5x3 = 5
x1 − 2x2 + x3 ≥ 3
x1 ≥ 0
x2 ≤ 0
x3 libera in segno

Il risultato appena citato ci consente di concentrare la nostra attenzione sui


soli problemi di PL in forma canonica.

2.3 La regione ammissibile Sa


La regione ammissibile di un problema di PL in forma canonica é definita
nel modo seguente:

Sa = {x ∈ Rn : ai x ≤ bi , i = 1, . . . , m, x ≥ 0}.

Dobbiamo ora introdurre alcune definizioni.


Definizione 1 Un insieme C ⊆ Rn si dice convesso se

∀ x1 , x2 ∈ C ∀ λ ∈ [0, 1] : λx1 + (1 − λ)x2 ∈ C,

ovvero se dati due punti qualsiasi in C, il segmento che li congiunge è


anch’esso completamente contenuto in C.

12
Definizione 2 Un insieme C si dice limitato se esiste un R > 0 tale che

∀x∈C: kxk ≤ R,

ovvero l’insieme C è contenuto in una sfera di raggio R.

Definizione 3 Un insieme C si dice chiuso se contiene la sua frontiera.

Definizione 4 Si definisce semispazio in Rn l’insieme di punti che soddisfa


una disequazione lineare in Rn :
n
X
wj xj ≤ v
j=1

(in forma vettoriale: wx ≤ v). Si definisce iperpiano in Rn l’insieme di


punti che soddisfa un’equazione lineare in Rn :
n
X
wj xj = v
j=1

(in forma vettoriale: wx = v).

Definizione 5 Si definisce poliedro l’intersezione di un numero finito di


semispazi e/o iperpiani. Se il poliedro é limitato esso viene chiamato poli-
topo.

Questo ci dice che la regione ammissibile Sa di un problema di PL é un


poliedro. Si noti che ogni iperpiano e ogni semispazio sono insiemi chiusi.
Poiché un intersezione di un numero finito di insiemi chiusi é un insieme
chiuso, ogni poliedro é un insieme chiuso. In problemi con 2 sole variabili è
possibile rappresentare graficamente le regioni ammissibili Sa . Nel seguente
esempio, la rappresentazione grafica ci consentirá di visualizzare le diverse
forme possibili di Sa .

Esempio 1 Rappresentare graficamente le regioni ammissibili Sa per i se-


guenti tre problemi e constatare che sono altrettanti esempi di regione am-
missibile vuota, di politopo e di poliedro illimitato.

max x1 + x2
x1 ≤ −1
x1 + x2 ≤ 1
x1 , x2 ≥ 0

13
max x1 + x2
x1 + x2 ≤ 1
x1 , x2 ≥ 0

max x1 + x2
x1 − x2 ≤ 0
x1 , x2 ≥ 0

La seguente osservazione ci mostra anche che la regione ammissibile Sa di un


problema in forma canonica é un insieme convesso (il risultato é facilmente
estendibile ad ogni poliedro).

Osservazione 2 La regione ammissibile Sa di un problema di PL in forma


canonica é un insieme convesso.

Dimostrazione Siano dati due generici punti x1 , x2 ∈ Sa . Si avrá:

a i x1 ≤ b i i = 1, . . . , m x1 ≥ 0,

e
a i x2 ≤ b i i = 1, . . . , m x2 ≥ 0.
Quindi, per ogni λ ∈ (0, 1) e per ogni i ∈ {1, . . . , m} avremo:

ai [λx1 + (1 − λ)x2 ] = λai x1 + (1 − λ)ai x2 ≤ λbi + (1 − λ)bi = bi ,

e
λ x1 + (1 − λ) x2 ≥ 0,
|{z} |{z} | {z } |{z}
>0 ≥0 >0 ≥0

da cui
λx1 + (1 − λ)x2 ∈ Sa .
Ció equivale a dire che Sa é un insieme convesso.

Vediamo ora di introdurre la definizione di alcuni particolari punti di Sa , i


vertici di Sa .

Definizione 6 Si definisce vertice di Sa un punto x ∈ Sa tale che non


esistono due punti distinti x1 , x2 ∈ Sa , x1 6= x2 , tali che
1 1
x= x 1 + x2 .
2 2

14
In problemi con 2 variabili i vertici sono facilmente identificabili, coinciden-
do con la usuale definizione di vertice di una figura piana.

Esempio 2 Si verifichi che, dato il problema

max x1 + x2
x1 + x2 ≤ 1
−2x1 − 2x2 ≤ −2
x1 , x2 ≥ 0

il punto (1/2, 1/2) non è un vertice di Sa mentre lo è il punto (1, 0)

Un primo importante teorema per la PL é il seguente.

Teorema 1 Dato un problema di PL in forma canonica, se Sa 6= ∅, allora


Sa contiene almeno un vertice.

Si puó inoltre dimostrare la seguente osservazione.

Osservazione 3 Sa ha sempre un numero finito di vertici.

Nel caso Sa sia un poliedro illimitato possiamo anche introdurre le defini-


zioni di raggio e raggio estremo.

Definizione 7 Si definisce raggio di Sa un vettore r 6= 0 tale che

∀ x0 ∈ S a ∀ λ ≥ 0 : x0 + λr ∈ Sa ,

cioé la semiretta con origine in x0 e direzione r é completamente contenuta


in Sa per qualsiasi punto x0 ∈ Sa . Un raggio r di Sa si definisce raggio
estremo di Sa se non esistono altri due raggi r1 e r2 di Sa con direzioni
distinte, ovvero
r1 6= µr2 ∀ µ ∈ R,

tali che
1 1
r= r1 + r2 .
2 2
Ovviamente i politopi non hanno alcun raggio. Infatti l’esistenza di un
raggio implica che Sa contenga almeno una semiretta, che é un insieme
illimitato, mentre i politopi sono, per definizione, insiemi limitati. Anche
in questo caso in problemi con 2 sole variabili é facile riconoscere i raggi
estremi, che coincidono con le semirette che delimitano la figura piana.

15
Esempio 3 Si verifichi che dato il problema

max x1 + x2
x1 − x2 ≤ 0
x1 , x2 ≥ 0

i vettori
(1/2, 1) (0, 1) (1, 1)

sono tutti raggi di Sa ma solo gli ultimi due sono raggi estremi.

Come per i vertici, anche per i raggi estremi si puó dimostrare che il loro
numero é sempre finito.

Osservazione 4 Sa ha sempre un numero finito di raggi estremi.

Siamo ora pronti per enunciare un importante teorema che mostra che la
regione ammissibile Sa di un problema di PL in forma canonica è com-
pletamente caratterizzata dai suoi vertici e raggi estremi , il teorema di
rappresentazione per Sa .

Teorema 2 Sia dato un problema di PL in froma canonica con Sa 6=


∅. Siano v1 , . . . , vk i vertici di Sa e, nel caso in cui Sa sia un poliedro
illimitato, siano r1 , . . . , rh i raggi estremi di Sa . Allora

x ∈ Sa

se e solo se
k
X
∃ λ1 , . . . , λk ≥ 0, λi = 1, ∃ µ1 , . . . , µh ≥ 0
i=1

tali che
k
X h
X
x= λ i vi + µj rj .
i=1 j=1

Il teorema ci dice che tutti e soli i punti di Sa sono ottenibili come somma
di una combinazione convessa (combinazione lineare con coefficienti non
negativi e la cui somma è pari a 1) dei vertici di Sa e di una combinazione
lineare con coefficienti non negativi dei raggi estremi di Sa .

16
2.4 L’insieme delle soluzioni ottime Sott
Fino a questo momento ci siamo limitati a considerare la regione ammis-
sibile Sa di un problema di PL. Ricordiamo peró che il nostro scopo é
determinare una soluzione ottima del problema di PL. Quindi dobbiamo
trovare almeno un punto all’interno dell’insieme:
Sott = {x∗ ∈ Sa : cx∗ ≥ cx ∀ x ∈ Sa },
detto insieme delle soluzioni ottime del problema. Notiamo immediata-
mente che Sott ⊆ Sa , il che banalmente implica che se Sa = ∅, allora anche
Sott = ∅. Inoltre, si dimostra la seguente osservazione.
Osservazione 5 Se Sott é un insieme finito e non vuoto, Sott contiene un
solo punto.
Dimostrazione Ragioniamo per assurdo. Supponiamo che Sott sia un
insieme finito e contenga piú di un punto. Siano x1 , x2 ∈ Sott , x1 6= x2 ,
due punti distinti di Sott . Si dovrá avere cx1 = cx2 . Per la convessitá di
Sa si ha che tutti i punti:
λx1 + (1 − λ)x2 λ ∈ (0, 1),
(i punti lungo il segmento che congiunge x1 e x2 ), appartengono a Sa .
Inoltre, la linearitá della funzione obiettivo implica:
c[λx1 +(1−λ)x2 ] = λcx1 +(1−λ)cx2 = λcx1 +(1−λ)cx1 = cx1 ∀ λ ∈ (0, 1).
Ma allora tutto il segmento che congiunge x1 e x2 é contenuto in Sott .
Essendo tale insieme costituito da un numero infinito di punti, questo con-
traddice l’ipotesi di finitezza dell’insieme Sott .

Prima di addentrarci nell’analisi di Sott introduciamo un metodo di tipo


grafico che ci consentirá di determinare Sott nel caso di problemi con due
sole variabili. Nonostante la limitata applicabilitá di questo metodo di
risoluzione (i problemi reali hanno tipicamente molto piú di due sole varia-
bili), esso ci consentirá di visualizzare facilmente le diverse possibili forme
dell’insieme Sott .

2.4.1 Metodo di risoluzione grafica


Per descrivere la risoluzione grafica consideriamo il seguente esempio:
max x1 + 2x2
x1 + x2 ≤ 1
x1 , x2 ≥ 0

17
Per prima cosa disegniamo la regione ammissibile Sa . Poi prendiamo la
funzione obiettivo e poniamola uguale a 0, cioé consideriamo cx = 0 nel
caso generale e x1 + 2x2 = 0 nell’esempio. Questa é una retta che passa per
l’origine che contiene tutti i punti in R2 con valore della funzione obiettivo
pari a 0. Ora voglio individuare qual é la direzione di crescita del fascio di
rette
cx = k, k ∈ R
parallele alla retta cx = 0 passante per l’origine. Nell’esempio avremo
x1 + 2x2 = k, k ∈ R
fascio di rette parallele a x1 + 2x2 = 0. Possiamo individuare la direzione
di crescita per esempio tracciando la retta cx = 1 (quindi x1 + 2x2 = 1
nel nostro esempio) e la direzione di crescita sará quella che va dalla retta
cx = 0 verso la retta cx = 1. In Figura 2.1 la direzione di crescita per il
nostro esempio é indicata con una freccia sulla retta x1 + 2x2 = 0. A questo

@ B (0,1)
@
@
@
@
@
@
@
HH @
HH @
HH Sa @
HH @
HH @ A (1,0)
HH @
O HH @
HH ­­ @
HH
HH
H
x1+2x2=0

Figura 2.1:

punto sono possibili due casi:

18
Caso 1 Muovendomi dalla retta cx = 0 verso la direzione di crescita ho
almeno una retta del fascio con intersezione non vuota con Sa . In tal
caso abbiamo due sottocasi possibili.
Caso 1.1 Esiste un valore k tale che la retta cx = k ha intersezione
non vuota con Sa mentre tutte le retta cx = k per k > k hanno
intersezione vuota con Sa . In tal caso k é il valore ottimo del
problema e l’intersezione della retta cx = k con Sa costituisce
l’insieme Sott .
Caso 1.2 Esiste un K ≥ 0 tale che per ogni k ≥ K la retta cx = k
ha intersezione non vuota con Sa . In tal caso ci troviamo nella
situazione in cui Sott = ∅ in quanto il problema ha obiettivo
illimitato.
Caso 2 Muovendomi dalla retta cx = 0 verso la direzione di crescita non
ho alcuna retta del fascio con intersezione non vuota con Sa . In tal
caso mi muovo nella direzione di decrescita e mi arresto con la prima
retta cx = k (k < 0) che ha intersezione non vuota con Sa (quindi
per ogni k > k si ha che la retta cx = k ha intersezione vuota con
Sa ). Il valore k é il valore ottimo del problema e l’intersezione della
retta cx = k con Sa rappresenta l’insieme Sott .
Nel nostro esempio si puó vedere che ci si trova nel Sottocaso 1.1 con k = 2
e Sott ristretto al solo punto B di coordinate (0, 1).

2.4.2 Le diverse forme possibili di Sott


Siamo ora pronti a individuare tutte le forme possibili di Sott al variare di
Sa .
Caso 1 Sa = ∅. In tal caso, essendo Sott un sottinsieme di Sa , puó solo
essere Sott = ∅.
Caso 2 Sa 6= ∅ e politopo. Un politopo é un insieme chiuso e limitato,
mentre la funzione obiettivo é lineare e quindi certamente continua.
Di conseguenza, il Teorema di Weierstrass garantisce l’esistenza di
almeno una soluzione ottima, ovvero Sott 6= ∅. Sono possibili due
sottocasi.
Caso 2.1 Sott é costituito da un solo punto.
Caso 2.2 Sott é costituito da un insieme infinito e limitato di punti.
Si noti che l’Osservazione 5 esclude la possibilitá di un numero finito e
maggiore di 1 di punti in Sott , mentre la limitatezza di Sott é garantita

19
dal fatto che é un sottinsieme di Sa che a sua volta é un politopo e
quindi é limitato.
Caso 3 Sa 6= ∅ e poliedro illimitato. Sono possibili quattro sottocasi.
Caso 3.1 Sott = ∅ in quanto l’obiettivo é illimitato, ovvero esiste
una sequenza infinita di punti {xk } di Sa lungo cui la funzione
obiettivo cresce a +∞. Formalmente:

∃ {xk } : xk ∈ Sa ∀ k e cxk → +∞ k → +∞.

Caso 3.2 Sott é costituito da un solo punto.


Caso 3.3 Sott é costituito da un insieme infinito e limitato di punti.
Caso 3.4 Sott é costituito da un insieme infinito e illimitato di punti.
Come esercizio si applichi ora la risoluzione grafica ai seguenti esempi rico-
noscendo in essi molti dei casi possibili per Sott precedentemente elencati.

max x1 + x2
x1 + x2 ≤ 1
x1 , x2 ≥ 0

max x1 + x2
−x1 + x2 ≤ 0
x1 − x2 ≤ 1
x2 ≥ 1
x1 , x2 ≥ 0

max −x1
−x1 + x2 ≤ 0
x1 − x2 ≤ 1
x2 ≥ 1
x1 , x2 ≥ 0

max −x2
−x1 + x2 ≤ 0
x1 − x2 ≤ 1
x2 ≥ 1
x1 , x2 ≥ 0

20
max x1 − x2
−x1 + x2 ≤ 0
x1 − x2 ≤ 1
x2 ≥ 1
x1 , x2 ≥ 0

2.5 Il Teorema Fondamentale della PL


La risoluzione grafica dei precedenti esempi mostra anche che, quando
Sott 6= ∅, tale insieme contiene sempre almeno un vertice. Non é un caso.
Vale infatti un teorema molto importante noto come Teorema Fondamen-
tale della Programmazione Lineare. Prima di dimostrare questo abbiamo
bisogno di dimostrare un lemma.
Lemma 1 Dato un problema di PL in forma canonica, se Sott 6= ∅, allora
per ogni raggio estremo r di Sa si ha:
cr ≤ 0.
Dimostrazione La dimostrazione é per assurdo. Supponiamo infatti che
esista un raggio estremo r tale che
cr > 0 (2.1)
Notiamo che Sott 6= ∅ implica Sa 6= ∅. Sia allora x0 ∈ Sa . Poiché r è un
raggio, in base alla Definizione 7 di raggio avremo che
∀ λ ≥ 0 : x0 + λr ∈ Sa .
Calcoliamo ora il valore della funzione obiettivo nei punti x0 + λr:
c(x0 + λr) = cx0 + λcr
Ma, in base a (2.1) possiamo concludere che
c(x0 + λr) → +∞ λ → +∞,
cioé Sott = ∅ in quanto l’obiettivo é illimitato sulla regione ammissibile, il
che contraddice Sott 6= ∅.

Si noti che la dimostrazione del lemma ci dice anche che qualora esista
un raggio estremo r di Sa tale che cr > 0, allora il problema ha obietti-
vo illimitato. Si puó dimostrare anche il viceversa, cioé se il problema ha
obiettivo illimitato, allora esiste sicuramente un raggio estremo r di Sa tale
che cr > 0. Siamo ora pronti a dimostrare il Teorema Fondamentale della
PL.

21
Teorema 3 Dato un problema di PL in forma canonica, se Sott 6= ∅, allora
Sott contiene almeno un vertice di Sa .
Dimostrazione Indichiamo con v1 , . . . , vk i vertici di Sa e, nel caso in cui
Sa sia un poliedro illimitato, indichiamo con r1 , . . . , rh i raggi estremi di
Sa . Se Sott 6= ∅, sia x∗ ∈ Sott .
Utilizzeremo una dimostrazione per assurdo. Per assurdo supponiamo che
v1 , . . . , vk 6∈ Sott
cioè supponiamo che nessun vertice di Sa appartenga a Sott . In particolare
avremo
cvi < cx∗ i = 1, . . . , k (2.2)
In base al Teorema 2, poiché x∗ ∈ Sa avremo che
k
X
∃ λ∗1 , . . . , λ∗k ≥ 0, λ∗i = 1, ∃ µ∗1 , . . . , µ∗h ≥ 0 (2.3)
i=1

tali che
k
X h
X
x∗ = λ∗i vi + µ∗j rj .
i=1 j=1

Quindi avremo  
k
X h
X
cx∗ = c  λ∗i vi + µ∗j rj 
i=1 j=1

e per la linearità della funzione obiettivo


k
X h
X
cx∗ = λ∗i (cvi ) + µ∗j (crj ).
i=1 j=1

Nel Lemma 1 abbiamo dimostrato che:


crj ≤ 0 j = 1, . . . , h. (2.4)
Ora, in base a (2.3) e (2.4) avremo
k
X h
X
cx∗ = λ∗i (cvi ) + µ∗j (crj ) .
i=1 j=1
|{z} | {z }
≥0 ≤0

da cui
k
X
cx∗ ≤ λ∗i (cvi ).
i=1

22
Ma ora possiamo sfruttare (2.2):
k
X k
X
cx∗ ≤ λ∗i (cvi ) < λ∗i (cx∗ ).
| {z }
i=1 i=1
<cx∗

(si noti che lo strettamente minore vale perché almeno uno dei λ∗i è stret-
tamente positivo in quanto, in base a (2.3), la loro somma deve essere pari
a 1). Poiché cx∗ non dipende dall’indice i della sommatoria, lo possiamo
portare fuori dalla stessa e quindi
k
X
cx∗ < (cx∗ ) λ∗i .
i=1
Pk
Ma ora in base a (2.3) abbiamo che i=1 λ∗i = 1, da cui
cx∗ < cx∗
il che è assurdo.

Questo risultato é alla base della procedura di risoluzione che descrive-


remo, l’algoritmo del simplesso. Infatti, tale algoritmo ricerca la soluzione
ottima cercando di spostarsi ad ogni iterazione in modo intelligente da un
vertice all’altro di Sa . Per modo intelligente si intende che l’algoritmo ten-
ta di spostarsi ad una data iterazione da un vertice a uno con valore della
funzione obiettivo maggiore.

2.6 Preparazione al metodo del simplesso


Sappiamo che il nostro scopo é trovare almeno un punto in Sott oppure
stabilire che Sott = ∅ in quanto anche Sa = ∅ oppure perché l’obiettivo del
problema di PL é illimitato. Dobbiamo allora individuare un metodo che
ci consenta di raggiungere il nostro scopo. Abbiamo giá incontrato un tale
metodo, quello di risoluzione grafica, la cui applicabilitá é peró ristretta ai
soli problemi con due variabili. Quello che vogliamo ora é un metodo che
possa essere applicato con un numero qualsiasi di variabili. Questo metodo
sará il metodo del simplesso. Prima peró di arrivare a descriverlo avremo
bisogno di alcuni passaggi intermedi.

2.6.1 I problemi di PL in forma standard


I problemi di PL in forma standard hanno la seguente formulazione:
max cx

23
a i x = bi i = 1, . . . , m
x≥0

o, equivalentemente, in forma matriciale:

max cx
Ax = b
x≥0

dove A é la matrice la cui i-esima riga é il vettore ai e b é il vettore la cui


i-esima componente é bi . Rispetto alla forma canonica cambia solamente
il fatto che i vincoli non sono piú di ≤ ma sono di uguaglianza. Vale la
seguente osservazione.

Osservazione 6 Ogni problema di PL in forma canonica puó essere tra-


sformato in uno equivalente in forma standard.

Dimostrazione Sia dato il problema di PL in forma canonica

max cx
ai x ≤ bi i = 1, . . . , m
x≥0

Con l’aggiunta di una nuova variabile yi per ogni vincolo ai x ≤ bi , possiamo


esprimere tale vincolo attraverso la seguente coppia di vincoli:

a i x + y i = bi , yi ≥ 0.

Quindi, il problema di PL in forma canonica é equivalente al seguente:

max cx
a i x + y i = bi i = 1, . . . , m
x≥0
yi ≥ 0 i = 1, . . . , m

che é in forma standard (vincoli di uguaglianza e variabili non negative).

Avendo giá dimostrato in precedenza che ogni problema di PL puó es-


sere ricondotto ad uno equivalente in forma canonica, l’osservazione sopra
ci dice anche che ogni problema di PL puó essere ricondotto ad uno equi-
valente in forma standard.

24
Riguardo la matrice A ∈ Rm×n con i-esima riga ai , nel seguito faremo
sempre la seguente ipotesi: la matrice A ha rango pari a m, il numero
delle sue righe.
Si noti che deve necessariamente essere m ≤ n (per n < m il rango di A
potrebbe essere al piú n e non potrebbe essere pari a m). Si puó dimostrare
che anche questa non é una condizione restrittiva e che ci si puó sempre
ricondurre ad essa. Inoltre la condizione è equivalente alle seguenti:
• non ci sono righe di A ottenibili come combinazioni lineari di altre
righe di A;
• esistono m colonne della matrice A che formano una matrice quadrata
invertibile.
NB: Si puó dimostrare che anche questa non é una condizione restrittiva e
che ci si puó sempre ricondurre ad essa. La seguente matrice
 
1 2 1 3
A1 =  2 1 3 4 
3 0 5 5
ha rango < m = 3, in quanto la terza riga può essere ottenuta come combi-
nazione lineare della prima e della seconda rispettivamente con coefficienti
pari a −1 e +2. Invece la matrice
· ¸
1 2 2 1 −1
A2 =
3 7 1 3 1
ha rango pari a m = 2 (le prime due colonne, ad esempio, formano una
matrice invertibile).

2.6.2 Basi e soluzioni di base


Un concetto importante é quello di base di un problema di PL in forma
standard.
Definizione 8 Si definisce base di un problema di PL in forma standard
un sottinsieme:
B = {xi1 , . . . , xim }
di m delle n variabili del problema di PL con la proprietá che la matri-
ce AB ∈ Rm×m ottenuta considerando le sole colonne di A relative alle
variabili xik , k = 1, . . . , m, sia invertibile. Le variabili dell’insieme B ver-
ranno dette variabili in base, quelle al di fuori di B verranno raggruppate
nell’insieme:
N = {xim+1 , . . . , xin }
e verranno dette variabili fuori base.

25
Esempio 4 Sia dato il seguente problema di PL in forma standard:
max 3x1 + 4x2 + 2x3 + 2x4 + x5
x1 + 2x2 + 2x3 + x4 − x5 = 2
x1 + 2x2 + x3 + 4x4 − 2x5 = 2
x1, x2 , x3 , x4 , x5 ≥ 0
In questo caso si hanno due vincoli e quindi m = 2. Se prendiamo B1 =
{x1 , x2 } vediamo che B1 non é una base. Si ha infatti:
· ¸
1 2
AB 1 =
1 2
che non é invertibile. Invece, B2 = {x1 , x3 } é una base in quanto:
· ¸
1 2
AB 2 =
1 1
é invertibile. Allo stesso modo si verifichi che B3 = {x3 , x4 } e B4 =
{x4 , x5 } sono basi.
Introduciamo ora il concetto di soluzione di base. Data una base B, indi-
chiamo con
• xB ∈ Rm il vettore delle variabili in base;
• xN ∈ Rn−m il vettore delle variabili fuori base;
• cB ∈ Rm il vettore dei costi relativi alle variabili in base;
• cN ∈ Rn−m il vettore dei costi relativi alle variabili fuori base;
• AN ∈ Rm×(n−m) la matrice ottenuta da A considerando le sole
colonne relative alle variabili fuori base.
Possiamo ora riscrivere il problema di PL in forma standard nella seguente
forma equivalente:
max c B xB + c N xN
AB x B + A N xN = b
xB , xN ≥ 0
e quindi anche in questo modo:
max c B xB + c N xN
AB x B = b − AN x N
xB , xN ≥ 0

26
Moltiplichiamo ora i vincoli per A−1
B . Si ottiene:

max c B xB + c N xN
xB = A−1 −1
B b − AB AN xN
xB , xN ≥ 0

Infine, sostituendo xB nell’obiettivo si ottiene la seguente ulteriore riformu-


lazione, sempre equivalente alle precedenti:

max cB A−1 −1
B b + (cN − cB AB AN )xN
xB = A−1 −1
B b − AB AN xN (2.5)
xB , xN ≥ 0

Questa riformulazione viene detta riformulazione del problema di PL ri-


spetto alla base B. Siamo ora pronti a dare la definizione di soluzione di
base.

Definizione 9 Si definisce soluzione di base associata alla base B, la se-


guente soluzione ottenuta ponendo xN = 0 nei vincoli in (2.5):

xB = A−1
B b xN = 0.

Se A−1B b ≥ 0 la soluzione di base si dice ammissibile. Se inoltre si ha


A−1
B b > 0 si parla di soluzione di base non degenere, altrimenti si parla di
soluzione di base degenere.

Ma vediamo di tornare all’Esempio 4.

Esempio 5 Data la base B2 dell’Esempio 4, si ha


· ¸ · ¸
−1 −1 2 2 1 −1
AB 2 = AN2 =
1 −1 2 4 −2

cB2 = (3 2) cN2 = (4 2 1)
b = (2 2)
da cui si ottiene la seguente riformulazione rispetto alla base B2 :

max 6 − 2x2 − 13x4 + 8x5


x1 = 2 − 2x2 − 7x4 + 3x5
x3 = 0 + 3x4 − x5
x1 , x2 , x3 , x4 , x5 ≥ 0

27
Ponendo a 0 le variabili fuori base si ottiene la seguente soluzione di base
associata a B2 :
x1 = 2 x3 = 0 x2 = x4 = x5 = 0.
La soluzione di base é ammissibile (tutte le variabili hanno valore non ne-
gativo) e degenere (la variabile in base x3 ha valore nullo). Il valore dell’o-
biettivo in corrispondenza di tale soluzione di base é 6 (lo si vede ponendo
a 0 le variabili fuori base nell’obiettivo).
In modo analogo si dimostri che la soluzione di base associata a B3 =
{x3 , x4 } é:
x3 = 6/7 x4 = 2/7 x1 = x2 = x5 = 0,
che é ammissiibile e non degenere e che la soluzione di base associata a
B4 = {x4 , x5 } é:

x4 = −1 x5 = −3 x1 = x2 = x3 = 0,

che é non ammissibile.


Vale la seguente osservazione.
Osservazione 7 Data una soluzione di base ammissibile e non degene-
re esiste un’unica base che la rappresenta, mentre una soluzione di base
ammissibile e degenere é rappresentata da piú basi.
Si verifichi, ad esempio, che la base B5 = {x1 , x4 } ha come soluzione di
base associata:
x1 = 2 x4 = 0 x2 = x3 = x5 = 0,
che é la stessa associata alla base B2 .

In precedenza abbiamo stabilito che, se Sott 6= ∅, allora almeno un pun-


to di Sott é un vertice di Sa , il che ci consente di restringere la ricerca delle
soluzioni ottime ai soli vertici di Sa . Ma cosa ha a che fare tutto questo con
le basi e le soluzioni di base associate? La risposta ci viene dalla seguente
osservazione.
Osservazione 8 L’insieme dei vertici di Sa coincide con l’insieme delle
soluzioni di base ammissibili del problema di PL.
Quindi questo ci dice che possiamo indifferentemente parlare di vertici e
di soluzioni di base ammissibili e possiamo ricercare soluzioni ottime del
problema restringendo l’attenzione alle sole soluzioni di base ammissibili.
Diamo ora la definizione di basi adiacenti.
Definizione 10 Due basi B ′ e B ′′ si definiscono adiacenti se hanno m − 1
variabili uguali e differiscono per una sola variabile.

28
Nell’esempio le basi B3 e B4 , che differiscono per una sola variabile, sono
adiacenti. Il concetto di adiacenza si estende anche alle soluzioni di base.
Definizione 11 Due soluzioni di base distinte si definiscono adiacenti se
esistono due basi B ′ e B ′′ che le rappresentano e che sono tra loro adiacenti.
Si noti che due basi adiacenti non corrispondono necessariamente a due
soluzioni di base adiacenti. Esse infatti possono corrispondere alla stessa
soluzione di base come accade, ad esempio, con le basi B2 e B5 .

2.6.3 L’operazione di cardine


Vogliamo ora introdurre una procedura, detta operazione di cardine, che
ci consenta di passare dalla riformulazione del problema di PL rispetto ad
una base B alla riformulazione rispetto ad una base adiacente B ′ . Sia data
la base:
B = {xi1 , . . . , xim }.
Sia
N = {xim+1 , . . . , xin }
l’insieme delle variabili fuori base. Abbiamo visto che, data la base B, la
riformulazione del problema di PL rispetto alla base B é data da (2.5).
Indicando con:
• γ0 il valore cB A−1
B b;

• γj , j = 1, . . . , n − m, le componenti del vettore


cN − cB A−1
B AN ;

• βr , r = 1, . . . , m, le componenti del vettore A−1


B b;

• αrj , r = 1, . . . , m, j = 1, . . . , n − m, le componenti della matrice


−A−1 B AN

possiamo riscrivere la riformulazione (2.5) rispetto alla base B nel seguente


modo:
Pn−m
max γ0 + j=1 γj xim+j
Pn−m
xi1 = β1 + j=1 α1j xim+j
···
Pn−m
xik = βk + j=1 αkj xim+j (2.6)
···
Pn−m
xim = βm + j=1 αmj xim+j
x1 , . . . , xn ≥ 0

29
Supponiamo ora di voler passare dalla base B alla base adiacente B ′ otte-
nuta rimuovendo da B la variabile xik , 1 ≤ k ≤ m, e sostituendola con la
variabile fuori base xim+h , 1 ≤ h ≤ n − m, ovvero:

B ′ = {xi1 , . . . , xik−1 , xim+h , xik+1 , . . . , xim }.

La prima domanda che ci dobbiamo porre é quando B ′ é effettivamente una


base. Perché lo sia si deve avere che AB ′ é invertibile. Tuttavia il seguente
risultato ci consente una verifica molto piú rapida.

Osservazione 9 Si ha che AB ′ é invertibile e quindi B ′ é una base se e


solo se nella riformulazione associata alla base B il coefficiente di xim+h
nell’equazione relativa a xik é diverso da 0, ovvero se e solo se:

αkh 6= 0.

Supposto che αkh 6= 0, vediamo ora di passare dalla riformulazione rispetto


alla base B a quella rispetto alla base B ′ . Per fare questo dovremo compiere
le seguenti operazioni.

• Ricavare xim+h dall’equazione relativa a xik , cioé:


n−m
βk 1 X αkj
xim+h = − + xi − xi . (2.7)
αkh αkh k αkh m+j
j=1, j6=h

• sostituire ogni occorrenza della variabile xim+h nelle restanti equazioni


e nell’obiettivo con la parte destra di (2.7).

Una volta eseguite queste operazioni si ha la seguente riformulazione rispet-


to a B ′ :
³ ´ Pn−m ³ ´
αkj
max γ0 − γh αβkh
k
+ αγkh
h
xik + j=1, j6=h γj − γh αkh xim+j
³ ´ Pn−m ³ ´
αkj
xi1 = β1 − α1h αβkh k
+ ααkh
1h
xik + j=1, j6=h α1j − α1h αkh
···
Pn−m αkj
xim+h = − αβkh k
+ α1kh xik − j=1, j6=h αkh xim+j . (2.8)
³ ´ ··· ³ ´
βk αmh Pn−m αkj
xim = βm − αmh αkh + αkh xik + j=1, j6=h αmj − αmh αkh
x1 , . . . , xn ≥ 0

NOTA BENE Per poter recuperare dalle riformulazioni alcune informa-


zioni (nel seguito vedremo, ad esempio, come sfruttare la riformulazione

30
−1
rispetto a una base B per poter ottenere la matrice AB ) é necessario
mantenere un ordine tra le variabili in una base. Quindi se nella base B ′
la variabile xim+h sostituisce la variabile xik a cui corrisponde la k-esima
equazione della riformulazione rispetto a B, nella riformulazione rispetto a
B ′ l’equazione relativa alla variabile xim+h dovrá ancora essere la k-esima,
mentre la posizione delle equazioni relative a tutte le altre variabili deve
rimanere invariata rispetto alla precedente riformulazione.

Vediamo ora di chiarire meglio come si esegue l’operazione di cardine ope-


rando sul nostro esempio. Consideriamo la base B2 . Come giá visto, la
riformulazione rispetto a questa base é la seguente:

max 6 − 2x2 − 13x4 + 8x5


x1 = 2 − 2x2 − 7x4 + 3x5
x3 = 0 + 3x4 − x5
x1 , x2 , x3 , x4 , x5 ≥ 0

Supponiamo ora di voler passare alla riformulazione rispetto alla base adia-
cente B6 = {x1 , x5 } ottenuta rimuovendo da B2 la variabile x3 e sostituen-
dola con x5 . Per prima cosa notiamo che il coefficiente di x5 nell’equazione:

x3 = 0 + 3x4 − x5

relativa a x3 é pari a −1 6= 0 e quindi B6 é una base in base all’Osserva-


zione 9. Per prima cosa dobbiamo ricavare un’equazione per x5 partendo
dall’equazione per x3 riportata appena sopra. Si ottiene:

x5 = 0 − x3 + 3x4 .

Quindi, dobbiamo sostituire a x5 nelle equazioni restanti e nell’obiettivo la


parte destra di tale equazione. Avremo quindi nell’unica equazione restante:

x1 = 2 − 2x2 − 7x4 + 3(0 − x3 + 3x4 ),

e nell’obiettivo:
6 − 2x2 − 13x4 + 8(0 − x3 + 3x4 ).
Svolgendo i calcoli la riformulazione rispetto a B6 sará la seguente:

max 6 − 2x2 − 8x3 + 11x4


x1 = 2 − 2x2 − 3x3 + 2x4
x5 = 0 − x3 + 3x4
x1 , x2 , x3 , x4 , x5 ≥ 0

31
Si noti che la posizione dell’equazione relativa a x5 nelle nuova riformulazio-
ne é la stessa dell’equazione relativa a x3 nella precedente riformulazione,
mentre la posizione delle equazioni relative alle altri variabili (in questo
caso la sola x1 ) rimane invariata.
Una volta chiarita l’operazione di cardine siamo pronti ad addentrarci nel
prossimo capitolo nella descrizione del metodo del simplesso per risolvere
problemi di PL.

32
Capitolo 3

Il metodo del simplesso

Per la coincidenza tra vertici e soluzioni di base ammissibili, abbiamo visto


che possiamo restringere la ricerca delle soluzioni ottime alle sole soluzioni
di base ammissibili. Per questa ragione il metodo del simplesso procede pas-
sando ad ogni iterazione da una base ammissibile ad una adiacente ancora
ammissibile fino a quando é sodisfatta una qualche condizione di termina-
zione. Il passaggio da una base all’altra viene fatto in modo intelligente:
dal momento che vogliamo massimizzare il nostro obiettivo, desideriamo
passare da una base ammissibile con una certa soluzione di base associata
ad un’altra base ammissibile con una soluzione di base che ha valore dell’o-
biettivo migliore (piú elevato) o quanto meno non peggiore rispetto a quella
precedente.
Vedremo nel seguito come questo sia verificato. Supponiamo ora di avere
una base ammissibile B con la relativa riformulazione (2.6). Si noti che pro-
blemi non banali sono stabilire se esiste una base ammissibile (o, equivalen-
temente, stabilire se Sa 6= ∅) e, nel caso esista, determinarne una. Di questi
problemi ci occuperemo in seguito. Per il momento supponiamo di avere
giá a disposizione una base ammissibile B (ovvero βk ≥ 0, k = 1, . . . , m, in
(2.6).

Verifica di ottimalitá
La prima domanda che ci poniamo é la seguente: quando possiamo dire
che la soluzione di base ammissibile associata a B é una soluzione ottima
del nostro problema? A questo proposito una particolare rilevanza han-
no i coefficienti delle variabili fuori base nell’obiettivo della riformulazione
(2.6). Questi vengono detti anche coefficienti di costo ridotto delle variabili
fuori base e sono interpretabili come indicazione della variazione dell’obiet-

33
tivo in corrispondenza dell’incremento di un’unitá della variabile fuori ba-
se corrispondente. Infatti, se consideriamo l’obiettivo della riformulazione
(2.6):
n−m
X
γ0 + γj xim+j ,
j=1

supponiamo di tenere a 0 il valore di tutte le variabili fuori base tranne


la variabile xim+h il cui valore viene incrementato a 1. Il nuovo valore
dell’obiettivo é γ0 + γh con una variazione rispetto al valore γ0 pari proprio
al valore γh del coefficiente di costo ridotto γh . Ma in che modo i coefficienti
di costo ridotto ci possono dire se la soluzione di base associata alla base B é
una soluzione ottima? Una condizione sufficiente per garantire l’ottimalitá
é la seguente:
γj ≤ 0 j = 1, . . . , n − m. (3.1)
Si richiede quindi che i coefficienti di costo ridotto delle variabili fuori base
siano tutti non positivi. Ricordando che γj sono le componenti del vettore
cN − cB A−1 B AN (detto anche, per questa ragione, vettore dei coefficienti
di costo ridotto), in forma vettoriale la condizone sufficiente di ottimalitá
(3.1) si esprime nel modo seguente:
cN − cB A−1
B AN ≤ 0. (3.2)
Ma vediamo di capire perché la condizione (3.1) ci garantisce che la solu-
zione di base associata a B é una soluzione ottima del problema. Sappiamo
che il valore dell’obiettivo in corrispondenza di questa soluzione di base é
γ0 . Notiamo inoltre che in Sa si ha xim+j ≥ 0, j = 1, . . . , n − m. Quindi
per il valore dell’obiettivo in Sa si avrá:
n−m
X
γ0 + γj xim+j ≤ γ0 , (3.3)
j=1
|{z} | {z }
≤0 ≥0

ovvero in Sa il valore dell’obiettivo non puó mai superare il valore γ0 . Es-


sendo questo anche il valore dell’obiettivo per la nostra soluzione di base,
tale soluzione di base é anche soluzione ottima del nostro problema.
É importante sottolineare che la condizione é solo sufficiente, cioé puó suc-
cedere che la soluzione di base sia giá una soluzione ottima ma la condi-
zione (3.1) non sia soddisfatta. Ció peró puó accadere solo nel caso di una
soluzione di base degenere.
Esempio 6 Sia data la seguente riformulazione rispetto alla base {x3 , x4 }
di un problema di PL:
max x1

34
x3 = 1 − x2
x4 = −x1
x1 , x2 , x3 , x4 ≥ 0

La soluzione di base corrispondente é:

x3 = 1 x4 = 0 x1 = x2 = 0.

Si noti che é degenere. La condizione (3.1) non é soddisfatta (il coefficiente


di x1 nell’obiettivo é pari a 1). Ma passiamo ora, con l’operazione di car-
dine, alla base adiacente {x1 , x3 }. La riformulazione rispetto a questa base
é la seguente:

max −x4
x3 = 1 − x2
x1 = −x4
x1 , x2 , x3 , x4 ≥ 0

Ora la condizione sufficiente é soddisfatta e quindi la soluzione di base


associata é ottima. Ma se osserviamo la soluzione di base associata, questa
coincide esattamente con la precedente.

Si puó comunque dimostrare che data una soluzione di base ottima esiste
sempre almeno una base corrispondente per la quale la condizione (3.1) é
soddisfatta. Nell’esempio abbiamo visto come la stessa soluzione di base sia
rappresentata sia dalla base {x3 , x4 } che dalla base {x1 , x3 }. La prima base
non soddisfa la condizione (3.1), ma questa é soddisfatta dalla seconda base.
Torneremo in seguito su un’altra questione e cioé quando possiamo dire che
il problema ammette un’unica soluzione ottima o piú soluzioni ottime.

Verifica di illimitatezza
Supponiamo ora che la condizione di ottimalitá (3.1) non sia soddisfatta.
Un’altra domanda che possiamo porci é la seguente: quando il problema ha
valore dell’obiettivo illimitato? Una condizione sufficiente perché questo si
verifichi é la seguente:

∃ γh > 0 : αrh ≥ 0 r = 1, . . . , m. (3.4)

Vediamo perché questa condizione ci garantisce che il problema ha obiettivo


illimitato. Prendiamo la riformulazione (2.6) ed in essa poniamo a zero tutte

35
le variabili fuori base tranne la variabile xim+h . Ció che rimane é:

max γ0 + γh xim+h
xi1 = β1 + α1h xim+h
···
xim = βm + αmh xim+h
x1 , . . . , xn ≥ 0

Cosa succede se faccio crescere il valore della variabile xim+h ? Si ha che per
ogni r ∈ {1, . . . , m}:

xir = βr + α1h xim+h ≥ 0,


|{z} |{z} | {z }
≥0 ≥0 ≥0

quindi per ogni possibile valore non negativo di xim+h le variabili in base
continuano ad avere valore non negativo e quindi rimaniamo all’interno di
Sa . Ma vediamo ora cosa succede all’obiettivo:

γ0 + γh xim+h →
|{z} +∞,
|{z}
>0 xim+h →+∞

e quindi facendo crescere xim+h all’infinito non si esce mai da Sa ed il valore


dell’obiettivo cresce anch’esso all’infinito. Ne consegue che il problema ha
Sott = ∅ in quanto il valore dell’obiettivo é illimitato.
Esempio 7 Sia data la seguente riformulazione rispetto alla base {x1 , x2 }
di un problema di PL:

max 2 + x3 − x4
x1 = 2 + x3 + x4
x2 = 1 + 2x3 + x4
x1 , x2 , x3 , x4 ≥ 0

Il coefficiente di x3 nell’obiettivo é positivo e non negativi sono anche i


coefficienti di x3 nelle equazioni dei vincoli. Quindi la condizione (3.4) é
soddisfatta e possiamo concludere che il problema ha obiettivo illimitato.
Infatti, se poniamo x4 = 0 il problema diventa:

max 2 + x3
x1 = 2 + x3
x2 = 1 + 2x3
x1 , x2 , x3 , x4 ≥ 0

36
da cui si nota che facendo crescere x3 i valori di x1 e x2 continuano a man-
tenersi positivi (e quindi non si esce da Sa ), mentre il valore dell’obiettivo
cresce a +∞.

Scelta della variabile da far entrare in base


Se, data la base ammissibile B, non possiamo concludere che la soluzione di
base associata é ottima (cioé non é soddisfatta la condizione (3.1)) e neppure
che il problema ha obiettivo illimitato (cioé non é soddisfatta la condizione
(3.4)), come possiamo procedere? Passeremo dalla base ammissibile B
ad una nuova base ammissibile B ′ ma facendo in modo che la soluzione
di base associata a B ′ abbia valore dell’obiettivo migliore o quantomeno
non peggiore rispetto al valore della soluzione di base associata a B. Per
prima cosa individuiamo una regola per decidere come scegliere la variabile
xim+h fuori base che dovrá entrare nella nuova base. Ricordiamo la formula
dell’obiettivo:
n−m
X
γ0 + γj xim+j .
j=1

Nella soluzione di base associata a B tutte le variabili xim+j , j = 1, . . . , n −


m, sono fissate a 0. Se vogliamo incrementare il valore dell’obiettivo, quali
di queste variabili dovremo far crescere dal valore 0? Dovremo far crescere
quelle con coefficiente di costo ridotto γj positivo (facendo crescere le altre
il valore dell’obiettivo diminuisce oppure non cambia). Quindi dobbiamo
restringere l’attenzione alle sole variabili xim+j tali che γj > 0. Qui adotte-
remo la regola di scelta tra queste variabili che consiste nel scegliere quella
che fa crescere piú rapidamente il valore dell’obiettivo e cioé la variabile
xim+h tale che:
γh = max γj , (3.5)
j=1,...,n−m

tenendo comunque presente che questa non é l’unica regola possibile. Nel
caso il massimo sia raggiunto da piú variabili adottiamo (come pura conven-
zione) la regola di selezionare la variabile con indice piú piccolo. Vediamo
ora un esempio.

Esempio 8 Sia data la seguente riformulazione rispetto alla base {x1 , x2 }


di un problema di PL:

max 2 + 2x3 + 2x4 + x5


x1 = 1 − x3 + x4 + x5
x2 = 2 − x3 − x4 − x5
x1 , x2 , x3 , x4 , x5 ≥ 0

37
In questo caso tutte le variabili fuori base hanno coefficiente di costo ridotto
positivo. Tra queste considero quelle il cui coefficiente di costo ridotto é
massimo (la x3 e la x4 ). Tra le due scelgo quella con indice minore e quindi
la x3 . Quindi scegliamo la variabile fuori base x3 come nuova variabile da
far entrare in base.

Scelta della variabile uscente dalla base


Una volta scelta la variabile xim+h che dovrá entrare in base, dobbiamo
stabilire quale variabile in base dovrá farle posto, ovvero quale sará la va-
riabile in base xik che dovrá uscire dalla base. Se la scelta della variabile
che entra in base é guidata dal desiderio di far crescere il valore dell’obiet-
tivo, la scelta della variabile uscente dalla base sará motivata dal desiderio
di non uscire dalla regione ammissibile. Supponiamo come in precedenza
di fissare a 0 tutte le variabili fuori base tranne la xim+h . Si avrá dunque:
max γ0 + γh xim+h
xi1 = β1 + α1h xim+h
···
xim = βm + αmh xim+h
x1 , . . . , xn ≥ 0
Fino a quando possiamo far crescere il valore di xim+h ? Abbiamo due casi:
Caso 1 Per tutti gli r ∈ {1, . . . , m} tali che αrh ≥ 0 vediamo che:
xir = βr + αrh xim+h ≥ βr ≥ 0.
|{z} | {z }
≥0 ≥0

Quindi in questo caso non abbiamo alcuna restrizione sulla crescita


di xim+h .
Caso 2 Per gli r tali che αrh < 0, allora vediamo che il valore di xim+h
puó crescere al massimo fino a:
βr

αrh
e oltre questo valore la variabile xir assume valori negativi (si esce
quindi dalla regione ammissibile Sa ).
Se vogliamo rimanere in Sa , ci dovremo arrestare non appena una variabile
xir con αrh < 0 si annulla al crescere di xim+h . Questa sará la variabile xik
tale che ½ ¾
βk βr
αkh < 0 e − = min − . (3.6)
αkh r : αrh <0 αrh

38
Nel caso il minimo sia raggiunto da piú variabili la scelta ricade, per con-
venzione, su quella con indice piú piccolo. La variabile xik sará quella che
uscirá dalla base. Va ribadito come questa scelta garantisca che la nuova ba-
se B ′ ottenuta scambiando xik con xim+h sia ancora ammissibile. Vediamo
ora quale sará la variabile uscente dalla base nell’esempio precedente.
Esempio 9 Ricordiamo la riformulazione rispetto alla base {x1 , x2 } del
problema di PL dell’esempio:

max 2 + 2x3 + 2x4 + x5


x1 = 1 − x3 + x4 + x5
x2 = 2 − x3 − x4 − x5
x1 , x2 , x3 , x4 , x5 ≥ 0

In precedenza abbiamo visto che la regola di scelta della variabile fuori base
che dovrá entrare in base ci porta a scegliere la x3 . Quale variabile dovrá
uscire dalla base? Sia la x1 che la x2 sono candidate (per entrambe il
coefficiente di x3 nelle rispettive equazioni é negativo). Andiamo ora a
prendere i rapporti, cambiati di segno, tra i termini noti delle equazioni e i
coefficienti della x3 . Abbiamo:
1 2
x1 → − =1 x2 → − = 2.
−1 −1
Il minimo dei rapporti (pari a 1) é raggiunto in corrispondenza della va-
riabile x1 e quindi questa sará la variabile che dovrá uscire dalla base. A
conferma di ció notiamo che fissando a 0 tutte le variabili fuori base tranne
la x3 si ottiene:

max 2 + 2x3
x1 = 1 − x3
x2 = 2 − x3
x1 , x2 , x3 , x4 , x5 ≥ 0

e si puó vedere che per mantenersi in Sa (cioé per mantenere non negative
le variabili in base x1 e x2 ) possiamo far crescere x3 al massimo fino al
valore 1. In corrispondenza di tale valore si annulla la variabile x1 e tale
variabile sará quella che dovrá uscire di base.
A questo punto, una volta selezionata la variabile entrante in base (la xim+h )
e quella uscente di base (la xik ) con le regole viste, non resta che compiere
l’operazione di cardine nel modo giá descritto in precedenza. Vediamo di
illustrare tale operazione per il nostro esempio.

39
Esempio 10 Nell’esempio x3 deve entrare in base e deve uscire x1 . L’o-
perazione di cardine porta alla seguente riformulazione rispetto alla nuova
base {x2 , x3 }:

max 4 − 2x1 + 4x4 + 3x5


x3 = 1 − x1 + x4 + x5
x2 = 3 + x1 − 2x4 − 2x5
x1 , x2 , x3 , x4 , x5 ≥ 0

Una volta eseguita l’operazione di cardine e passati alla nuova base B ′


non si dovrá fare altro che ripetere le operazioni viste sopra (verifica di
ottimalitá, verifica di illimitatezza, scelta della variabile entrante in base,
scelta della variabile uscente dalla base, operazione di cardine) sulla nuova
base B ′ . Possiamo quindi riassumere il metodo del simplesso attraverso il
seguente schema.
METODO DEL SIMPLESSO
Inizializzazione Sia B0 una base ammissibile e k = 0.
Passo 1- verifica ottimalitá Se é soddisfatta la condizione (3.1) , la so-
luzione di base associata a Bk é una soluzione ottima del problema e
ci si arresta. Altrimenti si vada al Passo 2.
Passo 2 - verifica di illimitatezza Se é soddisfatta la condizione (3.4),
allora si ha Sott = ∅ in quanto l’obiettivo del problema é illimitato e
ci si arresta. Altrimenti si vada al Passo 3.
Passo 3 - scelta variabile entrante in base Si selezioni la variabile xim+h
che dovrá entrare in base attraverso la regola (3.5).
Passo 4 - scelta variabile uscente dalla base Si selezioni la variabile
xik che dovrá uscire dalla base attraverso la regola (3.6).
Passo 5 - operazione di cardine Si generi la nuova base Bk+1 sosti-
tuendo in Bk la variabile xik con la variabile xim+h e si esegua la
corrispondente operazione di cardine. Quindi, si ponga k = k + 1 e si
ritorni al Passo 1.
Come esercizio si proceda nella risoluzione del problema dell’esempio.

Commenti sul metodo del simplesso


Vediamo ora di fare alcuni commenti sul metodo del simplesso.

40
Per prima cosa va puntualizzato che, anche se ampiamente utilizzato, il
metodo del simplesso non é l’unico metodo per risolvere problemi di PL.
Qui ci limitiamo a citare altri metodi di risoluzione per i problemi di PL,
gli algoritmi del punto interno.

Notiamo poi, come giá fatto in precedenza, che abbiamo bisogno di partire
con una base ammissibile B0 . Vedremo in seguito un metodo (il metodo
due fasi) che ci permetterá di stabilire se esiste una base ammissibile per il
problema e, nel caso esista, come ottenerla.

Partendo da una base B, abbiamo visto che la riformulazione rispetto al-


la base B ′ ottenuta attraverso l’operazione di cardine é data in (2.8). Da
questa si vede immediatamente che il valore dell’obiettivo nella soluzione
di base associata alla nuova base B ′ é
βk
γ0 − γh .
αkh
Quando applichiamo il metodo del simplesso abbiamo che:
• βk ≥ 0 per l’ammissibilitá della soluzione di base associata a B.
• γh > 0 per la regola di scelta (3.5) della variabile entrante in base.
• αkh < 0 per la regola di scelta (3.6) della variabile uscente dalla base.
Quindi si ha:
≥0
z}|{
βk
γ0 − γh ≥ γ0 .
|{z} αkh
>0 |{z}
<0

Questo ci conferma che il valore dell’obiettivo nella nuova soluzione di base


associata a B ′ é non peggiore rispetto al valore γ0 nella soluzione di base
associata a B. Inoltre, nel caso βk > 0, il che si verifica sempre nel caso di
soluzioni di base non degeneri, il nuovo valore dell’obiettivo é strettamente
migliore rispetto al precedente. Nel caso degenere puó invece succedere
che i due valori siano uguali. In questo caso si puó dimostrare che le due
basi B e B ′ rappresentano la stessa soluzione di base. Quanto visto ci dice
qualcosa riguardo la finitezza del metodo del simplesso, come stabilito nella
seguente osservazione.
Osservazione 10 Se tutte le soluzioni di base ammissibili in un problema
di PL sono non degeneri, allora il metodo del simplesso termina in un
numero finito di iterazioni.

41
Dimostrazione Come abbiamo visto nel caso non degenere ad ogni ite-
razione la nuova soluzione di base ammissibile ha un valore strettamente
migliore rispetto alla precedente e quindi é diversa da tutte quelle che la
hanno preceduta, cioé tutte le soluzioni di base ammissibili associate alle
basi B0 , B1 , B2 , . . . sono distinte tra loro. Essendo il numero di soluzioni
di base ammissibili finito (si ricordi che queste coincidono con i vertici che
sono in numero finito), il metodo dovrá arrestarsi dopo un numero finito
di iterazioni o restituendo una soluzione ottima oppure stabilendo che il
problema ha obiettivo illimitato.

Ma cosa succede se ci sono delle soluzioni di base ammissibili degeneri?


Nel caso ci siano vertici degeneri si può verificare la situazione di ciclaggio.
Trovandoci in un vertice degenere, l’algoritmo del simplesso può generare
la seguente sequenza di basi che rappresentano tutte questo stesso vertice
degenere:
Bt → Bt+1 → · · · → Bt+r−1 → Bt+r = Bt .
Una volta tornato nella base Bt questa sequenza di basi verrà di nuovo
ripetuta all’infinito senza che l’algoritmo termini. Anche se non le vedre-
mo, esistono comunque delle regole particolari per la scelta delle variabili
da far entrare e uscire di base, dette regole anticiclaggio, che consentono
all’algoritmo di terminare in un numero finito di iterazioni.

Soluzioni ottime uniche e multiple


Sia data la solita base B con la riformulazione (2.6). Nel caso in cui valga
una condizione piú forte rispetto alla condizione di ottimalitá (3.1) e cioé
se vale:
γj < 0 j = 1, . . . , m,
allora possiamo dire con certezza che la soluzione di base associata a B non
solo é soluzione ottima del problema ma é anche l’unica soluzione ottima
del problema. Infatti, per il valore dell’obiettivo in Sa si avrá:
n−m
X
γ0 + γj xim+j ≤ γ0 ,
j=1
|{z} | {z }
<0 ≥0

ovvero in Sa il valore dell’obiettivo non puó mai superare il valore γ0 e puó


essere uguale a γ0 solo se tutte le variabili xim+j , j = 1, . . . , n − m, hanno
valore nullo e cioé in corrispondenza della nostra soluzione di base. Quindi
tale soluzione di base é la sola soluzione ottima.
Ma cosa succede se esiste un qualche γh = 0? Non possiamo conclude-
re immediatamente che esistono piú soluzioni ottime. Esistono diversi casi

42
possibili che ci apprestiamo a descrivere. Prima peró riscriviamo la riformu-
lazione rispetto alla base B tenendo a 0 tutte le variabili fuori base tranne
la xim+h con γh = 0. Avremo:
max γ0
xi1 = β1 + α1h xim+h
··· (3.7)
xim = βm + αmh xim+h
x1 , . . . , xn ≥ 0
Vediamo ora quali sono i casi possibili.
Caso 1 Se esiste h tale che γh = 0 e
αrh ≥ 0 r = 1, . . . , m,
allora esiste certamente un insieme illimitato di soluzioni ottime. In-
fatti, se in (3.7) facciamo crescere all’infinito xim+h , vediamo che il
valore dell’obiettivo resta quello ottimo γ0 , mentre le variabili xir
continuano a mantenersi non negative e quindi non si esce da Sa .
Caso 2 Se esiste h tale che γh = 0 e
∀ r : αrh < 0 si ha che βr > 0,
allora esiste certamente un insieme limitato di soluzioni ottime. In-
fatti, in (3.7) possiamo far crescere xim+h fino al valore positivo
½ ¾
βk βr
− = min −
αkh r : αrh <0 αrh
mantenendo il valore dell’obiettivo pari a quello ottimo γ0 . Quindi,
un’operazione di cardine che scambi la variabile xik con la variabile
xim+h conduce in questo caso ad una nuova soluzione di base ammis-
sibile ed anch’essa ottima. Risulteranno ottimi anche tutti i punti
lungo il segmento che congiunge le due soluzioni di base ammissibili
(o vertici) ottime.
Caso 3 Se per ogni h tale che γh = 0 si ha che:
∃ r : αrh < 0 e βr = 0,
allora non possiamo dire se esiste un’unica soluzione ottima o se vi
sono soluzioni ottime multiple. In questo caso infatti, per poter re-
stare in Sa in (3.7) possiamo solo mantenere il valore di xim+h pari a
0 e quindi rimanere nella soluzione di base corrente.

43
I diversi casi saranno ora illustrati attraverso alcuni esempi.
Esempio 11 Sia data la riformulazione rispetto alla base {x3 , x4 } di un
problema di PL.

max 4 − x1 − x2
x3 = 2 + x1 − x2
x4 = 1 − 2x2
x1 , x2 , x3 , x4 ≥ 0

In questo caso tutti i coefficienti di costo ridotto sono strettamente negativi,


quindi la soluzione di base é ottima ed é l’unica soluzione ottima.
Sia data la riformulazione rispetto alla base {x3 , x4 } di un problema di PL.

max 4 − x2
x3 = 2 + x1 − x2
x4 = 1 − 2x2
x1 , x2 , x3 , x4 ≥ 0

Qui ci troviamo nel Caso 1: il coefficiente di costo ridotto di x1 é nullo e


i coefficienti di x1 nelle equazioni sono tutti non negativi. Quindi tutti i
punti del seguente insieme:

(t, 0, 2 + t, 1) ∀ t ≥ 0,

sono soluzioni ottime del problema (si noti che t = 0 coincide con la solu-
zione di base associata a {x3 , x4 }).
Sia data la riformulazione rispetto alla base {x3 , x4 } di un problema di PL.

max 4 − x2
x3 = 2 + x1 − x2
x4 = 1 − x1 + 2x2
x1 , x2 , x3 , x4 ≥ 0

Qui ci troviamo nel Caso 2: il coefficiente di costo ridotto di x1 é nullo


e nelle equazioni in cui il coefficiente di x1 é negativo, il termine noto é
positivo. Quindi tutti i punti del seguente insieme:

(t, 0, 2 + t, 1 − t) 0 ≤ t ≤ 1,

sono soluzioni ottime del problema (si noti che t = 0 coincide con la solu-
zione di base associata a {x3 , x4 } e t = 1 con quella adiacente {x1 , x3 }).

44
Sia data la riformulazione rispetto alla base {x3 , x4 } di un problema di PL.

max 4 − x2
x3 = 2 + x1 − x2
x4 = −x1 − x2
x1 , x2 , x3 , x4 ≥ 0

Qui ci troviamo nel Caso 3: il coefficiente di costo ridotto di x1 é nullo e


in una equazione in cui il coefficiente di x1 é negativo, il termine noto é
nullo. In questo particolare esempio esiste una sola soluzione ottima. Piú
precisamente esiste una sola soluzione ammissibile. Infatti, l’equazione

x4 = −x1 − x2

puó essere soddisfatta in Sa solo se le variabili x1 e x2 sono entrambe nulle,


ovvero in corrispondenza della soluzione di base associata a {x3 , x4 }.
Sia data la riformulazione rispetto alla base {x4 , x5 } di un problema di PL.

max 2 − x3
x4 = x1 − x2 − x3
x5 = −x1 + x2 + x3
x1 , x2 , x3 , x4 , x5 ≥ 0

Qui ci troviamo ancora nel Caso 3: il coefficiente di costo ridotto di x1 e


x2 é nullo, in almeno una equazione in cui il coefficiente di x1 é negativo
si ha che il termine noto é nullo e lo stesso vale per x2 . Si puó dimostrare
peró che in questo caso tutte le soluzioni:

x3 = x4 = x5 = 0 x1 = x2 = α ∀ α ≥ 0,

sono ammissibili e ottime (il caso α = 0 coincide con la soluzione di base


associata alla base {x4 , x5 }).

Come individuare la matrice A−1


B

Come vedremo é importante conoscere, data una base B e la relativa ma-


trice AB , l’inversa A−1B di tale matrice. Non é peró sempre necessario
calcolare da zero tale inversa. In alcuni casi la riformulazione rispetto alla
base B ci fornisce giá la matrice A−1
B .
Supponiamo che alcune colonne della matrice A formino la matrice iden-
tica I, ovvero che esistano m variabili [xt1 , . . . , xtm ] le cui corrispondenti
colonne nella matrice A formano la matrice identica di ordine m × m. que-
ste variabili formano una base per il problema di PL (in particolare una

45
base ammissibile se tutti i termini noti delle equazioni sono non negativi).
Vediamo un esempio di ció.

Esempio 12 Sia dato il problema di PL:

max x1 − x3 − 2x4 − 2x5


x1 + x2 + x4 = 8
x1 − x2 + x3 = 4
x1 + 2x2 + x5 = 12
x1 , x2 , x3 , x4 , x5 ≥ 0

Se prendiamo le m = 3 variabili [x4 , x3 , x5 ], possiamo vedere che le colonne


corrispondenti:
     
1 0 0
x4 →  0  x3 →  1  x5 →  0 
0 0 1

formano la matrice identica di ordine 3 × 3 e che queste 3 variabili formano


una base (in questo caso ammissibile) per il nostro problema.

Supponiamo ora di essere arrivati tramite una serie di operazioni di cardine


alla riformulazione rispetto alla base B = {xi1 , . . . , xim } del problema di
PL:

max cB A−1 −1
B b + (cN − cB AB AN )xN
xB = A−1 −1
B b − AB AN xN
xB , xN ≥ 0

Riscriviamo questa portando tutte le variabili fuori base nella parte sinistra
delle equazioni dei vincoli, ovvero:

max cB A−1 −1
B b + (cN − cB AB AN )xN
xB + A−1 −1
B AN x N = AB b (3.8)
xB , xN ≥ 0

A questo punto l’inversa A−1 B si legge in (3.8) nel modo seguente: la prima
colonna di A−1 B é la colonna relativa a xt1 in (3.8), la seconda colonna di
A−1
B é la colonna relativa a xt2 in (3.8), eccetera fino alla m-esima colonna
di A−1
B che é la colonna relativa a xtm in (3.8) (si noti che l’ordine delle
variabili xtr , r = 1, . . . , m é qui essenziale). Ma vediamo di chiarire meglio
la cosa attraverso il nostro esempio.

46
Esempio 13 Possiamo partire proprio dalla base {x4 , x3 , x5 } che risulta
ammissibile. La riformulazione rispetto a questa base é la seguente:
max −44 + 6x1 + 3x2
x4 = 8 − x1 − x2
x3 = 4 − x1 + x2
x5 = 12 − x1 − 2x2
x1 , x2 , x3 , x4 , x5 ≥ 0
Con una prima operazione di cardine scambiamo x1 e x3 nella base. La
riformulazione rispetto alla nuova base {x4 , x1 , x5 } é la seguente:
max −24 − 6x3 + 9x2
x4 = 4 + x3 − 2x2
x1 = 4 − x3 + x2
x5 = 8 + x3 − 3x2
x1 , x2 , x3 , x4 , x5 ≥ 0
Poi, con una seconda operazione di cardine scambiamo x2 e x4 nella base.
La riformulazione rispetto alla nuova base {x2 , x1 , x5 } é la seguente:
max −6 − 3/2x3 − 9/2x4
x2 = 2 + 1/2x3 − 1/2x4
x1 = 6 − 1/2x3 − 1/2x4
x5 = 2 − 1/2x3 + 3/2x4
x1 , x2 , x3 , x4 , x5 ≥ 0
A questo punto ci chiediamo: data la base B = {x2 , x1 , x5 } con la relativa
matrice:  
1 1 0
AB =  −1 1 0 
2 1 1
qual é l’inversa di tale matrice? Come detto, questa si puó ottenere os-
servando la riformulazione rispetto alla base B in cui peró nelle equazioni
spostiamo tutti i termini relativi alle variabili fuori base a sinistra, cioé nel
nostro esempio:
max −6 − 3/2x3 − 9/2x4
x2 − 1/2x3 + 1/2x4 = 2
x1 + 1/2x3 + 1/2x4 = 6
x5 + 1/2x3 − 3/2x4 = 2
x1 , x2 , x3 , x4 , x5 ≥ 0

47
Si avrá che la prima colonna di A−1
B é la colonna della variabile x4 in
quest’ultima formulazione, ovvero
 
1/2
 1/2 
−3/2

la seconda quella relativa a x3 :


 
−1/2
 1/2 
1/2

e la terza quella relativa a x5 :


 
0
 0 
1

Avremo quindi:  
1/2 −1/2 0
A−1
B =  1/2 1/2 0 
−3/2 1/2 1

3.1 Il metodo due fasi


Descriveremo ora un metodo, detto metodo due fasi, che, dato un problema
di PL, ci consente di stabilire se Sa = ∅ o, in caso contrario, ci restituisce
una base ammissibile del problema.
Sia dato il problema di PL in forma standard:

max cx
a i x = bi i = 1, . . . , m
xj ≥ 0 j = 1, . . . , n

Chiameremo questo problema problema di II fase. Ad esso associamo il


seguente problema, detto problema di I fase:
Pm
ξ ∗ = max − i=1 si
ai x + si = bi i ∈ {1, . . . , m} : bi ≥ 0
ai x − si = bi i ∈ {1, . . . , m} : bi < 0
xj ≥ 0 j = 1, . . . , n
si ≥ 0 i = 1, . . . , m

48
Quindi aggiungiamo o sottraiamo (a seconda del segno del termine noto)
una variabile non negativa si in ogni vincolo del problema originario e
l’obiettivo del problema é la somma, cambiata di segno, di tali variabili.
Per prima cosa notiamo che si ≥ 0, i = 1, . . . , m, implica che
m
X
− si ≤ 0
i=1

e quindi l’obiettivo del problema di I fase non puó essere illimitato. Inoltre,
la soluzione di base associata alla base {s1 , . . . , sm } é ammissibile. Infatti,
si ha la seguente riformulazione del problema di I fase rispetto a questa
base:
P P
ξ ∗ = max − i: bi ≥0 (bi − ai x) − i: bi <0 (−bi + ai x)
si = bi − ai x i ∈ {1, . . . , m} : bi ≥ 0
si = −bi + ai x i ∈ {1, . . . , m} : bi < 0
xj ≥ 0 j = 1, . . . , n
si ≥ 0 i = 1, . . . , m

da cui si ottiene la soluzione di base:

si = bi i : bi ≥ 0, si = −bi i : bi < 0, xj = 0 j = 1, . . . , n,

che é ammissibile. Quindi il problema di I fase ha regione ammissibile non


vuota e obiettivo non illimitato. Ne consegue che esso ammette soluzione
ottima. Vale la seguente osservazione.
Osservazione 11 Il problema di I fase ha valore ottimo ξ ∗ pari a 0 se e
solo se il problema di II fase ha regione ammissibile Sa non vuota.
Dimostrazione Supponiamo dapprima che ξ ∗ = 0 e dimostriamo che Sa 6=
∅. Ma ξ ∗ = 0 vuol dire che esiste una soluzione del problema di I fase che
indichiamo con (s, x) con tutte le variabili si = 0, cioé s = 0. Se sostituiamo
questa soluzione nei vincoli del problema di I fase otteniamo:

si = bi − ai x i ∈ {1, . . . , m} : bi ≥ 0
si = −bi + ai x i ∈ {1, . . . , m} : bi < 0
xj ≥ 0 j = 1, . . . , n
si = 0 i = 1, . . . , m

o, equivalentemente:

a i x = bi i = 1, . . . , m x ≥ 0,

49
da cui si ricava che x ∈ Sa .
Supponiamo ora invece che Sa 6= ∅ e dimostriamo che questo implica che
ξ ∗ = 0. Dato x ∈ Sa , si verifica facilmente che la soluzione (s, x) con

si = 0 i = 1, . . . , m,

é ammissibile per il problema di I fase e ha valore dell’obiettivo:


m
X
− si = 0.
i=1

Poiché, come giá osservato, il valore dell’obiettivo del problema di I fase non
puó essere superiore a 0, questa soluzione ammissibile é anche ottima per
il problema di I fase e il valore ottimo ξ ∗ é pari a 0 come si voleva dimostrare.

Risolviamo ora il problema di I fase utilizzando il metodo del simplesso.


Si noti che qui abbiamo giá a disposizione una base ammissibile (la base
{s1 , . . . , sm }). Avremo le seguenti due possibilitá per il valore ottimo ξ ∗
del problema:
ξ ∗ < 0 Allora, in base all’Osservazione 11, possiamo concludere che Sa = ∅,
cioé la regione ammissibile del problema di II fase é vuota.
ξ ∗ = 0 Allora Sa 6= ∅ (la soluzione ottima del problema di I fase é giá una
soluzione ammissibile per il problema di II fase) e abbiamo due casi
possibili:
Caso 1 tutte le variabili si sono al di fuori della base ottima del
problema di I fase. In tal caso la base ottima del problema di
I fase é giá una base ammissibile del problema di II fase. La
riformulazione del problema di II fase rispetto a questa base si
puó ottenere semplicemente dalla riformulazione del problema di
I fase rispetto a questa base, eliminando da quest’ultima tutte
le variabili si e sostituendo l’obiettivo del problema di I fase con
quello del problema di II fase (si vedano gli esempi successivi per
chiarire meglio il procedimento).
Caso 2 Alcune variabili si sono nella base ottima del problema di
I fase. In tal caso si operano, fino a quando é possibile, delle
operazioni di cardine per far uscire di base le variabili si attual-
mente in base facendo entrare al loro posto solo variabili xj . Se
si riesce a far uscire dalla base tutte le variabili si ci si ritrova
infine nella stessa situazione del Caso 1 e si procede nello stesso
modo. Puó peró succedere che non si riescano a far uscire di

50
base alcune variabili si . Questo, come vedremo, accade quando
vi sono vincoli ridondanti, ovvero vincoli ottenibili come combi-
nazioni lineari di altri e che quindi possono essere semplicemente
eliminati. Se ci si ritrova in questa situazione, possiamo elimina-
re le variabili si in base e i relativi vincoli. Una volta proceduto
a tale eliminazione ci si ritrova nella stessa situazione del Caso
1 e si procede come in quel caso (anche qui si vedano gli esempi
successivi per chiarire meglio il procedimento).
Vediamo ora alcuni esempi che serviranno a chiarire quanto visto sopra.
Esempio 14 Si consideri il seguente problema di PL.

max x1 + 2x2
−x1 − x2 + x3 = −1
x1 + x2 + x4 = 2
x1 , x2 , x3 , x4 ≥ 0

Chiameremo questo problema di II fase. Il problema di I fase associato é il


seguente:

max −s1 − s2
−x1 − x2 + x3 − s1 = −1
x1 + x2 + x4 + s2 = 2
x1 , x2 , x3 , x4 ≥ 0 s1 , s2 ≥ 0

che riformulato rispetto alla base {s1 , s2 } diventa:

max −3 + 2x1 + 2x2 − x3 + x4


s1 = 1 − x1 − x2 + x3
s2 = 2 − x1 − x2 − x4
x1 , x2 , x3 , x4 ≥ 0 s1 , s2 ≥ 0.

Teniamo traccia, per ragioni che chiariremo nel seguito, anche dell’obiettivo
del problema di II fase espresso tramite le variabili fuori base:

x1 + 2x2 .

In base alle regole viste per il metodo del simplesso, dovremo far entrare
in base x1 e farne uscire s1 . La riformulazione rispetto alla nuova base
{x1 , s2 } é la seguente:

max −1 − 2s1 + x3 + x4

51
x1 = 1 − s1 − x2 + x3
s2 = 1 + s1 − x3 − x4
x1 , x2 , x3 , x4 ≥ 0 s1 , s2 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili attualmente


fuori base é il seguente:
1 − s1 + x2 + x3 .
In base alle regole viste per il metodo del simplesso, dovremo far entrare
in base x3 e farne uscire s2 . La riformulazione rispetto alla nuova base
{x1 , x3 } é la seguente:

max −s1 − s2
x1 = 2 − x2 − s2 − x4
x3 = 1 + s1 − s2 − x4 (3.9)
x1 , x2 , x3 , x4 ≥ 0 s1 , s2 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili attualmente


fuori base é il seguente:
2 − s2 + x2 − x4 . (3.10)
A questo punto abbiamo una soluzione ottima per il problema di I fase con
valore ottimo ξ ∗ = 0. Quindi il problema di II fase ha regione ammissi-
bile non vuota. Inoltre, ci troviamo nel Caso 1, dal momento che tutte le
variabili si sono fuori dalla base ottima {x1 , x3 }. Possiamo quindi usare
questa base come base ammissibile iniziale per il problema di II fase. La
riformulazione rispetto a questa base si ottiene dalla riformulazione (3.9)
da cui si scartano tutte le variabili si e si sostituisce l’obiettivo con quello
di II fase (3.10), anch’esso ripulito dalle variabili si . Avremo quindi la
seguente riformulazione:

max 2 + x2 − x4
x1 = 2 − x2 − x4
x3 = 1 − x4
x1 , x2 , x3 , x4 ≥ 0

A questo punto si puó procedere con il metodo del simplesso per risolvere il
problema di II fase.

Si consideri il seguente problema di PL.

max 2x1 + x2 + 1/2x3

52
x1 + x2 + x3 = 3
x1 − x2 + x3 = 1
x1 + x3 = 2
x1 , x2 , x3 ≥ 0

Al solito, chiameremo questo problema di II fase. Il problema di I fase


associato é il seguente:

max −s1 − s2 − s3
x1 + x2 + x3 + s1 = 3
x1 − x2 + x3 + s2 = 1
x1 + x3 + s3 = 2
x1 , x2 , x3 ≥ 0 s1 , s2 , s3 ≥ 0

che riformulato rispetto alla base {s1 , s2 , s3 } diventa:

max −6 + 3x1 + 3x3


s1 = 3 − x1 − x2 − x3
s2 = 1 − x1 + x2 − x3
s3 = 2 − x1 − x3
x1 , x2 , x3 ≥ 0 s1 , s2 , s3 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili fuori base é


il seguente:
2x1 + x2 + 1/2x3 .
In base alle regole viste per il metodo del simplesso, dovremo far entrare
in base x1 e farne uscire s2 . La riformulazione rispetto alla nuova base
{s1 , x1 , s3 } é la seguente:

max −3 − 3s2 + 3x2


s1 = 2 + s2 − 2x2
x1 = 1 − s2 + x2 − x3
s3 = 1 + s2 − x2
x1 , x2 , x3 ≥ 0 s1 , s2 , s3 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili fuori base é


il seguente:
2 − 2s2 + 3x2 − 3/2x3 .

53
In base alle regole viste per il metodo del simplesso, dovremo far entrare
in base x2 e farne uscire s1 . La riformulazione rispetto alla nuova base
{s1 , x1 , s3 } é la seguente:

max −3/2s2 − 3/2s1


x2 = 1 + 1/2s2 − 1/2s1
x1 = 2 − 1/2s2 − 1/2s1 − x3 (3.11)
s3 = 1/2s2 + 1/2s1
x1 , x2 , x3 ≥ 0 s1 , s2 , s3 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili fuori base é


il seguente:
5 − 1/2s2 − 3/2s1 − 3/2x3 . (3.12)
Abbiamo una soluzione ottima del problema di I fase e si ha ξ ∗ = 0. Quindi
il problema di II fase ha regione ammissibile non vuota. Ci troviamo peró
ora nel Caso 2, con una variabile (la s3 ) che fa parte della base ottima
{x1 , x2 , s3 }. Per prima cosa dobbiamo tentare di far uscire s3 di base fa-
cendo entrare una variabile xi fuori base. Ma l’unica possibile candidata,
la variabile x3 , ha coefficiente nullo ( e quindi non appare) nell’equazione
realtiva a s3 , cioé
s3 = 1/2s2 + 1/2s1 .
La stessa equazione ci dice anche che il vincolo relativo alla variabile s3
(cioé x1 + x3 = 2) é ottenibile come combinazione lineare con coefficienti
entrambi pari a 1/2 dei vincoli relativi alle variabili s1 (x1 + x2 + x3 = 3)
e s2 (x1 − x2 + x3 = 1). Ne consegue che questo vincolo é ridondante e
possiamo scartarlo insieme alla relativa variabile s3 . Una volta soppressa la
variabile s3 e l’equazione ad essa relativa, la riformulazione (3.11) diventa:

max −3/2s2 − 3/2s1


x2 = 1 + 1/2s2 − 1/2s1
x1 = 2 − 1/2s2 − 1/2s1 − x3 (3.13)
x1 , x2 , x3 ≥ 0 s1 , s2 ≥ 0.

A questo punto abbiamo la base ottima {x1 , x2 } per il problema di I fase


che non contiene variabili si . Questa base é ammissibile per il problema di
II fase e la riformulazione rispetto ad essa si ottiene sopprimendo in (3.13)
le variabili si e sostituendo l’obiettivo con quello in (3.12), anche questo
ripulito delle variabili si :

max 5 − 3/2x3

54
x2 = 1
x1 = 2 − x3
x1 , x2 , x3 ≥ 0 (3.14)

Possiamo quindi risolvere il problema di II fase utilizzando il metodo del


simplesso.

Si consideri il seguente problema di PL.

max x1 + x2
x1 + x2 = 3
x1 + x3 = 1
x2 + x4 = 1
x1 , x2 , x3 , x4 ≥ 0

Al solito, chiameremo questo problema di II fase. Il problema di I fase


associato é il seguente:

max −s1 − s2 − s3
x1 + x2 + s1 = 3
x1 + x3 + s2 = 1
x2 + x4 + s3 = 1
x1 , x2 , x3 , x4 ≥ 0 s1 , s2 , s3 ≥ 0

che riformulato rispetto alla base {s1 , s2 , s3 } diventa:

max −5 + 2x1 + 2x2 + x3 + x4


s1 = 3 − x1 − x2
s2 = 1 − x1 − x3
s3 = 1 − x2 − x4
x1 , x2 , x3 , x4 ≥ 0 s1 , s2 , s3 ≥ 0

L’obiettivo del problema di II fase espresso tramite le variabili fuori base é


il seguente:
x1 + x2 .
In base alle regole viste per il metodo del simplesso, dovremo far entrare
in base x1 e farne uscire s2 . La riformulazione rispetto alla nuova base
{s1 , x1 , s3 } é la seguente:

max −3 − 2s2 + 2x2 − x3 + x4

55
s1 = 2 − 3s2 − x3 − x2
x1 = 1 − s2 − x3
s3 = 1 − x2 − x4
x1 , x2 , x3 ≥ 0 s1 , s2 , s3 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili fuori base é


il seguente:
1 − s2 − x3 + x2 .
In base alle regole viste per il metodo del simplesso, dovremo far entrare
in base x2 e farne uscire s3 . La riformulazione rispetto alla nuova base
{s1 , x1 , x2 } é la seguente:

max −1 − 2s2 − 2s3 − x3 − x4


s1 = 1 − 3s2 − x3 + s3 + x4
x1 = 1 − s2 − x3
x2 = 1 − s3 − x4
x1 , x2 , x3 ≥ 0 s1 , s2 , s3 ≥ 0.

L’obiettivo del problema di II fase espresso tramite le variabili fuori base é


il seguente:
1 − s2 − s3 − x3 − x4 .
Abbiamo una soluzione ottima del problema di I fase e si ha ξ ∗ = −1 < 0.
Possiamo quindi immediatamente concludere che il problema di II fase ha
regione ammissibile vuota.

56
Capitolo 4

Dualitá

Dato un problema di PL in forma standard

max cx
Ax = b (4.1)
x≥0

che chiameremo problema primale, possiamo associare ad esso un altro


problema di PL, detto problema duale, definito come segue (u è il vettore
di variabili duali con m componenti)

min ub
uA ≥ c (4.2)

o, in forma scalare:
Pm
min i=1u i bi
Pm
i=1 i ij ≥ cj
u a j = 1, . . . , n (4.3)

Indichiamo con
Da = {u ∈ Rm : uA ≥ c}
la regione ammissibile del problema duale e con

Dott = {u∗ ∈ Da : u∗ b ≤ ub ∀ u ∈ Da }

l’insieme delle sue soluzioni ottime. Si puó notare che esiste una stretta
relazione tra
• variabili del primale e vincoli del duale;

57
• vincoli del primale e variabili del duale.
In particolare notiamo che
1. nel primale ci sono n variabili esattamente come nel duale vi sono n
vincoli. Inoltre, i coefficienti del j-esimo vincolo del duale coincidono
con i coefficienti della variabile xj nei vincoli del primale, mentre il
termine noto del j-esimo vincolo del duale coincide con il coefficiente
di xj nell’obiettivo del primale.
2. Nel primale vi sono m vincoli esattamente come nel duale vi sono
m variabili. Inoltre, i coefficienti dell’i-esima variabile ui del duale
coincidono con i coefficienti dell’i-esimo vincolo del primale, mentre il
coefficiente di ui nell’obiettivo del duale coincide con il termine noto
dell’i-esimo vincolo del primale.
Come esercizio si mostri che il duale del seguente problema di PL in forma
standard:

max x1 + x2
3x1 + 2x2 + x3 = 5
4x1 + 5x2 + x4 = 4
x2 + x5 = 2
x1 , x2 , x3 , x4 , x5 ≥ 0

é il seguente problema:

min 5u1 + 4u2 + 2u3


3u1 + 4u2 ≥ 1
2u1 + 5u2 + u3 ≥ 1
u1 ≥ 0
u2 ≥ 0
u3 ≥ 0.

Le soluzioni dei due problemi primale e duale sono fortemente legate tra
loro come dimostra una serie di risultati.
Osservazione 12 Per ogni x0 ∈ Sa e per ogni u0 ∈ Da si ha che

cx0 ≤ u0 b.

Dimostrazione x0 ∈ Sa implica

Ax0 = b (4.4)

58
Moltiplicando entrambi i membri di (4.4) per u0 si ottiene

u0 b = u0 Ax0 = (u0 A)x0 . (4.5)

Ma u0 ∈ Da implica
u0 A ≥ c
da cui, moltiplicando entrambi i membri per x0 (che é ≥ 0 per l’apparte-
nenza di x0 a Sa ), si ottiene

(u0 A)x0 ≥ cx0

che, combinato con (4.5), dimostra il risultato.

Osservazione 13 Se x∗ ∈ Sa e u∗ ∈ Da ed inoltre

cx∗ = u∗ b

allora x∗ ∈ Sott e u∗ ∈ Dott .


Dimostrazione In base all’Osservazione 12 si ha che

∀ x ∈ Sa cx ≤ u∗ b.

Ma essendo cx∗ = u∗ b si ha anche

∀ x ∈ Sa cx ≤ cx∗

il che equivale a dire che x∗ ∈ Sott . In modo del tutto analogo si dimostra
che u∗ ∈ Dott .

Osservazione 14 Se uno dei due problemi ha obiettivo illimitato, allora


l’altro ha regione ammissibile vuota.
Dimostrazione Dimostriamo che se l’obiettivo primale é illimitato, allora
Da = ∅ (la dimostrazione che l’obiettivo duale illimitato implica Sa = ∅ é
del tutto analoga). Supponiamo per assurdo che Da 6= ∅ e sia u0 ∈ Da . In
base all’Osservazione 12 si ha che

∀ x ∈ Sa cx ≤ u0 b

e quindi l’obiettivo del primale é limitato dal valore u0 b, il che contraddice


l’illimitatezza di tale obiettivo.

59
Data una base B sappiamo che a questa é associata la soluzione di base del
problema primale:
xB = A−1 B b xN = 0.

Ma a questa base possiamo associare anche la seguente soluzione di base


del duale:
uB = cB A−1B .

Vediamo quando questa soluzione di base del duale é ammissibile per il


duale. Per essere ammissibile deve soddisfare i vincoli:

uB A ≥ c

o, equivalentemente:

uB AB ≥ cB (4.6)
uB AN ≥ cN (4.7)

Ma:
uB AB = cB A−1
B AB = c B ,

e quindi i vincoli (4.6) sono certamente soddisfatti, mentre

uB AN = cB A−1
B AN ,

e quindi i vincoli (4.7) sono equivalenti a:

cN − cB A−1
B AN ≤ 0

(si noti la coincidenza con la condizione di ottimalitá (3.2) per il problema


primale). In particolare se

cN − cB A−1
B AN < 0

la soluzione di base del duale uB ammissibile verrá detta non degenere,


altrimenti verrá detta degenere. Si noti che le due soluzioni di base rispetti-
vamente del primale e del duale associate alla base B hanno lo stesso valore
dell’obiettivo:
cB xB = cB A−1B b = u b,
B

e quindi, in base all’Osservazione 13, se entrambe sono ammissibili per i


rispettivi problemi, sono anche soluzioni ottime degli stessi problemi.

Fino a questo punto abbiamo definito solo il duale di un problema in forma


standard. Ma sappiamo che ogni problema di PL puó essere ricondotto alla

60
forma standard. Tra questi anche il duale (4.2) del nostro problema primale
(4.1). Quindi ci si puó porre la seguente domanda: una volta ricondotto il
duale (4.2) in forma standard, quale forma avrá il suo duale? La risposta ci
viene data dalla seguente Osservazione di cui omettiamo la dimostrazione.
Osservazione 15 Il duale del problema duale (4.2) coincide con il proble-
ma primale (4.1).
Questa osservazione ci mostra la totale simmetria esistente tra problema
primale e duale. Siamo ora pronti per dimostrare il I teorema della dualitá.
Teorema 4 Uno dei due problemi ha soluzioni ottime se e solo se anche
l’altro ha soluzioni ottime. Formalmente, Sott 6= ∅ se e solo se Dott 6= ∅.
Inoltre, i valori ottimi dei due problemi coincidono.
Dimostrazione Supponiamo di avere Sott 6= ∅ e sia B ∗ una base ottima
per il problema primale. Avremo quindi che la soluzione di base del primale
associata a B ∗ , cioé:
xB ∗ = A−1
B∗ b xN ∗ = 0,
é ammissibile per il primale ed inoltre é soddisfatta la condizione di otti-
malitá:
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ≤ 0.
Ma questo ci dice anche che la soluzione di base del duale associata a B ∗ ,
cioé: ∗
uB = cB ∗ A−1B∗ ,
é ammissibile per il duale. Come giá osservato in precedenza le due solu-
zioni di base del primale e del duale associate a B ∗ hanno lo stesso valore
dell’obiettivo ed essendo ammissibili rispettivamente per il primale e per il
duale, l’Osservazione 13 ci permette di concludere che sono soluzioni ottime
dei rispettivi problemi. Quindi abbiamo dimostrato che Sott 6= ∅ implica
Dott 6= ∅ e i due valori ottimi coincidono. Il viceversa, cioé che Dott 6= ∅
implica Sott 6= ∅, é una conseguenza immediata della proprietá di simmetria
tra primale e duale esppressa dall’Osservazione 15. Infatti, in base a quanto
appena dimostrato, se il duale ha soluzioni ottime anche il suo duale ne ha
e i valori ottimi dei due problemi coincidono. Ma in base all’Osservazione
15, il duale del duale coincide proprio con il problema primale.

Riassumiamo ora tutte le possibili relazioni tra primale e duale.


• In base al I teorema della dualitá
Sott 6= ∅ ⇔ Dott 6= ∅
In base allo stesso teorema si ha anche che i valori ottimi coincidono.

61
• Se Sott = ∅ in quanto l’obiettivo primale é illimitato, allora Da =
∅ (per l’Osservazione 14). Ció implica anche per la simmetria tra
primale e duale espressa nell’Osservazione 15, che se Dott = ∅ in
quanto l’obiettivo duale é illimitato, allora Sa = ∅.
• Se Sa = ∅, allora Da = ∅ oppure l’obiettivo duale é illimitato. Ció
implica anche per la simmetria tra primale e duale espressa nell’Os-
servazione 15, che se Da = ∅, allora Sa = ∅ oppure l’obiettivo primale
é illimitato.
Il seguente é un esempio in cui sia Sa che Da sono insiemi vuoti.
Esempio 15 Si consideri il seguente problema primale

max 2x1 − x2
x1 − x2 = 1
−x1 + x2 = −2
x1 , x2 ≥ 0

Si noti che Sa = ∅. Si trovi ora il duale di tale problema:

min u1 − 2u2
u1 − u2 ≥ 2
−u1 + u2 ≥ −1

in cui si puó notare che anche Da = ∅.


Introduciamo ora il II teorema della dualitá.
Teorema 5 Si ha che x∗ ∈ Sott e u∗ ∈ Dott se e solo se x∗ e u∗ appartengo-
no rispettivamente a Sa e Da e soddisfano le condizioni di complementaritá,
cioé
(u∗ A − c)x∗ = 0. (4.8)
o, in forma scalare:
n
Ãm !
X X
u∗i aij − cj x∗j = 0. (4.9)
j=1 i=1

Dimostrazione Se vale (4.8), si ha

u∗ Ax∗ = cx∗ .

Ma x∗ ∈ Sa implica Ax∗ = b e quindi

u∗ b = u∗ Ax∗ = cx∗ .

62
In base all’Osservazione 13, ció implica che le due soluzioni sono ottime per
i rispettivi problemi.
Vediamo ora di dimostrare il viceversa, ovvero che se le due soluzioni sono
ottime soddisfano le condizioni di complementaritá. Per il I teorema della
dualitá sappiamo che
u∗ b = cx∗ .
Ora, sommiamo e sottraiamo u∗ Ax∗ ed otteniamo

u∗ b − u∗ Ax∗ + u∗ Ax∗ − cx∗ = 0

che possiamo riscrivere come segue

u∗ (b − Ax∗ ) + (u∗ A − c)x∗ = 0. (4.10)

Ora, x∗ ∈ Sa implica Ax∗ = b e quindi (4.10) si riduce a:

(u∗ A − c)x∗ = 0,

che é quanto volevamo dimostrare.

Ma vediamo di capire meglio quanto ci dicono le condizioni di comple-


mentaritá. Ricordiamo che

(u∗ A − c)x∗ = 0,

in forma scalare equivale a:


n
Ãm !
X X
u∗i aij − cj x∗j = 0.
j=1 i=1

Dal momento che u∗ ∈ Da e x∗ ∈ Sa , si avrá che:


m
X
u∗i aij − cj ≥ 0, x∗j ≥ 0 ∀ j = 1, . . . , n.
i=1

e quindi Ãm !
X
u∗i aij − cj x∗j ≥ 0.
i=1

Ne consegue che: Ãm !
n
X X
u∗i aij − cj x∗j = 0.
j=1 i=1

63
se e solo se: Ãm !
X
u∗i aij − cj x∗j = 0 ∀ j = 1, . . . , n.
i=1

(una somma di addendi non negativi può essere nulla se e solo se ciascun
addendo è nullo). Ció equivale alle seguenti condizioni:
m
X
x∗j > 0 ⇒ u∗i aij − cj = 0,
i=1

cioé se una variabile x∗j ha valore positivo in una soluzione ottima del proble-

ma primale, le soluzioni ottime Pmu del duale devono soddisfare come ugua-
glianza il vincolo del duale i=1 u∗i aij ≥ cj corrispondente alla variabile
x∗j ;
X m
u∗i aij − cj > 0 ⇒ x∗j = 0,
i=1

cioé se una soluzione


Pmottima del duale u∗ non soddisfa come uguaglianza il

vincolo del duale i=1 ui aij ≥ cj , il valore della corrispondente variabile
x∗j nelle soluzioni ottime del primale deve essere nullo.
Vediamo ora come queste condizioni possono essere utilizzate per ottenere
una soluzione ottima del duale una volta che é data una soluzione ottima
del primale. Sia dato il problema primale:

max x1 − x2
x1 + 2x2 + x3 = 6
2x1 + x2 + x4 = 4
x1 , x2 , x3 , x4 ≥ 0.

Si puó dimostrare che la soluzione ottima di questo problema é la seguente:

x∗1 = 2 x∗2 = 0 x∗3 = 4 x∗4 = 0.

Si consideri ora il duale del problema:

min 6u1 + 4u2


u1 + 2u2 ≥ 1
2u1 + u2 ≥ −1
u1 ≥ 0
u2 ≥ 0

64
La condizione di complementaritá è la seguente :
(u∗1 + 2u∗2 − 1)x∗1 + (2u∗1 + u∗2 + 1)x∗2 + (u∗1 − 0)x∗3 + (u∗4 − 0)x∗4 = 0
o, equivalentemente:
(u∗1 + 2u∗2 − 1)x∗1 = 0 (2u∗1 + u∗2 + 1)x∗2 = 0 (u∗1 − 0)x∗3 = 0 (u∗4 − 0)x∗4 = 0
In base a tali condizioni si ha che:
x∗1 > 0 ⇒ u∗1 + 2u∗2 = 1
x∗3 > 0 ⇒ u∗1 = 0.
Quindi una soluzione ottima del duale deve soddisfare il sistema
u∗1 + 2u∗2 = 1
u∗1 = 0
da cui si ricava immediatamente la soluzione ottima del duale:
u∗1 = 0 u∗2 = 1/2.

4.1 Il simplesso duale


In precedenza abbiamo descritto il metodo del simplesso che, per distin-
guerlo dal metodo che descriveremo ora, chiameremo simplesso primale. Il
metodo del simplesso primale segue il seguente schema:
• cominciamo con una base B la cui soluzione di base associata del pri-
male é ammissibile, ma con la soluzione di base associata del duale
tipicamente non ammisibile (si ricordi che l’ammissibilitá dellla so-
luzione di base associata del duale é equivalente alla condizione di
ottimalitá (3.2) per il primale);
• passiamo ad altre basi con le soluzioni di base associate del primale
sempre ammissibili ma con le corrispondenti soluzioni di base del
duale non ammissibili;
• se esistono soluzioni ottime, ci arrestiamo quando arriviamo ad una
base B ∗ la cui soluzione di base associata del primale é ammissi-
bile come al solito, ma per la quale é soddisfatta la condizione di
ottimalitá:
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ≤ 0,
che equivale anche all’ammissibilitá della soluzione di base associata
a B ∗ del duale.

65
Quindi, nel simplesso primale si genera una successione di basi ammissibili
per il primale ma non per il duale fino a raggiungere una base che sia anche
ammissibile per il duale (a patto che una tale base esista , a patto cioé
che il primale ammetta soluzioni ottime e non abbia obiettivo illimitato).
In alcuni casi succede che é semplice avere una base la cui soluzione di
base associata del duale é ammissibile ma non lo é quella del primale. Il
simplesso duale non é altro che il simplesso applicato al problema duale, in
cui seguiremo quindi il seguente schema:

• cominciamo con una base B la cui soluzione di base associata del


duale é ammissibile, ma con la soluzione di base associata del primale
tipicamente non ammisibile;

• passiamo ad altre basi con le soluzioni di base associate del duale


sempre ammissibili ma con le corrispondenti soluzioni di base del
primale non ammissibili;

• se esistono soluzioni ottime, ci arrestiamo quando arriviamo ad una


base B ∗ la cui soluzione di base associata del duale é ammissibile
come al solito, ma per la quale é soddisfatta anche la condizione di
ammissibilitá per la soluzione di base associata a B ∗ del primale:

A−1
B ∗ b ≥ 0.

Quindi, nel simplesso duale si genera una successione di basi ammissibili


per il duale ma non per il primale fino a raggiungere una base che sia
anche ammissibile per il primale (a patto che una tale base esista , a patto
cioé che il duale ammetta soluzioni ottime e non abbia obiettivo illimitato).
Vediamo ora di descrivere i singoli passi in un’iterazione del simplesso duale.
Supporremo di avere una base B con soluzione di base associata del duale
ammissibile. La riformulazione del problema primale rispetto alla base
B = {xi1 , . . . , xik , . . . , xim } é la seguente:
Pn−m
max γ0 + j=1 γj xim+j
Pn−m
xi1 = β1 + j=1 α1j xim+j
···
Pn−m
xik = βk + j=1 αkj xim+j (4.11)
···
Pn−m
xim = βm + j=1 αmj xim+j
x1 , . . . , xn ≥ 0

66
Si noti che la condizione di ammissibilitá per la soluzione di base del duale
é equivalente a
γj ≤ 0 j = 1, . . . , n − m. (4.12)

4.1.1 Verifica di ottimalitá


Se
A−1
B b ≥ 0,

o, equivalentemente:
βi ≥ 0 i = 1, . . . , m

allora la base B é ottima, la soluzione di base del primale

xB = A−1
B b xN = 0

é ottima per il primale, mentre la soluzione di base

uB = cB A−1
B

é ottima per il duale.

4.1.2 Verifica di illimitatezza del duale


Se esiste un r ∈ {1, . . . , m} tale che

βr < 0 αrj ≤ 0 j = 1, . . . , n − m,

allora si ha Sa = ∅. Infatti, dall’equazione:

n−m
X
xir = βr + αrj xim+j < 0,
|{z} |{z} | {z }
j=1
<0 ≤0 ≥0

si vede come la variabile xir non possa mai essere non negativa se le variabili
xim+j , j = 1, . . . , n − m, sono non negative. Ne consegue anche che il duale
ha obiettivo illimitato. Infatti, abbiamo visto che con Sa = ∅ sono possibili
due casi: Da = ∅ e duale con obiettivo illimitato. Ma il primo dei due casi
(Da = ∅) non si puó verificare qui in quanto la soluzione di base del duale
associata a B é per ipotesi ammissibile e quindi Da non puó essere vuoto.

67
4.1.3 Scelta della variabile uscente dalla base
Rispetto al simplesso primale qui scegliamo prima la variabile uscente dalla
base. La regola di scelta é la seguente: si seleziona la variabile xik tale che

βk = min{βi } < 0

(per convenzione quella con indice piú piccolo se il minimo é raggiunto da


piú variabili).

4.1.4 Scelta della variabile entrante in base


La variabile entrante in base viene scelta tra quelle con αkj > 0. In
particolare si sceglie la variabile xim+h tale che
½ ¾
γh γj
− = min − : αkj > 0 . (4.13)
αkh αkj

(nel caso il minimo sia raggiunto da piú variabili si sceglie, per conven-
zione, quella con indice piú piccolo). A questo punto possiamo eseguire
l’operazione di cardine facendo uscire di base xik e facendo entrare in base
xim+h .

4.1.5 Mantenimento dell’ammissibilitá e miglioramen-


to dell’obiettivo
Vogliamo far vedere che le scelte fatte preservano l’ammissibilitá duale, cioé
la soluzione di base del duale associata alla nuova base é ancora ammissibile
per il duale, ed inoltre la nuova soluzione ha un valore dell’obiettivo migliore
(o quantomeno non peggiore) rispetto alla precedente. Mostriamo dappri-
ma che le scelte fatte preservano l’ammissibilitá duale. Con l’operazione di
cardine avremo:
n−m
βk 1 X αkj
xim+h = − + xi − xi ,
αkh αkh k αkh m+j
j=1, j6=h

da cui, sostituendo nell’obiettivo si ottiene:


· ¸ n−m µ ¶
βk γh X αkj
γ0 − γh + xi − γj − γh xim+j .
αkh αkh k αkh
j=1, j6=h

Si ha ammissibilitá per il duale se i coefficienti delle variabili xik e xim+j ,


j = 1, . . . , n−m, j 6= h sono non positivi. Per quanto riguarda il coefficiente

68
di xik , abbiamo
≤0
z}|{
γh
≤ 0.
αkh
|{z}
>0
Per quanto riguarda i coefficienti di xim+j , j = 1, . . . , n − m, j 6= h
distinguiamo due casi: αkj ≤ 0 e αkj > 0. Se αkj ≤ 0, allora:
≤0
z}|{
αkj
γj − γh ≤ γj ≤ 0.
|{z} αkh
≤0 |{z}
>0

Se αkj > 0, allora:


µ ¶
αkj γj γh
γj − γh = αkj − ≤ 0,
αkh |{z} αkj αkh
>0 | {z }
≤0

dove
γj γh
− ≤0
αkj αkh
é una conseguenza della regola (4.13) per la scelta della variabile da far
entrare in base.
Per quanto riguarda il nuovo valore dell’obiettivo, esso é pari a:
<0
z}|{
βk
γ0 − γh ≤ γ0 ,
|{z} αkh
≤0 |{z}
>0

e quindi il valore dell’obiettivo per la nuova soluzione di base é migliore o


quantomeno non peggiore rispetto alla precedente. Si noti che il duale é un
problema di minimo e quindi per valore dell’obiettivo migliore si intende
un valore inferiore rispetto al precedente. Si noti anche che se γh < 0 (cosa
certamente vera nel caso non degenere) possiamo anche garantire che il
nuovo valore dell’obiettivo sia strettamente minore rispetto al precedente.
Esempio 16 Vediamo ora di risolvere un problema di PL utilizzando il
simplesso duale. Si consideri il seguente problema di PL in forma standard:
max −3x1 − 2x2 + x3
−2x1 + x2 + x3 = −1
x1 + 2x2 + x4 = 2
x1 , x2 , x3 , x4 ≥ 0

69
Prendiamo la riformulazione di tale problema rispetto alla base {x3 , x4 }. Si
ottiene:

max −1 − x1 − 3x2
x3 = −1 + 2x1 − x2
x4 = 2 − x1 − 2x2 (4.14)
x1 , x2 , x3 , x4 ≥ 0

Si nota che la soluzione di base del primale associata alla base {x3 , x4 } é:

x1 = x2 = 0 x3 = −1 x4 = 2,

e quindi non é ammissibile, mentre la soluzione di base del duale associata


alla stessa base é ammissibile in quanto i coefficienti delle variabili fuo-
ri base x1 e x2 nell’obiettivo di (4.14) sono non positivi (rispettivamente
pari a -1 e -3: essendo strettamente negativi possiamo anche dire che la
soluzione di base del duale é non degenere). Quindi possiamo applicare il
simplesso duale. Per prima cosa dobbiamo fare la verifica di ottimalitá, che
nel simplesso duale si riduce a controllare se i termini noti dei vincoli della
riformulazione sono non negativi. Nel nostro caso ció non é vero in quanto
il termine noto del vincolo relativo alla variabile x3 in (4.14) é pari a -1.
Successivamente dobbiamo verificare se l’obiettivo del problema duale é illi-
mitato o, equivalentemente, se il problema primale ha regione ammissibile
vuota. Perché questo accada si deve avere che in almeno una delle equa-
zioni in cui il termine noto é negativo, i coefficienti delle variabili fuori
base sono tutti non positivi. Ma in (4.14) l’unica equazione con termine
noto negativo é quella relativa a x3 e in questa equazione la variabile x1 ha
coefficiente positivo pari a 2.
A questo punto dobbiamo scegliere la variabile da far uscire dalla base. La
scelta ricade su quella con termine noto piú piccolo e quindi sulla x3 .
Ora dobbiamo scegliere la variabile da far entrare in base. Utilizzando la
regola (4.13), la scelta é ristretta alla sola variabile x1 , la sola ad avere
coefficiente positivo nell’equazione relativa alla variabile x3 .
Infine dobbiamo eseguire l’operazione di cardine facendo uscire dalla base x3
e facendovi entrare x1 . La riformulazione rispetto alla nuova base {x1 , x4 }
é la seguente:

max −3/2 − 1/2x3 − 7/2x2


x1 = 1/2 + 1/2x3 + 1/2x2
x4 = 3/2 − 1/2x3 − 3/2x2
x1 , x2 , x3 , x4 ≥ 0

70
Come previsto, si mantiene l’ammissibilitá duale. Ma ora si ha anche che
la nuova base soddisfa la condizione di ottimalitá (tutti i termini noti non
negativi). Quindi la nuova base é ottima e il problema primale ha soluzione
ottima:
x∗1 = 1/2 x∗4 = 3/2 x∗2 = x∗3 = 0,
con valore ottimo pari a −3/2.

Come esercizio si provi a risolvere il seguente problema di PL con il sim-


plesso duale, partendo dalla base {x3 , x4 , x5 }:

max −3x1 − 2x2 + x3


2x1 + x2 + x3 = 2
x1 + 2x2 + x4 = 2
−x1 − x2 + x5 = −2
x1 , x2 , x3 , x4 , x5 ≥ 0

4.2 Duale di un problema di PL generico


Abbiamo visto sino ad ora come si determina il duale di un problema di PL
in forma standard. É possibile peró determinare il duale anche di proble-
mi di PL in forma piú generale. Si puó fare ció riconducendo dapprima il
problema in forma standard, come giá accennato in precedenza per l’indi-
viduazione del duale del problema duale (4.2). Tuttavia qui daremo alcune
regole per determinare in modo diretto il duale di un problema di PL in
forma generica, senza doversi ricondurre alla forma standard. Come per i
problemi in forma standard, vi sará una stretta relazione tra le variabili di
un problema ed i vincoli dell’altro. Piú precisamente avremo, come per la
forma standard, che:

1. nel primale ci sono n variabili esattamente come nel duale vi sono n


vincoli. Inoltre, i coefficienti del j-esimo vincolo del duale coincidono
con i coefficienti della variabile xj nei vincoli del primale, mentre il
termine noto del j-esimo vincolo del duale coincide con il coefficiente
di xj nell’obiettivo del primale.

2. Nel primale vi sono m vincoli esattamente come nel duale vi sono


m variabili. Inoltre, i coefficienti dell’i-esima variabile ui del duale
coincidono con i coefficienti dell’i-esimo vincolo del primale, mentre il
coefficiente di ui nell’obiettivo del duale coincide con il termine noto
dell’i-esimo vincolo del primale.

71
Tabella 4.1:
min max
variabile ≥ 0 vincolo ≤
variabile ≤ 0 vincolo ≥
variabile libera vincolo =
vincolo ≥ variabile ≥ 0
vincolo ≤ variabile ≤ 0
vincolo = variabile libera

Rispetto alla forma standard quello che puó cambiare sono i versi delle
disequazioni ed i segni delle variabili. Per stabilire questi ci si puó rifare
allo specchietto nella Tabella 4.1. Lo specchietto ci dice, per esempio, che
se il primale é un problema di massimo ed una variabile é nel primale ≥ 0,
allora il vincolo corrispondente del duale é di ≥, oppure che se il primale é
un problema di minimo ed un vincolo del primale é di =, allora la variabile
corrsipondente del duale é libera in segno (puó assumere sia valori negativi
che positivi). Come esercizio, si usi lo specchietto per verificare che il duale
del seguente problema di PL
min x1 + 2x2 + 3x3
x1 + x2 − x3 ≤ 1
x1 − 2x2 + x3 ≥ 2 (4.15)
x1 − x2 − x3 = 4
x1 ≥ 0, x2 ≤ 0, x3 libera
è il seguente
max u1 + 2u2 + 4u3
u1 + u2 + u3 ≤ 1
u1 − 2u2 − u3 ≥ 2
−u1 + u2 − u3 = 3
u1 ≤ 0, u2 ≥ 0, u3 libera
I risultati delle Osservazioni 12-15 e quelli del I e II teorema della dualitá
possono essere estesi anche a problemi di PL in forma piú generale e ai loro
duali. Ad esempio, a conferma della validitá dell’Osservazione 15 si calcoli
il duale del duale del problema (4.15) e si verifichi che coincide proprio con
(4.15).

72
Capitolo 5

Analisi di sensitivitá

I coefficienti che appaiono in un problema di PL non sono sempre dei va-


lori esatti ma piuttosto delle stime. Inoltre, anche quando si tratta di dati
esatti succede spesso che dopo aver ottenuto la soluzione ottima del pro-
blema ci si chiede che cosa succederebbe modificando un qualche dato del
problema. Questo ci spinge a porci la seguente domanda: se i coefficienti
vengono modificati, come cambiano la soluzione ottima e il valore ottimo
del nostro problema? In altre parole, la soluzione ottima e il valore ottimo
del nostro problema quanto sono sensibili a modifiche dei valori dei coef-
ficienti? L’analisi di sensitivitá si occupa della risposta a tali domande.
Supponiamo di avere il nostro problema di PL in forma standard:
max cx
Ax = b
x≥0
e di aver stabilito che una base ottima del problema é B ∗ . Avremo quindi
la seguente riformulazione rispetto alla base B ∗ :
max cB ∗ A−1 −1
B ∗ b + (cN ∗ − cB ∗ AB ∗ AN ∗ )xN ∗
xB ∗ = A−1 −1
B ∗ b − A B ∗ AN ∗ x N ∗ (5.1)
xB ∗ , xN ∗ ≥ 0
Avremo inoltre che una soluzione ottima del primale é:
xB ∗ = A−1
B ∗ b xN ∗ = 0,

mentre per il duale si ha la soluzione ottima:



uB = cB ∗ A−1
B∗ .

73
Entrambi i problemi hanno valore ottimo:

cB ∗ A−1
B ∗ b.

A questo punto vediamo cosa succede modificando diversi tipi di coefficien-


ti. Ci limiteremo ad analizzare l’effetto di modifiche di singoli coefficienti
ma l’analisi puó essere estesa anche alla modifica in contemporanea di piú
coefficienti.

5.1 Modifica di un termine noto


Supponiamo che il termine noto br di un dato vincolo venga modificato
in br + ∆br , dove ∆br é un certo valore reale (puó essere sia positivo che
negativo). Avremo quindi al posto del vettore b il vettore b le cui compo-
nenti sono tutte uguali a quelle del vettore b, tranne la r-esima che diventa
br + ∆br . Andando a sostituire nella riformulazione (5.1), si ottiene:

max cB ∗ A−1 −1
B ∗ b + (cN ∗ − cB ∗ AB ∗ AN ∗ )xN ∗
xB ∗ = A−1 −1
B ∗ b − A B ∗ AN ∗ x N ∗
xB ∗ , xN ∗ ≥ 0

Si possono avere due casi:

Caso 1 Il vettore A−1


B ∗ b ha delle componenti negative. Ció vuol dire che
la modifica del termine noto ha reso la soluzione di base del primale
associata a B ∗ non ammissibile. Tuttavia, la condizione

cN ∗ − cB ∗ A−1
B ∗ AN ∗ ≤ 0,

che non dipende dai termini noti, continua ad essere soddisfatta e


quindi la soluzione di base del duale associata a B ∗ continua ad es-
sere ammissibile. É importante sottolineare come non sia necessario
risolvere il nuovo problema da zero, visto che, sfruttando l’ammis-
sibilitá della soluzione di base del duale associata a B ∗ , possiamo
applicare il simplesso duale con base iniziale proprio B ∗ . In questo
modo si arriva tipicamente ad una soluzione del problema modificato
in tempi molto piú rapidi che non risolvendolo da zero.

Caso 2 Si ha che:
A−1
B ∗ b ≥ 0.

Quindi la soluzione di base del primale associata a B ∗ continua ad


essere ammissibile. Come nel Caso 1, la soluzione di base del duale

74
associata a B ∗ resta ammissibile. Poiché entrambe le soluzioni di
base sono ammissibili, si ha che la base B ∗ é ancora ottima. La
nuova soluzione ottima del primale diventa
xB ∗ = A−1
B ∗ b xN ∗ = 0,

mentre quella del duale resta invariata e cioè pari a cB ∗ A−1


B ∗ . Vediamo
ora come cambia il valore ottimo rispetto a prima. Il nuovo valore
ottimo é cB ∗ A−1
B ∗ b e quindi la differenza rispetto al precedente é pari
a:
m
X
∗ ∗
cB ∗ A−1 −1
B ∗ b − c B ∗ AB ∗ b = u
B
(b − b) = uB
i (bi − bi ).
i=1

Poiché:
bi = bi ∀ i 6= r br = br + ∆br ,
avremo:
∗ ∗
cB ∗ A−1 −1 B B
B ∗ b − cB ∗ AB ∗ = ur (br − br ) = ur ∆br .

Questo ci dá una interpretazione della soluzione ottima del duale: il


valore della r-esima variabile nella soluzione ottima del duale misura
la rapiditá con cui cambia il valore ottimo del problema al variare del

termine noto br del vincolo r-esimo del primale. Se il valore di uB r
é elevato, anche piccole modifiche di br possono portare a consistenti

variazioni del valore ottimo. Se invece il valore di uB r é piccolo,
il valore ottimo del problema non é molto sensibile a variazioni del
termine noto br .

5.2 Modifica del coefficiente di costo di una


variabile al di fuori della base ottima
Supponiamo che venga modificato il coefficiente di costo di una delle va-
riabili fuori base xim+j , j = 1, . . . , n − m, ad esempio la variabile xim+t .
Avremo quindi al posto del vettore cN ∗ il vettore cN ∗ le cui componen-
ti sono tutte uguali a quelle del vettore cN ∗ , tranne quella relativa alla
variabile xim+t . Andando a sostituire nella riformulazione (5.1), si ottiene:

max cB ∗ A−1 −1
B ∗ b + (cN ∗ − cB ∗ AB ∗ AN ∗ )xN ∗
xB ∗ = A−1 −1
B ∗ b − A B ∗ AN ∗ x N ∗
xB ∗ , xN ∗ ≥ 0
Si possono avere ancora due casi:

75
Caso 1 Il vettore
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ,

ha delle componenti positive. Questo vuol dire che la soluzione di


base del duale associata a B ∗ non é piú ammissibile. Resta invece
ammissibile la soluzione di base del primale associata a B ∗

xB ∗ = A−1
B ∗ b, xN ∗ = 0,

che non é influenzata dalla modifica introdotta. Quindi, anche qui


non é necessario risolvere il nuovo problema da zero, ma, sfruttando
l’ammissibilitá della soluzione di base del primale associata a B ∗ ,
possiamo applicare questa volta il simplesso primale con base iniziale
proprio B ∗ . Si puó anche dimostrare che la prima variabile che entrerá
in base sará proprio la variabile xim+t . Perché?

Caso 2 Si ha che:
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ≤ 0,

Quindi la soluzione di base del duale associata a B ∗ continua ad


essere ammissibile. Come nel Caso 1, la soluzione di base del primale
associata a B ∗ resta ammissibile. Poiché entrambe le soluzioni di
base sono ammissibili, si ha che la base B ∗ é ancora ottima. Le
soluzioni ottime del primale e del duale restano invariate in quanto
non dipendono dalla modifica introdotta. Lo stesso vale per il valore
ottimo comune dei due problemi.

5.3 Modifica del coefficiente di costo di una


variabile appartenente alla base ottima
Supponiamo che venga modificato il coefficiente di costo di una delle va-
riabili in base xir , r = 1, . . . , m, ad esempio la variabile xis , che passa da
cis a cis + ∆cis . Avremo quindi al posto del vettore cB ∗ il vettore cB ∗
le cui componenti sono tutte uguali a quelle del vettore cB ∗ , tranne quella
relativa alla variabile xis . Andando a sostituire nella riformulazione (5.1),
si ottiene:

max cB ∗ A−1 −1
B ∗ b + (cN ∗ − cB ∗ AB ∗ AN ∗ )xN ∗
xB ∗ = A−1 −1
B ∗ b − A B ∗ AN ∗ x N ∗
xB ∗ , xN ∗ ≥ 0

Si possono avere ancora due casi:

76
Caso 1 Il vettore
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ,
ha delle componenti positive. Questo vuol dire che la soluzione di
base del duale associata a B ∗ non é piú ammissibile. Resta invece
ammissibile la soluzione di base del primale associata a B ∗
xB ∗ = A−1
B ∗ b, xN ∗ = 0,
che non é influenzata dalla modifica introdotta. Quindi, al solito,
non é necessario risolvere il nuovo problema da zero, ma, sfruttando
l’ammissibilitá della soluzione di base del primale associata a B ∗ ,
possiamo applicare il simplesso primale con base iniziale proprio B ∗ .
Caso 2 Si ha che:
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ≤ 0,
Quindi la soluzione di base del duale associata a B ∗ continua ad
essere ammissibile. Come nel Caso 1, la soluzione di base del primale
associata a B ∗ resta ammissibile. Poiché entrambe le soluzioni di base
sono ammissibili, si ha che la base B ∗ é ancora ottima. La soluzione
ottima del primale, che non dipende dalla modifica introdotta, resta
invariata, mentre la nuova soluzione ottima del duale é

uB = cB ∗ A−1
B∗ .

Vediamo anche come cambia il valore ottimo comune dei due proble-
mi.
cB ∗ A−1 −1 −1 ∗
B ∗ b−cB ∗ AB ∗ b = (cB ∗ −cB ∗ )AB ∗ b = (cB ∗ −cB ∗ )xB ∗ = ∆cis xis .

Quindi la variazione é data dal prodotto tra la perturbazione ∆cis del


coefficiente di costo della variabile xis ed il valore della stessa variabile
xis in corrispondenza della soluzione ottima del primale.

5.4 Modifica di un coefficiente della matrice


AN ∗
Supponiamo ora che venga modificato un coefficiente della matrice AN ∗ ,
la matrice ottenuta da A considerando le sole colonne relative a variabili
fuori base. Sia AN ∗ la nuova matrice ottenuta dopo la modifica. Andando
a sostituire nella riformulazione (5.1), si ottiene:
max cB ∗ A−1 −1
B ∗ b + (cN ∗ − cB ∗ AB ∗ AN ∗ )xN ∗
xB ∗ = A−1 −1
B ∗ b − A B ∗ AN ∗ x N ∗
xB ∗ , xN ∗ ≥ 0

77
Si possono avere ancora due casi:

Caso 1 Il vettore
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ,

ha delle componenti positive. Questo vuol dire che la soluzione di


base del duale associata a B ∗ non é piú ammissibile. Resta invece
ammissibile la soluzione di base del primale associata a B ∗

xB ∗ = A−1
B ∗ b, xN ∗ = 0,

che non é influenzata dalla modifica introdotta. Quindi, anche qui


non é necessario risolvere il nuovo problema da zero, ma, sfruttando
l’ammissibilitá della soluzione di base del primale associata a B ∗ ,
possiamo applicare il simplesso primale con base iniziale proprio B ∗ .

Caso 2 Si ha che:
cN ∗ − cB ∗ A−1
B ∗ AN ∗ ≤ 0,

Quindi la soluzione di base del duale associata a B ∗ continua ad


essere ammissibile. Come nel Caso 1, la soluzione di base del primale
associata a B ∗ resta ammissibile. Poiché entrambe le soluzioni di
base sono ammissibili, si ha che la base B ∗ é ancora ottima. Le
soluzioni ottime del primale e del duale restano invariate in quanto
non dipendono dalla modifica introdotta. Lo stesso vale per il valore
ottimo comune dei due problemi.

5.5 Modifica di un coefficiente della matrice


AB ∗
Supponiamo ora che venga modificato un coefficiente della matrice AB ∗ ,
la matrice ottenuta da A considerando le sole colonne relative a variabili
nella base B ∗ . A questo caso accenniamo solo brevemente solo per far
notare che é il piú complicato tra quelli visti. Sia AB ∗ la nuova matrice
ottenuta dopo la modifica. Il primo inconveniente che si puó verificare é
che AB ∗ non sia invertibile. A questo punto B ∗ non é piú neppure una
base. Ma vediamo cosa puó succedere anche nel caso fortunato in cui AB ∗
sia invertibile. Andando a sostituire nella riformulazione (5.1), si ottiene:
−1 −1
max cB ∗ AB ∗ b + (cN ∗ − cB ∗ AB ∗ AN ∗ )xN ∗
−1 −1
x B ∗ = A B ∗ b − A B ∗ AN ∗ x N ∗
xB ∗ , xN ∗ ≥ 0

78
Si puó avere che il vettore:
−1
AB ∗ b
ha componenti negative, mentre il vettore
−1
c N ∗ − c B ∗ A B ∗ AN ∗

ha componenti positive. In altre parole, né la soluzione di base del primale


associata a B ∗ , né quella del duale sono ammissibili. Di conseguenza, non
possiamo applicare né il simplesso duale né quello primale con base iniziale
B∗.

5.6 Un esempio
Si consideri il problema di PL

max −x1 − x2 + 2x3 + 3x4


2x1 + x2 + 2x3 = 1
x1 + 2x2 + x3 + x4 = 1
x1 , x2 , x3 , x4 ≥ 0

Si puó vedere che la base ottima é B ∗ = {x3 , x4 }. Quindi avremo N ∗ =


{x1 , x2 },
· ¸ · ¸ · ¸
2 0 −1 1/2 0 2 1
AB ∗ = AB ∗ = AN ∗ =
1 1 −1/2 1 1 2

cB ∗ = (2 3) cN ∗ = (−1 − 1) b = (1 1).
La soluzione ottima del primale é:

(x∗3 x∗4 ) = A−1


B ∗ b = (1/2 1/2) (x∗1 x∗2 ) = (0 0).

Quella del duale é:

(u∗1 u∗2 ) = cB ∗ A−1


B ∗ = (−1/2 3).

Il valore ottimo comune dei due problemi é

cB ∗ A−1
B ∗ b = 5/2.

Vediamo ora di apportare alcune modifiche nei coefficienti del problema e


di studiare gli effetti di queste modifiche.

79
Modifica di un termine noto
Introduciamo la perturbazione ∆b2 = −3/4 del termine noto della seconda
equazione. Quindi il valore b2 diventa pari a 1/4 e il nuovo vettore dei
termini noti é:
b = (1 1/4).
Si ha che:
A−1
B ∗ b = (1/2 − 1/4)

e quindi la soluzione di base del primale associata a B ∗ non é piú ammissi-



bile. Ma la soluzione di base del duale uB associata a B ∗ resta invariata
e continua ad essere ammissibile. Quindi possiamo applicare il simplesso
duale con base iniziale B ∗ .

Introduciamo ora la perturbazione ∆b2 = 1/4 del termine noto della se-
conda equazione. Quindi il valore b2 diventa pari a 5/4 e il nuovo vettore
dei termini noti é:
b = (1 5/4).
Si ha che:
A−1
B ∗ b = (1/2 3/4).

La soluzione di base del primale associata a B ∗ é ancora ammissibile. Resta



invariata la soluzione di base del duale uB associata a B ∗ e quindi continua
ad essere ammissibile. Quindi le due soluzioni sono ottime per i rispettivi
problemi. La nuova soluzione ottima del primale é:

x∗3 = 1/2 x∗4 = 3/4 x∗1 = x∗2 = 0.

Il valore ottimo dei due problemi viene modificato della quantitá:

u∗2 ∆b2 = 3 × 1/4 = 3/4,

e quindi il valore ottimo passa da 5/2 a 13/4.

Modifica del coefficiente di costo di una variabile fuori base


Introduciamo la perturbazione ∆c1 = 4 del coefficiente di costo della va-
riabile fuori base x1 . Quindi il valore c1 diventa pari a 3 e il nuovo vettore
dei costi delle variabili fuori base é:

cN ∗ = (3 − 1).

Si ha che:

cN ∗ − cB ∗ A−1
B ∗ AN ∗ = (3 − 1) − (2 11/2) = (1 − 13/2).

80
e quindi la soluzione di base del duale associata a B ∗ non é piú ammissibile.
Ma la soluzione di base del primale associata a B ∗ resta invariata e continua
ad essere ammissibile. Quindi possiamo applicare il simplesso primale con
base iniziale B ∗ . Possiamo anche dire che la prima variabile ad entrare in
base sará certamente la x1 . Perché?

Introduciamo ora la perturbazione ∆c1 = 2 del coefficiente di costo del-


la variabile fuori base x1 . Quindi il valore c1 diventa pari a 1 e il nuovo
vettore dei costi delle variabili fuori base é:

cN ∗ = (1 − 1).

Si ha che:

cN ∗ − cB ∗ A−1
B ∗ AN ∗ = (1 − 1) − (2 11/2) = (−1 − 13/2).

La soluzione di base del duale associata a B ∗ é ancora ammissibile. Resta


invariata la soluzione di base del primale associata a B ∗ e quindi continua
ad essere ammissibile. Quindi le due soluzioni sono ottime per i rispet-
tivi problemi. Le due soluzioni ottime ed il valore ottimo non subiscono
modifiche.

Modifica del coefficiente di costo di una variabile appartenente


alla base
Introduciamo la perturbazione ∆c3 = −4 del coefficiente di costo della
variabile in base x3 . Quindi il valore c3 diventa pari a −2 e il nuovo vettore
dei costi delle variabili in base é:

cB ∗ = (−2 3).

Si ha che:

cN ∗ − cB ∗ A−1
B ∗ AN ∗ = (−1 − 1) − (−2 7/2) = (1 − 9/2).

e quindi la soluzione di base del duale associata a B ∗ non é piú ammissibile.


Ma la soluzione di base del primale associata a B ∗ resta invariata e continua
ad essere ammissibile. Quindi possiamo applicare il simplesso primale con
base iniziale B ∗ .

Introduciamo ora la perturbazione ∆c3 = −1 del coefficiente di costo della


variabile in base x3 . Quindi il valore c3 diventa pari a 1 e il nuovo vettore
dei costi delle variabili in base é:

cB ∗ = (1 3).

81
Si ha che:

cN ∗ − cB ∗ A−1
B ∗ AN ∗ = (−1 − 1) − (1 5) = (−2 − 6).

La soluzione di base del duale associata a B ∗ é ancora ammissibile. Resta


invariata la soluzione di base del primale associata a B ∗ e quindi continua
ad essere ammissibile. Quindi le due soluzioni sono ottime per i rispettivi
problemi. Le nuova soluzione ottima del duale é:

uB = cB ∗ A−1
B ∗ = (−1 3).

Il valore ottimo dei due problemi viene modificato della quantitá:

x∗3 ∆c3 = 1/2(−1) = −1/2,

e quindi il valore ottimo passa da 5/2 a 2.

Modifica di un coefficiente della matrice AN ∗


Introduciamo la perturbazione ∆a11 = 8 del coefficiente associato alla va-
riabile fuori base x1 nel primo vincolo. Quindi il valore a11 diventa pari a
10 ed avremo la seguente nuova matrice:
· ¸
10 1
AN ∗ =
1 2

Si ha che:

cN ∗ − cB ∗ A−1
B ∗ AN ∗ = (−1 − 1) − (−2 11/2) = (1 − 13/2).

e quindi la soluzione di base del duale associata a B ∗ non é piú ammissibile.


Ma la soluzione di base del primale associata a B ∗ resta invariata e continua
ad essere ammissibile. Quindi possiamo applicare il simplesso primale con
base iniziale B ∗ .

Introduciamo ora la perturbazione ∆a11 = 2 del coefficiente associato alla


variabile fuori base x1 nel primo vincolo. Quindi il valore a11 diventa pari
a 4 ed avremo la seguente nuova matrice:
· ¸
4 1
AN ∗ =
1 2

Si ha che:

cN ∗ − cB ∗ A−1
B ∗ AN ∗ = (−1 − 1) − (1 11/2) = (−2 − 13/2).

82
La soluzione di base del duale associata a B ∗ é ancora ammissibile. Resta
invariata la soluzione di base del primale associata a B ∗ e quindi continua
ad essere ammissibile. Quindi le due soluzioni sono ottime per i rispet-
tivi problemi. Le due soluzioni ottime ed il valore ottimo non subiscono
modifiche.

Modifica di un coefficiente della matrice AB ∗


Introduciamo la perturbazione ∆a24 = −1 del coefficiente associato alla
variabile in base x4 nel secondo vincolo. Quindi il valore a24 diventa pari a
0 ed avremo la seguente nuova matrice:
· ¸
2 0
AB ∗ =
1 0

Come si vede la nuova matrice non é invertibile e quindi B ∗ non é piú una
base.

5.7 L’esempio del problema degli aiuti uma-


nitari
Nelle prime lezioni abbaimo introdotto il problema degli aiuti umanitari,
che ha la seguente formulazione come problema di PL:

max 14x1 + 5x2 + 4x3


10x1 + 30x2 + 20x3 ≤ 5100
10x1 + 20x2 + 40x3 ≤ 8000
30x1 + 10x2 + 5x3 ≤ 1805
x1 , x2 , x3 ≥ 0

Il problema è in forma canonica ma con l’aggiunta delle variabili non


negative y1 , y2 , y3 lo si può ricondurre alla forma standard:

max 14x1 + 5x2 + 4x3


10x1 + 30x2 + 20x3 + y1 = 5100
10x1 + 20x2 + 40x3 + y2 = 8000 (5.2)
30x1 + 10x2 + 5x3 + y3 = 1805
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

Partendo dalla base ammissibile B0 = {y1 , y2 , y3 } si può applicare il metodo


del simplesso e si giunge alla base ottima B ∗ = {y1 , x3 , x1 } con la seguente

83
riformulazione rispetto ad essa:
1 52 9
max 1164 − 23 y2 − 115 y3 − 23 x2
4 11
y1 = 960 + 23 y3 + 23 y2 − 430
23 x2
1 3 10
x3 = 193 + 115 y3 − 115 y2 − 23 x2 (5.3)
4 1 6
x1 = 28 − 115 y3 + 230 y2 − 23 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

Da qui si vede immediatamente che la soluzione ottima (unica) del primale


è:
y1∗ = 960 x∗3 = 193 x∗1 = 28 x∗2 = y2∗ = y3∗ = 0.
Essendo partiti con la base B0 le cui variabili formano la matrice identica
nella formulazione originaria (5.2), posso, con il metodo visto in precedenza,
leggere la matrice A−1
B ∗ dalla riformulazione (5.3):
 11 4

1 − 23 − 23
A−1B∗ =
 0 3
115
1 
− 115
1 4
0 − 230 115

La soluzione di base del duale uB associata a B ∗ sarà soluzione ottima del
duale: µ ¶
∗ 1 52
uB = cB ∗ A−1 B ∗ = (0 4 14)A −1
B ∗ = 0
23 115
(per esercizio si ricavi la stessa soluzione anche attraverso le condizioni di
complementarità).

5.7.1 Modifiche nei dati del problema


Tra i dati del problema degli aiuti umanitari alcuni sono esatti mentre altri
sono delle stime. In particolare, la disponibilità di farina, acqua e medici-
nali e i contenuti di ciascun tipo di pacco sono dati esatti, mentre i valori
di utilità sono stime. Ora, se ho a che fare con dati stimati è importante
chiedersi quanto la mia soluzione sia sensibile al valore di tali dati. Per
esempio, il valore stimato dell’utilità del pacco di tipo I è 14 ma mi posso
chiedere come cambiano la soluzione ottima e il valore ottimo del problema
se il valore di utilità passa da 14 a 13 oppure a 15. Se queste modifiche
lasciano sostanzialmente invariata la soluzione ottima del mio problema,
allora vuol dire che questa è poco sensibile a modifiche del dato stimato e
di conseguenza possiamo aspettarci conclusioni corrette anche usando una
stima non troppo precisa. Viceversa, se le modifiche comportano notevo-
li cambiamenti nella soluzione ottima, allora vuol dire che questa è molto

84
sensibile a modifiche del dato ed in tal caso per avere conclusioni corrette
occorre avere una stima molto precisa del dato. Quindi, in presenza di dati
stimati è importante riuscire a capire che cosa succede quando apporto ad
essi delle modifiche.

Ma non è questo l’unico caso in cui voglio sapere cosa succede se modi-
fico un qualche dato. Nel nostro esempio degli aiuti umanitari posso, dopo
aver risolto il problema, chiedermi cosa succede se riesco a procurarmi, ad
esempio, altri 100 sacchi di farina portando quindi la disponibilità di questa
da 5100 a 5200 sacchi. Anche in questo caso vogliamo vedere quale impatto
avrebbe sulla soluzione ottima del nostro problema la modifica di un dato
del problema stesso.

L’analisi di sensitività si occupa proprio di studiare gli effetti di modifiche


nei dati del problema e vedremo ora come funziona modificando singolar-
mente alcuni dati del nostro problema.

Modifica di un termine noto


Vediamo cosa succede se modifico la disponibilità di acqua (che attualmen-
te è b2 = 8000) prima incrementandola di 1150 unità (∆b2 = 1150) e poi di
2300 unità (∆b2 = 2300).

∆b2 = 1150 Il nuovo vettore di termini noti sarà:

b = (5100 9150 1805).

Nella riformulazione rispetto a B ∗ le uniche parti che vengono modificate


sono i termini noti dei vincoli che diventeranno:

A−1
B ∗ b = (410 223 23)

e il valore dell’obiettivo, che viene modificato della quantitá:


1
u∗2 ∆b2 = 1150 = 50,
23
e quindi passa da 1164 a 1214. La soluzione di base del primale associata
a B ∗ é ancora ammissibile. Resta invariata la soluzione di base del duale

uB associata a B ∗ e quindi continua ad essere ammissibile. Quindi le due
soluzioni sono ottime per i rispettivi problemi. La nuova soluzione ottima
del primale é:

x∗1 = 223 x∗3 = 23 y1∗ = 410 x∗2 = y2∗ = y3∗ = 0.

85
Il valore ottimo dei due problemi è ora 1214.

∆b2 = 2300 Il nuovo vettore di termini noti sarà:

b = (5100 10300 1805).

Nella riformulazione rispetto a B ∗ le uniche parti che vengono modificate


sono i termini noti dei vincoli che diventeranno:

A−1
B ∗ b = (−140 253 18)

e il valore dell’obiettivo, che viene modificato della quantitá:


1
u∗2 ∆b2 = 2300 = 100,
23
e quindi passa da 1164 a 1264. La riformulazione rispetto a tale base sarà
la seguente:
1 52 9
max 1264 − 23 y2 − 115 y3 − 23 x2
4 11 430
y1 = −140 + 23 y3 + 23 y2 − 23 x2
1 3 10
x3 = 253 + 115 y3 − 115 y2 − 23 x2
4 1 6
x1 = 18 − 115 y3 + 230 y2 − 23 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

La soluzione di base del primale associata a B ∗ non é piú ammissibile. Ma



la soluzione di base del duale uB associata a B ∗ resta invariata e continua
ad essere ammissibile. Quindi possiamo applicare il simplesso duale con
base iniziale B ∗ .

Vediamo anche che cosa succede se apporto la modifica ∆b1 = 100, ov-
vero incremento di 100 unità la disponibilità di sacchi di farina. Si può
verificare che il nuovo vettore di termini noti sarà:

b = (5200 8000 1805).

Nella riformulazione rispetto a B ∗ le uniche parti che vengono modificate


sono i termini noti dei vincoli che diventeranno:

A−1
B ∗ b = (1060 193 28)

Quindi la base B ∗ è ancora ottima. Il valore dell’obiettivo viene modificato


della quantitá:
u∗1 ∆b1 = 0 ∗ 100 = 0,

86
e quindi resta invariato. Ciò ci dice che avere 100 sacchi di farina in più non
migliora le cose. Questo lo si poteva intuire anche analizzando quello che
succedeva in corrispondenza della soluzione ottima trovata. Mentre in tale
soluzione acqua e medicinali venivano usati in modo completo, restavano
invece inutilizzati 960 sacchi di farina. Ne consegue che, se già con 5100
sacchi di farina si avevano delle eccedenze, non è aumentando il numero di
tali sacchi che possiamo sperare di migliorare il valore ottimo, ma piuttso-
sto dovremo incrementare il numero di bottiglie d’acqua e/o di scatole di
medicinali.

Modifica del coefficiente di costo di una variabile fuori base


Vediamo cosa succede se modifico delle quantità ∆cx2 = −1 e ∆cx2 = 1
il valore di utilità della variabile fuori base x2 (e quindi dei pacchi di tipo
II). La nuova riformulazione rispetto a B ∗ è identica a (5.3) con la sola
differenza che nell’obiettivo si deve aggiungere il termine ∆cx2 x2 .

∆cx2 = −1 La nuova riformulazione rispetto a B ∗ è la seguente:


1 52
¡9 ¢
max 1164 − 23 y2 − 115 y3 − 23 + 1 x2
4 11
y1 = 960 + 23 y3 + 23 y2 − 430
23 x2
1 3 10
x3 = 193 + 115 y3 − 115 y2 − 23 x2
4 1 6
x1 = 28 − 115 y3 + 230 y2 − 23 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

La soluzione di base del duale associata a B ∗ é ancora ammissibile. Resta


invariata la soluzione di base del primale associata a B ∗ e quindi continua
ad essere ammissibile. Quindi le due soluzioni sono ottime per i rispettivi
problemi. Le due soluzioni ottime ed il valore ottimo non subiscono modi-
fiche.

∆cx2 = 1 La nuova riformulazione rispetto a B ∗ è la seguente:


1 52
¡ 9
¢
max 1164 − 23 y2 − 115 y3 + 1 − 23 x2
4 11
y1 = 960 + 23 y3 + 23 y2 − 430
23 x2
1 3 10
x3 = 193 + 115 y3 − 115 y2 − 23 x2
4 1 6
x1 = 28 − 115 y3 + 230 y2 − 23 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

La soluzione di base del duale associata a B ∗ non é piú ammissibile. Ma la


soluzione di base del primale associata a B ∗ resta invariata e continua ad

87
essere ammissibile. Quindi possiamo applicare il simplesso primale con base
iniziale B ∗ . Possiamo anche dire che la prima variabile ad entrare in base
sará certamente la x2 (è l’unica con coefficiente di costo ridotto positivo).

Modifica del coefficiente di costo di una variabile appartenente


alla base
Vediamo cosa succede se modifico delle quantità ∆cx1 = 1 e ∆cx1 = −2 il
valore di utilità della variabile in base x1 (e quindi dei pacchi di tipo I). La
nuova riformulazione rispetto a B ∗ è identica a (5.3) con la sola differenza
che nell’obiettivo si deve aggiungere il termine
µ ¶
4 1 6
∆cx1 x1 = ∆cx1 28 − y3 + y2 − x2 .
115 230 23

∆cx1 = 1 La nuova riformulazione rispetto a B ∗ è la seguente:


9 56 15
max 1192 −230 y2 − 115 y3 − 23 x2
4 11
y1 = 960 + 23 y3 + 23 y2 − 430
23 x2
1 3 10
x3 = 193 + 115 y3 − 115 y2 − 23 x2
4 1 6
x1 = 28 − 115 y3 + 230 y2 − 23 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

La soluzione di base del duale associata a B ∗ é ancora ammissibile. Resta


invariata la soluzione di base del primale associata a B ∗ e quindi continua
ad essere ottima. Il nuovo valore dell’obiettivo varia rispetto al precedente
della quantità ∆cx1 x∗1 = 1 ∗ 28 = 28. La nuova soluzione ottima del duale
sarà data da µ ¶
9 56
cB ∗ A−1
B ∗ = 0
230 115

∆cx1 = −2 La nuova riformulazione rispetto a B ∗ è la seguente:


12 44 3
max 1108 − 230 y2 − 115 y3 + 23 x2
y1 = 960 + 23 y3 + 23 y2 − 430
4 11
23 x2
1 3 10
x3 = 193 + 115 y3 − 115 y2 − 23 x2
4 1 6
x1 = 28 − 115 y3 + 230 y2 − 23 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

88
In tal caso B ∗ non é piú ammissibile per il duale. Ma la soluzione di base
del primale associata a B ∗ resta invariata e continua ad essere ammissibile.
Quindi possiamo applicare il simplesso primale con base iniziale B ∗ .

Modifica di un coefficiente della matrice AN ∗


Vediamo cosa succede se modifico il numero di bottiglie d’acqua nei pacchi
di tipo II (attualmente pari a 20) delle quantità ∆a22 = −10 e ∆a22 = 10.
Quindi modifico il coefficiente della variabile x2 nel secondo vincolo (quel-
lo dell’acqua) delle quantità indicate. Nella nuova riformulazione rispetto
a B ∗ l’espressione dell’obiettivo viene modificato come segue: si prende il
valore ottimo della variabile duale associata al vincolo in cui si è apportata

1
la modifica (qui uB 2 = 23 ); si moltiplica tale valore per la modifica ap-
portata (∆a22 ) e per la variabile il cui coefficiente è stato modificato (qui

x2 ); si sottrae il risultato uB
2 ∆a22 x2 nell’espressione dell’obiettivo. Nella
riformulazione dovrò anche modificare i coefficienti di x2 nei vincoli (tut-
ti gli altri coefficienti restano invariati). I nuovi coefficienti sono dati dal
seguente prodotto:
 
30
−A−1B∗
 20 + ∆a22 
10

∆a22 = 10 Si ha
∗ 10
−uB
2 ∆a22 x2 = − x2
23
e    320 
30 − 23
−A−1
B ∗
 30  =  − 80 
115
25
10 − 115
Quindi la riformulazione rispetto a B ∗ è la seguente:
1 52 19
max 1164 − 23 y2 − 115 y3 − 23 x2
4 11
y1 = 960 + 23 y3 + 23 y2 − 320
23 x2
1 3 80
x3 = 193 + 115 y3 − 115 y2 − 115 x2
4 1 25
x1 = 28 − 115 y3 + 230 y2 − 115 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

La base B ∗ è ancora ottima. Le soluzioni ottime del primale e del duale


rimangono invariate e lo stesso accade al valore ottimo.

89
∆a22 = −10 Si ha
∗ 10
−uB
2 ∆a22 x2 = x2
23
e    540 
30 − 23
−A−1
B∗
 10  =  − 20 
115
35
10 − 115
Quindi la riformulazione rispetto a B ∗ è la seguente:
1 52 1
max 1164 − 23 y2 − 115 y3 + 23 x2
4
y1 = 960 + 23 y3 + 23 y2 − 540
11
23 x2
1 3 20
x3 = 193 + 115 y3 − 115 y2 − 115 x2
4 1 35
x1 = 28 − 115 y3 + 230 y2 − 115 x2
x1 , x2 , x3 , y1 , y2 , y3 ≥ 0

La base B ∗ non è più ottima ma è ancora ammissibile per il primale. Quindi


posso applicare il simplesso primale a partire da tale base.

90
Capitolo 6

Programmazione Lineare
Intera

Fino ad ora abbiamo affrontato problemi in cui le variabili potevano assu-


mere valori reali. Ora invece ci concentreremo su problemi in cui le variabili
possono assumere solo valori interi. Questi problemi vengono chiamati pro-
blemi di Programmazione Lineare Intera (abbreviata con PLI nel seguito).
Nel seguito ci occuperemo di alcuni risultati teorici sulla PLI e introdurremo
due approcci di risoluzione per questo tipo di problemi.

6.1 Relazione tra un problema lineare intero


e il suo rilassamento lineare
Si consideri un problema di PLI in forma standard:

w∗ = max cx
Ax = b
x ≥ 0, x ∈ I n

dove I denota l’insieme degli interi. Si indicherá con Za la regione ammis-


sibile di questo problema, e quindi

Za = {x ∈ I n : Ax = b, x ≥ 0},

e con Zott l’insieme delle sue soluzioni ottime:

Zott = {x∗ ∈ Za : cx∗ ≥ cx ∀ x ∈ Za }.

91
Chiameremo rilassamento lineare del problema di PLI, il problema di PL
ottenuto dal problema di PLI omettendo la richiesta che le variabili siano
intere, e quindi

z ∗ = max cx
Ax = b
x≥0

Esempio 17 Si consideri il seguente problema di PLI:

max x1 + x2
x1 + 2x2 ≤ 4
2x1 + x2 ≤ 4
x1 , x2 ≥ 0, x1 , x2 ∈ I.

Si determinino per via grafica la soluzione del problema di PLI e del suo
rilassamento lineare.
Come al solito, indicheremo con Sa e Sott rispettivamente la regione ammis-
sibile e l’insieme delle soluzioni ottime del rilassamento lineare del problema
di PLI. Possiamo notare che
Za ⊆ Sa
e che i due problemi hanno la stessa funzione obiettivo cx. Da ció conse-
guono le seguenti relazioni tra il problema di PLI e il problema di PL suo
rilassamento lineare.
1. Se Sa = ∅, allora Za = ∅.
2. Se l’obiettivo del problema di PLI é illimitato, allora lo é anche quello
del suo rilassamento lineare.
3. Se Sott 6= ∅ e Zott 6= ∅, allora il valore ottimo w∗ del problema di
PLI non puó essere superiore al valore ottimo z ∗ del suo rilassamento
lineare, ovvero
w∗ ≤ z ∗

4. Se Sott 6= ∅ contiene un punto x∗ a coordinate tutte intere, allora


x∗ ∈ Zott e w∗ = z ∗ , come accade nel seguente esempio

max x2
x1 + 2x2 ≤ 4
2x1 + x2 ≤ 4
x1 , x2 ≥ 0, x1 , x2 ∈ I.

92
Altri casi possibili nelle relazioni tra un problema di PLI e il suo rilassa-
mento lineare sono i seguenti.
1. Za = ∅ ma Sott 6= ∅, come nel seguente esempio:
max x2
1
x1 ≥ 4
3
x1 ≤ 4
x2 ≤ 2
x1 , x2 ≥ 0, x1 , x2 ∈ I.

2. Za = ∅ ma l’obiettivo del rilassamento lineare é illimitato, come nel


seguente esempio:
max x2
1
x1 ≥ 4
3
x1 ≤ 4
x1 , x2 ≥ 0, x1 , x2 ∈ I.

3. Se A, b e c contengono solo valori razionali, allora Zott 6= ∅ implica


Sott 6= ∅. Se vi sono coefficienti irrazionali allora puó accadere che
Zott 6= ∅ ma il rilassamento lineare ha obiettivo illimitato, come nel
seguente esempio:
max x2

x2 = 2x1
x1 , x2 ≥ 0, x1 , x2 ∈ I.
dove Za (e quindi Zott ) contiene la sola origine, ma l’obiettivo del
rilassamento lineare é illimitato.
Un’importante osservazione é la seguente.

I problemi di PL sono in generale molto piú semplici e rapidi da risolvere


dei problemi di PLI 1 . In particolare il rilassamento lineare di un problema
di PLI é tipicamente molto piú facile da risolvere del problema di PLI stes-
so.

Questa osservazione puó spingere a risolvere i problemi di PLI con la


seguente procedura:
1 Nella teoria della complessitá i problemi di PL sono classificati tra quelli risolvibili

in tempo polinomiale, mentre quelli di PLI sono verosimilmente solo risolvibili in tempo
esponenziale

93
• risolvo il rilassamento lineare del problema di PLI;

• arrotondo le variabili nella soluzione ottima che non hanno valore


intero ma decimale (se ne esistono: nel caso in cui non ne esistano la
soluzione del rilassamento lineare é anche soluzione del problema di
PLI).

In realtá questa procedura rischia di restituire risultati molto inesatti. Ad


esempio, in precedenza abbiamo visto un caso dove il rilassamento linea-
re ha soluzione ottima mentre il problema di PLI ha regione ammissibile
vuota. In tal caso, applicando la procedura vista sopra, restituiremmo una
soluzione ottima per un problema che non ha neppure una soluzione ammis-
sibile. Va detto comunque che una procedura di questo tipo é accettabile
quando si ha a che fare con variabili che assumono valori molto elevati. Se
nella soluzione ottima del rilassamento lineare ho una variabile con valore
pari a 20000.4 e la arrotondo a 20000, posso introdurre un errore ma essen-
do la parte decimale (0.4) quasi irrilevante rispetto al valore 20000.4 della
variabile, tale errore é tipicamente trascurabile. Al contrario, con variabili
intere che assumono valori piccoli, ad esempio 1.4, l’arrotondamento a 1
del valore di tale variabile puó causare errori non trascurabili, come conse-
guenza del fatto che la parte decimale (0.4) non é affatto irrilevante rispetto
al valore di 1.4. Questo é in particolare vero quando si ha a che fare con
variabili binarie, con le quali la procedura vista sopra va certamente evitata.

Restano allora da indicare procedure di risoluzione per i problemi di PLI


applicabili in tutti i casi. Nel seguito introdurremo due metodologie di ri-
soluzione per problemi di PLI: gli algoritmi di taglio e gli algoritmi branch-
and-bound.

6.1.1 Un’importante osservazione: trasformazione di


un problema di PLI in forma standard
Come per i problemi di PL, è sempre possibile ricondurre un problema di
PLI in forma standard. Le regole per effettuare questa trasformazione sono
le stesse già viste per i problemi di PL ma occorre prestare attenzione ad
un ulteriore aspetto. Vediamo di illustrare questo su un semplice esempio.
Si consideri il seguente problema di PLI:

max x2
1
x1 ≤ 2
1
x2 ≤ 2
x1 , x2 ≥ 0, x1 , x2 ∈ I.

94
Se avessimo a che fare con un problema di PL potremmo trasformarlo molto
semplicemente nella forma standard con l’aggiunta di due variabili y1 e y2 :

max x2
1
x1 + y1 = 2
1
x2 + y2 = 2
x1 , x2 , y1 , y2 ≥ 0, x1 , x2 ∈ I.

In questo modo ci ritroveremmo però con un problema in cui alcune varia-


bili (x1 e x2 ) possono assumere solo valori interi e altre possono assumere
anche valori non interi. Infatti, ad esempio, se scelgo x1 = x2 = 0, valori
ammissibili per il nostro problema di PLI, il corrispondente valore di y1 e y2
è pari a 1/2. Per ovviare a questo inconveniente e fare in modo che anche le
nuove variabili possano assumere solo valori interi quando quelle originarie
hanno valori interi, è sufficiente trasformare i vincoli in modo tale che in
essi compaiano solo coefficienti e termini noti interi. Nel nostro esempio
basta moltiplicare entrambi i vincoli per 2:

max x2
2x1 ≤ 1
2x2 ≤ 1
x1 , x2 ≥ 0, x1 , x2 ∈ I.

e solo a questo punto aggiungere le due variabili y1 e y2 :

max x2
2x1 + y1 = 1
2x2 + y2 = 1
x1 , x2 , y1 , y2 ≥ 0, x1 , x2 , y1 , y2 ∈ I.

In questo modo le variabili aggiunte y1 , y2 assumono sempre valori interi


quando quelle originarie x1 , x2 hanno valori interi e quindi nella forma stan-
dard possiamo imporre l’interezza anche delle variabili y1 , y2 . Si noti che il
funzionamento dei successivi algoritmi di risoluzione è garantito solo se si
procede alla trasformazione in forma standard nel modo sopra indicato.

6.2 Algoritmi di taglio


Per introdurre gli algoritmi di taglio dobbiamo prima introdurre il concetto
di taglio valido per un problema di PLI. Sia dato un problema di PLI con

95
il suo rilassamento lineare. Sia x∗ una soluzione ottima del rilassamento
lineare, che si suppone abbia almeno una coordinata non intera (se tutte le
sue coordinate fossero intere allora x∗ ∈ Zott ).

Definizione 12 Una disequazione wx ≤ v si definisce taglio valido per il


problema di PLI se non é soddisfatta da x∗ ma é soddisfatta da tutti i punti
nella regione ammissibile del problema di PLI, ovvero

wx∗ > v, wx ≤ v ∀ x ∈ Za

Il concetto di taglio valido conduce alla definizione degli algoritmi di taglio.


In essi si comincia risolvendo il rilassamento lineare del problema di PLI.
Se questo ha soluzione a coordinate tutte intere, essa é soluzione anche del
problema di PLI. Altrimenti si genera (in modi che vedremo in seguito) un
taglio valido, si aggiunge questo taglio ai vincoli del rilassamento lineare
e si risolve il nuovo problema di PL ottenuto con questa aggiunta. Se
la soluzione ottima ha coordinate tutte intere, essa é soluzione anche del
problema di PLI. Altrimenti si genera un nuovo taglio valido che escluda
la soluzione ottima del nuovo problema di PL, si aggiunge anche questo
taglio ai vincoli del rilassamento lineare e si risolve il nuovo problema di
PL ottenuto con questa ulteriore aggiunta. Si itera questa procedura fino
a quando non si ottiene una soluzione intera (o si stabilisce che Za = ∅).
Dato il problema di PLI

max cx
a i x = bi i = 1, . . . , m
xj ≥ 0, xj ∈ I j = 1, . . . , n

formalmente, lo schema di un algoritmo di taglio é il seguente.

Inizializzazione Si risolva il rilassamento lineare

max cx
a i x = bi i = 1, . . . , m
xj ≥ 0 j = 1, . . . , n

del problema di PLI. Se Sa = ∅, allora Za = ∅. Tralasceremo il caso


di obiettivo illimitato del rilassamento lineare e quindi l’unica altra
possibilitá é che esista una soluzione ottima, indicata con x∗1 . Si
ponga k = 1.

Passo 1 Se x∗k ha coordinate tutte intere, allora si restituisca x∗k ∈ Zott .


Altrimenti si vada al Passo 2.

96
Passo 2 Si generi un taglio valido wk x ≤ vk che non sia soddisfatto da
x∗k ma sia soddisfatto da tutti i punti in Za , ovvero

wk x∗k > vk , wk x ≤ vk ∀ x ∈ Za .

Passo 3 Si aggiunga il nuovo taglio valido ai vincoli originari del problema


e ai tagli validi generati in precedenza e si risolva il problema di PL

max cx
a i x = bi i = 1, . . . , m (6.1)
wr x ≤ vr r = 1, . . . , k
xj ≥ 0 j = 1, . . . , n

Se tale problema ha regione ammissibile vuota possiamo concludere


che Za = ∅. Altrimenti sia x∗(k+1) la sua soluzione ottima.

Passo 4 Si ponga k = k + 1 e si ritorni al Passo 1.

Si noti che il problema di PL (6.1) non é in forma standard. Tuttavia basta


la semplice aggiunta di una variabile yr ≥ 0 in ciascuno dei vincoli wr x ≤ vr
per ricondursi al formato standard. Con tale aggiunta il problema di PL
(6.1) viene trasformato in quello equivalente (in forma standard):

max cx
a i x = bi i = 1, . . . , m
wr x + yr = vr r = 1, . . . , k (6.2)
xj ≥ 0 j = 1, . . . , n
yr ≥ 0 r = 1, . . . , k

Resta ancora da chiarire come si genera un taglio valido. Ci sono molti


modi per generare tagli validi. Qui descriveremo un tipo di tagli detti tagli
di Gomory.

6.2.1 Tagli di Gomory


Supponiamo di avere una base ottima B ∗ = {xi1 , . . . , xim } per il rilassa-
mento lineare del problema di PLI. La riformulazione rispetto a tale base
é la seguente:
Pn−m
max γ0 + j=1 γj xim+j
Pn−m
xi1 = β1 + j=1 α1j xim+j

97
···
Pn−m
xik = βk + j=1 αkj xim+j
···
Pn−m
xim = βm + j=1 αmj xim+j
x1 , . . . , xn ≥ 0

Si suppone che almeno uno dei valori βr , r = 1, . . . , m, sia non intero (se
fossero tutti interi la soluzione di base associata a B ∗ sarebbe non solo
ottima per il rilassamento lineare ma anche per il problema di PLI). Sia βk
un tale valore non intero. Scriviamo l’equazione relativa a xik :

xik = βk + αk1 xim+1 + αk2 xim+2 + · · · + αk,n−m xin . (6.3)

Si consideri ora il seguente taglio, detto taglio di Gomory:

−fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin ≥ 0

dove fkj , j = 1, . . . , n − m, é la mantissa di −αkj , cioé

fkj = −αkj − ⌊−αkj ⌋ ≥ 0

(⌊a⌋ rappresenta la parte intera di a ovvero il piú grande intero ≤ a), mentre
fk é la mantissa di βk , cioé

fk = βk − ⌊βk ⌋ > 0,

dove fk > 0 é una conseguenza della non interezza di βk . Per mantenere il


formato standard, possiamo aggiungere una nuova variabile y1 e riscrivere
il taglio attraverso la seguente coppia di vincoli:

y1 = −fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin (6.4)

y1 ≥ 0.
Vogliamo dimostrare la seguente osservazione.

Osservazione 16 Il taglio di Gomory é un taglio valido.

Dimostrazione Per prima cosa dimostriamo che la soluzione ottima del


rilassamento lineare non soddisfa questo vincolo. Notiamo che per tale so-
luzione ottima si ha xim+1 = · · · = xin = 0 (tutte le variabili fuori base sono
nulle) e quindi, in corrispondenza della soluzione ottima del rilassamento
lineare si ha:
y1 = −fk < 0.

98
Quindi la soluzione ottima del rilassamento lineare non soddisfa, come de-
siderato, il nostro taglio. Resta da far vedere che il taglio é soddisfatto da
ogni punto in Za . Prendiamo un generico punto

(xi1 , . . . , xin )

in Za . Sostituiamo le coordinate di tale punto in (6.3) e (6.4) ed otteniamo


rispettivamente

xik = βk + αk1 xim+1 + αk2 xim+2 + · · · + αk,n−m xin . (6.5)

y 1 = −fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin . (6.6)


Ció che si vuole dimostrare é che il valore di y 1 é ≥ 0 e cioé che la generica
soluzione ammissibile in Za

xi1 , . . . , xin (6.7)

soddisfa il taglio. Per prima cosa dimostriamo che in corrispondenza di


ogni punto (6.7) in Za si ha che il valore di y 1 é intero. Per dimostrare
questo sommiamo (6.5) e (6.6). Ricordando la definizione delle fkj e di fk ,
la somma ha come risultato

y 1 = ⌊βk ⌋ − xik − ⌊−αk1 ⌋xim+1 − ⌊−αk2 ⌋xim+2 − · · · − ⌊−αk,n−m ⌋xin

Questo mostra che in corrispondenza di ogni punto in Za il valore y 1 é un


valore intero (le parti intere sono tutti valori interi e le variabili xik e xim+j ,
j = 1, . . . , n − m in Za assumono valori interi).
Da (6.6) abbiamo anche che

y 1 + fk = fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin .


|{z} | {z } |{z} | {z } | {z } |{z}
≥0 ≥0 ≥0 ≥0 ≥0 ≥0

Questo ci dice che, in corrispondenza di ogni punto (6.7) di Za , si ha che


y 1 + fk é ≥ 0 ed inoltre sappiamo che 0 < fk < 1. Infine, in precedenza
abbiamo dimostrato che y 1 assume valori interi in corrispondenza di ogni
punto di Za . Tutto questo é possibile soltanto se y 1 ≥ 0 in corrispondenza
di ogni punto di Za , come si voleva dimostrare.

La coppia di vincoli

y1 = −fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin

y1 ≥ 0.

99
che esprime il taglio viene aggiunta alla riformulazione rispetto alla base
ottima B ∗ e si ottiene quindi:
Pn−m
max γ0 + j=1 γj xim+j
Pn−m
xi1 = β1 + j=1 α1j xim+j
···
Pn−m
xik = βk + j=1 αkj xim+j (6.8)
···
Pn−m
xim = βm + j=1 αmj xim+j
y1 = −fk + fk1 xim+1 + fk2 xim+2 + · · · + fk,n−m xin
x1 , . . . , xn , y1 ≥ 0
Si noti come (6.8) sia giá la riformulazione del nuovo problema di PL ri-
spetto alla base B ∗ ∪ {y1 }. La soluzione di base del primale associata a
questa base é non ammissibile (la variabile y1 ha valore −fk < 0), come
deve essere visto che il taglio deve rendere non ammissibile la soluzione
del rilassamento lineare. Tuttavia la soluzione di base del duale associata
a B ∗ ∪ {y1 } é ammissibile (i valori γj continuano ad essere non positivi
visto che non sono stati modoficati dall’introduzione del taglio). Questo ci
consente di risolvere il nuovo problema di PL con il simplesso duale e con
base iniziale B ∗ ∪ {y1 }. Si avrá anche che la prima variabile ad uscire di
base sará la y1 . Perché?
Si noti anche come durante la dimostrazione dell’Osservazione 16 abbiamo
anche dimostrato che la nuova variabile che viene introdotta (la y1 ) assu-
me sempre valori interi in corrispondenza di ogni punto di Za . In pratica
il risultato di interezza su y1 ci consente di dire che (6.8) con l’ulteriore
imposizione
x1 , . . . , xn , y1 ∈ I
è una riformulazione equivalente del problema di PLI iniziale (dove per
equivalente si intende che Za e Zott restano invariati). Piú in generale,
iterando quanto visto, si ha che (6.2) con l’ulteriore imposizione
x1 , . . . , xn , y1 , . . . , yk ∈ I
è sempre una riformulazione equivalente del problema di PLI iniziale. Que-
sto consente di iterare la procedura, cioé se dopo l’aggiunta del primo taglio
e la risoluzione del nuovo problema di PL (6.8) non si ha ancora una solu-
zione intera, possiamo generare un nuovo taglio utilizzando la stessa regola
di generazione.
Ma vediamo ora di chiarire meglio il funzionamento di un algoritmo di ta-
glio che utilizza tagli di Gomory applicandolo ad un problema di esempio.

100
Si consideri il seguente problema di PLI:

max x1 + x2
2x1 + x3 = 3
2x2 + x4 = 3
x1 , x2 , x3 , x4 ≥ 0
x1 , x2 , x3 , x4 ∈ I.

Una base otttima per il rilassamento lineare di questo problema di PLI é


la base B ∗ = {x1 , x2 }. La riformulazione del rilassamento lineare rispetto
a questa base é la seguente:

max 3 − 1/2x3 − 1/2x4


x1 = 3/2 − 1/2x3 (6.9)
x2 = 3/2 − 1/2x4
x1 , x2 , x3 , x4 ≥ 0

Come si vede c’é un termine noto non intero quindi la soluzione del rilas-
samento lineare:
x∗1 = x∗2 = 3/2 x∗3 = x∗4 = 0
non risolve il problema di PLI. A questo punto aggiungo un taglio di
Gomory. Considero l’equazione

x1 = 3/2 − 1/2x3

e da questa, in base alle regole viste, si ricava il seguente taglio:

−1/2 + 1/2x3 ≥ 0.

Aggiungendo una variabile y1 il taglio viene espresso dalla seguente coppia


di vincoli:
y1 = −1/2 + 1/2x3 , y1 ≥ 0.
Aggiungiamo ora questi alla riformulazione (6.9) rispetto alla base ottima
B∗.

max 3 − 1/2x3 − 1/2x4


x1 = 3/2 − 1/2x3
x2 = 3/2 − 1/2x4
y1 = −1/2 + 1/2x3
x1 , x2 , x3 , x4 , y1 ≥ 0

101
Possiamo notare che questa é giá la riformulazione del nuovo problema ri-
spetto alla base B ∗ ∪ {y1 } = {x1 , x2 , y1 }. La soluzione di base del primale
associata a questa base é non ammissibile (il valore di y1 é −1/2) ma la
soluzione di base del duale associata alla stessa base é ammissibile (i coef-
ficienti delle variabili fuori base nell’obiettivo non sono stati modificati e
continuano ad essere negativi). Quindi possiamo applicare il simplesso dua-
le con base iniziale {x1 , x2 , y1 }. Si verifica immediatamente che non sono
soddisfatte né la condizione di ottimalitá, né la condizione di illimitatezza
dell’obiettivo duale. Chiaramente, la prima variabile che dovrá entrare in
base sará l’unica con un valore negativo e quindi dovrá essere la y1 . In base
alle regole viste, l’unica variabile che potrá entrare in base é la x3 . Pas-
seremo quindi alla base {x1 , x2 , x3 } rispetto alla quale avremo la seguente
riformulazione:

max 5/2 − y1 − 1/2x4


x1 = 1 − y1
x2 = 3/2 − 1/2x4 (6.10)
x3 = 1 + 2y1
x1 , x2 , x3 , x4 , y1 ≥ 0

La base é ottima per il nuovo problema di PL ma purtroppo abbiamo ancora


un termine noto non intero e quindi non abbiamo ancora una soluzione
ottima del problema di PLI. Allora, dobbiamo aggiungere un ulteriore taglio
di Gomory. La regola di generazione é la solita. Per prima cosa selezioniamo
un’equazione con termine noto non intero. Qui la sola possibile é:

x2 = 3/2 − 1/2x4 .

Da questa si genera, in base alle regole viste, il seguente taglio:

−1/2 + 1/2x4 ≥ 0.

Aggiungendo una nuova variabile y2 il taglio viene espresso dalla seguente


coppia di vincoli:
y2 = −1/2 + 1/2x4 , y2 ≥ 0.
Aggiungiamo ora questi alla riformulazione (6.10) rispetto alla base ottima
{x1 , x2 , x3 }.

max 5/2 − y1 − 1/2x4


x1 = 1 − y1
x2 = 3/2 − 1/2x4

102
x3 = 1 + 2y1
y2 = −1/2 + 1/2x4
x1 , x2 , x3 , x4 , y1 , y2 ≥ 0

Possiamo notare che questa é giá la riformulazione del nuovo problema ri-
spetto alla base {x1 , x2 , x3 , y2 }. La soluzione di base del primale associata
a questa base é non ammissibile (il valore di y2 é −1/2) ma la soluzione di
base del duale associata alla stessa base é ammissibile (i coefficienti delle
variabili fuori base nell’obiettivo non sono stati modificati e continuano ad
essere negativi). Quindi possiamo applicare il simplesso duale con base ini-
ziale {x1 , x2 , x3 , y2 }. Si verifica immediatamente che non sono soddisfatte
né la condizione di ottimalitá, né la condizione di illimitatezza dell’obietti-
vo duale. Chiaramente, la prima variabile che dovrá entrare in base sará
l’unica con un valore negativo e quindi dovrá essere la y2 . In base alle
regole viste, l’unica variabile che potrá entrare in base é la x4 . Passere-
mo quindi alla base {x1 , x2 , x3 , x4 } rispetto alla quale avremo la seguente
riformulazione:

max 2 − y1 − y2
x1 = 1 − y1
x2 = 1 − y2
x3 = 1 + 2y1
x4 = 1 + 2y2
x1 , x2 , x3 , x4 , y1 , y2 ≥ 0

La base é ottima per il nuovo problema di PL e tutte le variabili hanno


valore intero. Abbiamo quindi la seguente soluzione ottima del problema
di PLI:
x∗1 = x∗2 = x∗3 = x∗4 = 1.

Ci si puó chiedere se siamo stati solo fortunati oppure con i tagli di Gomory
l’algoritmo di taglio termina sempre in un numero finito di iterazioni. Vale
la seguente osservazione.

Osservazione 17 Se ad ogni iterazione il taglio di Gomory viene realizzato


a partire dalla prima equazione con un termine noto βk non intero, allora
l’algoritmo termina in un numero finito di iterazioni.

103
6.3 Approccio Branch-and-Bound per la Pro-
grammazione Lineare Intera
Fino a questo momento abbiamo considerato la risoluzione dei problemi
di PLI attraverso l’introduzione successiva di piani di taglio. Ora con-
sidereremo un nuovo approccio di risoluzione basato sulla suddivisione del
problema originale in sottoproblemi. L’approccio prende il nome di Branch-
and-Bound. I concetti fondamentali di tale approccio verranno dapprima
illustrati su un particolare problema di PLI ed in seguito generalizzati a
tutti i problemi di PLI.

6.3.1 Branch-and-Bound: un esempio


Si consideri il seguente problema di PLI che verrá indicato nel seguito come
problema P0

P0 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
x1 , x2 ≥ 0
x1 , x2 ∈ I

Vediamo di risolvere il rilassamento lineare di P0 , indicato con P0′ , ovvero


il problema ottenuto rimuovendo da P0 i vincoli di interezza sulle variabili
x1 e x2

P0′ : max x1 + 3x2


1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
x1 , x2 ≥ 0

Essendo il problema in due sole variabili, la risoluzione viene fatta gra-


ficamente. Per problemi con piú di due variabili si ricorre all’algoritmo
del simplesso. Dalla Figura 6.1 si vede che la regione ammissibile di P0′ é

104
u1

4 u2

111111111111111111111111111111
000000000000000000000000000000
000000000000000000000000000000
111111111111111111111111111111
A

000000000000000000000000000000
111111111111111111111111111111
3 000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
B 000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
2
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
1
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
z
C
000000000000000000000000000000
111111111111111111111111111111
000000000000000000000000000000
111111111111111111111111111111
D
1 2 3 4 5 6
u3

+
-

Figura 6.1: Il rilassamento lineare P0′ di P0 , con regione ammissibile ABCD.

rappresentata dal politopo ABCD i cui vertici sono i punti


µ ¶ µ ¶ µ ¶ µ ¶
5 15 1 5 1 13
A , B , C ,0 D ,0
4 4 2 2 2 2

É immediato verificare che l’unica soluzione ottima di P0′ é il vertice A


dove la funzione obiettivo ha valore pari a 504 . Se il vertice A avesse coor-
dinate intere sarebbe anche un punto di ottimo per il problema P0 , ma
nel nostro esempio ció non accade. Fino a questo punto non abbiamo so-
stanziali differenze rispetto agli algoritmi di taglio visti in precedenza. A
questo punto un algoritmo di taglio procederebbe introducendo un nuovo
vincolo che non é soddifatto dal vertice ottimo di P0′ , il vertice A, ma é

105
soddisfatto da tutte le soluzioni ammissibili di P0 . Qui peró adottiamo un
approccio diverso. Suddividiamo il problema P0 in due sottoproblemi P1 e
P2 ottenuti aggiungendo in ciascuno un vincolo di forma semplice (ovvero
una limitazione sui valori di una singola variabile) che esclude il vertice A.
In P1 si aggiunge il vincolo che una delle variabili a valore frazionario in A
sia non superiore alla parte intera di tale valore, mentre in P2 si aggiunge il
vincolo che la stessa variabile sia non inferiore alla parte intera dello stesso
valore incrementata di uno. Nel nostro esempio in A sono frazionari i va-
lori di entrambe le variabili. Come regola di scelta si adotta qui quella di
prendere la variabile con indice minimo e quindi, nel nostro caso, x1 (si noti
che tale regola non é l’unica possibile ed altre piú sofisticate possono essere
adottate, ad esempio scegliere quella con parte frazionaria ¥ 5 ¦piú elevata). In
base a quanto detto in P1 si aggiungerá
¥ ¦ il vincolo x1 ≤ 4 = 1, mentre in
P2 verrá aggiunto il vincolo x1 ≥ 54 + 1 = 2. I due sottoproblemi saranno
quindi i seguenti:

P1 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
¹ º
5
(u′4 ) x1 ≤ =1
4
x1 , x2 ≥ 0
x1 , x2 ∈ I

P2 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
¹ º
5
(u′′4 ) x1 ≥ +1=2
4
x1 , x2 ≥ 0
x1 , x2 ∈ I

In Figura 6.2 é rappresentato il rilassamento lineare P1′ di P1 , ottenuto


rimuovendo i vincoli di interezza da P1 . In Figura 6.3 é rappresentato il

106
rilassamento lineare P2′ di P2 . Le regioni ammissibili di P1′ (il politopo
CBEF ) e P2′ (il politopo GHD) sono parti (disgiunte) della regione am-
missibile di P0′ . La loro unione contiene tutte le soluzioni ammissibili di P0
ma non coincide con la regione ammissibile di P0′ in quanto manca la zona
1 < x1 < 2 nella quale si trova il vertice ottimo A di P0′ .

u1

4 u2
A

111
000
E

3 000
111
000
111
B
000
111
000
111
000
111
000
111
000
111
2

000
111
u3

000
111
000
111
000
111
000
111
1

000
111
000
111
z
000
111
C
000
111
000
111
F D
1 2 3 4 5 6

u′4 +
-

Figura 6.2: Il rilassamento lineare P1′ di P1 , con regione ammissibile ABEF .

¡ ¢
L’unica soluzione ottima di P1′ é il vertice E 1, 10
3 con valore ottimo pari
a 1 + 3 10
3 = 11. Si noti che E non ha coordinate intere e quindi non é
una soluzione ammissibile per il problema¡originario
¢ P0 . L’unica soluzio-
ne ottima del problema P2′ é il vertice H 2, 45 14 con valore ottimo pari a
45
2 + 3 14 = 163
14 . Anche in questo caso H non é soluzione ammissibile del
problema P0 .

107
u1

4 u2

11111111111111111111111
00000000000000000000000
00000000000000000000000
11111111111111111111111
H
3
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
B
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
2
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
1
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
z 00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
C
00000000000000000000000
11111111111111111111111
2 11111111111111111111111
00000000000000000000000
D
1 G 3 4 5 6 u 3
u′′4

+
-

Figura 6.3: Il rilassamento lineare P2′ di P2 , con regione ammissibile GHD.

Possiamo rappresentare quanto fatto sino ad ora attraverso un albero, det-


to albero di Branch-and-Bound, mostrato in Figura 6.4. I due archi che si
diramano dal nodo radice P0 indicano la suddivisione del problema P0 nei
due sottoproblemi P1 e P2 , ottenuti aggiungendo rispettivamente i vincoli
x1 ≤ 1 e x1 ≥ 2 (riportati lungo gli archi) al problema originario P0 . Al
fianco dei due nodi P1 e P2 sono indicati i valori U (P1 ) e U (P2 ) che indicano
i valori di upper bound, o limitazione superiore, per tali nodi. Per upper
bound del nodo Pi (i = 1, 2) si intende che tutte le soluzioni ammissibili
del sottoproblema Pi non possono avere valore della funzione obiettivo su-
periore all’upper bound. Se si riflette su come sono stati ottenuti i valori
U (Pi ), (i = 1, 2) si capisce che questo é vero. Infatti i valori U (Pi ) sono

108
'$
LB = −∞
P0
&%
" Q
" Q
x1 ≤ 1 " Q x1 ≥ 2
" Q
" Q
"
'$
" Q
Q
" Q'$

U (P1 ) = 11 P1
&%
163
P2 U (P2 ) =
&%
14

Figura 6.4: L’albero di Branch-and-Bound dopo la prima iterazione


dell’algoritmo.

i valori ottimi dei rilassamenti lineari Pi′ dei Pi . Quindi tutte le soluzioni
ammissibili di Pi′ ed in particolare quelle a coordinate intere (ammissibili
per Pi ) avranno valore della funzione obiettivo che non supera U (Pi ). Per
il momento non é ancora chiaro che cosa faremo con i valori U (Pi ). Questo
verrá specificato nel seguito.
Oltre ai valori di upper bound associati a ciascun nodo, si definisce an-
che un valore unico di lower bound, o limitazione inferiore, LB che indica
il valore della miglior soluzione ammissibile a coordinate intere tra quelle
ottenute come soluzioni ottime dei sottoproblemi. Nel nostro esempio non
abbiamo fino ad ora determinato nessuna soluzione ottima di sottoproblemi
a coordinate intere (il vertice ottimo E di P1′ ed il vertice ottimo H di P2′
non sono a coordinate intere). In questo caso il valore LB viene posto pari
a −∞.

A questo punto possiamo ripetere il ragionamento fatto fino ad ora: do-


po aver suddiviso il problema P0 nei due sottoproblemi P1 e P2 , possiamo
selezionare uno dei due sottoproblemi (o, equivalentemente, uno dei nodi
foglia dell’albero) e suddividere questo a sua volta. Per stabilire quale no-
do selezionare esistono diverse regole. Qui ne vedremo una soltanto, ovvero
selezionare un nodo con upper bound massimo. L’idea su cui si basa questa
regola é che ci si aspetta di trovare piú facilmente la soluzione ottima del
problema in un nodo con un valore di upper bound elevato. Nel nostro
esempio il nodo con upper bound piú elevato é il nodo P2 . Il sottoproble-
ma P2 verrá suddiviso in due sottoproblemi P3 e P4 ottenuti aggiungendo

109
¥ 45 ¦ ¥ ¦
rispettivamente il vincolo x2 ≤ 14 = 3 ed il vincolo x2 ≥ 4514 + 1 = 4.
Nella determinazione dei vincoli di forma semplice da aggiungere a quelli
di P2 per ottenere P3 e P4 la scelta ricade sulla variabile x2 in quanto é
l’unica a coordinate non intere nel vertice ottimo H di P2′ . Avremo dunque
P3 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
(u′′4 ) x1 ≥ 2
¹ º
45
(u′5 ) x2 ≤ =3
14
x1 , x2 ≥ 0
x1 , x2 ∈ I

P4 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
(u′′4 ) x1 ≥ 2
¹ º
45
(u′′5 ) x2 ≥ +1=4
14
x1 , x2 ≥ 0
x1 , x2 ∈ I
Le regioni ammissibili di P3′ (il politopo GKJD) e P4′ (l’insieme vuoto)
sono illustrate nelle Figure 6.5 e 6.6. Come in precedenza l’unione delle
regioni ammissibili di P3′ e P4′ contiene tutte le soluzioni ammissibili di P2
ma esclude tutte le soluzioni ammissibili di P2′ nella zona 3 < x2 < 4, dove
si trova il vertice ottimo H di P2′ . ¡ ¢
23
L’ottimo di P3′ si trova nel punto J 10 , 3 con valore ottimo 113
10 . Per quel
che riguarda P4′ si vede subito che la regione ammissibile é vuota ed in tal
caso il nodo viene cancellato e non verrá ulteriormente esplorato. Infat-
ti esso, non contenendo soluzioni ammissibili per P4′ , non puó certamente
contenere soluzioni ammissibili per P4 .
Il nostro albero si presenterá ora nella forma di Figura 6.7. Anche la so-
luzione ottima J di P3′ non é a coordinate intere e quindi il valore LB

110
u1

4 u2

A
H

11111111111111111111111
00000000000000000000000
3 K J

00000000000000000000000
11111111111111111111111

u 5
B
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
2
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
1
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
00000000000000000000000
11111111111111111111111
z
C

1
00000000000000000000000
11111111111111111111111
2 G 3 4 5 6
D
u3
u′′4

+
-

Figura 6.5: Il rilassamento lineare P3′ di P3 , con regione ammissibile GKJD.

continuerá ad essere pari a −∞.

A questo punto si ripete nuovamente il ragionamento suddividendo un sot-


toproblema relativo ad uno dei nodi foglia dell’albero in Figura 6.7 non
ancora cancellato. I nodi foglia sono 3 (P1 , P3 e P4 ) ma P4 é giá stato
cancellato. La scelta quindi si restringe a P1 e P3 . Come in preceden-
za, si seleziona quello con upper bound maggiore e quindi il nodo P3 . Il
sottoproblema P3 viene suddiviso nei due sottoproblemi P5 e¥P6¦ottenuti
23
aggiungendo ai ¥vincoli
¦ di P3 rispettivamente il vincolo x1 ≤ 10 = 2 ed
23
il vincolo x1 ≥ 10 + 1 = 3. La scelta della variabile x1 nella definizione
di questi vincoli semplici é l’unica possibile, essendo x1 la sola variabile

111
u1

4 u2 u′′5

H
3

2 u3

z u′′4
C
D
1 2 G 3 4 5 6

+
-

Figura 6.6: Il rilassamento lineare P4′ di P4 , con regione ammissibile vuota.

frazionaria nella soluzione ottima J di P3′ .

P5 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
(u′′4 ) x1 ≥ 2
(u′5 ) x2 ≤ 3

112
'$
LB = −∞
P0
&%
" Q
" Q
x1 ≤ 1 " Q x1 ≥ 2
" Q
" Q
"
'$
" Q
Q
" Q'$

U (P1 ) = 11 P1
&%
P2

© &%
PP
x2 ≤ 3 ©©© PPx2 ≥ 4
© PP
'$ P'$
© PP
©© ¡
Q ¡
Q
QP4¡
P3 Q
¡
¡ QQ
&% &%
113
U (P3 ) = 10
¡ Q
¡

Figura 6.7: L’albero di Branch-and-Bound dopo la seconda iterazione


dell’algoritmo.
¹ º
23
(u′6 ) x1 ≤ =2
10
x1 , x2 ≥ 0
x1 , x2 ∈ I

P6 : max x1 + 3x2
1
(u1 ) x1 ≥
2
7 13
(u2 ) x1 + x2 ≤
5 2
(u3 ) −5x1 + 3x2 ≤ 5
(u′′4 ) x1 ≥ 2
(u′5 ) x2 ≤ 3
¹ º
23
(u′′6 ) x1 ≥ +1=3
10
x1 , x2 ≥ 0
x1 , x2 ∈ I

113
I rilassamenti lineari P5′ (con regione ammissibile il segnento KG) e P6′ (con
regione ammissibile il politopo LM D) di P5 e P6 sono illustrati nelle Figu-
re 6.8 e 6.9. Il problema P5′ ha soluzione ottima nel vertice K (2, 3) con

u1

4 u2

A
H
3 K J
u′5
B

2 u3

z u′6 u′′4
C
D
1 2G 3 4 5 6

+
-

Figura 6.8: Il rilassamento lineare P5′ di P5 , con regione ammissibile KG.


¡ ¢
valore ottimo 2 + 3 ∗ 3 = 11. Il problema P6′ ha soluzione ottima L 3, 25
con valore ottimo 3 + 3 52 = 21
2 .
L’albero di Branch-and-Bound si presenta ora nella forma di Figura 6.10.
Notiamo che la soluzione K di P5′ é a coordinate intere ed é dunque una
soluzione ammissibile per P0 . Questo ci permette di aggiornare il valore
LB che sará ora pari al valore della funzione obiettivo nel punto K, ovvero
pari a 11.
A questo punto osserviamo che il nodo P5 puó essere cancellato. Infatti

114
u1

4 u2

A
H

3 K J

111111111111111111
000000000000000000
u′5

000000000000000000
111111111111111111
B L

000000000000000000
111111111111111111
000000000000000000
111111111111111111
000000000000000000
111111111111111111
2

000000000000000000
111111111111111111
000000000000000000
111111111111111111
000000000000000000
111111111111111111
000000000000000000
111111111111111111
000000000000000000
111111111111111111
1

z u′′4 000000000000000000
111111111111111111
000000000000000000
111111111111111111
C
000000000000000000
111111111111111111
1 2 G
000000000000000000
111111111111111111
3 M 4 5 6 u
D
3
u′′6

+
-

Figura 6.9: Il rilassamento lineare P6′ di P6 , con regione ammissibile LM D.

il punto K, a coordinate intere, é soluzione ottima di P5′ e quindi é an-


che soluzione ottima di P5 e non possiamo sperare di trovare, nella regione
ammissibile di P5 , soluzioni ammissibili di P0 con un valore della funzione
obiettivo piú elevato rispetto al valore in K.
Ma anche gli altri nodi foglia non ancora cancellati (P1 e P6 ) possono essere
cancellati. Consideriamo, ad esempio, P1 . L’upper bound per le soluzioni
ammissibili di P1 é il valore 11. Non possiamo quindi sperare di trova-
re in P1 delle soluzioni ammissibili di P0 che superino il valore LB = 11.
Quindi possiamo evitare di esplorare ulteriormente il nodo P1 e possiamo
cancellare tale nodo. Analogo discorso vale per il nodo P6 dove si ha che
U (P6 ) = 21
2 < 11 = LB. Quindi anche questo nodo puó essere cancellato.

115
'$
LB = 11
P0
&%
" Q
" Q
x1 ≤ 1 " Q x1 ≥ 2
" Q
" Q
"
'$
" Q
Q
" Q'$

U (P1 ) = 11 P1
&%
P2

© &%
PP x2 ≥ 4
PP x2 ≤ 3 ©©
© PP ©
'$ P'$
© PP
©© ¡
Q ¡
Q
QP4¡
P3 Q
¡
¡ QQ
&% &%
¡ Q
!!! aa
a x1 ≥ 3 ¡
x1 ≤ 2!! aa
'$ '$
! !! aa
a
!

P5 P6
&% &%
U (P5 ) = 11 21
U (P6 ) = 2

Figura 6.10: L’albero di Branch-and-Bound dopo la terza iterazione


dell’algoritmo.

Aggiornando l’albero con le nuove cancellazioni, si ottiene l’albero in Figura


6.11. Notando che tutti i nodi foglia sono stati cancellati, ci possiamo ar-
restare e restituire come soluzione ottima del problema la miglior soluzione
ammissibile trovata, ovvero il punto K (2, 3) con valore ottimo pari a 11.
Come ultima osservazione si noti che il nodo P1 ha upper bound esatta-
mente pari a LB. Quindi, pur non potendo sperare di trovare in P1 una
soluzione ammissibile di P0 che sia strettamente superiore a LB = 11, po-
tremmo comunque sperare di trovarne una con valore uguale a 11. In realtá
abbiamo giá osservato che il rilassamento lineare P1′ di P1 ha come unica
soluzione ottima il vertice, a coordinate non intere, E e quindi tutte le altre
soluzioni ammissibili di P1′ , comprese quelle a coordinate intere ammissibili
per P1 , hanno valore della funzione obiettivo strettamente minore di 11.

116
'$
LB = 11
P0
&%
" Q
" Q
x1 ≤ 1 " Q x1 ≥ 2
" Q
" Q
"
'$
" Q
Q
@ % " Q'$
@% %
U (P1 ) = 11 P@
%
&%
1
% @ P2
&%
% @
@
x2 ≤ 3 ©©© PP x2 ≥ 4
PP
©© PP
'$ P'$
© PP
© © ¡
Q ¡
Q
QP4¡
P3 Q
¡
¡ QQ
!&% aa &%
¡ Q
x1 ≤ 2 !!! aax1 ≥ 3 ¡
!! aa
@ '$ % !!
!
aa'$ ¶
@ %% b ¶
@% b
bP6¶
%P5@ b
¶b
&% &%
U (P5 ) = 11
% @ b U (P6 ) = 2
21
¶ b
% @ ¶

Figura 6.11: L’albero di Branch-and-Bound al momento in cui l’algoritmo


viene fermato.

6.3.2 Cancellazione dei nodi


Prima di formalizzare l’algoritmo di Branch-and-Bound rivediamo attra-
verso l’esempio considerato i modi con cui é possibile cancellare i nodi
foglia in un albero di Branch-and-Bound. Dato un nodo P , esso puó essere
cancellato se almeno una delle seguenti condizioni é soddisfatta.

1. Il corrispondente rilassamento lineare P ′ ha regione ammissibile vuota


e quindi nel nodo P non vi possono essere soluzioni ammissibili per il
problema di PLI originario, cioé il nodo radice P0 . Nel nostro esempio
questo si verifica nel nodo P4 .

2. Il rilassamento lineare P ′ di P ha soluzione ottima intera. Tale


soluzione é la migliore soluzione ammissibile del problema di PLI

117
originario P0 che sia possibile trovare nel nodo P (vedi il nodo P5
nell’esempio).
3. Si ha che U (P ) ≤ LB. In tal caso l’upper bound U (P ) nel nodo P ,
ovvero il valore ottimo del rilassamento lineare P ′ di P , non supera il
lower bound LB (il valore della miglior soluzione ammissibile trovata
dall’algoritmo) e quindi nessuna soluzione ammissibile del problema
P0 che sia contenuta in P puó superare il valore LB. Se, in particolare,
si ha U (P ) < LB si ha che nessuna soluzione ammissibile del problema
P0 che sia contenuta in P non solo non puó superare il valore LB ma
non lo puó neppure eguagliare. Il caso U (P ) = LB si verifica nel
nostro esempio nel nodo P1 , mentre il caso U (P ) < LB si verifica nel
nodo P6 .

6.3.3 Branch-and-Bound: l’algoritmo generale


Siamo ora pronti a generalizzare quanto visto nell’esempio e a formalizzare
l’algoritmo Branch-and-Bound. Il generico problema di PLI P0 si presenta
nella seguente forma
Pn
P0 : max i=1 ci xi
Pn
i=1 aij xi ≤ bj j = 1, . . . , m
xi ≥ 0 i = 1, . . . , n
xi ∈ I i = 1, . . . , n
L’algoritmo di Branch-and-Bound é il seguente.
Inizializzazione Si inizializzi l’insieme F dei nodi foglia con il problema
originario P0 , cioé si ponga F = {P0 }. Si risolva il rilassamento li-
neare P0′ di P0 e sia (x∗1 (P0 ), . . . , x∗n (P0 )) la soluzione ottima trovata
e U (P0 ) il corrispondente valore ottimo.
Se tutti i valori x∗i (P0 ), i = 1, . . . , n sono interi, STOP: la soluzione
(x∗1 (P0 ), . . . , x∗n (P0 )) é soluzione ottima anche per P0 ed il valore ot-
timo di P0 é pari a U (P0 ).
Altrimenti si ponga LB = −∞ e si vada al Passo 1.
Passo 1 Si selezioni nell’insieme F un nodo Q ∈ F. Anche se esistono altre
regole per effettuare la selezione, qui adotteremo quella di scegliere il
nodo Q ∈ F con valore dell’upper bound massimo, ovvero
U (Q) = max U (P )
P ∈F

e sia (x∗1 (Q), . . . , x∗n (Q)) una soluzione ottima del rilassamento lineare
Q′ di Q.

118
Passo 2 Si selezioni una variabile x∗i (Q) a valore frazionario. Nel caso
vi siano piú variabili x∗i (Q) con valore frazionario, esistono diverse
regole per effettuare la scelta. Qui, per semplicitá, si adotterá quella
di scegliere la variabile con indice i minimo.
Passo 3 Si rimuova il nodo Q da F (cioé F = F \ {Q}) e lo si suddivida in
due nuovi nodi Q1 e Q2 ottenuti aggiungendo ai vincoli di Q rispetti-
vamente il vincolo xi ≤ ⌊x∗i (Q)⌋ (in Q1 ) ed il vincolo xi ≥ ⌊x∗i (Q)⌋+1
(in Q2 ).
Passo 4 Per ciascuno dei due nuovi nodi Qi , i = 1, 2 si risolva il rilassa-
mento lineare Q′i .
Se Q′i ha regione ammissibile vuota, si cancella il nodo Qi e non lo si
aggiunge a F, altrimenti lo si aggiunge a F.
Altrimenti se la soluzione ottima (x∗1 (Qi ), . . . , x∗n (Qi )) é a coordina-
te intere si cancelli il nodo Qi senza aggiungerlo a F ed inoltre, se
U (Qi ) > LB si ponga

LB = U (Qi ) e y1 = x∗1 (Qi ), . . . , yn = x∗n (Qi ).

Altrimenti, se la soluzione ottima di Q′i non é a coordinate intere, si


aggiunga Qi a F, ovvero si ponga F = F ∪ {Qi }.
Passo 5 Si cancellino tutti i nodi in F con valore dell’upper bound non
superiore a LB, ovvero si ponga

F = F \ {P ∈ F : U (P ) ≤ LB}.

Passo 6 Se F = ∅, STOP: se LB ha valore pari a −∞, allora il problema


P0 non ha soluzioni ammissibili, altrimenti il valore LB é il valore
ottimo del problema P0 e (y1 , . . . , yn ) é una soluzione ottima di tale
problema.
Altrimenti si ritorni al Passo 1.

6.3.4 Alcuni esercizi significativi


Soluzioni ottime multiple trovate in nodi diversi.

P0 : max 2x1 + x2
11
x2 ≤ 2
x1 ≤ 2
23
x1 + x2 ≤ 4
9
2 x1 + x2 ≤ 11

119
x1 , x2 ≥ 0
x1 , x2 ∈ I

Soluzioni ottime multiple trovate nello stesso nodo.

P0 : max z = 2x1 + x2
2x1 + x2 ≤ 7
−2x1 + x2 ≤ 1
x1 , x2 ≥ 0
x1 , x2 ∈ I

Regione ammissibile vuota.

P0 : max z = x1 + 3x2
x1 ≥ 12
5
x1 ≤ 2
1
x2 ≥ 2
3
x2 ≤ 4
x1 , x2 ≥ 0
x1 , x2 ∈ I

120
Capitolo 7

Introduzione ai grafi

Per prima cosa diamo la definizione di grafo.


Definizione 13 Un grafo G é costituito da una coppia di insiemi (V, A)
dove V é detto insieme dei nodi e A é detto insieme di archi ed é un
sottinsieme di tutte le possibili coppie di nodi in V . Se le coppie di nodi
sono ordinate, il grafo é detto orientato, se non sono ordinate é detto non
orientato.

Esempio 18 Consideriamo un grafo G con insieme di nodi

V = {a, b, c, d, e},

mentre l’insieme di archi é il seguente sottinsieme di coppie di nodi in V

A = {(a, b); (a, c); (b, c); (b, e); (c, d); (d, b)}

Se tali coppie sono ordinate (e quindi, ad esempio, la coppia (a, b) é diversa


dalla coppia (b, a)) il grafo é orientato, altrimenti (e quindi, ad esempio,
la coppia (a, b) e la coppia (b, a) sono equivalenti tra loro) il grafo é non
orientato.

Diamo ora un’altra definizione.


Definizione 14 Dato un grafo orientato G = (V, A) e un arco (i, j) ∈ A
diremo che il nodo i é predecessore del nodo j e che il nodo j é successore
del nodo i. Nel caso di un grafo non orientato G = (V, A), dato un arco
(i, j) ∈ A diremo che il nodo i e il nodo j sono tra loro adiacenti.
Nel grafo dell’esempio, supposto orientato, il nodo a é predecessore del
nodo b, mentre b é successore di a. Se il grafo fosse non orientato diremmo

121
semplicemente che i nodi a e b sono adiacenti. Abbiamo definito un grafo
G attraverso la coppia di insiemi V e A. É possibile peró rappresentare un
grafo anche nei modi seguenti.

Rappresentazione grafica Ad ogni nodo corrisponde un pallino sul pia-


no e ogni arco (i, j) corrisponde ad una linea che congiunge il pallino
che rappresenta il nodo i con il pallino che rappresenta il nodo j. Se il
grafo é orientato sulla linea si aggiunge anche una freccia da i verso j
(per grafi non orientati la freccia si omette). Nella figura sottostante é
mostrata la rappresentazione grafica del grafo dell’esempio, supposto
orientato (nel caso non orientato si devono solo omettere le frecce).

b e

c d

Liste di adiacenza Ad ogni nodo si affianca una lista (eventualmente


vuota) contenente tutti i suoi successori nel caso di grafo orientato,
o tutti i nodi adiacenti nel caso di grafo non orientato. Per il nostro
esempio, supposto orientato, le liste di adiacenza sono le seguenti:

a : (b, c) b : (c, e) c : (d) d : (b) e: ∅

mentre se lo si suppone non orientato le liste di adiacenza sono le


seguenti:

a : (b, c) b : (a, c, d, e) c : (a, b, d) d : (b, c) e : (b)

Matrice incidenza nodo-arco Si costruisce una matrice con una riga


per ogni nodo e una colonna per ogni arco. Per grafi orientati nella
colonna relativa all’arco (i, j) si mette +1 in corrispondenza della riga
i, -1 in corrispondenza della riga j e 0 in corrispondenza di tutte le
altre righe. Per il nostro esempio, supposto orientato, la matrice di
incidenza nodo-arco é data in Tabella 7.1 Per grafi non orientati nella
colonna relativa all’arco (i, j) si mette +1 in corrispondenza della riga
i e della riga j e 0 in corrispondenza di tutte le altre righe. Per il nostro
esempio, supposto non orientato, la matrice di incidenza nodo-arco é
data in Tabella 7.2

122
Tabella 7.1:
(a, b) (a, c) (b, c) (b, e) (c, d) (d, b)
a 1 1 0 0 0 0
b -1 0 1 1 0 -1
c 0 -1 -1 0 1 0
d 0 0 0 0 -1 1
e 0 0 0 -1 0 0

Tabella 7.2:
(a, b) (a, c) (b, c) (b, e) (c, d) (d, b)
a 1 1 0 0 0 0
b 1 0 1 1 0 1
c 0 1 1 0 1 0
d 0 0 0 0 1 1
e 0 0 0 1 0 0

Introduciamo ora alcune definizioni.


Definizione 15 Due archi che hanno un nodo in comune sono detti adia-
centi.
Nell’esempio gli archi (a, b) e (a, c) sono adiacenti.
Definizione 16 Sia dato un grafo G = (V, A). Una sequenza di m+1 nodi

s0 → s1 → s2 → · · · → sm

tali che per ogni i = 1, . . . , m si ha:

(si−1 , si ) ∈ A oppure (si , si−1 ) ∈ A

(l’alternativa é superflua nel caso non orientato) é detto cammino nel gra-
fo. Il numero m di archi del cammino é detto lunghezza del cammino.
Possiamo vedere anche un cammino di lunghezza m come una sequenza di
archi a due a due adiacenti. Un cammino é detto semplice se nessun arco
é percorso piú di una volta, elementare se nessun nodo viene toccato piú di
una volta.
Nell’esempio, il cammino a → b → d → c é un cammino elementare di
lunghezza 3; il cammino a → b → c → d → b → e é semplice ma non
elementare (il nodo b é toccato piú di una volta); il cammino a → b → c →
d → b → a → c non é né semplice né elementare (l’arco (a, b) é attraversato
due volte).

123
Definizione 17 Un cammino semplice

s0 → s1 → s2 → · · · → sm

in cui primo e ultimo nodo coincidono (cioé sm = s0 ) viene detto ciclo


di lunghezza m. Se omettendo l’ultimo nodo sm si ottiene un cammino
elementare, si parla di ciclo elementare.

Nell’esempio a → b → c → a é un ciclo elementare di lunghezza 3.

Definizione 18 In un grafo orientato un cammino o un ciclo

s0 → s1 → s2 → · · · → sm

(sm = s0 nel caso di un ciclo) in cui tutti gli archi sono percorsi secondo il
loro orientamento, ovvero si ha che per ogni i = 1, . . . , m:

(si−1 , si ) ∈ A

viene detto orientato, altrimenti si dice non orientato.

Nell’esempio il cammino a → b → c é orientato mentre il cammino b →


a → c é non orientato. il ciclo a → b → c → a è non orientato, mentre il
ciclo b → c → d → b è orientato.

Definizione 19 Dati due nodi i e j di un grafo G, se esiste un cammino


da i a j allora si dice che j é accessibile da i.

La relazione tra i nodi ”é accessibile da” é una relazione di equivalenza, ov-
vero soddisfa le tre proprietá riflessiva, simmetrica e transitiva. Come tale,
induce classi di equivalenza nell’insieme dei nodi. Tali classi di equivalenza
vengono dette componenti connesse del grafo. Ogni componente connessa é
formata da nodi tutti accessibili tra loro ma non accessibili da nodi in altre
componenti.

Definizione 20 Se il grafo contiene una sola componente connessa viene


detto connesso.

La seguente procedura consente di individuare le componenti connesse di


un grafo e quindi anche di stabilire se un grafo é connesso.

Inizializzazione Si ponga W = V e r = 1.

Passo 1 Si selezioni un nodo i ∈ W e si ponga S = {i} e Tr = ∅.

124
Passo 2 Si selezioni un nodo j ∈ S. Si rimuova j da S e si aggiungano in
S tutti i nodi che non siano giá contenuti in Tr di cui j é predecessore
o successore, cioé

S = (S \ {j}) ∪ {k 6∈ Tr : (k, j) ∈ A o (j, k) ∈ A}.

Si ponga Tr = Tr ∪ {j}.

Passo 3 Se S = ∅, allora si vada al Passo 4. Se Tr ∪ S = W , si ponga


Tr = Tr ∪ S e si vada al Passo 4. Altrimenti si ritorni al Passo 2.

Passo 4 Si ponga W = W \ Tr . Se W = ∅, allora T1 , T2 , . . . , Tr sono gli


insiemi di nodi delle componenti connesse del grafo. Altrimenti si
ponga r = r + 1 e si ritorni al Passo 1.

Come esercizio si applichi la procedura per verificare che il grafo dell’esem-


pio é connesso.

Definizione 21 Un nodo j é detto fortemente accessibile da i se esiste un


cammino orientato da i a j.

Si noti che la relazione tra nodi ”é fortemente accessibile da” non é una
relazione di equivalenza. In particolare non vale per essa la proprietá di
simmetria (nell’esempio e é fortemente accessibile da b ma il viceversa non
é vero).

Definizione 22 Un grafo in cui ogni nodo é fortemente accessibile da tutti


gli altri é detto fortemente connesso.

Si noti che l’esistenza in un grafo di un ciclo orientato che tocca tutti i nodi
del grafo garantisce che il grafo sia fortemente connesso. Il grafo del nostro
esempio non é fortemente connesso (come giá osservato b e anche tutti gli
altri nodi del grafo non sono fortemente accessibili da e).

Definizione 23 Un grafo si dice completo se esiste un arco tra ogni coppia


di nodi distinti.

Il nostro grafo non é completo. Ad esempio, non c’é alcun arco tra a ed e.
Lo é invece il grafo G = (V, A) con

V = {a, b, c, d}

e
A = {(a, b); (c, a); (a, d); (b, c); (d, b); (c, d)}

125
Definizione 24 Dato un grafo G = (V, A) e un sottinsieme A′ ⊆ A, un
grafo G′ = (V, A′ ) é detto grafo parziale di G. Dati V ′′ ⊆ V e

A′′ ⊆ A(V ′′ ) = {(i, j) ∈ A : i ∈ V ′′ , j ∈ V ′′ }

il grafo G′′ = (V ′′ , A′′ ) viene detto sottografo di G. In particolare, se


A′′ = A(V ′′ ) il sottografo viene detto sottografo indotto da V ′′ .
Nell’esempio G′ = (V, A′ ) con

A′ = {(a, b); (b, c); (b, e); (c, d); (d, b)}

é un grafo parziale di G, mentre G′′ = (V ′′ , A′′ ) con V ′′ = {a, b, d} e

A′′ = {(a, b)}

é un sottografo di G. Se invece si considera G′′ = (V ′′ , A′′ ) con V ′′ =


{a, b, d} e
A′′ = {(a, b); (d, b)}
questo é il sottografo di G indotto da V ′′ .
Definizione 25 Un grafo G = (V, A) si dice bipartito se l’insieme V puó
essere partizionato in due sottinsieme V1 e V2 (quindi V1 ∪ V2 = V e V1 ∩
V2 = ∅) tali che

∀ (i, j) ∈ A : i ∈ V1 , j ∈ V2 oppure i ∈ V2 , j ∈ V1 .

Un grafo bipartito si dice completo se per ogni coppia di nodi in V1 e V2


esiste un arco che li congiunge.
Vale la seguente osservazione.
Osservazione 18 Un grafo é bipartito se e solo se non contiene cicli di
lunghezza dispari.
La seguente procedura consente di stabilire se un grafo é bipartito.
Passo 0 Si ponga W = V , C1 = C2 = ∅.
Passo 1 Si selezioni un nodo i ∈ W e si ponga T1 = {i}, C1 = C1 ∪ T1 .
Passo 2 Si ponga

T2 = {k ∈ V \ C2 : ∃ i ∈ T1 tale che (i, k) ∈ A oppure (k, i) ∈ A}

Sia C2 = C2 ∪ T2 .

126
Passo 3 Si ponga

T1 = {k ∈ V \ C1 : ∃ i ∈ T2 tale che (i, k) ∈ A oppure (k, i) ∈ A}

Sia C1 = C1 ∪ T1 .

Passo 4 Se C1 ∩ C2 6= ∅, allora il grafo non é bipartito. Altrimenti si vada


al Passo 5.

Passo 5 Si ponga W = W \ (C1 ∪ C2 ). Se W = ∅ e T1 = ∅, allora il grafo


é bipartito con V1 = C1 e V2 = C2 . Altrimenti, se T1 = ∅, si ritorni
al Passo 1, se T1 6= ∅ si ritorni al Passo 2.

Nel nostro esempio selezionando inizialmente il nodo a e ponendolo in T1 e


C1 avremo
C1 a
C2
con T1 = {a}. Al Passo 2 avremo

C1 a
C2 b c

con T2 = {b, c} e C2 = {b, c}. Al Passo 3 avremo

C1 a e d c
C2 b c

con T1 = {e, d, c, b} e C1 = {a, e, d, c, b}. Al Passo 4 notiamo che C1 ∩ C2 =


{b, c} 6= ∅ e quindi possiamo concludere che il grafo non é bipartito.

Definizione 26 Sia dato un grafo G = (V, A) con card(V ) = n dove


card(V ) denota la cardinalitá (il numero di elementi) dell’insieme V . Si
dice che G é un albero se soddisfa le seguenti condizioni (equivalenti tra
loro)

1. G é privo di cicli e connesso;

2. G é privo di cicli e card(A) = n − 1;

3. G é connesso e card(A) = n − 1;

4. esiste un unico cammino elementare che congiunge ogni coppia di


nodi.

127
Ad esempio, il grafo G = (V, A) con

V = {a, b, c, d, e} A = {(a, b); (b, c); (c, e); (e, d)}

illustrato nella figura sottostante é un albero.

a c

b d

Definizione 27 Sia dato un grafo generico G = (V, A). Si definisce albero


di supporto o spanning tree di G un grafo parziale T = (V, AT ) di G (quindi
con AT ⊆ A) che é un albero.
Si noti che un albero di supporto di G deve contenere tutti i nodi di G e
che in virtú del punto 2. (o del punto 3.) della Definizione 26, si dovrá
avere card(AT ) = card(V ) − 1.
Esempio 19 Sia dato il grafo G = (V, A) con

V = {a, b, c, d} A = {(a, b); (b, c); (b, d); (a, d); (c, d)}

illustrato in Figura 7.1. Un albero di supporto di G é il sottografo T1 =


(V, AT1 ) con
AT1 = {(b, c); (b, d); (a, d)}
un altro é il sottografo T2 = (V, AT2 ) con

AT2 = {(a, b); (b, c); (c, d)}

I due alberi di supporto di G sono illustrati in Figura 7.1.


Vale la seguente osservazione.
Osservazione 19 Dato un albero, l’aggiunta di un solo arco crea esatta-
mente un ciclo.
Definiamo ora una funzione

w:A→R

che ad ogni arco e ∈ A del grafo associa un peso w(e) (in Figura 7.1 tale
valore é riportato sopra ciascun arco). Nel problema dell’albero di supporto

128
c
a
E ZZ 4 ,,
G E Z ,, 5
3 E Z
,
E
E , ZZ3
E ,, Z
b
2 d

c
c a #£
a , E #£
Z , #
Z 4, E # £
Z , 3 EE 4# £ 5
Z, # £ T2
T1 Z
, E # £
, Z3 #
Z E # £
, b #
b , d d
2
Figura 7.1: Un grafo G e due suoi alberi di supporto T1 e T2 .

a peso minimo vogliamo trovare tra tutti i possibili alberi di supporto del
grafo G, quello con peso totale minimo, dove il peso di un albero di supporto
T = (V, AT ) é definito dalla somma dei pesi dei suoi archi, ovvero:
X
w(e).
e∈AT

Nella Figura 7.1 i due alberi di supporto hanno pesi rispettivamente pari
a 9 e 12. Abbiamo il seguente algoritmo greedy (goloso) per il problema di
albero di supporto a peso minimo.

Passo 1 Si ordinino tutti gli m = card(A) archi del grafo in ordine non
decrescente rispetto al peso, cioé

w(e1 ) ≤ w(e2 ) ≤ · · · ≤ w(em−1 ) ≤ w(em ).

Si parta con un insieme AT di archi vuoto, cioé AT = ∅. Sia k = 1

Passo 2 Se card(AT ) = card(V ) − 1 ci si arresta e si restituisce l’albero


T = (V, AT ) come soluzione. Altrimenti si vada al Passo 3.

129
Passo 3 Se ek non forma cicli con gli archi in AT , lo si aggiunga ad AT ,
cioé si ponga AT = AT ∪ {ek }. Altrimenti si lasci AT invariato.

Passo 4 Si ponga k = k + 1 e si ritorni al Passo 2.

Come esercizio si puó applicare tale algoritmo all’esempio in Figura 7.1. La


strategia greedy appare al Passo 3. Infatti, tra tutti gli archi non ancora
considerati si va a considerare quello che tra essi ha peso minimo e lo si
aggiunge se non forma cicli con quelli giá inseriti in AT . Faccio dunque
una scelta greedy che é la migliore possibile per la particolare situazione
in cui mi trovo (ovvero per il particolare insieme di archi AT che ho giá
inserito nell’albero). Non sempre questo tipo di scelta é opportuna (puó
accadere che la scelta migliore in un dato momento non lo sia in generale)
ma nel caso particolare del problema dell’albero di supporto a peso minimo
si puó dimostrare che é una scelta vincente, cioé che conduce effetivamente
ad individuare un albero di supporto a peso minimo.
Ma l’algoritmo greedy non é l’unico possibile per risolvere il problema del-
l’albero di supporto a peso minimo. Vogliamo ora proporre un algoritmo
alternativo e ”migliore” rispetto a quello greedy, in particolare per grafi
densi, ovvero con un numero elevato di archi. Per ”migliore” si intende un
algoritmo che richiede in generale un numero di operazioni (e quindi un
tempo di esecuzione) inferiore rispetto all’algritmo greedy. L’algoritmo é il
seguente.

Inizializzazione Fissato un nodo v1 ∈ V , si ponga

U = {v1 } AT = ∅.

Inoltre, per ogni v ∈ V \ U si ponga:


½
(v, v1 ) se w(v, v1 ) ≤ w(v1 , v)
ev =
(v1 , v) altrimenti

Passo 1 Se U = V , allora STOP: l’albero di supporto (V, AT ) é quello a


peso minimo. Altrimenti si consideri un nodo v tale che:

w(ev ) = min w(ev )


v∈V \U

(si noti che nel caso ev 6∈ A il suo peso w(ev ) viene considerato pari a
+∞).

Passo 2 Si ponga:
U = U ∪ {v} AT = AT ∪ {ev }.

130
Passo 3 Per ogni v ∈ V \ U , si lasci invariato ev se

w(v, v), w(v, v) ≥ w(ev ),

altrimenti si ponga:
½
(v, v) se w(v, v) ≤ w(v, v)
ev =
(v, v) altrimenti

Si ritorni al Passo 1.
Ma vediamo ora di applicare l’algoritmo al nostro esempio. Inizializziamo
U con il nodo a. Quindi avremo inizialmente:

U = {a} AT = ∅ V \ U = {b, c, d}.

Inoltre avremo:

eb = (a, b) ec = (a, c) ed = (a, d).

Non abbiamo U = V , quindi al Passo 1 scegliamo il nodo d in quanto:

w(ed ) = min{w(eb ), w(ec ), w(ed )}.

Si noti che avremmo potuto scegliere anche il nodo b in quanto w(eb ) =


w(ed ). Si noti inoltre che, essendo ec = (a, c) 6∈ A, avremo w(ec ) = +∞.
Al Passo 2 avremo:

U = {a, d} AT = {(a, d)} V \ U = {b, c}.

Al Passo 3 abbiamo w(ec ) > w(c, d) e quindi avremo il seguente aggiorna-


mento:
ec = (c, d);
inoltre, abbiamo w(eb ) > w(b, d) e quindi avremo anche il seguente aggior-
namento:
eb = (b, d).
A questo punto ritorniamo al Passo 1. Non abbiamo U = V , quindi al
Passo 1 scegliamo il nodo b in quanto:

w(eb ) = min{w(eb ), w(ec )}.

Al Passo 2 avremo:

U = {a, b, d} AT = {(a, d); (b, d)} V \ U = {c}.

131
Al Passo 3 abbiamo w(ec ) > w(b, c) e quindi avremo il seguente aggiorna-
mento:
ec = (b, c).
A questo punto ritorniamo al Passo 1. Non abbiamo U = V , quindi al
Passo 1 scegliamo il nodo c in quanto:

w(ec ) = min{w(ec )}.

Al Passo 2 avremo:

U = {a, b, c, d} AT = {(a, d); (b, d); (b, c)} V \ U = ∅.

Al Passo 3 non abbiamo aggiornamenti da eseguire e possiamo ritornare al


Passo 1. Ora si ha U = V e quindi l’albero di supporto (V, AT ) con:

AT = {(a, d); (b, d); (b, c)}

é quello a peso minimo (con peso pari a 9).

132
Capitolo 8

Problema del trasporto

Considereremo ora un particolare problema che può essere visto come pro-
blema su un grafo bipartito e può essere modellato come problema di PLI.

Supponiamo di avere m depositi in cui è immagazzinato un prodotto e


n negozi che richiedono tale prodotto. Nel deposito i é immagazzinata la
quantità ai di prodotto. Nel negozio j si richiede la quantità bj di prodotto.
È noto che il costo di trasporto di un’unità di prodotto dal deposito i al
negozio j é pari a cij . Il problema del trasporto consiste in questo:

determinare quale quantità di prodotto inviare da ciascun deposito verso


ciascun negozio in modo tale da minimizzare il costo complessivo di tra-
sporto, rispettando i vincoli sulle quantitá di prodotto presenti in ciascun
deposito e quelli di richieste di ciascun negozio.

Si suppone che la quantità totale immagazzinata in tutti i depositi sia pari


alla quantitá totale richiesta da tutti i magazzini, ovvero
m
X n
X
ai = bj . (8.1)
i=1 j=1

Non si tratta comunque di un’ipotesi restrittiva dal momento che ci si puó


sempre ricondurre ad essa. Infatti, si supponga che
m
X n
X
ai > bj .
i=1 j=1

cioé nei depositi vi sia più prodotto di quanto effettivamente richiesto dai
negozi. Per soddisfare l’ipotesi (8.1) basta aggiungere un negozio fittizio

133
n + 1 con
m
X n
X
bn+1 = ai − bj ,
i=1 j=1

e con ci,n+1 = 0 per ogni i, i = 1, . . . , m, cioè il costo del trasporto verso il


negozio fittizio è pari a 0. La quantità di prodotto che un deposito invia a un
negozio fittizio resta in realtà immagazzinata nel deposito. Analogamente,
si supponga che
Xm Xn
ai < bj .
i=1 j=1

cioè nei depositi vi sia meno prodotto di quanto effettivamente richiesto dai
negozi. Per soddisfare l’ipotesi (8.1) basta aggiungere un deposito fittizio
m + 1 con
Xn Xm
am+1 = bj − ai ,
j=1 i=1

e con cm+1,j = 0 per ogni j, j = 1, . . . , n, cioè il costo del trasporto dal


deposito fittizio è pari a 0. La quantità di prodotto che un negozio riceve
da un deposito fittizio equivale in realtà a una richiesta non soddisfatta per
quel negozio.

8.1 Modello matematico del problema


Vediamo ora di formulare il modello matematico del problema del trasporto.

Variabili
Ad ogni coppia deposito i-negozio j associamo una variabile xij che corri-
sponde alla quantitá di prodotto inviata dal deposito i verso il negozio j.
Tale quantitá dovrá essere ovviamente non negativa e tipicamente anche
intera, ovvero:

xij ≥ 0 intero i = 1, . . . , m j = 1, . . . , n.

Vincoli
Per ogni deposito i la quantità totale di prodotto inviata da esso deve essere
pari alla quantità di prodotto ai in esso immagazzinata. P La quantità totale
n
di prodotto inviata dal deposito i è data dalla formula j=1 xij e quindi

134
per ogni deposito i avremo il seguente vincolo:
n
X
xij = ai i = 1, . . . , m.
j=1

Analogamente, per ogni negozio j la quantità totale di prodotto ricevuta


da esso deve essere pari alla quantità di prodotto bj da esso richiesta. La
quantità
Pm totale di prodotto ricevuta dal negozio j è data dalla formula
i=1 xij e quindi per ogni negozio j avremo il seguente vincolo:

m
X
xij = bj j = 1, . . . , n.
i=1

Obiettivo
Se inviare un’unità di prodotto dal deposito i al negozio j ha costo pa-
ri a cij , inviarne una quantità xij ha costo pari a cij xij . Sommando su
tutte le possibili coppie deposito-negozio, abbiamo la seguente formula per
l’obiettivo:
Xm X n
cij xij .
i=1 j=1

Quello che desideriamo è minimizzare questo costo totale di trasporto.

Riassumendo, il modello matematico del problema del trasporto è il se-


guente problema di PLI:
Pm Pn
min i=1 j=1 cij xij
Pn
j=1 xij = ai i = 1, . . . , m
Pm
i=1 xij = bj j = 1, . . . , n
xij ≥ 0 interi i = 1, . . . , m j = 1, . . . , n

Possiamo anche associare al problema un grafo bipartito completo Km,n


dove su un lato della bipartizione compaiono i nodi corrispondenti ai depo-
siti, numerati da 1 a m, mentre sull’altro lato della bipartizione compaiono
i nodi corrispondenti ai negozi, numerati da m+1 a m+n (si veda la Figura
8.1). È possibile dimostrare il seguente risultato.

Teorema 6 Se i valori ai , i = 1, . . . , m, e bj , j = 1, . . . , n, sono tutti


interi, allora ogni vertice del rilassamento lineare del problema del trasporto
è a coordinate intere.

135
XXX
1 XXX
b XXX
J b XXX
b
J b ( ( (( m+1
J((( b((
(
PPJ( b ·
b
2 PP b ·
\ J PP b ·
J PP b
\ PP· b
\ J · P m+2
\ J ·
\ J · %
\ J· %
\ ·J %
\· J%
· \ %J
· \ J
%
· % \ J
· % \ J
· % \ J
· % \ J
· % \ J
· % \
· %
( m+n
% (((((
m (((((

Figura 8.1: Il grafo bipartito associato a un problema del trasporto.

Questo in particolare ci dice che anche il vertice ottimo del rilassamento


lineare è a coordinate intere e quindi risulta essere anche una soluzione
ottima del problema del trasporto. In particolare, pur essendo un proble-
ma di PLI, il problema del trasporto è risolvibile come problema di PL
semplicemente rimuovendo i vincoli di interezza delle variabili.

Esempio 20 Si consideri il problema del trasporto con 2 depositi e 3 negozi


e con
a1 = 30 a2 = 20 b1 = 15 b2 = 10 b3 = 25.
Per prima cosa notiamo che
2
X 3
X
ai = 30 + 20 = bj = 15 + 10 + 25.
i=1 j=1

Si supponga inoltre che i costi unitari di trasporto per le diverse coppie


deposito-negozio siano date dalla Tabella 8.1 Il modello matematico di que-

136
Tabella 8.1:
1 2 3
1 c11 = 4 c12 = 7 c13 = 5
2 c21 = 2 c22 = 4 c23 = 3

sto problema è il seguente:

min 4x11 + 7x12 + 5x13 + 2x21 + 4x22 + 3x23


x11 + x12 + x13 = 30
x21 + x22 + x23 = 20
x11 + x21 = 15
x12 + x22 = 10
x13 + x23 = 25
x11 , x12 , x13 , x21 , x22 , x23 ≥ 0

La matrice dei vincoli è data nella Tabella 8.2 e si può vedere che coinci-
de con la matrice di incidenza nodo-arco del grafo bipartito completo K2,3
associato a questo problema e illustrato in Figura 8.2.

1 XXX
XXX
b
@ XXX
b XXX
b
@ b 3
@
( ((b((( ((
(
((
PP @ b
b
2 PP@ b
Q PP b
Q @PP bb
Q @ PPP
Q
Q @ 4
Q
Q @
Q @
Q @
Q
Q@
Q
5

Figura 8.2: Il grafo bipartito associato al problema del trasporto


dell’esempio.

137
Tabella 8.2:
x11 x12 x13 x21 x22 x23
Deposito 1 1 1 1 0 0 0
Deposito 2 0 0 0 1 1 1
Negozio 1 1 0 0 1 0 0
Negozio 2 0 1 0 0 1 0
Negozio 3 0 0 1 0 0 1

Resta ancora da sottolineare che quando la condizione (8.1) è soddisfatta


(e soltanto in questo caso), il problema del trasporto ammette sempre al-
meno una soluzione ammissibile e almeno una soluzione ottima. Infatti, la
condizione (8.1) garantisce l’esistenza di una soluzione ammissibile (nel se-
guito verrà anche data una procedura per determinare una tale soluzione).
Inoltre, si ha, ad esempio, che:
n
X
xij ≥ 0, xij = ai ⇒ xij ≤ ai i = 1, . . . , m j = 1, . . . , n,
j=1

ovvero tutte le variabili hanno valori limitati e la regione ammissibile è


dunque essa stessa un insieme limitato. In base a ben note proprietà dei
problemi di PL in generale, questo garantisce l’esistenza di una soluzione
ottima. Ciò esclude a priori i casi di illimitatezza e la verifica se la regione
ammissibile è vuota oppure no si riduce alla verifica della condizione (8.1).

8.2 Basi del problema del trasporto


Essendo il problema del trasporto risolvibile come problema di PL possiamo
utilizzare uno qualsiasi dei metodi di risoluzione per problemi di PL visti
in precedenza. In effetti sarà quello che faremo, utilizzando l’algoritmo del
simplesso primale. Tuttavia, riusciremo a sfruttare la particolare struttura
del problema del trasporto per implementare i passi dell’algoritmo del sim-
plesso senza dover fare riferimento ad alcuna riformulazione rispetto alle
basi.

Cominceremo recuperando il concetto di base e mostrando come si pos-


sano riconoscere le basi nel problema di trasporto.
Si può intanto dimostrare che uno (ed uno solo) dei vincoli del problema di
trasporto è ridondante in quanto derivabile dagli altri. Come tale può esse-
re eliminato. Si noti che è possibile eliminare uno qualsiasi dei vincoli. Per

138
Tabella 8.3:
x11 x12 x13 x21 x22 x23
Deposito 1 1 1 1 0 0 0
Deposito 2 0 0 0 1 1 1
Negozio 1 1 0 0 1 0 0
Negozio 2 0 1 0 0 1 0

convenzione fisseremo di eliminare l’ultimo vincolo. Verrà di conseguenza


modificata anche la matrice dei vincoli. Nel nostro esempio, la riduzione
porterà al nuovo modello matematico:

min 4x11 + 7x12 + 5x13 + 2x21 + 4x22 + 3x23


x11 + x12 + x13 = 30
x21 + x22 + x23 = 20
x11 + x21 = 15
x12 + x22 = 10
x11 , x12 , x13 , x21 , x22 , x23 ≥ 0

e alla nuova matrice dei vincoli riportata in Tabella 8.3. Una volta effettuata
questa riduzione, rimangono m + n − 1 vincoli non ulteriormente riducibili.
Una prima definizione, standard, di base per il problema del trasporto è la
seguente.
Definizione 1 Una base per il problema del trasporto è un insieme di m +
n − 1 variabili le cui corrispondenti colonne nella matrice dei vincoli sono
linearmente indipendenti.
Tuttavia vedremo che è possibile dare una rappresentazione grafica più
intuitiva di una base. Consideriamo una tabella con i depositi sulle righe e
i negozi sulle colonne. Dato un insieme di m + n − 1 variabili, associamo
ad esso un grafo nel modo seguente:
• associamo un nodo ad ogni cella relativa ad una delle m + n − 1
variabili;
• colleghiamo tra loro mediante archi nodi successivi che si trovano
lungo la stessa riga o lungo la stessa colonna.
Si noti che non si tracciano archi tra due nodi lungo la stessa riga (o colon-
na) se in mezzo ad essi sulla stessa riga (o colonna) vi è un altro nodo. In

139
Figura 8.3 è rappresentato il grafo corrsipondente alle m+n−1 = 4 variabili
del nostro esempio {x12 , x13 , x22 , x23 }, mentre in Figura 8.4 è rappresenta-
to il grafo corrsipondente alle m + n − 1 = 4 variabili {x11 , x12 , x13 , x23 }.
In entrambi i casi abbiamo m + n − 1 variabili, ma non tutti gli insiemi

1 2 3

Figura 8.3: Il grafo associato alle variabili {x12 , x13 , x22 , x23 }.

di m + n − 1 variabili formano una base, è anche necessario che le colonne


corrispondenti nella matrice dei vincoli siano tra loro linearmente indipen-
denti. Ci chiediamo allora se sia possibile verificare questa condizione di
indipendenza lineare basandosi sulla sola osservazione del grafo associato.
Nel primo grafo, associato alle variabili {x12 , x13 , x22 , x23 }, notiamo che è
presente un ciclo. Per prima cosa tralasciamo i nodi del ciclo che si trovi-
no sulla stessa riga o colonna di altri due nodi del ciclo e siano in mezzo
a questi. Ad esempio, in Figura 8.5 tralasciamo i nodi nelle celle (1, 2) e
(2, 1). Una volta eliminati tali nodi (ma non ne sono presenti nell’esempio
di Figura 8.3 che stiamo considerando), prendiamo un nodo del ciclo ed
assegniamo il coefficiente +1 alla colonna relativa a tale nodo. Quindi ci
muoviamo lungo il ciclo assegnando alternativamente alle colonne relative
ai nodi del ciclo i coefficienti -1 e +1. Nell’esempio avremo:
         
1 1 0 0 0
 0   0   1   1   0 
+1  0  − 1 0  + 1 0  − 1 0  =  0 
        

1 0 0 1 0

Questo ci dice che le colonne non sono tra loro linearmente indipendenti e
quindi la matrice non è invertibile. Dunque, queste variabili non formano

140
1 2 3

Figura 8.4: Il grafo associato alle variabili {x11 , x12 , x13 , x23 }.

una base. Quanto visto nell’esempio vale in generale: se il grafo associato


a m + n − 1 variabili forma un ciclo, le m + n − 1 variabili non formano
una base. Quindi il grafo associato ad una base deve essere privo di cicli.
Si può inoltre dimostrare che esso deve soddisfare anche le seguenti due
condizioni:

A: contiene un nodo in ogni riga e in ogni colonna della tabella;

B: è connesso.

Vale anche il viceversa, ovvero dato un grafo sulla tabella con m + n − 1


nodi, privo di cicli e che soddisfa le condizioni A e B, le m + n − 1 variabili
relative ai nodi formano una base. Riassumendo, abbiamo quindi visto il
seguente risultato.

Osservazione 20 Nel problema del trasporto m + n − 1 variabili formano


una base se e solo se il grafo ad esso associato è privo di cicli e soddisfa le
condizioni A e B.

Nel nostro esempio notiamo che il grafo associato alle variabili {x11 , x12 , x13 , x23 }
è privo di cicli e soddisfa le condizioni A e B. Quindi tali variabili formano
una base.

Come al solito, ad una base associamo una soluzione di base ottenuta


ponendo uguali a 0 tutte le variabili fuori base nei vincoli. Sosituendo
questi valori nulli nei vincoli del problema, otteniamo un sistema con le

141
sole m + n − 1 variabili di base. Nel nostro esempio si ottiene il seguente
sistema:

x11 + x12 + x13 = 30


x23 = 20
x11 = 15
x12 = 10
x13 + x23 = 25

che ha come soluzione

x11 = 15 x12 = 10 x13 = 5 x23 = 20.

Nel caso in cui tutte le variabili in base abbiano valore non negativo avremo
a che fare con una base ammissibile (vertice della regione ammissibile). Se
almeno una variabile in base ha valore nullo si parlerà di soluzione di base
degenere, viceversa la soluzione di base verrà detta non degenere.

8.3 Il metodo del simplesso per il trasporto


Una volta specificato il concetto di base nel problema di trasporto, sia-
mo pronti a descrivere l’algoritmo del simplesso. I passi del metodo del
simplesso per il problema di trasporto sono gli stessi di quelli del metodo
del simplesso per i generici problemi di PL. La sola differenza è l’assen-
za, nel simplesso per il trasporto, di ogni riferimento alla riformulazione
rispetto ad una base. Inoltre, ci possiamo anche risparmiare la verifica di
illimitatezza (abbiamo visto che il problema del trasporto ammette sempre
soluzioni ottime). Per gli altri passi cambia solo il modo in cui essi sono im-
plementati (l’implementazione sfrutta la particolare struttura del problema
del trasporto). Quindi anche qui dovremo intanto determinare una base
ammissibile iniziale. Poi ad ogni iterazione dovremo:
• calcolare i coefficienti di costo ridotto delle variabili fuori base;
• verificare se sono soddisfatte le condizioni di ottimalità;
• se non sono soddisfatte scegliere una variabile da far entrare in base;
• determinare la variabile da far uscire di base;
• effettuare il cambio di base e ripetere tutti i passi con la nuova base.
Nel seguito vedremo in dettaglio come si esegue ciascuno di questi passi.

142
8.3.1 Determinazione di una base ammissibile iniziale
Come già detto, se è soddisfatta la condizione (8.1) il problema del trasporto
ammette sempre una soluzione ammissibile e quindi, in base ad un teorema
della PL, ammette anche almeno una base ammissibile. Tra le possibili
regole per determinare una base ammissibile iniziale descriveremo ora le
cosidetta regola dell’angolo nord-ovest. Inizialmente si pone

âi = ai , i = 1, . . . , m b̂j = bj , j = 1, . . . , n.

Si parte dalla cella (1, 1) (appunto la cella nell’angolo nord-ovest) e la prima


variabile inserita nella base è la corrispondente variabile x11 a cui viene
assegnato il valore:
x11 = min{â1 , b̂1 },
e si pongono
â1 = â1 − x11 b̂1 = b̂1 − x11 .
A questo punto se â1 > b̂1 ci si sposta nella cella (1, 2) e la variabile
successiva posta nella base è x12 con valore:

x12 = min{â1 , b̂2 },

ponendo poi
â1 = â1 − x12 b̂2 = b̂2 − x12 .
Se invece â1 < b̂1 ci si sposta nella cella (2, 1) e la variabile successiva posta
nella base è x21 con valore:

x21 = min{â2 , b̂1 },

ponendo poi
â2 = â2 − x21 b̂1 = b̂1 − x21 .
Se infine â1 = b̂1 (caso degenere) ci si sposta indifferentemente nella cella
(1, 2) facendo entrare in base x12 con valore 0 oppure nella cella (2, 1)
facendo entrare in base x21 sempre con valore 0.
Supponiamo ora di esserci spostati nella cella (1, 2). A questo punto se
â1 > b̂2 ci si sposta nella cella (1, 3) e la variabile successiva posta nella
base è x13 con valore:
x13 = min{â1 , b̂3 },
ponendo poi
â1 = â1 − x13 b̂3 = b̂3 − x13 .

143
Se invece â1 < b̂2 ci si sposta nella cella (2, 2) e la variabile successiva posta
nella base è x22 con valore:

x22 = min{â2 , b̂2 },

ponendo poi
â2 = â2 − x22 b̂2 = b̂2 − x22 .
Se infine â1 = b̂2 (caso degenere) ci si sposta indifferentemente nella cella
(1, 3) facendo entrare in base x13 con valore 0 oppure nella cella (2, 2) fa-
cendo entrare in base x22 sempre con valore 0.

Si procede in questo modo fino a quando con questo processo si arriva


alla cella (m, n), l’ultima cella in basso a destra. A questo punto le celle
attraversate durante il processo formano una base.
Illustereremo ora tale regola sul nostro esempio. Poniamo:

â1 = 30 â2 = 20 b̂1 = 15 b̂2 = 10 b̂3 = 25.

Partiamo dalla cella (1, 1) inserendo nella base la variabile x11 con valore:

x11 = min{â1 , b̂1 } = 15,

e ponendo:
â1 = 30 − 15 = 15 b̂1 = 15 − 15 = 0.
A questo punto si ha â1 > b̂1 e quindi ci si sposta nella cella (1, 2) e la
variabile successiva posta nella base è x12 con valore:

x12 = min{â1 , b̂2 } = 10,

ponendo poi
â1 = 15 − 10 = 5 b̂2 = 10 − 10 = 0.
A questo punto si ha â1 > b̂2 e quindi ci si sposta nella cella (1, 3) e la
variabile successiva posta nella base è x13 con valore:

x13 = min{â1 , b̂3 } = 5,

ponendo poi
â1 = 5 − 5 = 0 b̂3 = 25 − 5 = 20.
A questo punto si ha â1 < b̂3 e quindi ci si sposta nella cella (2, 3) e la
variabile successiva posta nella base è x23 con valore:

x23 = min{â2 , b̂3 } = 20,

144
ponendo poi
â2 = 20 − 20 = 0 b̂3 = 20 − 20 = 0.
Essendo arrivati nella cella in basso a destra ci arrestiamo. L’insieme di va-
riabili {x11 , x12 , x13 , x23 } forma una base ammissibile con il grafo associato
illustrato in Figura 8.4 e con i seguenti valori della variabili in base:

x11 = 15 x12 = 10 x13 = 5 x23 = 20.

mentre le variabili fuori base x21 e x22 hanno entrambe valore nullo. Il va-
lore dell’obiettivo si ottiene sostituendo i valori delle variabili nella formula
dell’obiettivo;

4x11 +7x12 +5x13 +2x21 +4x22 +3x23 = 4×15+7×10+5×5+2×0+4×0+3×20 = 215.

8.3.2 Calcolo dei coefficienti di costo ridotto


Ad ogni variabile fuori base è associato un coefficiente di costo ridotto il cui
valore indica di quanto varierebbe il valore dell’obiettivo (ovvero il costo
totale di trasporto) se facessimo crescere a 1 il valore della corrispondente
variabile fuori base. Se tutti i coefficienti di costo ridotto sono non negativi
la base corrente è ottima dal momento che ogni incremento delle variabili
fuori base non ridurrebbe il costo totale di trasporto. In particolare, se
tutti i coefficienti di costo ridotto sono positivi, la soluzione di base corri-
spondente è l’unica soluzione ottima del problema.
Se invece esistono coefficienti di costo ridotto negativi, facendo entrare in
base una variabile fuori base con coefficiente di costo ridotto negativo po-
tremmo ridurre il costo totale di trasporto (e lo riduciamo certamente se
siamo in una soluzione di base ammissibile non degenere). Quindi la cono-
scenza dei coefficienti di costo ridotto è necessaria sia per la verifica della
condizione di ottimalità (tutti i coefficienti di costo ridotto sono non nega-
tivi) sia per la determinazione della variabile da far entrare in base qualora
non sia soddisfatta la condizione di ottimalità. Per generici problemi di PL
i coefficienti di costo ridotto li leggiamo direttamente nell’obiettivo della
riformulazione rispetto alla base corrente, ma qui non abbiamo alcuna ri-
formulazione rispetto a una base. Vediamo allora come vengono calcolati
questi coefficienti.

Nel grafo relativo alla base ammissibile corrente aggiungiamo un nodo nel-
la cella corrispondente alla variabile fuori base di cui vogliamo calcolare il
coefficiente di costo ridotto e congiungiamo tale nodo con i nodi della base
ad esso adiacenti lungo la riga e la colonna in cui si trova la cella. Nel no-
stro esempio se partiamo dalla base ammissibile individuata con la regola

145
dell’angolo nord-ovest e vogliamo calcolare il coefficiente di costo ridotto di
x21 , il grafo ottenuto aggiungendo il nodo nella cella (2, 1) è quello illustrato
in Figura 8.6. L’aggiunta del nodo e degli archi forma un ciclo dal quale
escludiamo, come già visto in precedenza, ogni nodo che si trovi nel mezzo
di altri due lungo una riga o una colonna, congiungendo direttamente questi
ultimi. Per il nostro esempio questa operazione conduce al grafo in Figura
8.7. A questo punto il coefficiente di costo ridotto della variabile si calcola
partendo dal costo unitario della cella relativa alla variabile fuori base, sot-
traendo il costo unitario della cella successiva nel ciclo, sommando quello
della cella ancora successiva e così via alternando sottrazioni e addizioni
fino a quando non si chiude il ciclo. Nel nostro esempio avremo:

c21 = c21 − c11 + c13 − c23 = 2 − 4 + 5 − 3 = 0.

Ripetiamo ora la procedura per il calcolo del coefficiente di costo ridotto


dell’altra variabile fuori base, la x22 . Si ha:

c22 = c22 − c12 + c13 − c23 = 4 − 7 + 5 − 3 = −1.

Come si può vedere si ha un coefficiente di costo ridotto negativo. Questo


ci impedisce di concludere che la base è ottima.

8.3.3 Scelta della variabile entrante nella base


Come variabile da far entrare in base possiamo scegliere tra quelle con
coefficiente di costo ridotto negativo (nell’esempio la sola x22 ). Come regola
di scelta useremo la seguente: entra in base la variabile con coefficiente di
costo ridotto più piccolo (con scelta arbitraria in caso di parità).

8.3.4 Scelta della variabile uscente dalla base


Una volta scelta quale variabile entrerà in base nel modo che abbiamo visto,
dobbiamo ora decidere quale variabile uscirà dalla base. Come già visto in
precedenza, aggiungiamo un nodo nella cella corrispondente alla variabile
che vogliamo far entrare in base e congiungiamo tale nodo con i nodi della
base ad esso adiacenti lungo la riga e la colonna in cui si trova la cella.
Nel nostro esempio il grafo ottenuto aggiungendo il nodo nella cella (2, 2)
è quello illustrato in Figura 8.8. L’aggiunta del nodo e degli archi forma
un ciclo dal quale escludiamo, come già visto in precedenza, ogni nodo che
si trovi nel mezzo di altri due lungo una riga o una colonna, congiungendo
direttamente questi ultimi (ma nel nostro esempio non ce ne sono). A
questo punto se facciamo crescere a ∆ il valore della variabile che facciamo
entrare in base, dobbiamo, per poter rispettare i vincoli di uguaglianza

146
del problema, aggiornare il valore delle altre variabili nel ciclo nel modo
seguente: la prima che si incontra nel ciclo viene decrementata di ∆, la
seconda incrementata di ∆ e così via alternando decrementi e incrementi
fino a quando si chiude il ciclo. Nel nostro esempio avremo:

x22 = ∆ x12 = 10 − ∆ x13 = 5 + ∆ x23 = 20 − ∆.

mentre le variabili in base fuori dal ciclo (nell’esempio la sola x11 = 15) e le
altre variabili fuori base (nell’esempio la sola x21 = 0) rimangono invariate.
Il valore dell’obiettivo in corrispondenza di questo aggiornamento sarà pari
a 215 + c22 ∆ = 215 − ∆. Si noti che questo aggiornamento garantisce il fat-
to che i vincoli di uguaglianza del problema rimangano soddisfatti. Infatti,
se analizziamo ad esempio il vincolo relativo al Deposito 2, aumentiamo di
∆ ciò che il Deposito 2 invia al Negozio 2, ma diminuiamo sempre di ∆
ciò che il Deposito 2 invia al Negozio 3, in modo che complessivamente il
Deposito 2 continua a inviare un totale di a2 = 20 unità di prodotto. In
modo analogo si può verificare che continuano a essere soddisfatti i vincoli
relativi agli altri depositi e ai negozi.
Tuttavia, per mantenerci nella regione ammissibile dobbiamo mantenere
la non negatività delle variabili. Per questo, il valore ∆ può essere fatto
crescere fino a quando tutte le variabili in base hanno valore non negativo.
La prima variabile che si annulla al crescere di ∆ è la variabile che dovrà
uscire di base. Se se ne annulla più di una contemporaneamente (caso dege-
nere) la scelta di quale fare uscire di base è arbitraria. Nel nostro esempio
possiamo far crescere ∆ fino a 10. A questo punto la sola x12 si annulla e
viene portata fuori base. La nuova base sarà quindi {x11 , x13 , x22 , x23 } con
il relativo grafo in Figura 8.9, i seguenti valori delle variabili in base:

x11 = 15 x22 = 10 x13 = 15 x23 = 10,

e il valore dell’obiettivo pari a 205. Vediamo ora di terminare l’esempio.


Dobbiamo ripetere con la nuova base quanto fatto con quella precedente.
Cominciamo dal calcolo dei coefficienti di costo ridotto per le variabili fuori
base x12 e x21 . Avremo:

c21 = c21 − c11 + c13 − c23 = 2 − 4 + 5 − 3 = 0.

c12 = c12 − c13 + c23 − c22 = 7 − 5 + 3 − 4 = 1.


Come si può vedere tutti i coefficienti di costo ridotto sono non negati-
vi. Questo ci consente di concludere che la base è ottima. Si noti però
che la presenza di un coefficiente di costo ridotto nullo indica la possibile
presenza di altre soluzioni ottime. In realtà, essendo la soluzione di base
corrispondente non degenere, possiamo garantire che esistono certamente

147
altre soluzioni ottime. Volendo individuare un’altra soluzione ottima pos-
siamo far entrare in base la variabile x21 con coefficiente di costo ridotto
nullo.
Il valore ottimo sarà pari al valore dell’obiettivo nella soluzione ottima,
ovvero, come calcolato precedentemente, 205.

148
1 2 3 4

1 2 3 4

149

Figura 8.5: Esclusione di nodi del grafo.


1 2 3

Figura 8.6: Il grafo ottenuto aggiungendo il nodo relativo alla variabile x21 .

1 2 3

Figura 8.7: Eliminazione di nodi nel ciclo.

150
1 2 3

Figura 8.8: L’aggiunta del nodo relativo alla variabile x22 .

1 2 3

Figura 8.9: La nuova base {x11 , x22 , x13 , x23 }

151
152
Capitolo 9

Il problema di flusso a
costo minimo

9.1 Definizione del problema


Sia data una rete (grafo orientato e connesso) G = (V, A) come quella
mostrata in Figura 9.1. Si consideri il seguente problema:
P
min (i,j)∈A cij xij
P P
j:(i,j)∈A xij − j:(j,i)∈A xji = bi ∀i∈V
xij ≥ 0 interi ∀ (i, j) ∈ A
P
con bi interi e tali che i∈V bi = 0. Il problema viene interpretato come
segue. Dovete inviare un flusso (di prodotti, di informazione, eccetera)
attraverso la rete. Un’unitá di flusso inviata lungo l’arco (i, j) ha costo pari
a cij . La variabile xij rappresenta la quantitá di flusso inviata lungo l’arco
(i, j). La somma X
xji
j:(j,i)∈A

rappresenta il flusso complessivo entrante nel nodo i, la somma


X
xij
j:(i,j)∈A

rappresenta il flusso complessivo uscente dal nodo i e quindi il vincolo


X X
xij − xji = bi
j:(i,j)∈A j:(j,i)∈A

153
dice che la differenza tra flusso uscente e flusso entrante nel nodo i deve
essere pari a bi . Se bi > 0 il flusso uscente supera quello entrante e quindi
il nodo viene detto nodo sorgente. Se bi < 0 il flusso entrante supera quello
uscente ed il nodo viene detto nodo destinazione. Se bi = 0 i due flussi
entrante ed uscente si equivalgono ed il nodo viene detto di transito. In
pratica ci sono nodi in cui il flusso viene prodotto (i nodi sorgente), altri in
cui transita (i nodi transito) ed altri ancora verso cui viene convogliato (i
nodi destinazione). Inviare un flusso xij lungo il generico arco (i, j) ha un
costo pari a cij xij . Il problema da risolvere consiste nel trasportare attra-
verso
P la rete il flusso realizzato nei nodi sorgente (pari complessivamente a
bi ) facendolo giungere ai nodi destinazione (che, in virtú della
i∈V : bi >0P
condizione ∈V bi = 0, richiedono esattamente la stessa quantitá prodotta
nei nodi sorgente) ed eseguire tale operazione in modo tale da avere un co-
sto complessivo del flusso inviato lungo i diversi archi che sia il piú piccolo
possibile.

Esempio 21 Sia data la rete in Figura 9.1. I valori bi sono riportati di

b2=5
2c
¡ c
¡ c
¡ c
5 ¡ -4 c 6
c
¡ c
¡ c
¡ c
¡ -2 b3=1 c
b1=2 1 @ 3 0 4 b4=-4
½
@ ½
@ ½
@ 4 ½
½
2@ ½
@ ½ 3
@ ½
@ ½½
5
b5=-4
Figura 9.1: Una rete con i relativi valori bi associati ai nodi ed i costi unitari
di trasporto lungo gli archi.

fianco ai nodi mentre lungo gli archi sono riportati i valori cij . I nodi 1,2
e 3 sono nodi sorgente mentre i nodi 4 e 5 sono nodi destinazione (non vi

154
sono nodi transito). Il problema corrispondente é il seguente

min 5x12 − 4x23 + 6x42 − 2x13 + 0x34 + 2x15 + 4x53 + 3x45


x12 + x13 + x15 = 2
x23 − x12 − x42 = 5
x34 − x13 − x23 − x53 = 1
x42 + x45 − x34 = −4
x53 − x15 − x45 = −4
x12 , x23 , x42 , x13 , x34 , x15 , x53 , x45 ≥ 0 interi

Vale la seguente importante osservazione (non dimostrata) che ci consente


di trattare il problema di flusso a costo minimo come un problema di PL
anche se si tratta di un problema di PLI.

Osservazione 21 Il rilassamento lineare di un problema di flusso a costo


minimo, ovvero il problema ottenuto eliminando i vincoli di interezza delle
variabili, ammette sempre una soluzione ottima a coordinate tutte intere.

9.2 La matrice dei vincoli


Analizziamo ora la matrice dei vincoli per questi problemi. In essa avremo
tante righe quanti sono i nodi della rete e tante colonne quanti sono gli
archi della rete. Tale matrice é la matrice di incidenza nodo-arco della rete.
Essa avrá nella colonna relativa all’arco (i, j) due soli elementi diversi da
0, un +1 nella riga i relativa al nodo da cui l’arco esce e un -1 nella riga j
relativa al nodo in cui l’arco entra.

Esempio 22 Nel nostro esempio la matrice di incidenza nodo-arco é la


seguente:
 
1 1 1 0 0 0 0 0
 −1 0 0 1 −1 0 0 0 
 
A =  0 −1
 0 −1 0 1 −1 0 
 (9.1)
 0 0 0 0 1 −1 0 1 
0 0 −1 0 0 0 1 −1

Se sommiamo tra loro tutte le | V | righe della matrice otteniamo il vettore


nullo. Infatti in ogni colonna ci sono esattamente un +1 e un -1 (si faccia
la verifica sull’esempio). Quindi le | V | righe sono tra loro linearmente
dipendenti ed il rango della matrice di vincoli non potrá essere superiore a
| V | −1. Si puó dimostrare (ma non lo faremo) che il rango é esattamente

155
P
pari a | V | −1. Il fatto che i∈V bi = 0 (e quindi non solo le righe della
matrice sono linearmente dipendenti ma anche le equazioni stesse dei vincoli
sono tra loro linearmente dipendenti) ci mostra che uno (ed un solo) vincolo
del problema puó essere eliminato in quanto ridondante. Non importa quale
vincolo si elimina. Come convenzione si puó fissare di eliminare l’ultima
equazione. Nel seguito quindi l’ultimo vincolo si intenderá soppresso e
quando si parlerá di matrice dei vincoli si intenderá la matrice di incidenza
nodo-arco privata dell’ultima riga. Nel nostro esempio quindi la matrice
dei vincoli sará
 
1 1 1 0 0 0 0 0
 −1 0 0 1 −1 0 0 0 
A=  0 −1 0 −1

0 1 −1 0 
0 0 0 0 1 −1 0 1

ovvero la matrice (9.1) in cui é stata soppressa l’ultima riga.

9.2.1 Basi per il problema di flusso a costo minimo


Dal momento che il problema di flusso a costo minimo puó essere risolto
come problema di PL, possiamo utilizzare per risolverlo uno dgli algoritmi
che abbiamo studiato in precedenza. In effetti quello che faremo é utilizzare
l’algoritmo del simplesso ma in una forma particolare che sfrutta la struttu-
ra dei problemi di flusso a costo minimo. Di seguito vedremo quindi come
il simplesso possa essere adattato ai problemi di flusso a costo minimo su
reti. Cominceremo con lo stabilire il legame esistente tra basi del simplesso
ed alberi di supporto della rete.
Si noti che, essendo il numero di righe (ed il rango) della matrice dei vincoli
pari a | V | −1, le basi sono sempre formate da | V | −1 variabili. Ma
non tutti gli aggregati di | V | −1 variabili danno origine ad una base. Per
formare una base devono anche soddisfare la proprietá che la matrice otte-
nuta considerando le sole colonne relative ad esse nella matrice dei vincoli
sia invertibile. Nel nostro esempio, se si considera l’albero di supporto in
Figura 9.2 si ha che le colonne ad esso relativo nella matrice dei vincoli
formano la seguente matrice
 
1 0 0 0
 0 1 0 0 
 
 0 −1 1 0 
0 0 −1 1

che é invertibile e quindi le variabili corrispondenti formano una base.

156
b2=5
2

-4

b3=1
b1=2 1 @ 3 0 4 b4=-4
½
@ ½
@ ½
@ ½
½
2@ ½
@ ½ 3
@ ½
@ ½

b5=-4
Figura 9.2: Un albero di supporto per la rete del nostro esempio.

9.2.2 Relazioni tra basi ed alberi di supporto


Si consideri un generico albero di supporto della rete. Esso sará formato
da | V | −1 archi. Si puó dimostrare (ma non lo faremo) che la soluzione
ottenuta mettendo le variabili relative agli archi dell’albero di supporto
in base e tutte le altre fuori base si ottiene una soluzione di base (non
necessariamente ammissibile e quindi non necessariamente un vertice) del
problema. Abbozzeremo invece una dimostrazione del viceversa e cioé che
data una qualsiasi base, i | V | −1 archi relativi alle variabili in base
formano un albero di supporto. Per dimostrarlo ragioniamo per assurdo
e supponiamo che gli archi non formino un albero di supporto. Poiché
gli archi sono | V | −1, se non formano un albero di supporto devono
formare almeno un ciclo. Vediamo cosa succede in presenza di un ciclo sul
nostro esempio, precisando che quanto vedremo su tale esempio puó essere
generalizzato a tutti i casi in cui compaia un ciclo. Supponiamo che le
| V | −1 = 4 variabili in base siano quelle relative agli archi
(1, 2) (2, 3) (5, 3) (1, 5)
che formano il ciclo mostrato in Figura 9.3. Fissiamo un arco del ciclo,
ad esempio (1, 2) ed imponiamo che il verso di percorrenza del ciclo sia
quello dell’arco (1, 2). Per ogni colonna nella matrice dei vincoli relativa
ad un arco del ciclo la moltiplichiamo per +1 se il ciclo attraversa l’arco

157
b2=5
, 2
,
,
,
,
,
,
,
, b3=1
b1=2 1 @ 3 4 b4=-4
@
@
@
@
@
@
@
5
b5=-4
Figura 9.3: Un insieme di archi che formano un ciclo non possono dare
origine ad una base.

nel suo verso, per -1 se lo attraversa nel verso opposto. Poi sommiamo i
vettori ottenuti in questo modo. Nel nostro caso moltiplicheremo per +1
le colonne relative agli archi (1, 2) e (2, 3) e per -1 quelle relative agli archi
(5, 3) e (1, 5). Quindi avremo
         
1 0 0 1 0
 −1   1   0   0   0 
+1  0  + 1  −1  − 1  −1  − 1  0  =  0 
        

0 0 0 0 0

Ció dimostra che esiste una combinazione lineare non nulla delle colonne
che restituisce il vettore nullo. Quindi tali colonne non formano una ma-
trice invertibile e non rappresentano una base. Come detto, é possibile
generalizzare questo risultato: ogni qualvolta gli archi relativi ad un insie-
me di variabili formano un ciclo, le corrispondenti colonne della matrice dei
vincoli sono linearmente dipendenti e quindi le variabili non formano una
base. L’unica possibilitá per avere una base é che gli archi non formino
alcun ciclo. Ma in base alla definizione di albero, in un grafo con | V |
nodi, | V | −1 archi che non formino alcun ciclo rappresentano un albero
di supporto.
Abbiamo quindi mostrato il seguente importante risultato.

158
Osservazione 22 In un problema di flusso su rete a costo minimo vi é
una corrispondenza uno a uno tra basi ed alberi di supporto, ovvero ad ogni
insieme di | V | −1 variabili che formano una base corrisponde un albero
di supporto e viceversa.
Quindi, per i problemi di flusso su reti a costo minimo sará indifferente
parlare di basi o di alberi di supporto.

9.2.3 Alberi di supporto e soluzione di base corrispon-


dente
Supponiamo ora di avere un albero di supporto (vedi Figura 9.2) nel nostro
esempio e poniamoci la seguente domanda: in corrispondenza di tale albero
e quindi di tale soluzione di base, qual é il valore delle variabili? Per
prima cosa le variabili associate ad archi che non appartengono all’albero di
supporto avranno associato un valore pari a 0. Quindi nel nostro esempio:

x12 = x13 = x42 = x53 = 0.

A questo punto sostituiamo tali valori nulli nei vincoli del problema. Quello
che si ottiene é un sistema di | V | −1 variabili (quelle relative agli archi
dell’albero di supporto) e | V | −1 equazioni. L’unica soluzione di tale
sistema fornisce i valori delle variabili in base. Nel nostro esempio ponendo
a 0 i valori delle variabili relative ad archi che non appartengono all’albero
di supporto, otteniamo il seguente sistema:

x15 = 2
x23 = 5
x34 − x23 = 1
x45 − x34 = −4

la cui soluzione é:

x15 = 2 x23 = 5 x34 = 6 x45 = 2

Quindi la soluzione relativa all’albero di supporto dell’esempio é data da

x15 = 2 x23 = 5 x34 = 6 x45 = 2 x12 = x13 = x42 = x53 = 0

Si noti che tutte le variabili sono non negative e quindi in questo caso si
parla di soluzione di base o albero di supporto ammissibile ( e quindi si
tratta di un vertice della regione ammissibile).
NOTA BENE Nel caso in cui una o piú delle variabili relative all’albero
di supporto fossero uguali a 0 avremmo una soluzione degenere.

159
9.2.4 Calcolo dei coefficienti di costo ridotto
Come avete visto in precedenza, una condizione sufficiente per stabilire se,
data una soluzione di base ammissibile (un vertice), ci troviamo in una so-
luzione ottima in un problema di PL, é controllare se tutti i coefficienti di
costo ridotto sono tutti non positivi in un problema di massimo oppure tutti
non negativi in un problema di minimo. Nella riformulazione di un proble-
ma di PL rispetto ad una base data i coefficienti di costo ridotto appaiono
nell’obiettivo della riformulazione. Nel simplesso su rete non abbiamo alcu-
na riformulazione e dobbiamo quindi vedere come calcolare tali valori. Per
prima cosa ricordiamo che vanno calcolati per le sole variabili fuori base.
Quindi i coefficienti vanno calcolati per le sole variabili associate ad archi
che non fanno parte dell’albero di supporto. La procedura per tale calcolo
verrá illustrata sul nostro esempio. Prendiamo una qualsiasi variabile fuori
base e quindi un qualsiasi arco che non faccia parte dell’albero di supporto,
ad esempio l’arco (1, 3). Per prima cosa aggiungiamo l’arco all’albero. Si
formerá esattamente un ciclo che verrá orientato nel verso dell’arco (1, 3) e
quindi il ciclo sará
1→3→4→5→1
come si vede da Figura 9.4. Si noti che il ciclo attraversa gli archi (1, 3),

b2=5
2

-4

b3=1
b1=2 1 @ 3 0 4 b4=-4
½
@ ½
@ ½
@ ½
½
2@ ½3
@ ½
@ ½
@ ½½
5
b5=-4
Figura 9.4: Il ciclo che si forma aggiungendo l’arco (1, 3).

(3, 4) e (4, 5) nel loro verso, mentre attraversa l’arco (1, 5) nel suo verso

160
opposto. Il coefficiente di costo ridotto relativo all’arco (1, 3), indicato
con c13 verrá calcolato sommando tra loro tutti i costi relativi agli archi
attraversati dal ciclo nel loro stesso verso e sottraendo al risultato i costi
degli archi attraversati dal ciclo in senso opposto al loro verso. Quindi

c13 = c13 + c34 + c45 − c15 = −2 + 0 + 3 − 2 = −1.

Si noti che il coefficiente di costo ridotto é negativo e questo ci dice imme-


diatamente che non possiamo concludere che la soluzione di base corrente
é ottima. Possiamo ripetere la procedura per tutti gli archi fuori base per
calcolare tutti i coefficienti di costo ridotto. Si ottengono i seguenti risultati:

c42 = 2 c12 = 2 c53 = 7.

Come giá osservato, la presenza di un coefficiente di costo ridotto negativo


(c13 ) ci impedisce di concludere che la soluzione di base corrente é ottima.
In questi casi nel metodo del simplesso si procede ad un cambio di base
attraverso un’operazione di cardine sulla tabella. Vediamo ora come questo
viene fatto nel simplesso su rete.

9.2.5 Cambio di base ovvero l’operazione di cardine


nel simplesso su rete
Per il cambio di base dovremo dare una regola per stabilire quale variabile
fuori base far entrare in base e quale in base dovrá uscire dalla base. Per
quanto riguarda la variabile fuori base da far entrare in base, la scelta é
ristretta alle sole variabili con coefficiente di costo ridotto negativo (le sole
incrementando le quali si puó far diminuire il costo complessivo del flusso).
Tra queste fisseremo come regola di scegliere quella (o una di quelle, se
sono piú di una) con il coefficiente di costo ridotto il piú negativo possibile.
Nel nostro esempio non abbiamo alcuna scelta da fare visto che la sola
variabile fuori base con coefficiente di costo ridotto negativo é quella relativa
all’arco (1, 3). Aggiungiamo tale arco all’albero e riotteniamo la Figura 9.4.
Inizialmente il flusso lungo l’arco (1, 3) é nullo (x13 = 0). Incrementiamo a
∆ il valore di tale flusso. Quindi avremo un nuovo flusso pari a ∆ in uscita
dal nodo 1 ed in entrata al nodo 3. Per poter continuare a rispettare i vincoli
relativi al nodo 1 e 3 dovremo diminuire di ∆ il flusso lungo l’arco (1, 5) ed
aumentare di ∆ il flusso lungo l’arco (3, 4). A questo punto per soddisfare
il vincolo relativo al nodo 4 dobbiamo incrementare di ∆ il flusso lungo
l’arco (4, 5). Si noti che il vincolo relativo al nodo 5 é ancora soddisfatto
poiché nel nodo 5 arriva un flusso pari a ∆ in piú dal nodo 4 ma anche
un flusso ancora pari a ∆ in meno dal nodo 1. Gli archi relativi al nodo 2
non subiscono variazioni e quindi il vincolo relativo al nodo 2 continua ad

161
essere soddisfatto. Si puó riassumere quanto visto nel modo seguente. Una
volta aggiunto l’arco (1, 3) si forma un ciclo che viene orientato nel verso
dell’arco (1, 3) stesso. Il flusso viene incrementato di ∆ lungo ogni arco che
il ciclo attraversa nel suo stesso verso e decrementato di ∆ lungo gli archi
che vengono attraversati in verso opposto. Quindi nel nostro esempio:
x13 = ∆ x34 = 6 + ∆ x45 = 2 + ∆ x15 = 2 − ∆.
A questo punto possiamo incrementare il valore di ∆ arrestandoci nel mo-
mento in cui un flusso lungo un arco del ciclo si annulla. Nel nostro caso
possiamo incrementare ∆ fino a 2 ma non oltre in quanto incrementandolo
oltre il flusso relativo all’arco (1, 5) diventerebbe negativo. La prima varia-
bile che diventa nulla incrementando ∆ corrisponderá alla variabile da far
uscire di base. Se piú variabili diventano nulle contemporaneamente incre-
mentando ∆ (caso degenere) se ne seleziona una di esse arbitrariamente.
L’albero di supporto corrispondente alla nuova base sará quello ottenuto
inserendo l’arco relativo alla variabile fatta entrare in base (l’arco (1, 3)
nel nostro esempio) e rimuovendo l’arco della variabile fatta uscire di base
(l’arco (1, 5) nel nostro esempio). Per il nostro esempio la nuova base é
quella riportata in Figura 9.5 ed i nuovi valori delle variabili sono i seguenti
x13 = 2 x23 = 5 x34 = 8 x45 = 4 x12 = x15 = x42 = x53 = 0
NOTA BENE Se il ciclo ottenuto aggiungendo all’albero di supporto
l’arco relativo alla variabile fuori base avesse tutti gli archi orientati nel-
lo stesso verso del ciclo stesso (vedi Figura 9.6) allora potrei far crescere
∆ all’infinito senza che nessun flusso si annulli (tutti i flussi lungo il ciclo
vengono incrementati). Ció corrisponde al caso di problema con obiettivo
illimitato.

Possiamo ora concludere il nostro esempio andando a calcolare i nuovi


coefficienti di costo ridotto. I risultati sono i seguenti.
c42 = 2 c15 = 1 c12 = 3 c53 = 7.
Essendo tutti non negativi si conclude che la soluzione corrente é otti-
ma. Piú precisamente, essendo tutti non solo non negativi ma anche stret-
tamente positivi, si conclude che la soluzione é anche l’unica soluzione
ottima.

9.2.6 Determinazione di una soluzione di base ammis-


sibile iniziale
Nella descrizione del simplesso su rete siamo partiti assumendo di avere giá
a disposizione un albero di supporto ammissibile. Non sempre peró questo

162
b2=5
2

b3=1
b1=2 1 3 4 b4=-4
½
½
½
½
½
½
½
½
½

b5=-4
Figura 9.5: La nuova base (albero di supporto) del problema.

é vero e non é neppure detto che una soluzione ammissibile esista. Avremo
quindi bisogno di una procedura che ci dica se ci sono soluzioni ammissibili
e, nel caso esistano, ce ne restituisca una. Utilizzeremo, come giá fatto per i
generici problemi di PL, una tecnica due fasi. Nella prima fase aggiungiamo
alla nostra rete un nuovo nodo q e congiungiamo tale nodo con ogni nodo
i della rete tale che bi < 0 attraverso l’arco (q, i), mentre lo congiungiamo
con ogni nodo i della rete tale che bi ≥ 0 attraverso l’arco (i, q). I valori bi
vengono lasciati invariati, mentre si pone bq = 0. I costi dei flussi unitari
saranno posti uguali a 1 per tutti gli archi incidenti sul nodo q e 0 per tutti
gli archi della rete originaria. Per il nostro esempio la nuova rete sará quella
in Figura 9.7. Per questo problema si ha immediatamente a disposizione un
albero di supporto ammissibile, quello formato da tutti gli archi incidenti
su q, con i seguenti valori delle variabili:

xqi = −bi ∀ i : bi < 0


xiq = bi ∀ i : bi ≥ 0

mentre tutte le altre variabili sono nulle. A questo punto risolviamo questo
problema con il simplesso su rete nel modo giá visto in precedenza. Se
la soluzione ottima di tale problema é maggiore di 0, allora il problema
originario ha regione ammissibile vuota. Se invece la soluzione ottima é
pari a 0 e l’albero di supporto ottimo contiene solo uno dei nuovi archi

163
b2=5
2

b3=1
b1=2 1 3 4 b4=-4
l ½
l ½
l ½
l ½
½
l ½
l ½
l ½
l ½

b5=-4
Figura 9.6: Tutti gli archi del ciclo hanno lo stesso orientamento: il
problema ha obiettivo illimitato.

(quelli incidenti su q), eliminando tale arco si ottiene un albero di supporto


ammissibile per il problema originario. A questo punto possiamo eliminare
il nodo q e tutti gli archi incidenti su di esso, ripristinare gli originari costi
degli archi e cominciare a risolvere il problema (seconda fase del metodo).
Non illustreremo la prima fase del metodo sul nostro solito esempio in
quanto ci sarebbero troppi calcoli da fare. La illustreremo su un esempio
di piú piccole dimensioni.
Esempio 23 Si consideri la rete in Figura 9.8. Nella prima fase aggiun-
giamo il nodo q e gli archi incidenti su di esso ed aggiorniamo i costi dei
flussi come indicato in Figura 9.9. Per il problema della prima fase un
albero di supporto ammissibile é quello formato dagli archi incidenti su q,
ovvero (1, q), (2, q) e (q, 3). La soluzione iniziale é
xq3 = 4 x2q = 3 x1q = 1,
tutte le altre variabili nulle. Il calcolo dei coefficienti di costo ridotto resi-
tuisce
c12 = 0 c13 = −2 c23 = −2.
La soluzione non é ottima in quanto abbiamo coefficienti di costo ridotto
negativi. Scelgo una delle variabili fuori base con coefficiente di costo ri-
dotto piú negativo, ad esempio quella associata all’arco (1, 3). Applicando

164
bq=0 1
q
1 b2=5
2c
1 ¡ c
¡ c
¡ c
1 0 ¡ 0 c 0
c
¡ c
¡ c
1 ¡ c
¡ 0 b3=1 c
b1=2 1 @ 3 0 4 b4=-4
½
@ ½
@ ½
@ 0 ½
½
0@ ½
@ ½ 0
@ ½
@ ½½
5
b5=-4
Figura 9.7: Il problema di prima fase per determinare una soluzione
ammissibile iniziale.

la procedura per il cambio di base ottengo il nuovo albero di supporto (1, 3),
(2, q) e (q, 3). La nuova soluzione é

xq3 = 3 x2q = 3 x13 = 1,

tutte le altre variabili nulle. Il calcolo dei coefficienti di costo ridotto resi-
tuisce
c12 = 2 c1q = 2 c23 = −2.
La soluzione non é ottima in quanto abbiamo coefficienti di costo ridotto
negativi. Scelgo una delle variabili fuori base con coefficiente di costo ridotto
piú negativo, in tal caso c’é solo quella associata all’arco (2, 3). Applicando
la procedura per il cambio di base ottengo il nuovo albero di supporto (1, 3),
(2, 3) e (q, 3). La nuova soluzione é

xq3 = 0 x23 = 3 x13 = 1,

tutte le altre variabili nulle. Il calcolo dei coefficienti di costo ridotto resi-
tuisce
c12 = 0 c1q = 2 c2q = 2.

165
b1=1
1 HH
HH3
HH b3=-4
HH
2 ©
3
©©
© ©©5
©
2
b2=3
Figura 9.8: Una rete.

b1=1 1
1 HH
HH0
HH b3=-4
HH 1 q
0 3
©©©
© ©©0
©
2
1
b2=3
Figura 9.9: La rete ausiliaria per determinare un flusso ammissibile iniziale
per la rete di Figura 9.8.

La soluzione é ottima ed é pari a 0. Quindi il problema ammette soluzioni


ammissibili. Inoltre, poiché la soluzione ottima contiene un solo arco inci-
dente sul nodo q, eliminando tale arco ottengo immediatamente un albero
di supporto ammissibile per il problema originario (quello formato dagli ar-
chi (1, 3) e (2, 3)) e con tale albero di supporto ammissibile sono pronto ad
entrare nella seconda fase e risolvere il problema originario.

166
Capitolo 10

Il problema di flusso
massimo

In questo capitolo prenderemo in esame un particolare esempio di problema


su grafi, il problema del flusso massimo.
Si consideri una rete, ovvero un grafo orientato G = (V, A). Attraverso tale
rete si fa viaggiare quello che chiameremo genericamente un flusso che puó
essere, a seconda delle applicazioni, un flusso di prodotti se la rete é una
rete stradale, di informazione se é una rete di comunicazione, di acqua se é
una rete idraulica e cosí via. Tra i nodi della rete si riconoscono:
• un nodo sorgente, che nel seguito indicheremo con S, da cui il flusso
parte;
• un nodo destinazione, che nel seguito indicheremo con D, a cui il
flusso arriva.
Tutti gli altri nodi vengono detti intermedi e sono caratterizzati dal fatto
che in essi la quantitá di flusso entrante é sempre pari a quella uscente
(vincoli di equilibrio). Gli archi della rete hanno una capacitá limitata che
rappresenta la quantitá massima di flusso che puó attraversare tali archi. Il
problema di massimo flusso consiste nel determinare la quantitá massima
di flusso che partendo dal nodo sorgente si puó far giungere fino al nodo
destinazione, tenuto conto dei vincoli di capacitá sugli archi e di quelli di
equilibrio nei nodi intermedi.
NB Abbiamo parlato di un solo nodo sorgente e di un solo nodo desti-
nazione nella rete. In problemi reali il flusso puó essere generato da piú
sorgenti e/o essere ricevuto da piú destinazioni. Tali casi si possono facil-
mente ricondurre a quello di una sola sorgente e di una sola destinazione

167
attraverso l’introduzione di una sorgente fittizia collegata tramite archi fit-
tizi a capacitá infinita a ciascuna sorgente reale e, analogamente, attraverso
l’introduzione di una destinazione fittizia alla quale si giunge tramite ar-
chi fittizi a capacitá infinita a partire da ciascuna destinazione reale (vedi
Figura 10.1).

n1 b
b D1
´ b "
´ b "
T b "
´ b
´ T b ""
´ T n4
´
´ T ½
S1 b T ½ ­ A
T½ A
b ½T ­ A
b
b ½ ­ A
b ½ T D2
b ½ ­T A %
»» n2 aa ­ T A%
»»»» aa ­ T %A
Sorgente S2 ­ aa T % A Destinazion
Q % A
Q ­ n5 fittizia
fittizia Q ­ © Z A
Q
Q ­ © ©© Z A
Q © Z
Sorgenti Q ­
© © Z D3
reali n3

Destinazioni
reali
Figura 10.1: La riduzione al caso di una sola sorgente e una sola
destinazione.

10.1 Modello matematico del problema


Vediamo ora di introdurre un modello matematico che rappresenti il nostro
problema. Associamo ad ogni arco della rete (i, j) ∈ A una variabile:

xij = flusso inviato lungo l’arco (i, j)

Tali variabili saranno vincolate ad essere non negative (non ha senso parlare
di un flusso negativo). Se indichiamo con cij la capacitá dell’arco (i, j) si

168
dovrá anche avere
xij ≤ cij ∀ (i, j) ∈ A,
cioé il flusso lungo ogni arco non ne puó superare la capacitá. In molti
casi le variabili possono assumere solo valori interi ma, come vedremo in
seguito, non sará necessario imporre esplicitamente il vincolo di interezza
sulle variabili. Il nostro obiettivo é quello di massimizzare la quantitá di
flusso uscente dal nodo sorgente S:
X
xSj
j: (S,j)∈A

o, equivalentemente, quella entrante nel nodo destinazione D:


X
xjD
j: (j,D)∈A

(le due quantitá sono uguali). Restano ancora da esprimere i vincoli di


equilibrio nei nodi intermedi. Questi possono essere tradotti nelle seguenti
equazioni:
X X
xkj = xjk ∀ k ∈ V \ {S, D}.
j: (k,j)∈A j: (j,k)∈A
| {z } | {z }
flusso uscente da k flusso entrante in k

Riassumendo, il modello matematico del problema di massimo flusso é il


seguente:
P
max j: (S,j)∈A xSj
P P
j: (k,j)∈A xkj = j: (j,k)∈A xjk ∀ k ∈ V \ {S, D} (10.1)
0 ≤ xij ≤ cij ∀ (i, j) ∈ A

Abbiamo detto in precedenza che non é necessario imporre i vincoli di


interezza sulle variabili. Infatti, vale il seguente teorema.

Teorema 7 Se le capacitá cij degli archi sono tutti valori interi, allora tutti
i vertici ottimi del problema di flusso massimo (10.1) sono a coordinate
intere.

Esempio 24 Sia data la rete in Figura 10.2. I numeri sugli archi ne indi-
cano le capacitá. Il modello matematico del problema é il seguente proble-
ma di PL (essendo le capacitá valori interi non avremo bisogno di imporre

169
1
n1 n3
J @
¡ J ­ @
¡ ­ @ 1
J @
3 ¡¡ J ­1 @
¡ 4J ­ @
¡ J ­ @
¡ J ­ @

­J
S ­ J D
­ J ,
­ J ,
@ ­ J ,
@ ­ J ,
@ ­ ,
­ J , 7
2 @ ­ J ,
@ ,
@ n4
n2 1

Figura 10.2: Una rete con le capacitá degli archi indicati al loro fianco.

vincoli di interezza sulle variabili):

max xS1 + xS2


x13 + x14 = xS1
x23 + x24 = xS2
x3D = x13 + x23
x4D = x14 + x24
0 ≤ xS1 ≤ 3
0 ≤ xS2 ≤ 2
0 ≤ x13 ≤ 1
0 ≤ x14 ≤ 4
0 ≤ x23 ≤ 1
0 ≤ x24 ≤ 1
0 ≤ x3D ≤ 1
0 ≤ x4D ≤ 7

170
10.2 Tagli e problema del taglio minimo
Prima di descrivere un algoritmo per risolvere il problema di flusso massimo
accenniamo ad un altro problema che, come vedremo, é strettamente legato
a quello del flusso massimo. Si consideri U ⊂ V con la proprietá che:

S∈U D 6∈ U.

L’insieme di archi

SU = {(i, j) ∈ A : i ∈ U, j 6∈ U },

ovvero gli archi con il primo estremo in U e l’altro al di fuori di U , viene


detto taglio della rete. Si noti che eliminando tutti gli archi di un taglio
dalla rete rendo impossibile raggiungere D a partire da S in quanto ció
equivale ad eliminare tutti gli archi che vanno da U (contenente S) al suo
complementare U = V \ U (contenente D). Ad un taglio si associa un costo
pari alla somma delle capacitá degli archi del taglio, cioé:
X
C(SU ) = cij .
(i,j)∈SU

Nell’esempio in Figura 10.2, l’insieme U = {S, n1 , n2 } induce il taglio


SU = {(n1 , n3 ), (n1 , n4 ), (n2 , n3 ), (n2 , n4 )} con capacitá C(SU ) = 7. Si
puó notare che, dato un taglio SU qualsiasi, il valore del flusso massimo
nella rete non puó superare quello del costo del taglio. Infatti, per poter
passare dall’insieme di nodi U contenente la sorgente S al suo complemen-
tare U contenente la destinazione D il flusso puó solo passare attraverso
gli archi del taglio SU e quindi il flusso non puó superare la somma delle
capacitá di tali archi, ovvero il costo del taglio. Quindi il costo di ogni
taglio rappresenta un limite superiore per il valore del flusso massimo (nel
nostro esempio sappiamo quindi giá che il flusso massimo non puó superare
il valore 7, ovvero il costo del taglio indotto da U = {S, n1 , n2 }). Possiamo
anche spingerci piú in lá e dire che tra tutti i tagli ve ne é almeno uno il
cui costo é esattamente pari a quello del flusso massimo. Piú precisamente,
consideriamo il problema del taglio di costo minimo che consiste nel deter-
minare, tra tutti i tagli possibili all’interno di una rete, quello il cui costo
sia il piú piccolo possibile, ovvero

min C(SU ). (10.2)


U ⊂V : S∈U, D6∈U

Avremo modo di dimostrare che i valori ottimi del problema di flusso mas-
simo (10.1) e quello di taglio a costo minimo (10.2) sono uguali tra loro.

171
Non solo, l’algoritmo con cui risolveremo il problema di flusso massimo ci
dará immediatamente anche una soluzione per il problema di taglio a costo
minimo. Richiamando le nozioni di dualitá nella PL, possiamo dire che il
problema di taglio a costo minimo é un problema duale del problema di
flusso massimo.

10.3 Algoritmo di Ford-Fulkerson


Ci occuperemo ora di descrivere un possibile algoritmo di risoluzione per
il problema di flusso massimo, chiamato algoritmo di Ford-Fulkerson. Pri-
ma di descrivere l’algoritmo abbiamo bisogno di introdurre alcuni concetti.
Supponiamo di avere un flusso ammissibile:
X = (xij )(i,j)∈A ,

ovvero un flusso che soddisfa i vincoli di equilibrio e quelli di capacitá degli


archi. Se xij = cij diremo che l’arco (i, j) é saturo. Si consideri ora un
cammino orientato nella rete dal nodo S al nodo D:

S = q0 → q1 → · · · → qr → qr+1 = D,
privo di archi saturi, ovvero nesuno degli archi

(qi , qi+1 ) ∈ A i = 0, . . . , r
é saturo. In tal caso il flusso X non é ottimo. Infatti, posso aumentare
il flusso lungo ciascun arco del cammino di una quantitá ∆ definita nel
seguente modo:
∆ = min [cqi qi+1 − xqi qi+1 ],
i=0,...,r

senza violare i vincoli di capacitá degli archi. Si noti anche che i vincoli di
equilibrio continuano ad essere rispettati in quanto in ogni nodo intermedio
del grafo facente parte del cammino si ha che il flusso in entrata aumenta di
∆ ma contemporaneamente aumenta di ∆ anche quello in uscita. Essendo
gli archi del cammino non saturi si ha che ∆ > 0 e il flusso totale da S a D
viene aumentato proprio di questa quantitá. Per illustrare questa situazione
si consideri l’esempio in Figura 10.3 dove di fianco agli archi sono riportati
due numeri, il primo corrispondente al flusso attuale xij lungo l’arco, l’altro
corrispondente alla capacitá cij dell’arco. Attuamente il flusso in uscita dal
nodo S é pari a 2 (1 unitá lungo l’arco (S, n1 ) e 1 lungo l’arco (S, n2 )).
Questo flusso non é ottimo. Notiamo infatti che esiste almeno un cammino
orientato da S a D con archi non saturi, ad esempio il cammino

S → n1 → n2 → D

172
n1 bb
´ bb 1/2
1/2´´´ bb
´ bb
´
´ b
S 0/1 D
Z ´
Z ´
Z ´
Z ´
Z ´
1/2 Z ´
´
Z ´ 1/2
Z n2 ´

Figura 10.3: I numeri a fianco di ogni arco rappresentano rispettivamente


il flusso lungo di esso e la sua capacitá.

Lungo tale cammino si ha

∆ = min{cSn1 − xSn1 , cn1 n2 − xn1 n2 , cn2 D − xn2 D } = 1.

Quindi posso incrementare di 1 unitá il flusso lungo gli archi del cammino,
cioé avró il seguente aggiornamento del flusso:

xSn1 = xSn1 + ∆ xSn2 = xSn2 xn1 n2 = xn1 n2 + ∆

xn1 D = xn1 D xn2 D = xn2 D + ∆


La nuova situazione é illustrata in Figura 10.4. Ora il flusso totale uscente
da S é salito anch’esso della quantitá ∆ passando da 2 a 3. Possiamo
notare che ora tutti i cammini orientati da S a D contengono almeno un
arco saturo. Possiamo allora concludere che il flusso attuale é il massimo
possibile? La risposta é no e lo dimostreremo nel seguito. Prima definiamo
un nuovo grafo orientato G(X) = (V, A(X)) detto grafo associato al flusso
X. Il nuovo grafo ha gli stessi nodi della rete originaria e ha il seguente
insieme di archi:

A(X) = {(i, j) : (i, j) ∈ A, xij < cij } ∪ {(i, j) : (j, i) ∈ A, xji > 0},
| {z } | {z }
Af (X) Ab (X)

ovvero A(X) contiene tutti gli archi di A non saturi (l’insieme Af (X), detto
insieme degli archi forward) e tutti gli archi di A lungo cui é stata inviata

173
n1 bb
´ bb 1/2
2/2´´´ bb
´ bb
´
´ b
S 1/1 D
Z ´
Z ´
Z ´
Z ´
Z ´
1/2 Z ´
´
Z ´ 2/2
Z n2 ´

Figura 10.4: La nuova situazione dopo l’incremento del flusso.

una quantitá positiva di flusso, cambiati peró di verso (l’insieme Ab (X),


detto insieme degli archi backward). Vediamo di generare il grafo associato
al flusso attuale X del nostro esempio. Si ha che:

Af (X) = {(S, n2 ), (n1 , D)}

Ab (X) = {(n1 , S), (n2 , S), (n2 , n1 ), (D, n1 ), (D, n2 )}.


Il grafo é rappresentato in Figura 10.5. Poniamoci ora la seguente domanda:

n1 H
! H
!!! HH
HH
!! HH
!! H
S Z D
Z ´
Z ´
Z ´
Z ´
Z ´
´
Z ´
Z ´
n2

Figura 10.5: Il grafo associato al flusso corrente.

esiste sul nuovo grafo orientato G(X) un cammino orientato da S a D? La

174
risposta é affermativa. Esiste infatti il cammino orientato:

S → n2 → n1 → D.

Indichiamo con P = {(S, n2 ), (n2 , n1 ), (n1 , D)} l’insieme degli archi di


tale cammino. Possiamo a questo punto modificare il nostro flusso nel
modo seguente. Per ogni arco (i, j) del cammino P si calcoli il seguente
valore: ½
cij − xij se (i, j) ∈ Af (X) ∩ P
αij =
xji se (i, j) ∈ Ab (X) ∩ P
e quindi sia
∆ = min αij
(i,j)∈P

il minimo di tali valori. Per gli archi forward il valore αij rappresenta quanto
flusso posso ancora inviare lungo l’arco (i, j) ∈ A della rete originaria, per
gli archi backward il valore αij rappresenta quanto flusso posso rispedire
indietro lungo l’arco (j, i) ∈ A della rete originaria. Nel nostro caso si ha:

(S, n2 ) ∈ Af (X) → αSn2 = 2 − 1 = 1 (n2 , n1 ) ∈ Ab (X) → αn2 n1 = 1

(n1 , D) ∈ Af (X) → αn1 D = 2 − 1 = 1


Il minimo tra questi tre valori é ∆ = 1. Ora il flusso viene aggiornato nel
modo seguente:

 xij + ∆ se (i, j) ∈ Af (X) ∩ P
xij = x − ∆ se (j, i) ∈ Ab (X) ∩ P (10.3)
 ij
xij altrimenti

Quindi nel nostro esempio avremo:

xSn1 = 2 xSn2 = 1 + 1 = 2 xn1 n2 = 1 − 1 = 0

xn1 D = 1 + 1 = 2 xn2 D = 2.
La nuova situazione é illustrata in Figura 10.6. In pratica sulla rete origi-
naria incrementiamo di ∆ il flusso lungo gli archi corrispondenti ad archi
forward del grafo associato al flusso attuale appartenenti al cammino P ,
rispediamo indietro ∆ unitá di flusso lungo gli archi che, cambiati di verso,
corrispondono ad archi backward del grafo associato appartenenti al cam-
mino P , e quindi decrementiamo il flusso della stessa quantitá lungo tali
archi. Infine, lungo gli archi che non fanno parte del cammino P il flusso
rimane invariato. Si puó verificare che il nuovo flusso é ammissibile. In
particolare, per come é stato scelto il valore ∆ il nuovo flusso lungo ciascun

175
n1 bb
´ bb 2/2
2/2´´´ bb
´ bb
´
´ b
S 0/1 D
Z ´
Z ´
Z ´
Z ´
Z ´
2/2 Z ´
´
Z ´ 2/2
Z n2 ´

Figura 10.6: La nuova situazione dopo l’aggiornamento del flusso.

arco é non negativo e non supera la capacitá dell’arco. Inoltre, continuano


anche ad essere soddisfatti i vincoli di equilibrio nei nodi intermedi. La
quantitá di flusso uscente da S é anch’essa aumentata proprio della quan-
titá ∆ e quindi passa da 3 a 4, il che dimostra che il flusso precedente non
era ottimo. Con il nuovo flusso possiamo ripetere quanto visto. Costruiamo
il grafo G(X) associato al nuovo flusso X. Ora avremo:

Af (X) = {(n1 , n2 )} Ab (X) = {(n1 , S), (n2 , S), (D, n1 ), (D, n2 )}.

Il grafo é illustrato in Figura 10.7. Possiamo ora chiederci se il nuovo flusso

n1
!!! b
b
! b
!!! b
b
! b
b
S b
D
Z ½
Z ½
Z ½
Z ½
Z ½
Z ½
Z ½
Z n2 ½

Figura 10.7: Il grafo associato al nuovo flusso.

176
é quello ottimo. La risposta la possiamo dare sulla base della seguente
fondamentale osservazione.

Osservazione 23 Dato un flusso X, esso é ottimo se e solo se nel grafo


associato G(X) non esiste alcun cammino orientato da S a D.

Dalla Figura 10.7 si puó notare che per il grafo associato al nostro nuovo
flusso non esiste alcun cammino orientato dal nodo S al nodo D e quindi il
flusso attuale é ottimo. Quanto visto rappresenta la base dell’algoritmo di
Ford-Fulkerson. In pratica, ad ogni iterazione di tale algoritmo si eseguono
i seguenti passi.

Passo 1 Si costruisca il grafo G(X) associato al flusso attuale X.

Passo 2 Se non esiste alcun cammino orientato da S a D in G(X), allora


STOP: il flusso attuale X é ottimo. Altrimenti, si individui un tale
cammino P e si aggiorni il flusso X come indicato in (10.3) e si ritorni
al Passo 1.

Se quella sopra é la struttura dell’algoritmo, vediamo ora di entrare nei suoi


dettagli.

ALGORITMO DI FORD-FULKERSON

Passo 0 Si parta con un flusso ammissibile X. Si noti che é sempre


possibile partire con il flusso nullo X = 0.

Passo 1 Si associ alla sorgente S l’etichetta (S, ∞). L’insieme R dei no-
di analizzati é vuoto, ovvero R = ∅, mentre l’insieme E dei nodi
etichettati contiene il solo nodo S, ovvero E = {S}.

Passo 2 Si verifichi se E \ R 6= ∅, ovvero se vi sono nodi etichettati non


ancora analizzati. Se non ne esistono il flusso attuale X é ottimo.
Altrimenti si selezioni un nodo i ∈ E\R, cioé etichettato, con etichetta
(k, ∆), ma non ancora analizzato e lo si analizzi. Analizzare il nodo i
vuol dire compiere le seguenti operazioni. Per ogni nodo j 6∈ E, cioé
non ancora etichettato, e tale che (i, j) ∈ A(X), si etichetti j con la
seguente etichetta:

(i, min(∆, cij − xij )) se (i, j) ∈ Af (X)

(i, min(∆, xji )) se (i, j) ∈ Ab (X)

177
Quindi si ponga:

E = E ∪ {j 6∈ E : (i, j) ∈ A(X)} R = R ∪ {i}.

Se D ∈ E, cioé se la destinazione é stata etichettata, si vada al Passo


3, altrimenti si ripeta il Passo 2.

Passo 3 Si ricostruisca un cammino orientato da S a D in G(X) proce-


dendo a ritroso da D verso S ed usando le prime componenti del-
le etichette. Piú precisamente, si cominci col considerare l’etichetta
(qr , ∆) di D. Allora nel cammino orientato da S a D il nodo D é
preceduto da qr . Per conoscere da quale nodo é preceduto qr se ne
consideri la prima componente dell’etichetta, indicata qui con qr−1 .
Si ripeta quindi la stessa procedura con qr−1 . Ci si arresta non appe-
na si arriva ad un nodo q1 la cui prima componente dell’etichetta é il
nodo sorgente S. A questo punto il cammino

S → q1 → · · · → qr−1 → qr → D

con insieme di archi

P = {(S, q1 ), . . . , (qr−1 , qr ), (qr , D)}

é un cammino orientato da S a D in G(X). Ora possiamo aggiornare


X come indicato in (10.3), dove il valore ∆ è dato dalla seconda
componente dell’etichetta del nodo D, e ritornare al Passo 1.

Quando l’algoritmo termina abbiamo giá anche una soluzione del problema
di taglio minimo, come dimostra il seguente teormema.

Teorema 8 Se si pone U = E, dove E é l’insieme dei nodi etichettati al


momento della terminazione dell’algoritmo, si ha anche che il taglio SU
indotto da U é soluzione ottima del problema di taglio minimo (10.2).

Dimostrazione Per prima cosa si noti che al momento della terminazione


dell’algoritmo si ha S ∈ E (il nodo S viene sempre etichettato al Passo 1)
e D 6∈ E (altrimenti dovremmo andare al Passo 3 ed aggiornare il flusso
attuale). Quindi l’insieme E induce effettivamente un taglio. Vediamo ora
qual é il valore di questo taglio. Se riusciamo a dimostrare che esso coincide
con il valore del flusso uscente da S, avendo giá osservato che il costo di ogni
taglio é non inferiore al valore del flusso massimo, possiamo concludere che
esso é il taglio a costo minimo. Per prima cosa valutiamo il flusso uscente
da S ed entrante in D. Esso coincide con tutto il flusso che dai nodi in E
viene spostato verso i nodi nel complemento E = V \ E di E meno il flusso

178
Flusso da E versoE

E
E

Flusso da E verso E
Figura 10.8: Il flusso totale dalla sorgente alla destinazione è pari alla
differenza tra il flusso totale da E verso E e il flusso totale da E verso E.

che va in senso opposto, cioé quello dai nodi nel complemento E verso i
nodi in E (si veda la Figura 10.8). In formule il flusso uscente da S ed
entrante in D é quindi pari a:
X X
xij − xji . (10.4)
(i,j) : (i,j)∈A, i∈E, j∈E (j,i) : (j,i)∈A, i∈E, j∈E

Ma vediamo ora come devono essere i valori xij per (i, j) ∈ A, i ∈ E, j ∈ E


e i valori xji per (j, i) ∈ A, i ∈ E, j ∈ E. Si deve avere che

∀ (i, j) ∈ A, i ∈ E, j ∈ E xij = cij . (10.5)

Infatti, per assurdo si supponga che esista un (i1 , j1 ) ∈ A, i1 ∈ E, j1 ∈


E con xi1 j1 < ci1 j1 . In tal caso (i1 , j1 ) ∈ Af (X) e quindi al Passo 2
dovremmo assegnare un’etichetta a j1 , il che contraddice l’ipotesi che j1 6∈
E. Analogamente, si deve avere che

∀ (j, i) ∈ A, i ∈ E, j ∈ E xji = 0. (10.6)

Infatti, per assurdo si supponga che esista un (j1 , i1 ) ∈ A, i1 ∈ E, j1 ∈ E


con xj1 i1 > 0. In tal caso (i1 , j1 ) ∈ Ab (X) e quindi al Passo 2 dovremmo

179
Tabella 10.1:

E R S n1 n2 n3 n4 D
Passo 1 S ∅ (S, ∞) - - - - -
Passo 2 S, n1 , n2 S (S, ∞) (S, 3) (S, 2) - - -
Passo 2 S, n1 , n2 , n3 , n4 S, n1 (S, ∞) (S, 3) (S, 2) (n1 , 1) (n1 , 3) -
Passo 2 S, n1 , n2 , n3 , n4 S, n1 , n2 (S, ∞) (S, 3) (S, 2) (n1 , 1) (n1 , 3) -
Passo 2 S, n1 , n2 , n3 , n4 , D S, n1 , n2 , n3 (S, ∞) (S, 3) (S, 2) (n1 , 1) (n1 , 3) (n3 , 1)

assegnare un’etichetta a j1 , il che contraddice ancora l’ipotesi che j1 6∈ E.


Sostituendo (10.5) e (10.6) in (10.4) si ottiene che il valore del flusso é pari
a X
cij = C(SE ),
(i,j) : (i,j)∈A, i∈E, j∈E

cioé é pari al costo del taglio indotto da E, il che conclude la dimostrazione.

Se al Passo 2 il nodo i ∈ E \ R da analizzare viene scelto secondo una


disciplina FIFO (cioé i nodi vengono analizzati nell’ordine in cui vengo-
no etichettati) allora l’algoritmo di Ford-Fulkerson richiede un numero di
operazioni dell’ordine di | A || V |2 . Va precisato che l’algoritmo di Ford-
Fulkerson non é l’unico algoritmo possibile per risolvere il problema di flusso
massimo. Esistono anche altri algoritmi piú sofisticati che richiedono an-
che un numero di operazioni inferiore rispetto a quello di Ford-Fulkerson
(dell’ordine di | V |3 ).

10.4 Un esempio di applicazione del proble-


ma di massimo flusso
Vediamo ora di risolvere il problema di flusso massimo in Figura 10.2 uti-
lizzando l’algoritmo di Ford-Fulkerson. Cominciamo con il flusso nullo X.
In tal caso si ha che il grafo associato a tale flusso nullo coincide con il grafo
originario, ovvero G(X) ≡ G. Il primo ciclo dell’algoritmo é descritto nella
Tabella 10.1. Il valore ∆ é pari a 1 ed il cammino orientato in G(X) da S
a D é il seguente:
S → n1 → n3 → D.
Ció porta al seguente aggiornamento del flusso:

xSn1 = 1 xSn2 = 0 xn1 n3 = 1 xn1 n4 = 0

180
xn2 n3 = 0 xn2 n4 = 0 xn3 D = 1 xn4 D = 0

181
Il grafo G(X) associato al nuovo flusso é illustrato in Figura 10.9. A

n1 n3
J @
¡ J ­ @
¡ ­ @
¡ J @
¡ J ­ @
¡ J ­ @
¡ J ­ @
¡ J ­ @

­J
S ­ J D
­ J ,
­ J ,
@ ­ J ,
@ ­ J ,
@ ­ ,
­ J ,
@ J ,
@ ­ ,
@ n4
n2

Figura 10.9: Il grafo associato al nuovo flusso.

questo punto si ripete la procedura con i passi indicati in Tabella 10.2. Il


valore ∆ é pari a 2 ed il cammino orientato in G(X) da S a D é il seguente:

S → n1 → n4 → D.

Ció porta al seguente aggiornamento del flusso:

xSn1 = 3 xSn2 = 0 xn1 n3 = 1 xn1 n4 = 2

xn2 n3 = 0 xn2 n4 = 0 xn3 D = 1 xn4 D = 2


Il grafo G(X) associato al nuovo flusso é illustrato in Figura 10.10. A questo
punto si ripete la procedura con i passi indicati in Tabella 10.3. Il valore
∆ é pari a 1 ed il cammino orientato in G(X) da S a D é il seguente:

S → n2 → n4 → D.

Ció porta al seguente aggiornamento del flusso:

xSn1 = 3 xSn2 = 1 xn1 n3 = 1 xn1 n4 = 2

xn2 n3 = 0 xn2 n4 = 1 xn3 D = 1 xn4 D = 3

182
Tabella 10.2:

E R S n1 n2 n3 n4 D
Passo 1 S ∅ (S, ∞) - - - - -
Passo 2 S, n1 , n2 S (S, ∞) (S, 2) (S, 2) - - -
Passo 2 S, n1 , n2 , n4 S, n1 (S, ∞) (S, 2) (S, 2) - (n1 , 2) -
Passo 2 S, n1 , n2 , n3 , n4 S, n1 , n2 (S, ∞) (S, 2) (S, 2) (n2 , 1) (n1 , 2) -
Passo 2 S, n1 , n2 , n3 , n4 , D S, n1 , n2 , n4 (S, ∞) (S, 2) (S, 2) (n2 , 1) (n1 , 2) (n4 , 2)

Tabella 10.3:

E R S n1 n2 n3 n4 D
Passo 1 S ∅ (S, ∞) - - - - -
Passo 2 S, n2 S (S, ∞) - (S, 2) - - -
Passo 2 S, n2 , n3 , n4 S, n2 (S, ∞) - (S, 2) (n2 , 1) (n2 , 1) -
Passo 2 S, n2 , n3 , n4 , n1 S, n2 , n3 (S, ∞) (n3 , 1) (S, 2) (n2 , 1) (n2 , 1) -
Passo 2 S, n2 , n3 , n4 , n1 , D S, n2 , n3 , n4 (S, ∞) (n3 , 1) (S, 2) (n2 , 1) (n2 , 1) (n4 , 1)

Tabella 10.4:

E R S n1 n2 n3 n4 D
Passo 1 S ∅ (S, ∞) - - - - -
Passo 2 S, n2 S (S, ∞) - (S, 1) - - -
Passo 2 S, n2 , n3 S, n2 (S, ∞) - (S, 1) (n2 , 1) - -
Passo 2 S, n2 , n3 , n1 S, n2 , n3 (S, ∞) (n3 , 1) (S, 1) (n2 , 1) - -
Passo 2 S, n2 , n3 , n1 , n4 S, n2 , n3 , n1 (S, ∞) (n3 , 1) (S, 1) (n2 , 1) (n1 , 1) -
Passo 2 S, n2 , n3 , n1 , n4 , D S, n2 , n3 , n1 , n4 (S, ∞) (n3 , 1) (S, 1) (n2 , 1) (n1 , 1) (n4 , 1)

183
n1 n3
¡ J @
¡ J ­ @
¡ ­ @
J @
¡ J ­ @
¡ J ­ @
¡ J ­ @
¡ J ­ @

­J
S ­ J D
­ J ,
­ J ,
@ ­ J ,
@ ­ J ,
@ ­ ,
­ J ,
@ J ,
@ ­ ,
@ n4
n2

Figura 10.10:

Tabella 10.5:
E R S n1 n2 n3 n4 D
Passo 1 S ∅ (S, ∞) - - - - -
Passo 2 S S (S, ∞) - - - - -

Il grafo G(X) associato al nuovo flusso é illustrato in Figura 10.11. A questo


punto si ripete la procedura con i passi indicati in Tabella 10.4. Il valore
∆ é pari a 1 ed il cammino orientato in G(X) da S a D é il seguente:

S → n2 → n3 → n1 → n4 → D.

Ció porta al seguente aggiornamento del flusso:

xSn1 = 3 xSn2 = 2 xn1 n3 = 0 xn1 n4 = 3

xn2 n3 = 1 xn2 n4 = 1 xn3 D = 1 xn4 D = 4


Il grafo G(X) associato al nuovo flusso é illustrato in Figura 10.12. A questo
punto si ripete la procedura con i passi indicati in Tabella 10.5. Arriviamo

184
n1 n3
¡ J @
¡ J ­ @
¡ ­ @
J @
¡ J ­ @
¡ J ­ @
¡ J ­ @
¡ J ­ @

­J
S ­ J D
­ J ,
­ J ,
@ ­ J ,
@ ­ J ,
@ ­ ,
­ J ,
@ J ,
@ ­ ,
@ n4
n2

Figura 10.11:

a E \ R = ∅ e quindi possiamo fermarci ed affermare che il flusso attuale é


quello ottimo. Non solo, sappiamo che il taglio indotto dal sottinsieme di
nodi E = {S} é quello a costo minimo. Si puó infatti verificare che il valore
del flusso uscente da S e il costo del taglio indotto da {S} sono entrambi
pari a 5.

185
n1 n3
¡ J @
¡ J ­ @
¡ ­ @
J @
¡ J ­
¡ ­ @
J ­ @
¡ J @
¡ J ­ ­
@

­J
S ­ J D
­ J ,
@ ­ J ,
@ ­ J ,
J ,
@ ­ ,
@ ­ J ,
@ ­ J ,
@ ,
n2 n4

Figura 10.12:

186

Potrebbero piacerti anche