125
Capitolo 1 Programmazione Lineare 1.1 Modelli di Programmazione Lineare 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` a 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 uno solo dei seguenti tre oggetti: un libro che vale 20.000 lire, una macchina fotografica che vale 200.000 lire ed una borsa da 50.000 lire. Dovete decidere quale oggetto portare con voi, tenuto conto che vi interessa prendere un oggetto di valore massimo. L’esempio ` e molto banale e non c’` e bisogno di scomodare la Ricerca Operativa per capire che occorre prendere la macchina fotografica. Tuttavia in esso sono gi` a presenti tutte le componenti tipiche di una decisione: 1

Programmazione Lineare - di.unito.it

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Programmazione Lineare - di.unito.it

Capitolo 1

Programmazione Lineare

1.1 Modelli di Programmazione Lineare

La prima domanda da porsi riguarda gli scopi che si prefigge la RicercaOperativa. Possiamo definirla come uno strumento per prendere delle deci-sioni che siano le migliori possibili secondo un criterio dato. Ogni volta chedobbiamo prendere una decisione entrano in gioco le seguenti componenti:

DATI , che rappresentano tutti i valori noti a priori.

VARIABILI , che sono le entita controllate dal decisore; al variare diesse varia anche il valore del criterio e tra tutti i possibili valori chepossono assumere si devono scegliere quelli che forniscono il migliorvalore possibile del criterio.

VINCOLI , che limitano le possibili scelte del decisore (i possibili valoridelle 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 epotete prendere con voi uno solo dei seguenti tre oggetti: un libro che vale20.000 lire, una macchina fotografica che vale 200.000 lire ed una borsa da50.000 lire. Dovete decidere quale oggetto portare con voi, tenuto contoche vi interessa prendere un oggetto di valore massimo. L’esempio e moltobanale e non c’e bisogno di scomodare la Ricerca Operativa per capire cheoccorre prendere la macchina fotografica. Tuttavia in esso sono gia presentitutte le componenti tipiche di una decisione:

1

Page 2: Programmazione Lineare - di.unito.it

2 CAPITOLO 1. PROGRAMMAZIONE LINEARE

DATI : sono i valori dei tre oggetti.

VARIABILI : per ogni oggetto il decisore (cioe voi) deve decidere seprenderlo oppure no.

VINCOLI : in questo caso e presente il vincolo che puo essere preso unsolo oggetto.

OBIETTIVO : il criterio di scelta e rappresentato dal valore e quindil’obiettivo e quello di prendere l’oggetto di valore massimo.

Nel nostro esempio e molto semplice prendere la decisione migliore. Ve-dremo pero che in molte situazioni non e per nulla chiaro, a prima vista,capire qual e la decisione migliore. In generale, l’individuazione delle quat-tro componenti descritte sopra e solo il primo, importante, passo per trovarela decisione giusta. Un modo per arrivare ad essa e quello rappresentato inFigura 1.1. In essa si ha che, dopo l’individuazione delle quattro compo-

Formulazionedel modellomatematico

Proceduradirisoluzione

Validazionedelmodello

- obiettivi- vincoli- variabili- dati

Individuazionedi:

Figura 1.1: Passaggi per la risoluzione di un problema

Page 3: Programmazione Lineare - di.unito.it

1.1. MODELLI DI PROGRAMMAZIONE LINEARE 3

Tabella 1.1:Farina Acqua Medicinali

TIPO I 10 10 30TIPO II 30 20 10TIPO III 20 40 5

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

nenti, si passa alla formulazione di un modello matematico del problema. Ilmodello viene quindi passato ad una procedura di risoluzione od algoritmoche fornisce la soluzione. Infine la soluzione ottenuta viene utilizzata perla validazione del modello, ovvero per verificare se il modello e aderenteal problema reale che rappresenta oppure va modificato per renderlo tale.Noi ci concentreremo in particolare sulla procedura di risoluzione ma pri-ma vedremo un paio di esempi di modelli con anche un piccolo esempio divalidazione del modello.

1.1.1 Problemi con vincoli di risorse: un caso partico-lare e la formulazione generale

Supponiamo di dover preparare dei pacchi per inviare degli aiuti. E pos-sibile realizzare tre diversi tipi di pacchi con diversi contenuti di sacchettidi farina, bottiglie d’acqua e medicinali. Piu precisamente la Tabella 1.1specifica i contenuti di ogni tipo di pacco. E stato inoltre assegnato unindice di utilita per un’unita di ogni tipo di pacco. Gli indici sono riportatinella Tabella 1.2. Infine e noto che la disponibilita di sacchetti di farina,bottiglie d’acqua e medicinali e limitata. Piu precisamente il numero mas-simo disponibile di farina, acqua e medicinali e riportata nella Tabella 1.3.La domanda che ci si pone e la seguente: quanti pacchi di ciascun tipo oc-

Tabella 1.3:farina 5100acqua 8000

medicinali 1805

Page 4: Programmazione Lineare - di.unito.it

4 CAPITOLO 1. PROGRAMMAZIONE LINEARE

corre preparare se si vuole rendere massimo l’indice di utilita complessivo?Cominciamo con l’individuare le quattro componenti della decisione.

DATI : sono i valori riportati nelle tre tabelle.

VARIABILI : per ogni tipo di pacco il decisore deve decidere quantipacchi di quel tipo realizzare.

VINCOLI : in questo caso sono presenti i vincoli sulla disponibilita difarina, acqua e medicinali.

OBIETTIVO : il criterio di scelta e rappresentato dall’utilita complessivadei 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 emedicinali) che vengono in qualche modo utilizzate (qui per fare i pacchi)e delle quali si ha una disponibilita limitata.Rispetto all’esempio iniziale e ora piu difficile stabilire qual e la cosa giustada fare. Potrei realizzare solo pacchi del tipo I. In tal caso ne potrei rea-lizzare al massimo 60 per il limite di disponibilita sui medicinali. L’utilitacomplessiva risulterebbe pari a 60*14=840. Potrei realizzare solo pacchidel tipo II. In tal caso ne potrei realizzare al massimo 170 per il limitedi disponibilita sui sacchetti di farina. L’utilita complessiva risulterebbepari a 170*5=850. Infine, potrei realizzare solo pacchi del tipo III. In talcaso ne potrei realizzare al massimo 200 per il limite di disponibilita sul-le bottiglie d’acqua. L’utilita complessiva risulterebbe pari a 200*4=800.Delle tre possibili soluzioni la migliore e la seconda. Ma queste tre decisioninon coprono tutti i casi possibili. Infatti, potrei scegliere di fare un po’ dipacchi di ciascun tipo. Quindi, a differenza dell’esempio iniziale non e pernulla immediato scegliere la decisione migliore. Vediamo allora di procede-re al secondo passo, la formulazione di un modello matematico per questoproblema.

Modello matematico del 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.

Page 5: Programmazione Lineare - di.unito.it

1.1. MODELLI DI PROGRAMMAZIONE LINEARE 5

Queste sono le tre variabili del problema. Ora dobbiamo tradurre i vincoli el’obiettivo in formule matematiche. Abbiamo un vincolo sulla disponibilitadi sacchetti di farina. Come si puo tradurre in linguaggio matematico? Unpacco di tipo I contiene 10 sacchetti di farina. Quindi x1 pacchi di tipo Irichiedono

10x1

sacchetti di farina. Analogamente, un pacco di tipo II contiene 30 sacchettidi farina e quindi x2 pacchi richiedono

30x2

sacchetti di farina. Infine, un pacco di tipo III contiene 20 sacchetti difarina e quindi x3 pacchi richiedono

20x3

sacchetti di farina. La somma di questi tre valori restituisce il numerocomplessivo di sacchetti utilizzati. Piu 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 poterutilizzare piu di 5100 sacchetti di farina e tale vincolo si traduce quindinella seguente disequazione

10x1 + 30x2 + 20x3 ≤ 5100,

che e proprio la traduzione in linguaggio matematico del vincolo sulla dispo-nibilita di sacchetti di farina. In modo completamente analogo si procedeper tradurre i vincoli sulla disponibilita di bottiglie d’acqua

10x1 + 20x2 + 40x3 ≤ 8000,

e sulla disponibilita di medicinali

30x1 + 10x2 + 5x3 ≤ 1805.

Per essere precisi a questi tre vincoli ne dobbiamo aggiungere altri tre chenon abbiamo specificato in precedenza perche banali: le quantita di pacchidi ciascun tipo non possono essere negative (per esempio, non ha sensoparlare di -5 pacchi di tipo I). Mentre in una descrizione a voce del problemaquesto tipo di vincoli e del tutto scontato, da un punto di vista matematico

Page 6: Programmazione Lineare - di.unito.it

6 CAPITOLO 1. PROGRAMMAZIONE LINEARE

non lo e e tali vincoli sono essenziali nella definizione del modello. Inlinguaggio 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 ivincoli introdotti sopra viene detto insieme ammissibile. Ad esempio, x1 =20, x2 = 20, x3 = 30 e una soluzione ammissibile, mentre x1 = 50, x2 =60, x3 = 40 non lo e (viola il vincolo sulla disponibilita di medicinali) e nonlo e neppure x1 = −2, x2 = 20, x3 = 40 (viola il vincolo di non negativitadel numero di pacchi di tipo I).Resta da definire l’obiettivo del problema. Un pacco di tipo I ha utilitapari a 14, quindi x1 pacchi hanno utilita pari a

14x1.

In modo del tutto analogo si vede che x2 pacchi di tipo II hanno utilita paria

5x2

e x3 pacchi di tipo III hanno utilita pari a

4x3.

Quindi, sommando le utilita di ciascun tipo di pacco si ottiene l’utilitacomplessiva pari a

14x1 + 5x2 + 4x3.

Il nostro obiettivo e massimizzare tale valore.Riassumendo, il modello matematico del nostro problema e il seguente:

massimizzare 14x1 + 5x2 + 4x3

tenuto conto che10x1 + 30x2 + 20x3 ≤ 510010x1 + 20x2 + 40x3 ≤ 800030x1 + 10x2 + 5x3 ≤ 1805

x1 ≥ 0x2 ≥ 0x3 ≥ 0

In questo caso il modello risultante si definisce un programma lineare. Unprogramma lineare e un modello in cui sia i vincoli che l’obiettivo sonolineari, ovvero

Page 7: Programmazione Lineare - di.unito.it

1.1. MODELLI DI PROGRAMMAZIONE LINEARE 7

1. i contributi delle diverse variabili si sommano tra loro;

2. i contributi delle variabili sono direttamente proporzionali al valoredelle stesse.

Ad esempio, una formula del tipo

(14x1) ∗ (5x2) + 4x3

non e lineare in quanto i contributi della variabile x1 e della variabile x2 simoltiplicano tra loro. Una formula del tipo

14x21 + 5x2 + 4x3

e anch’essa non lineare. Infatti, se e vero che i contributi delle diversevariabili si sommano tra loro, possiamo pero anche notare che il contributodella variabile x1 non e direttamente proporzionale a x1 ma e direttamenteproporzionale al quadrato di x1. I programmi lineari sono molto importantiper almeno due ragioni:

1. molti problemi reali (come, ad esempio, il nostro) hanno come modellomatematico proprio un programma lineare;

2. sono piu semplici da risolvere rispetto ad altri modelli dove compa-iono termini non lineari. Per i programmi lineari esistono delle pro-cedure molto efficienti di risoluzione (come il cosidetto algoritmo delsimplesso).

L’operazione che abbiamo appena compiuto, ovvero quella di essere passatidal nostro problema inizialmente descritto a parole alla sua traduzione inun modello matematico ed aver riconosciuto che si tratta di un programmalineare, e un passo molto importante: ora sappiamo con che tipo di pro-blema abbiamo a che fare e che esistono apposite procedure efficienti perrisolvere tale problema restituendoci le risposte che cerchiamo.Al momento non siamo ancora in grado di risolvere il problema. Quando losaremo potremo verificare che la soluzione ottima e data dai seguenti valoridelle variabili:

x1 = 28 x2 = 0 x3 = 193,

con utilita pari a 1164. Come si vede si ottiene una soluzione ben diversada una delle tre analizzate inizialmente (quelle in cui si utilizza un solo tipodi pacco).

Una volta ottenuta la soluzione mi devo chiedere se questa e sensata. Que-sta fase si chiama validazione del modello. Nel formulare il problema potrei

Page 8: Programmazione Lineare - di.unito.it

8 CAPITOLO 1. PROGRAMMAZIONE LINEARE

essermi dimenticato di introdurre dei vincoli, ottenendo in questo modouna soluzione poco realistica. Nel nostro esempio possiamo notare che re-stano inutilizzati ben 960 sacchi di farina (se ne usano solo 4140 dei 5100disponibili). Possiamo considerare questo spreco eccessivo. In realta noinon vorremmo sprecare piu del 10% di ogni risorsa. Ma questo introducedei nuovi vincoli che modificano il modello. Oltre ai vincoli di disponibilitaavremo ora anche dei vincoli di uso minimo di ciascuna risorsa. Per esempiola formula, precedentemente derivata, sulla quantita di sacchetti di farinautilizzati e la seguente:

10x1 + 30x2 + 20x3.

Cio che si richiede e che il numero di sacchetti utilizzati sia non inferiore al90% della disponibilita totale e quindi:

10x1 + 30x2 + 20x3 ≥ 0.9 ∗ 5100.

In modo del tutto analogo si derivano i vincoli per l’acqua e i medicinali:

10x1 + 20x2 + 40x3 ≥ 0.9 ∗ 8000.

30x1 + 10x2 + 5x3 ≥ 0.9 ∗ 1805.

Con l’aggiunta di questi vincoli la nuova soluzione diventa:

x1 = 21.72 x2 = 24.07 x3 = 182.53,

con utilita pari a 1154.58. Si puo notare come queste soluzioni siano deivalori decimali. Non ha molto senso parlare di una quantita decimale di unpacco (il numero di pacchi deve essere un valore intero). In questo caso sipuo ottenere una soluzione semplicemente arrotondando i valori decimali.Piu avanti vedremo che questo metodo vale solo per questo tipo di problemiin cui i valori delle variabili sono relativamente grandi. Vedremo in seguitoesempi con obiettivo e vincoli che sono funzioni affini ma dove e necessarioimporre esplicitamente tra i vincoli che i valori delle variabili devono esseredelle quantita intere (si parlera in tal caso di programmi lineari interi).Come vedremo, questo rendera piu complessa la risoluzione del problema.

Il problema appena visto e un caso particolare di problema con vincolidi risorse. Nei problemi con vincoli di risorse abbiamo un insieme RISOR-SE di risorse (farina, acqua e medicinali nell’esempio). Di ogni risorsa jsi ha a disposizione una quantita limitata bj (i valori in Tabella 1.3 nel-l’esempio). Inoltre si ha un insieme PRODOTTI di prodotti (i tre tipi dipacco nell’esempio) realizzabili con le risorse. A ogni prodotto i e associato

Page 9: Programmazione Lineare - di.unito.it

1.1. MODELLI DI PROGRAMMAZIONE LINEARE 9

un profitto pi per unita di prodotto (i valori in Tabella 1.2 nell’esempio).Infine, un’unita di prodotto i consuma una quantita aij di risorsa j (i valoriin Tabella 1.1 nell’esempio). Le quantita da decidere sono le quantita diciascun prodotto i da realizzare, che indicheremo con le variabili xi. Perogni risorsa j avremo un vincolo che impone di non superare la disponibilitamassima bj di tale risorsa. Il vincolo e espresso dalla disequazione:∑

i∈PRODOTTIaijxi ≤ bj .

Il profitto totale, che si vuole massimizzare, e rappresentato dall’espressione∑i∈PRODOTTI

pixi.

Quindi, il modello per il generico problema con vincoli di risorse e il se-guente:

max∑i∈PRODOTTI pixi∑

i∈PRODOTTI aijxi ≤ bj j ∈ RISORSExi ≥ 0 i ∈ PRODOTTI

Si noti che sia l’obiettivo che i vincoli sono funzioni affini e quindi il modelloe un programma lineare.

1.1.2 Problemi della dieta

Nel generico problema della dieta abbiamo un insieme CIBI di cibi (adesempio, carne, pesce, ecc.) (farina, acqua e medicinali nell’esempio) e uninsieme ELEMENTI di elementi nutritivi (ad esempio, vitamine, proteine,ecc.). Di ogni elemento nutritivo j si ha una richiesta minima bj che deveessere assunta in una giornata. A ogni cibo i e associato un costo ci perunita di cibo. Infine, un’unita di cibo i apporta una quantita aij di ele-mento nutritivo j. Le quantita da decidere sono le quantita di ciascun ciboi da inserire nella dieta girornaliera, che indicheremo con le variabili xi.Per ogni elemento nutritivo j avremo un vincolo che impone che la dietacontenga almeno la quantita bj di tale elemento. Il vincolo e espresso dalladisequazione: ∑

i∈CIBIaijxi ≥ bj .

Il costo totale della dieta, che si vuole minimizzare, e rappresentato dall’e-spressione ∑

i∈CIBIcixi.

Page 10: Programmazione Lineare - di.unito.it

10 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Quindi, il modello per il generico problema con vincoli di risorse e il se-guente:

max∑i∈CIBI cixi∑

i∈CIBI aijxi ≥ bj j ∈ ELEMENTI

xi ≥ 0 i ∈ CIBI

Si noti che sia l’obiettivo che i vincoli sono funzioni affini e quindi il modelloe un programma lineare.

1.2 Teoria della Programmazione lineare

Un generico problema di programmazione lineare ha la seguente forma

min( oppure max) cTx

aTi x ≤ bi i = 1, . . . ,m1

aTi x ≥ bi i = m1 + 1, . . . ,m2

aTi x = bi i = m2 + 1, . . . ,m3

xj ≥ 0 j = 1, . . . , n1

xj ≤ 0 j = n1 + 1, . . . , n2

xj libera in segno j = n2 + 1, . . . , n3

Cio che caratterizza i problemi di Programmazione Lineare (PL nel seguito)e

• il fatto che sia la funzione obiettivo che quelle che definiscono i vincolisono funzioni affini (ovvero funzioni lineari piu un termine noto);

• il fatto che le variabili possono assumere valori reali.

Mentre queste sono caratteristiche fisse dei problemi di PL, altre caratte-ristiche potranno variare di problema in problema: l’obiettivo potra essereminimizzato o massimizzato; i vincoli potranno essere di ≥, ≤ oppure =(ma non di > e <); le variabili potranno essere vincolate ad assumere solovalori non negativi oppure non positivi oppure potranno indifferentementeassumere valori sia negativi che positivi.

Un tipo particoalre di problemi di PL e rappresentato dai problemi di PLin forma canonica, in cui l’obiettivo e sempre da massimizzare, i vincoli

Page 11: Programmazione Lineare - di.unito.it

1.2. TEORIA DELLA PROGRAMMAZIONE LINEARE 11

sono tutti di ≤ e le variabili sono tutte vincolate ad assumere valori nonnegativi, cioe

max cTx

aTi x ≤ bi i = 1, . . . ,mxj ≥ 0 j = 1, . . . , n

o, in forma matriciale,

max cTx

ATx ≤ bx ≥ 0

dove A = [a1 · · · an] ∈ Rn×m e una matrice le cui colonne sono i vettori aiche definiscono i vincoli, b ∈ Rm e il vettore con i-esima componente bi e x ∈Rn. Se apparentemente i problemi di PL in forma canonica rappresentanoun sottinsieme dei problemi di PL, e in realta possibile dimostrare che ogniproblema 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 informa canonica ad esso equivalente.

Dimostrazione Si puo notare che

1. ogni problema di minimo puo essre trasformato in un problema dimassimo sfruttando la seguente relazione

min cTx = −max−cTx

2. ogni vincolo di ≥ puo essere trasformato in un vincolo di ≤ nel modoseguente

aTi x ≥ bi ⇒ −aTi x ≤ −bi

3. ogni vincolo di = puo essere trasformato in due vincoli di ≤ nel modoseguente

aTi x = bi ⇒ aTi x ≤ bi, −aTi x ≤ −bi

4. se abbiamo una variabile xj ≤ 0 possiamo sostituirla nei vincoli enell’obiettivo con la variabile

x′j = −xj ≥ 0

Page 12: Programmazione Lineare - di.unito.it

12 CAPITOLO 1. PROGRAMMAZIONE LINEARE

5. se abbiamo una variabile xj libera in segno, possiamo sostituirla neivincoli 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 diPL in forma canonica

min x1 + x2 + x3

x1 + 2x2 − x3 ≤ 3x1 + 4x2 + 5x3 = 5x1 − 2x2 + x3 ≥ 3

x1 ≥ 0x2 ≤ 0

x3 libera in segno

Il risultato appena citato ci consente di concentrare la nostra attenzionesui soli problemi di PL in forma canonica. Introduciamo ora la seguentedefinizione.

Definizione 1 Dato un problema di PL in forma canonica, l’insieme Sadi punti che soddisfano i suoi vincoli, ovvero l’insieme

Sa = {x ∈ Rn : ATx ≤ b, x ≥ 0}

viene detto regione ammissibile del problema di PL. L’insieme Sott dei puntiin Sa con valore della funzione obiettivo non inferiore rispetto a tutti glialtri punti in Sa, ovvero l’insieme

Sott = {x∗ ∈ Sa : cTx∗ ≥ cTx ∀ x ∈ Sa} ⊆ Sa

viene detto insieme delle soluzioni ottime del problema di PL.

Nel seguito ci occuperemo di carratterizzare prima la regione ammissibileSa e poi l’insieme delle soluzioni ottime Sott.

1.2.1 La regione ammissibile Sa

Definizione 2 Un insieme C 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 eanch’esso completamente contenuto in C.

Page 13: Programmazione Lineare - di.unito.it

1.2. TEORIA DELLA PROGRAMMAZIONE LINEARE 13

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

∀ x ∈ C : ‖x‖ ≤ R,

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

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

La regione ammissibile Sa del problema di PL e ottenuta come intersezionedi m+ n semispazi

aTi x ≤ bi i = 1, . . . ,m xj ≥ 0 j = 1, . . . , n.

L’intersezione di un numero finito di semispazi e sempre un insieme chiuso econvesso e quindi Sa stesso e sempre un insieme chiuso e convesso. Possiamoclassificare le possibili forme di Sa nei seguenti tre modi.

Sa = ∅ In tal caso si parla di regione ammissibile vuota.

Sa 6= ∅ e limitato In tal caso Sa viene detto poliedro convesso.

Sa 6= ∅ e illimitato In tal caso Sa viene detto troncone.

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 poliedro convesso e di troncone.

max x1 + x2

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

max x1 + x2

x1 + x2 ≤ 1x1, x2 ≥ 0

max x1 + x2

x1 − x2 ≤ 0x1, x2 ≥ 0

Diamo ora la definizione di iperpiano generatore.

Page 14: Programmazione Lineare - di.unito.it

14 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Definizione 5 Gli m+ n iperpiani

aTi x = bi i = 1, . . . ,m xj = 0 j = 1, . . . , n

corrispondenti alle disequazioni che definiscono Sa vengono detti iperpianigeneratori di Sa.

Particolare importanza all’interno di Sa rivestono alcuni punti che chiame-remo vertici, definiti nel modo seguente.

Definizione 6 Un punto x ∈ Rn viene detto vertice di Sa se soddisfa leseguenti condizioni:

1. x ∈ Sa

2. E intersezione unica di almeno n iperpiani generatori, di cui n line-ramente indipendenti.

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 e un vertice di Sa mentre lo e il punto (1, 0). Unadefinizione equivalente di vertice ci e data dalla seguente osservazione.

Osservazione 2 Un punto x ∈ Sa e un vertice di Sa se e solo se

6 ∃ x1, x2 ∈ Sa, x1 6= x2

tali chex =

12x1 +

12x2

Un primo teorema ci dice che in un problema di PL in forma canonica, seesiste almeno una soluzione ammissibile, allora la regione ammissibile haalmeno un vertice.

Teorema 1 Dato un problema di PL in forma canonica, se Sa 6= ∅, alloraSa ha almeno un vertice.

Vale inoltre la seguente osseravzione.

Osservazione 3 Il numero di vertici di Sa e finito.

Page 15: Programmazione Lineare - di.unito.it

1.2. TEORIA DELLA PROGRAMMAZIONE LINEARE 15

Introduciamo ora la definizione di spigolo.

Definizione 7 L’intersezione di almeno n− 1 iperpiani generatori, di cuiesattamente n − 1 linearmente indipendenti e una retta. Se l’intersezionedi tale retta con Sa e non vuota e non si riduce a un solo punto, alloratale intersezione verra detta spigolo. Uno spigolo puo essere limitato oillimitato.

Come esercizio, si verifichi graficamente che, dato il problema

max x1 + x2

x1 + x2 ≤ 1−2x1 − 2x2 ≤ −2

x1, x2 ≥ 0

l’intersezione degli iperpiani generatori x1 + x2 = 1 e −2x1 − 2x2 = −2definisce uno spigolo limitato, mentre dato il problema

max x1 + x2

x1 − x2 ≤ 0x1, x2 ≥ 0

l’iperpiano generatore x1 − x2 = 0 definisce uno spigolo illimitato. Come ivertici, anche gli spigoli sono in numero finito, come stabilito nella seguenteosservazione.

Osservazione 4 Il numero di spigoli di Sa e finito.

Introduciamo ora la definizione di raggio di Sa.

Definizione 8 Un vettore r ∈ Rn, r 6= 0, si definisce raggio di Sa se

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

ovvero se dato qualsiasi punto x0 in Sa, la semiretta con origine in x0 edirezione r e contenuta in Sa.

Si noti che l’esistenza di un raggio di Sa e possibile solo se Sa e illimitato,ovvero e un troncone. Questo e una conseguenza del fatto che dato unraggio r e un punto x0 ∈ Sa , la semiretta con origine in x0 e direzione r(che e un insieme ilimitato) e contenuta in Sa, che a sua volta deve quindiessere un insieme illimitato. Tra i raggi ve ne sono alcuni particolari chevengono detti raggi estremi.

Page 16: Programmazione Lineare - di.unito.it

16 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Definizione 9 Un vettore r ∈ Rn si dice raggio estremo di Sa se e unraggio di Sa e inoltre

6 ∃ r1, r2 raggi di Sa, r1 6= µr2 ∀ µ ∈ R,

tali cher =

12r1 +

12r2

In pratica i raggi estremi coincidono con i vettori che definiscono la direzionedelle semirette corrispondenti a spigoli illimitati. Come esercizio, si verifichiche dato il problema

max x1 + x2

x1 − x2 ≤ 0x1, x2 ≥ 0

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

sono tutti raggi di Sa ma solo gli ultimi due sono raggi estremi. Un impor-tante risultato mostra che la regione ammissibile Sa di un problema di PLin forma canonica e completamente caratterizzata dai suoi vertici e raggiestremi.

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 troncone, sianor1, . . . , rh i raggi estremi di Sa. Allora

x ∈ Sa

se e solo se

∃ λ1, . . . , λk ≥ 0,k∑i=1

λi = 1, ∃ µ1, . . . , µh ≥ 0

tali che

x =k∑i=1

λivi +h∑j=1

µjrj .

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

Page 17: Programmazione Lineare - di.unito.it

1.2. TEORIA DELLA PROGRAMMAZIONE LINEARE 17

1.2.2 L’insieme delle soluzioni ottime Sott

In precedenza abbiamo ristretto l’atenzione alla sola regione ammissibileSa. Ora prenderemo in esame l’insieme Sott e quindi entrera in gioco anchela funzione obiettivo. Prima di elencare tutti le possibili forme di Sott,dimostriamo la seguente osservazione,

Osservazione 5 Se x1, x2 ∈ Sott, x1 6= x2, allora l’intero segmento tra x1

e x2 e contenuto in Sott, cioe

∀ λ ∈ [0, 1] λx1 + (1− λ)x2 ∈ Sott.

Dimostrazione Per prima cosa notiamo che x1, x2 ∈ Sott implica x1, x2 ∈Sa e quindi, essendo Sa un insieme convesso si ha

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

cioe l’intero segmento tra x1 e x2 appartiene a Sa. Inoltre x1, x2 ∈ Sottimplica cTx1 = cTx2 (il valore della funzione obiettivo e lo stesso nei duepunti) e quindi, sfruttando la linearita della funzione obiettivo si ha

∀ λ ∈ [0, 1] cT (λx1 + (1− λ)x2) = λcTx1 + (1− λ)cTx2 =

= λcTx1 + (1− λ)cTx1 = cTx1,

ovvero lungo tutti i punti del segmento il valore della funzione obiettivo elo stesso di x1 e x2 e quindi anche tali punti appartengono a Sott come sivoleva dimostrare.

Siamo ora pronti a individuare tutte le forme possibili di Sott al variaredi Sa.

Caso 1 Sa = ∅. In tal caso, essendo Sott un sottinsieme di Sa, puo soloessere Sott = ∅.

Caso 2 Sa 6= ∅ e poliedro convesso. Un poliedro convesso e un insie-me chiuso e limitato, mentre la funzione obiettivo e lineare e quindicertamente continua. Di conseguenza, il Teorema di Weierstrass ga-rantisce l’esistenza di almeno una soluzione ottima, ovvero Sott 6= ∅.Sono possibili due sottocasi.

Caso 2.1 Sott e costituito da un solo punto.

Caso 2.2 Sott e costituito da un insieme infinito e limitato di punti.

Page 18: Programmazione Lineare - di.unito.it

18 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Si noti che l’Osservazione 5 esclude la possibilita di un numero finitodi punti in Sott, mentre la limitatezza di Sott e garantita dal fatto chee un sottinsieme di Sa che a sua volta e un poliedro convesso e quindie limitato.

Caso 3 Sa 6= ∅ e troncone. Sono possibili quattro sottocasi.

Caso 3.1 Sott = ∅ in quanto l’obiettivo e illimitato, ovvero esisteuna sequenza infinita di punti {xk} di Sa lungo cui la funzioneobiettivo cresce a +∞. Formalmente:

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

Caso 3.2 Sott e costituito da un solo punto.Caso 3.3 Sott e costituito da un insieme infinito e limitato di punti.Caso 3.4 Sott e costituito da un insieme infinito e illimitato di punti.

Per illustrare tramite esempi tutti i vari casi e sottocasi, introduciamo larisoluzione grafica dei problemi di Programmazione Lineare, utilizzabile perproblemi con due sole variabili. Per quanto i problemi reali abbiano moltopiu di due variabili e non si possono risolvere graficamente, la risoluzionegrafica aiuta a visualizzare e a meglio comprendere tutti i casi possibili. Perdescrivere la risoluzione grafica consideriamo il seguente esempio:

max x1 + 2x2

x1 + x2 ≤ 1x1, x2 ≥ 0

Per prima cosa disegniamo la regione ammissibile Sa. Poi prendiamo lafunzione obiettivo e poniamola uguale a 0 e quindi cTx = 0 nel caso generalee x1 + 2x2 = 0 nell’esempio. Questa e una retta che passa per l’origine checontiene tutti i punti in R2 con valore della funzione obiettivo pari a 0. Oravoglio individuare qual e la direzione di crescita del fascio di rette

cTx = k, k ∈ R

parallele alla retta cTx = 0 passante per l’origine. Nell’esempio avremo

x1 + 2x2 = k, k ∈ R

fascio di rette parallele a x1 + 2x2 = 0. Possiamo individuare la direzionedi crescita per esempio tracciando la retta cTx = 1 e la direzione di crescitasara quella che va dalla retta cTx = 0 verso la retta cTx = 1. In Figura1.2 la direzione di crescita per il nostro esempio e indicata con una frecciasulla retta x1 + 2x2 = 0. A questo punto sono possibili due casi:

Page 19: Programmazione Lineare - di.unito.it

1.2. TEORIA DELLA PROGRAMMAZIONE LINEARE 19

@@@@@@@@@@@@@@@@

HHHHHHHHHHHHHHHHHHHHH

Sa

x1+2x2=0

O

A

B (0,1)

(1,0)

Figura 1.2:

Caso 1 Muovendomi dalla retta cTx = 0 verso la direzione di crescita hoalmeno una retta del fascio con intersezione non vuota con Sa. In talcaso abbiamo due sottocasi possibili.

Caso 1.1 Esiste un valore k tale che la retta cTx = k ha intersezionenon vuota con Sa mentre tutte le retta cTx = k per k > k hannointersezione vuota con Sa. In tal caso k e il valore ottimo delproblema e l’intersezione della retta cTx = k con Sa costituiscel’insieme Sott.

Caso 1.2 Esiste un K ≥ 0 tale che per ogni k ≥ K la retta cTx = kha intersezione non vuota con Sa. In tal caso ci troviamo nellasituazione in cui Sott = ∅ in quanto il problema ha obiettivoillimitato.

Caso 2 Muovendomi dalla retta cTx = 0 verso la direzione di crescita nonho alcuna retta del fascio con intersezione non vuota con Sa. In talcaso mi muovo nella direzione di decrescita e mi arresto con la prima

Page 20: Programmazione Lineare - di.unito.it

20 CAPITOLO 1. PROGRAMMAZIONE LINEARE

retta cTx = k che ha intersezione non vuota con Sa (quindi per ognik > k si ha che la retta cTx = k ha intersezione vuota con Sa). Ilvalore k e il valore ottimo del problema e l’intersezione della rettacTx = k con Sa rappresenta l’insieme Sott.

Nel nostro esempio si puo vedere che ci si trova nel Sottocaso 1.1 con k = 2 eSott ristretto al solo punto B di coordinate (0, 1). Come esercizio si applichiora la risoluzione grafica ai seguenti esempi riconoscendo in essi tutti i casipossibili per Sott precedentemente elencati.

max x1 + x2

x1 + x2 ≤ 1x1, x2 ≥ 0

max x1 + x2

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

x1, x2 ≥ 0

max −x1

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

x1, x2 ≥ 0

max −x2

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

x1, x2 ≥ 0

max x1 − x2

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

x1, x2 ≥ 0

Page 21: Programmazione Lineare - di.unito.it

1.2. TEORIA DELLA PROGRAMMAZIONE LINEARE 21

La risoluzione grafica di questi esempi mostra anche che, quando Sott 6= ∅,tale insieme contiene sempre almeno un vertice. Non e un caso. Vale infattiil seguente teorema molto importante e noto come Teorema Fondamentaledella Programmazione Lineare.

Teorema 3 Sia dato un problema di PL in forma canonica. Se Sott 6= ∅allora almeno un punto di Sott e un vertice di Sa.

Dimostrazione Indichiamo con v1, . . . , vk i vertici di Sa e, nel caso in cuiSa sia un troncone, indichiamo con r1, . . . , rh i raggi estremi di Sa. SeSott 6= ∅, sia x∗ ∈ Sott.Utilizzeremo una dimostrazione per assurdo. Per assurdo supponiamo che

v1, . . . , vk 6∈ Sott

cioe supponiamo che nessun vertice di Sa appartenga a Sott. In particolareavremo

cT vi < cTx∗ i = 1, . . . , k (1.1)

In base al Teorema 2, poiche x∗ ∈ Sa avremo che

∃ λ∗1, . . . , λ∗k ≥ 0,k∑i=1

λ∗i = 1, ∃ µ∗1, . . . , µ∗h ≥ 0 (1.2)

tali che

x∗ =k∑i=1

λ∗i vi +h∑j=1

µ∗jrj .

Quindi avremo

cTx∗ = cT

k∑i=1

λ∗i vi +h∑j=1

µ∗jrj

e per la linearita della funzione obiettivo

cTx∗ =k∑i=1

λ∗i (cT vi) +

h∑j=1

µ∗j (cT rj).

Per prima cosa dimostriamo che

cT rj ≤ 0 j = 1, . . . , h. (1.3)

Page 22: Programmazione Lineare - di.unito.it

22 CAPITOLO 1. PROGRAMMAZIONE LINEARE

La dimostrazione e per assurdo. Supponiamo infatti che esista unraggio estremo rj tale che

cT rj > 0 (1.4)

Poiche rj e un raggio, in base alla Definizione 8 di raggio avremo che

∀ λ ≥ 0 : x∗ + λrj ∈ Sa.

In particolare, se fisso λ = 1, ottengo un punto

x = x∗ + rj ∈ Sa.

Calcoliamo ora il valore della funzione obiettivo in x:

cTx = cT (x∗ + rj) = cTx∗ + cT rj

Ma, in base a (1.4) possiamo concludere che

cTx > cTx∗,

il che contraddice l’ottimalita di x∗.

Ora, in base a (1.2) e (1.3) avremo

cTx∗ =k∑i=1

λ∗i (cT vi) +

h∑j=1

µ∗j︸︷︷︸≥0

(cT rj)︸ ︷︷ ︸≤0

.

da cui

cTx∗ ≤k∑i=1

λ∗i (cT vi).

Ma ora possiamo sfruttare (1.1):

cTx∗ ≤k∑i=1

λ∗i (cT vi)︸ ︷︷ ︸<cT x∗

<k∑i=1

λ∗i (cTx∗).

(si noti che lo strettamente minore vale perche almeno uno dei λ∗i e stret-tamente positivo in quanto, in base a (1.2), la loro somma deve essere paria 1). Poiche cTx∗ non dipende dall’indice i della sommatoria, lo possiamoportare fuori dalla stessa e quindi

cTx∗ < (cTx∗)k∑i=1

λ∗i .

Page 23: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 23

Ma ora in base a (1.2) abbiamo che∑ki=1 λ

∗i = 1, da cui

cTx∗ < cTx∗

il che e assurdo.

Questo risultato e alla base della procedura di risoluzione che descrive-remo, l’algoritmo del simplesso. Infatti, tale algoritmo ricerca la soluzioneottima cercando di spostarsi ad ogni iterazione in modo intelligente da unvertice 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 dellafunzione obiettivo maggiore.

1.3 L’algoritmo del simplesso

Prima di poter descrivere l’algoritmo del simplesso avremo bisogno di in-trodurre alcune definizioni. Supponiamo di avere un generico problema diPL in forma canonica:

max cTx

aTi x ≤ bi i = 1, . . . ,mxj ≥ 0 j = 1, . . . , n

A tale formulazione possiamo aggiungere una variabile ui per ogni vincolodefinita nel modo seguente

ui = bi − aTi x

e vincolata ad assumere valori ≥ 0. Si noti che ui = bi− aTi x e ui ≥ 0 e deltutto equivalente a scrivere aTi x ≤ bi. Inoltre ui = 0 equivale all’iperpianoaTi x = bi. Aggiungiamo inoltre una variabile z per l’obiettivo definita nelmodo seguente

z = cTx.

Quindi possiamo riformulare il nostro problema nel modo che segue:

max z = cTx

ui = bi − aTi x i = 1, . . . ,mxj ≥ 0 j = 1, . . . , nui ≥ 0 i = 1, . . . ,m

Diamo ora la seguente definizione.

Page 24: Programmazione Lineare - di.unito.it

24 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Definizione 10 Un sottinsieme {y1, . . . , yn} delle n+m variabili {x1, . . . , xn, u1, . . . , um}tale che gli iperpiani

y1 = 0, · · · , yn = 0

sono tra loro linearmente indipendenti, viene detto base del problema di PL.Le variabili y1, . . . , yn vengono dette variabili in base, mentre le rimanentivariabili, indicate con yn+1, . . . , yn+m, vengono dette variabili fuori base.

Si consideri il seguente esempio:

max x2

−x1 + x2 ≤ 1x1 + x2 ≤ 3x1 ≤ 3

x1, x2 ≥ 0

Con l’introduzione delle variabili u1, u2, u3 relative ai vincoli e della varia-bile z relativa all’obiettivo, il problema viene riscritto nel modo seguente:

max z = x2

u1 = x1 − x2 + 1u2 = −x1 − x2 + 3u3 = −x1 + 3x1, x2 ≥ 0

u1, u2, u3 ≥ 0

Si verifichi che {x1, x2}, {x2, u1}, {x2, u2} e {x2, u3} sono basi, mentre{x1, u3} non e una base.

Data una base {y1, . . . , yn} e sempre possibile esprimere tutte le variabilifuori base yn+1, . . . , yn+m e la variabile z dell’obiettivo come combinazionelineare delle variabili in base piu un termine noto, ovvero

yn+1 = α11y1 + · · ·+ α1nyn + β1

... =... (1.5)

yn+m = αm1y1 + · · ·+ αmnyn + βm

z = γ1y1 + · · ·+ γnyn + γ0

Queste m+ 1 equazioni vengono rappresentate tramite la Tabella 1.4. Per

Page 25: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 25

Tabella 1.4:y1 · · · yh · · · yn

yn+1 α11 · · · α1h · · · α1n β1

......

......

......

...yn+k αk1 · · · αkh · · · αkn βk

......

......

......

...yn+m αm1 · · · αmh · · · αmn βmz γ1 · · · γh · · · γn γ0

Tabella 1.5:x1 x2

u1 1 -1 1u2 -1 -1 3u3 -1 0 3z 0 1 0

le base {x1, x2} dell’esempio abbiamo

u1 = x1 − x2 + 1u2 = −x1 − x2 + 3u3 = −x1 + 3

z = x2

con la relativa Tabella 1.5. Per la base {x2, u1} avremo

x1 = x2 + u1 − 1u2 = −2x2 − u1 + 4u3 = −x2 − u1 + 4

z = x2

con la relativa Tabella 1.6. Per la base {x2, u2} avremo

x1 = −x2 − u2 + 3u1 = −2x2 − u2 + 4u3 = x2 + u2 + 0

z = x2

Page 26: Programmazione Lineare - di.unito.it

26 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Tabella 1.6:x2 u1

x1 1 1 -1u2 -2 -1 4u3 -1 -1 4z 0 1 0

Ricavare la tabella relativa. Per la base {x2, u3} avremo

x1 = −u3 + 3u1 = −x2 − u3 + 4u2 = −x2 + u3 + 0

z = x2

Ricavare la tabella relativa.

Diamo ora la definizione di basi adiacenti.

Definizione 11 Due basi si definiscono adiacenti se differiscono per unasola variabile in base.

Nell’esempio le basi {x1, x2} e {x2, u1} sono adiacenti. Diamo ora l’impor-tante definizione di soluzione di base.

Definizione 12 Ad una base {y1, . . . , yn} e associato un punto detto solu-zione di base, ottenuto ponendo a 0 tutte le variabili in base, ovvero

yj = 0 j = 1, . . . , n.

Dalle equazioni (1.5) si ha che

yn+i = βi i = 1, . . . ,m

mentre il valore dell’obiettivo in corrispondenza di tale soluzione di base e

z = γ0.

La soluzione di base viene detta ammissibile (ovvero e un punto in Sa) se

βi ≥ 0 i = 1, . . . ,m.

Seβi 6= 0 i = 1, . . . ,m

si parla di soluzione di base non degenere, altrimenti si parla di soluzionedi base degenere.

Page 27: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 27

Vale la seguente osservazione.

Osservazione 6 Non c’e corrispondenza biunivoca tra basi e soluzioni dibase. Infatti, nel caso degenere (e solo in quello), a basi distinte puocorrispondere la stessa soluzione di base.

Nell’esempio, alla base {x1, x2} corrisponde la soluzione di base ammissibilee non degenere

x1 = x2 = 0 u1 = 1, u2 = 3, u3 = 3

con z = 0; alla base {x2, u1} e associata la soluzione di base non ammissibile

u1 = x2 = 0 x1 = −1, u2 = 4, u3 = 4

con z = 0; alla base {x2, u2} e associata la soluzione di base ammissibile edegenere

u2 = x2 = 0 x1 = 3, u1 = 4, u3 = 0

con z = 0; alla base {x2, u3} e associata la soluzione di base ammissibile edegenere

u3 = x2 = 0 x1 = 3, u1 = 4, u2 = 0

con z = 0. Si noti che le due basi degeneri rappresentano la stessa soluzionedi base.

Le soluzioni di base ammissibili sono importanti per il seguente risultato.

Osservazione 7 Le soluzioni di base ammissibili coincidono con i verticidi Sa.

Dimostrazione Le soluzioni di base sono ottenute ponendo a 0 le n varia-bili in base y1, . . . , yn e quindi una soluzione di base appartiene a n iperpianigeneratori y1 = 0, . . . , yn = 0 che, per definizione di base, sono tra loro li-nearmente indipendenti. Inoltre l’ammissibilita garantisce che la soluzionedi base appartenga a Sa e quindi e un vertice di Sa.

In Figura 1.3 si vede come la soluzione di base O ammissibile relativa allabase {x1, x2} e un vertice di Sa e lo stesso per la soluzione di base A cor-rispondente alle basi {x2, u2} e {x2, u3}. Notiamo anche che dal punto divista geometrico le soluzioni di base degeneri coincidono con i vertici cheappartengono a piu di n iperpiani generatori. Nell’esempio, dove n = 2, ilvertice degenere A appartiene a 3 iperpiani generatori.

Vogliamo ora vedere come ci si puo spostare da una base verso una adessa adiacente. Cio corrisponde all’operazione di cardine.

Page 28: Programmazione Lineare - di.unito.it

28 CAPITOLO 1. PROGRAMMAZIONE LINEARE

@@@@@@@@@@@@@@@@@@@@@@@@@

������������������������

@@

Sa

O

A

B

C

U3=0U1=0U2=0

Figura 1.3:

1.3.1 L’operazione di cardine

Suppponiamo di avere una base

{y1, . . . , yh−1, yh, yh+1, . . . , yn}

cui e associata la Tabella 1.7. Supponiamo ora di voler creare una baseadiacente a questa togliendo yh dalla base e sostituendolo con yn+k. Perprima cosa ci si deve chiedere se l’insieme di variabili

{y1, . . . , yh−1, yn+k, yh+1, . . . , yn}

e una base (si ricordi che non e sufficiente che sia formata da n variabili, maoccorre anche che sia soddisfatta una condizione di indipendenza lineare tra

Page 29: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 29

Tabella 1.7:y1 · · · yh · · · yn

yn+1 α11 · · · α1h · · · α1n β1

......

......

......

...yn+k αk1 · · · αkh · · · αkn βk

......

......

......

...yn+m αm1 · · · αmh · · · αmn βmz γ1 · · · γh · · · γn γ0

gli iperpiani corrispondenti). Si puo dimostrare che e una base se e solo seαkh 6= 0. Vogliamo ora determinare la nuova tabella relativa a questa base.Dall’equazione

yn+k = αk1y1 + · · ·+ αkhyh + · · ·+ αknyn + βk

possiamo ricavare yh come combinazione lineare delle variabili

y1, . . . , yh−1, yn+k, yh+1, . . . , yn

piu un termine noto:

yh = −αk1

αkhy1 − · · ·+

1αkh

yn+k − · · · −αknαkh

yn −βkαkh

. (1.6)

A questo punto possiamo prendere le altre equazioni per i 6= k

yn+i =n∑

j=1,j 6=h

αijyj + αihyh + βi,

e quella per la variabile z

z =n∑

j=1,j 6=h

γjyj + γhyh + γ0

e sostituire le occorrenze di yh con la formula (1.6). Fatti un po’ di calcolisi ottiene per i 6= k

yn+i =[αi1 − αih

αk1

αkh

]y1+· · ·+ αih

αkhyn+k+· · ·+

[αin − αih

αknαkh

]yn+

[βi − αih

βkαkh

],

e, per la variabile z,

z =[γ1 − γh

αk1

αkh

]y1+· · ·+ γh

αkhyn+k+· · ·+

[γn − γh

αknαkh

]yn+

[γ0 − γh

βkαkh

].

La nuova tabella sara quindi la Tabella 1.8.

Page 30: Programmazione Lineare - di.unito.it

30 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Tabella 1.8:y1 · · · yn+k · · · yn

yn+1

[α11 − α1h

αk1αkh

]· · · α1h

αkh· · ·

[α1n − α1h

αknαkh

] [β1 − α1h

βkαkh

]...

......

......

......

yh − αk1αkh

· · · 1αkh

· · · −αknαkh− βkαkh

......

......

......

...yn+m

[αm1 − αmh αk1

αkh

]· · · αmh

αkh· · ·

[αmn − αmh αknαkh

] [βm − αmh βk

αkh

]z

[γ1 − γh αk1

αkh

]· · · γh

αkh· · ·

[γn − γh αknαkh

] [γ0 − γh βk

αkh

]1.3.2 I passi dell’algoritmo del simplesso

Siamo ora pronti a descrivere una generica iterazione dell’algoritmo del sim-plesso. Si suppone di avere a disposizione la base ammissibile {y1, . . . , yn}(βi ≥ 0, i = 1, . . . ,m) con la relativa Tabella 1.7. Non sempre si avra su-bito a disposizione una base ammissibile. Ci porremo pero solo in seguitoil problema di trovarne una. Per ora supporemo che la nostra base sia giaammissibile.

Passo 1 - Verifica di ottimalita Si verifichi se la soluzione di base cor-rente sia ottima o meno. La verifica si effettua controllando i valori γj ,j = 1, . . . , n, dell’ultima riga, detti anche coefficienti di costo ridottodelle variabili in base. Condizione sufficiente perche la soluzione siaottima e che essi siano tutti ≤ 0. Se la condizione

γj ≤ 0 j = 1, . . . , n

e soddisfatta restituisco la soluzione di base corrente

yj = 0 j = 1, . . . , n yn+i = βi i = 1, . . . ,m

come soluzione ottima. Se la condizione non e soddisfatta, si vada alPasso 2.Motivazione Dalla tabella sappiamo che

z = γ1y1 + · · ·+ γnyn + γ0 (1.7)

Nella soluzione di base corrente il valore dell’obiettivo z e pari a γ0,ottenuto sostituendo yj = 0, j = 1, . . . , n, in (1.7). Inoltre, in Sa,dove yj ≥ 0, j = 1, . . . , n, si ha

z = γ1︸︷︷︸≤0

y1︸︷︷︸≥0

+ · · ·+ γn︸︷︷︸≤0

yn︸︷︷︸≥0

+γ0 ≤ γ0

Page 31: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 31

e quindi γ0 e il valore massimo dell’obiettivo raggiungibile in Sa.

Passo 2 - Scelta della colonna del cardine Se non possiamo conclu-dere che la soluzione e ottima, esiste almeno un γi > 0. In particolareconsideriamo

γh = max{γj} > 0.

(se piu γi assumono il valore massimo si seleziona, per convenzione,il primo da sinistra). La variabile yh sara la variabile da far uscire dibase e quindi la colonna h e la colonna del cardine.Motivazione Se voglio far crescere z devo selezionare una variabileyh con γh > 0.

Passo 3 - Verifica di illimitatezza Verifico se il problema non ha solu-zioni ottime in quanto l’obiettivo e illimitato. Una condizione suffi-ciente per l’illimitatezza dell’obiettivo e che

αih ≥ 0 i = 1, . . . ,m,

cioe tutti gli elementi lungo la colonna del cardine sono non negativi.Se la condizione e soddisfatta, posso concludere che Sott = ∅ in quantol’obiettivo e illimitato. Se la condizione non e soddisfatta, si vada alPasso 4.Motivazione Se faccio crescere yh e tengo fisso le altre variabili inbase, cioe yj = 0, j = 1, . . . , n, j 6= h, avro:

yn+i = αih︸︷︷︸≥0

yh︸︷︷︸≥0

+βi ≥ βi ≥ 0 ∀ yh ≥ 0

z = γh︸︷︷︸>0

yh + γ0 −→︸︷︷︸yh→+∞

+∞.

Passo 4 - Scelta della riga del cardine Sia yn+k una variabile fuori ba-se con αkh < 0 e tale che

βk−αkh

= min{

βi−αih

: αih < 0}

(se il minimo e ottenuto in corrispondenza di piu di una variabile sisceglie, per convenzione, la prima dall’alto). La variabile yn+k sarala variabile da far entrare in base e quindi la riga relativa sara la rigadel cardine.Motivazione Facendo crescere yh avro per αih ≥ 0

yn+i = αih︸︷︷︸≥0

yh︸︷︷︸≥0

+βi ≥ βi ≥ 0 ∀ yh ≥ 0

Page 32: Programmazione Lineare - di.unito.it

32 CAPITOLO 1. PROGRAMMAZIONE LINEARE

ma per le variabili yn+i con αih < 0, si ha che

yn+i = αih︸︷︷︸<0

yh︸︷︷︸≥0

+βi ≥ 0 solo per 0 ≤ yh ≤ −βiαih

.

Se voglio rimanere in Sa posso far crescere yh solo fino al minimo deivalori − βi

αihper αih < 0.

Passo 5 - operazione di cardine Eseguo l’operazione di cardine con car-dine αkh (che e < 0 e quindi, come richiesto, anche 6= 0). Ottengo laTabella 1.8 e con la nuova tabella e la nuova base ritorno al Passo 1.

La seguente osservazione mostra la situazione al termine di un’iterazionedell’algoritmo del simplesso.

Osservazione 8 Si noti che al termine di un’iterazione dell’algoritmo delsimplesso si ha che:

1. la nuova base e adiacente alla precedente;

2. la nuova base e anch’essa ammissibile (si veda la motivazione delPasso 4);

3. se βk > 0, la soluzione di base (il vertice) relativo alla nuova base(quella ottenuta sostituendo yh con yn+k) e diversa dalla soluzione dibase relativa alla vecchia base. Se βk = 0, allora la nuova e la vecchiabase rappresentano la stessa soluzione di base.

4. Se βk > 0, il valore dell’obiettivo per la nuova soluzione di base e su-periore rispetto al valore dell’obiettivo γ0 della vecchia base. Infatti, ilnuovo valore dell’obiettivo, che si legge in basso a destra nella Tabella1.8, e:

γ0 − γh︸︷︷︸>0

︷︸︸︷βk>0

αkh︸︷︷︸<0

> γ0.

Una conseguenza di questa osservazione e la seguente.

Osservazione 9 Se non ci sono vertici degeneri, allora l’algoritmo delsimplesso termina in un numero finito di iterazioni.

Dimostrazione Se non ci sono vertici degeneri, allora ad ogni iterazioneβk > 0 e quindi in base ai punti 3. e 4. dell’Osservazione 8 si ha che il nuovovertice e distinto e con valore dell’obiettivo strettamente maggiore rispetto

Page 33: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 33

al precedente. Essendo finito il numero di vertici (si veda l’Osseravzione3), anche l’algoritmo del simplesso deve terminare in un numero finito diiterazioni.

Nel caso ci siano vertici degeneri si puo verificare la situazione di ciclaggio.Nell’esempio in Figura 1.4 trovandoci nel vertice degenere A rappresenta-to dalla base {u1, u2}, l’algoritmo del simplesso puo generare la seguentesequenza di basi che rappresentano tutte lo stesso vertice A:

{u1, u2} → {u1, u4} → {u2, u4} → {u2, u3} → {u1, u2}.

Una volta tornato nella base {u1, u2} questa sequenza di basi verra di nuovoripetuta all’infinito senza che l’algoritmo termini. Anche se non le vedremo,esistono comunque delle regole particolari per la scelta del cardine, detteregole anticiclaggio, che consentono all’algoritmo di terminare in un numerofinito di iterazioni.

��������������J

JJJJJJJJJJJJ

�������JJ

z

Sa

U1=0

U2=0

U3=0

U4=0

A

Figura 1.4:

Page 34: Programmazione Lineare - di.unito.it

34 CAPITOLO 1. PROGRAMMAZIONE LINEARE

1.3.3 Interpretazione geometrica del cambio di basenel simplesso

Da un punto di vista geometrico il passaggio dalla base {y1, . . . , yh, . . . , yn}alla base {y1, . . . , yn+k, . . . , yn} ha la seguente interpretazione. Facciamocrescere la sola variabile yh mentre teniamo tutte le altre variabili yj , j =1, . . . , n, j 6= h, fisse a 0. Quindi ci spostiamo sullo spigolo di Sa individuatodagli n− 1 iperpiani generatori

yj = 0, j = 1, . . . , n, j 6= h.

Muovendoci lungo questo spigolo ci arrestiamo solo quando una variabilefuroi base yn+k diventa uguale a 0, ovvero quando incontriamo l’iperpianoyn+k = 0. Quindi ci arrestiamo in corrispondenza del vertice intersezionedei seguenti iperpiani generatori

yn+k = 0, yj = 0, j = 1, . . . , n, j 6= h.

1.3.4 Sufficienza della condizione di ottimalita

Descrivendo la condizione di ottimalita γj ≤ 0, j = 1, . . . , n, al Passo 1.dell’algoritmo del simplesso, si e detto che e solo una condizione sufficiente.Infatti, (nel solo caso degenere) puo succedere che una base abbia comesoluzione di base una soluzione ottima ma non soddisfi tale condizione. Nelseguente esempio

max x1

x1 ≤ 0x2 ≤ 1

x1, x2 ≥ 0

si puo verificare che la base {x1, x2} corrsiponde a una soluzione di baseche e anche soluzione ottima, ma non soddisfa le condizioni di ottimalita.D’altra parte la base {u1, x2} che rappresenta la stessa soluzione di base,soddisfa tali condizioni. Vale la seguente osservazione.

Osservazione 10 Dato un vertice ottimo, esiste sempre almeno una baseche lo rappresenta che soddisfa le condizioni di ottimalita.

1.3.5 Unicita della soluzione ottima

Quando l’algoritmo del simplesso termina, ci restituisce una soluzione dibase (un vertice) ottimo. Ci si puo chiedere se tale soluzione ottima sia

Page 35: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 35

unica oppure no. Nella tabella ottima si ha che la condizione di ottimalita

γj ≤ 0 j = 1, . . . , n,

e soddisfatta, ma sono possibili i seguenti casi.

Caso 1 γj < 0, j = 1, . . . , n : in tal caso si ha per l’obiettivo z

z = γ1︸︷︷︸<0

y1︸︷︷︸≥0

+ · · ·+ γn︸︷︷︸<0

yn︸︷︷︸≥0

+γ0 ≤ γ0

e il valore γ0 e raggiungibile solo se tutte le variabili yj sono pari a0 e quindi solo in corrispondenza del vertice ottimo. Di conseguenza,tale vertice e anche l’unica soluzione ottima.

Caso 2 Esiste h tale che γh = 0. In tal caso si possono avere i seguentisottocasi:

Caso 2.1 αih ≥ 0 per ogni i = 1, . . . ,m. In tal caso

yn+i = αih︸︷︷︸≥0

yh︸︷︷︸≥0

+βi ≥ βi ≥ 0 ∀ yh ≥ 0

z = γh︸︷︷︸=0

yh + γ0 = γ0 ∀ yh ≥ 0

quindi posso far crescere yh all’infinito senza mai uscire da Sa econ l’obiettivo sempre pari al valore ottimo γ0. Quindi abbiamouno spigolo illimitato di soluzioni ottime.

Caso 2.2 Esistono αih < 0 ma per ogni αih < 0 si ha βi > 0. Intal caso non posso far crescere yh all’infinito ma fino ad un certovalore positivo (il valore dato dal criterio dei minimi rapportivisto nel Passo 4. dell’algoritmo del simplesso). Quindi esistecertamente uno spigolo limitato di soluzioni ottime.

Caso 2.3 esiste k tale che αkh < 0 e βk = 0. In tal caso non possia-mo dire nulla sull’esistenza di altre soluzioni ottime senza altreinformazioni.

Come esercizio si riconoscano nelle Tabelle 1.9-1.13, tutte ottime, i casidescritti sopra.

Page 36: Programmazione Lineare - di.unito.it

36 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Tabella 1.9:x1 x2

u1 -1 -1 1u2 -1 0 1z -1 -1 0

Tabella 1.10:x1 x2

u1 1 1 1u2 1 0 2z -1 0 0

Tabella 1.11:x1 x2

u1 -1 -1 1u2 -1 0 1z -1 0 0

Tabella 1.12:x1 x2 x3

u1 -1 1 0 0u2 1 -1 0 0u3 0 0 -1 2z 0 0 -1 0

Tabella 1.13:x1 x2 x3

u1 -1 0 0 0u2 0 -1 0 0u3 0 0 -1 0z 0 -1 -1 0

Page 37: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 37

1.3.6 Come ottenere una soluzione di base ammissibile

L’algoritmo del simplesso richiede di avere all’inizio una soluzione di baseammissibile. Non sempre pero questa e a disposizione (e a volte non esisteneppure). Vedremo ora due procedure, la fase di avvicianmento a Sa e ilmetodo due fasi, che consentono di determinere (se esiste) una base ammi-sibile con cui cominciare ad utilizzare l’algoritmo del simplesso. Per primavedremo la fase di avvicinamento a Sa.

Fase di avvicinamento a Sa

Supponiamo di avere una base {y1, . . . , yn} non ammissibile (cioe con al-meno un valore βi negativo). Vogliamo ora descrivere una procedura che ciconsenta di stabilire se Sa = ∅ oppure che ci restituisca una base ammissi-bile, la fase di avvicinamento a Sa (in seguito vedremo anche il metodo duefasi). Un’iterazione della fase di avvicinamento a Sa segue i seguenti passi.

Passo 1 Si scelga la riga r con βr < 0 il piu piccolo possibile (se vi e piudi una riga con βi minimo si seleziona, per convenzione, la prima traqueste dall’alto).

Passo 2 Seαrj ≤ 0 j = 1, . . . , n (1.8)

allora possiamo concludere che Sa = ∅. Infatti si avrebbe in Sa che

yn+r = αr1︸︷︷︸≤0

y1︸︷︷︸≥0

+ · · ·+ αrn︸︷︷︸≤0

yn︸︷︷︸≥0

+βr ≤ βr < 0,

da cui yn+r non puo mai essere ≥ 0 come invece e richiesto per l’ap-partenenza a Sa. Se invece la condizione (1.8) non e soddisfatta sivada al Passo 3.

Passo 3 Si scelga come colonna del cardine la prima colonna h da sinistratale che αrh > 0.

Passo 4 Come riga del cardine si scelga la seguente:

• Se esiste almeno una riga i tale che αih < 0 e βi ≥ 0, allorasi selezioni come riga del cardine la riga k tale che αkh < 0 eβk ≥ 0 e

− βkαkh

= min{− βiαih

, αih < 0, βi ≥ 0}.

(se il minimo si trova in corrispondenza di piu righe si sceglie,per convenzione, la prima dall’alto).

Page 38: Programmazione Lineare - di.unito.it

38 CAPITOLO 1. PROGRAMMAZIONE LINEARE

• Altrimenti si scelga come riga del cardine la riga k con αkh > 0e βk < 0 e

− βkαkh

= max{− βiαih

, αih > 0, βi < 0}.

(se il massimo si trova in corrispondenza di piu righe si sceglie,per convenzione, la prima dall’alto).

Passo 4 Si esegua l’operazione di cardine con cardine αkh. Se la nuovabase e ammissibile si passi a risolvere il problema con l’algoritmodel simplesso, altrimenti si ritorni con la nuova base al Passo 1 e siripetano i passi visti.

Come esercizio possiamo applicare la procedura ai seguenti due esempi.

max x1 + 2x2

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

max x1 + 2x2

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

Metodo due fasi per la determinazione di una base ammissibile

Descriveremo ora un secondo metodo che consente di determinare una baseammissibile di un problema di PL o concludere che Sa = ∅, il metodo duefasi. Supponiamo di avere il problema di PL

max z = cTx

ui = bi − aTi x i = 1, . . . ,mxj ≥ 0 ui ≥ 0 i = 1, . . . ,m j = 1, . . . , n

Chiameremo questo problema problema di II fase. Associamo a tale pro-blema un altro problema, detto problema di I fase, nel modo seguente

max t = −∑mi=1 si

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

Page 39: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 39

Si noti che, essendo si ≥ 0 ∀ i, allora

max t = −m∑i=1

si ≤ 0,

e quindi l’obiettivo del problema non puo essere illimitato. Inoltre, labase {x1, . . . , xn, u1, . . . , um} e ammissibile per questo problema. Infattiponendo a zero x1, . . . , xn, u1, . . . , um si ottiene

si = bi se bi ≥ 0, si = −bi se bi < 0.

Quindi il problema di I fase non e illimitato e ha regione ammissibile nonvuota. Si puo quindi concludere che ammette soluzione ottima. Si puodimostrare il seguente risultato.

Osservazione 11 Si ha che

max t = 0

se e solo se la regione ammissibile del problema originario, detto di II fase,e non vuota.

Quindi, se risolviamo il problema di I fase abbiamo due possibilita.

max t < 0 In questo caso possiamo immediatamente concludere che la re-gione ammissibile del problema originario, detto di II fase, e vuota.

max t = 0 In questo caso esiste certamente una base del problema di I fasecon tutte le variabili si in base. Scartando tali variabili dalla base, levariabili rimanenti formano una base per il problema originario, dettodi II fase.

Esempio 2 Si consideri il problema

max z = x1 + 2x2

u1 = −1 + x1 + x2

u2 = 2− x1 − x2

x1, x2 ≥ 0 u1, u2 ≥ 0

che chiameremo di II fase. A questo associeremo il seguente problema di Ifase.

max t = −s1 − s2

s1 = 1− x1 − x2 + u1

s2 = 2− x1 − x2 − u2

x1, x2 ≥ 0 u1, u2 ≥ 0 s1, s2 ≥ 0

Page 40: Programmazione Lineare - di.unito.it

40 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Tabella 1.14:x1 x2 u1 u2

s1 -1 -1 1 0 1s2 -1 -1 0 -1 2t 2 2 -1 1 -3z 1 2 0 0 0

Tabella 1.15:s1 x2 u1 u2

x1 -1 -1 1 0 1s2 1 0 -1 -1 1t -2 0 1 1 -1z -1 1 1 0 1

o, equivalentemente, sostituendo i valori delle si nell’obiettivo

max t = 2x1 + 2x2 − u1 + u2 − 3s1 = 1− x1 − x2 + u1

s2 = 2− x1 − x2 − u2

x1, x2 ≥ 0 u1, u2 ≥ 0 s1, s2 ≥ 0

Alla base ammissibile iniziale {x1, x2, u1, u2} corrisponde la Tabella 1.14.La scelta del cardine ricade sulla riga s1 e la colonna x1. Con l’operazionedi cardine si ottiene la Tabella 1.15. Il cardine successivo sara dato dallariga s2 e dalla colonna u1, da cui si ricava la Tabella 1.16. La nuovatabella e ottima e il valore ottimo e pari a 0. Quindi il problema originarioha regione ammissibile non vuota. Possiamo notare che tutte le variabilisi sono nella base ottima del problema di I fase. Rimuovendo dalla Tabella1.16 le colonne relative alle variabili s1 e s2 e la riga relativa all’obiettivot della I fase, otteniamo una tabella relativa alla base {x2, u2} ammissibile(ma non ottima) per il problema di II fase (vedi Tabella 1.17).

Tabella 1.16:s1 x2 s2 u2

x1 0 -1 -1 -1 2u1 1 0 -1 -1 1t -1 0 -1 0 0z 0 1 -1 -1 2

Page 41: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 41

Tabella 1.17:x2 u2

x1 -1 -1 2u1 0 -1 1z 1 -1 2

1.3.7 Problemi con vincoli di uguaglianza

Supponiamo ora di avere un problema in cui compaiono, oltre ai vincoli di≤, anche dei vincoli di uguaglianza:

max cTx

aTi x = bi i = 1, . . . ,m1

aTi x ≤ bi i = m1 + 1, . . . ,mxj ≥ 0 j = 1, . . . , n

Potremmo trasformare i vincoli di uguaglianza in vincoli di ≤ con le tec-niche viste in una delle prime lezioni ma qui vogliamo mostrare una va-riante dell’algoritmo del simplesso che tratta direttamente questi vincoli diuguaglianza. Possiamo riscrivere il problema nel modo seguente:

max z = cTx

vi = bi − aTi x i = 1, . . . ,m1

ui = bi − aTi x i = m1 + 1, . . . ,mxj ≥ 0 j = 1, . . . , nvi = 0 i = 1, . . . ,m1

ui ≥ 0 i = m1 + 1, . . . ,m

Chiameremo questo problema problema di II fase. A questo associamo ilseguente problema, detto problema di I fase:

max t = −∑m1i=1 vi = −

∑m1i=1(bi − aTi x)

vi = bi − aTi x i = 1, . . . ,m1

ui = bi − aTi x i = m1 + 1, . . . ,mxj ≥ 0 j = 1, . . . , nvi ≥ 0 i = 1, . . . ,m1

ui ≥ 0 i = m1 + 1, . . . ,m

Vale la seguente osservazione.

Page 42: Programmazione Lineare - di.unito.it

42 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Osservazione 12 Si ha che

max t ≤ 0,

ovvero il problema di I fase non puo essere illimitato.

Dimostrazione Nella regione ammissibile del problema di I fase si havi ≥ 0 e quindi

t = −m1∑i=1

vi ≤ 0

Si puo inoltre dimostrare che vale la seguente osservazione.

Osservazione 13 Si ha che

max t < 0

se e solo seSa = ∅,

cioe se e solo se il problema originario, detto di II fase, non ha alcunasoluzione ammissibile.

Quindi possiamo risolvere il problema di I fase ed avremo i seguenti casipossibili.

max t < 0 Allora possiamo concludere che Sa = ∅.

max t = 0 Allora Sa 6= ∅ (la soluzione ottima del problema di I fase e giauna soluzione ammissibile per il problema di II fase) e abbiamo duecasi possibili:

Caso 1 tutte le variabili vi sono nella base ottima del problema diI fase. In tal caso possiamo cominciare a risolvere subito ilproblema di II fase.

Caso 2 Alcune variabili vi non sono nella base ottima del problemadi I fase. In tal caso si operano, fino a quando e possibile, delleoperazioni di cardine per far entrare in base le variabili vi fuoribase facendo uscire solo variabili xj oppure ui. Quando cio none piu possibile, si comincia a risolvere il problema di II fase.

Quando si comincia a risolvere il problema di II fase, le variabili vi in ba-se (e quindi con valore pari a 0) non verranno mai fatte uscire dalla base

Page 43: Programmazione Lineare - di.unito.it

1.3. L’ALGORITMO DEL SIMPLESSO 43

(in modo che continuino ad avere valore pari a 0 come e richiesto dall’ap-partenenza a Sa). Quindi le relative colonne non verranno mai prese inconsiderazione nella scelta della colonna del cardine. Inoltre, nella verificadi ottimalita, i coefficienti di costo ridotto γi relativi a variabili vi possonoavere segno qualsiasi, non e cioe necessario che abbiano valore ≤ 0 (perconcludere che una soluzione e ottima tale condizione deve essere soddi-sfatta solo dai coefficienti di costo ridotto di variabili xj e ui che siano inbase). Infatti, nell’equazione dell’obiettivo z il termine γivi e sempre ugualea 0 in Sa indipendentemente dal segno di γi poiche in Sa si ha sempre vi = 0.

Come esercizio si risolvano i seguenti tre problemi

max 2x1 + x2

−x1 − x2 = −2x1 ≤ 1

x1, x2 ≥ 0

max 2x1 + x2 + x3

x1 + x2 + x3 = 3x1 − x2 + x3 = 1x1 + x3 = 2x1 ≤ 2

x1, x2, x3 ≥ 0

max x1 + x2

x1 + x2 = 3x1 ≤ 1x2 ≤ 1

x1, x2 ≥ 0

Page 44: Programmazione Lineare - di.unito.it

44 CAPITOLO 1. PROGRAMMAZIONE LINEARE

Page 45: Programmazione Lineare - di.unito.it

Capitolo 2

Dualita

Dato un problema di PL in forma canonica

max cTx

ATx ≤ bx ≥ 0

che chiameremo problema primale, possiamo associare ad esso un altroproblema di PL, detto problema duale, definito come segue

min bTx

Au ≥ cu ≥ 0

Indichiamo conDa = {u ∈ Rm : Au ≥ c, u ≥ 0}

la regione ammissibile del problema duale e con

Dott = {u∗ ∈ Da : bTu∗ ≤ bTu ∀ u ∈ Da}

l’insieme delle sue soluzioni ottime. Si puo notare che esiste una strettarelazione tra

• variabili del primale e vincoli del duale;

• vincoli del primale e variabili del duale.

In particolare notiamo che

45

Page 46: Programmazione Lineare - di.unito.it

46 CAPITOLO 2. DUALITA

1. nel primale ci sono n variabili esattamente come nel duale vi sono nvincoli. Inoltre, i coefficienti del j-esimo vincolo del duale coincidonocon i coefficienti della variabile xj nei vincoli del primale, mentre iltermine noto del j-esimo vincolo del duale coincide con il coefficientedi xj nell’obiettivo del primale.

2. Nel primale vi sono m vincoli esattamente come nel duale vi sonom variabili. Inoltre, i coefficienti dell’i-esima variabile ui del dualecoincidono con i coefficienti dell’i-esimo vincolo del primale, mentre ilcoefficiente di ui nell’obiettivo del duale coincide con il termine notodell’i-esimo vincolo del primale.

Come esercizio si ricavi il duale del seguente problema:

max x1 + x2 (2.1)3x1 + 2x2 ≤ 54x1 + 5x2 ≤ 4

x1 ≤ 2 (2.2)x1, x2 ≥ 0

Le soluzioni dei due problemi primale e duale sono fortemente legati traloro come dimostra una serie di risultati.

Osservazione 14 Per ogni x0 ∈ Sa e per ogni u0 ∈ Da si ha che

cTx0 ≤ bTu0.

Dimostrazione x0 ∈ Sa implica

ATx0 ≤ b

o, equivalentemente, prendendo la trasposta di entrambi i membri

bT ≥ xT0 A. (2.3)

Inoltre u0 ∈ Da implica u0 ≥ 0 e quindi, moltiplicando entrambi i membridi (2.3) per u0 si ottiene

bTu0 ≥ (xT0 A)u0 = xT0 (Au0). (2.4)

Ma ancora u0 ∈ Da implica anche

Au0 ≥ c

Page 47: Programmazione Lineare - di.unito.it

47

da cui, moltiplicando entrambi i membri per xT0 (che e ≥ 0 per l’apparte-nenza di x0 a Sa), si ottiene

xT0 (Au0) ≥ xT0 c = cTx0

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

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

cTx∗ = bTu∗

allora x∗ ∈ Sott e u∗ ∈ Dott.

Dimostrazione In base all’Osservazione 14 si ha che

∀ x ∈ Sa cTx ≤ bTu∗.

Ma essendo cTx∗ = bTu∗ si ha anche

∀ x ∈ Sa cTx ≤ cTx∗

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

Osservazione 16 Se uno dei due problemi ha obiettivo illimitato, alloral’altro ha regione ammissibile vuota.

Dimostrazione Dimostriamo che se l’obiettivo primale e illimitato, alloraDa = ∅ (la dimostrazione che l’obiettivo duale illimitato implica Sa = ∅ edel tutto analoga). Supponiamo per assurdo che Da 6= ∅ e sia u0 ∈ Da. Inbase all’Osservazione 14 si ha che

∀ x ∈ Sa cTx ≤ bTu0

e quindi l’obiettivo del primale e limitato dal valore bTu0, il che contraddicel’illimitatezza di tale obiettivo.

Osservazione 17 Il duale del problema duale coincide con il problemaprimale.

Page 48: Programmazione Lineare - di.unito.it

48 CAPITOLO 2. DUALITA

Dimostrazione Per determinare il duale del problema duale dobbiamoprima trasformare quest’ultimo in forma canonica nel modo seguente

−max −bTu−Au ≤ −c (2.5)u ≥ 0

(2.6)

Il duale di (2.5) e il seguente

−min −cTx−ATx ≥ −b

x ≥ 0

o, equivalentemente,

max cTx

ATx ≤ bx ≥ 0

che, come si vede, coincide con il primale.

Dimostreremo ora il I teorema della dualita.

Teorema 4 Uno dei due problemi ha soluzioni ottime se e solo se anchel’altro ha soluzioni ottime. Formalmente, Sott 6= ∅ se e solo se Dott 6= ∅.Inoltre, i valori ottimi dei due problemi coincidono.

Dimostrazione Per dimostrare questo risultato dobbiamo dapprima no-tare che ad ogni base del primale e strettamente legata, nel senso chespecificheremo, una base del problema duale. Riscriviamo il primale conl’aggiunta delle variabili u per i vincoli come visto sino ad ora

max z = cTx

u = −ATx+ b

x ≥ 0 u ≥ 0

Riscriviamo anche il duale (dopo averlo trasformato nella forma canonica(2.5)) con l’aggiunta di variabili x per i vincoli

−max w = −bTux = Au− cu ≥ 0 x ≥ 0

Page 49: Programmazione Lineare - di.unito.it

49

Tabella 2.1:xT

u −AT bz cT 0

Tabella 2.2:uT

x A −cw −bT 0

Si tenga sempre presente che le variabili x, u che compaiono nel primalesono diverse dalla variabili x, u che compaiono nel duale, ma in virtu dellestrette relazioni tra di esse conviene indicarle allo stesso modo.Prendiamo ora la Tabella 2.1 relativa alla base {x1, . . . , xn} del primale ela Tabella 2.2 relativa alla base {u1, . . . , um} del duale. Posiiamo notareche la tabella della base {x1, . . . , xn} del primale coincide con la traspostacambiata di segno della tabella relativa alla base {u1, . . . , um} del duale.Questa osservazione vale piu in generale. Si ha infatti che:

Data una base {y1, . . . , yn} del primale, la tabella relativa a tale base e ugua-le alla trasposta cambiata di segno della tabella relativa alla base {yn+1, . . . , yn+m}del duale.

Supponiamo oea di avere una base ottima {y1, . . . , yn} per il primale. Nellarelativa Tabella 2.3 avremo βi ≥ 0, i = 1, . . . ,m e γj ≤ 0, j = 1, . . . , n. Lasoluzione ottima per il primale e

yj = 0, j = 1, . . . , n yn+i = βi i = 1, . . . ,m

Tabella 2.3:y1 · · · yn

yn+1 · · · · · · · · · β1

......

......

...yn+m · · · · · · · · · βm

z γ1 · · · γn γ0

Page 50: Programmazione Lineare - di.unito.it

50 CAPITOLO 2. DUALITA

Tabella 2.4:yn+1 · · · yn+m

y1 · · · · · · · · · −γ1

......

......

...yn · · · · · · · · · −γnw −β1 · · · βm −γ0

con valore ottimo pari a γ0. Consideriamo ora la Tabella 2.4 per la base{yn+1, . . . , yn+m} del duale, che, in base a quanto osservato precedente-mente, coincide con la trasposta cambiata di segno della Tabella 2.3. Sipuo notare che la soluzione di base corrsipondente, ovvero

yj = −γj , j = 1, . . . , n yn+i = 0 i = 1, . . . ,m

e ammissibile poiche−γj ≥ 0 j = 1, . . . , n

ed e anche ottima poiche

−βi ≤ 0 i = 1, . . . ,m.

Questo dimostra che nel momento in cui il simplesso restituisce una so-luzione ottima per il primale, si puo immediatamente ottenere anche unasoluzione ottima per il duale. Resta ancora da far vedere che i due valoriottimi coincidono. Il valore ottimo del primale e γ0. Dalla Tabella 2.4 si hache l’ottimo per il duale e pari a −γ0 ma dobbiamo ricordare che abbiamotrasformato il duale nella forma canonica (2.5) il cui obiettivo e

−max −bTu

e quindi per ottenere l’esatto valore ottimo dell’obiettivo duale dobbiamoinvertire di segno, ottenendo quindi il valore γ0 che coincide con il valoreottimo del primale, come si voleva dimostrare.

Riassumiamo ora tutte le possibili relazioni tra primale e duale.

• In base al I teorema della dualita

Sott 6= ∅ ⇔ Dott 6= ∅

In base allo stesso teorema si ha anche che i valori ottimi coincidono.

• Se Sott = ∅ in quanto l’obiettivo primale e illimitato, allora Da = ∅(per l’Osservazione 16).

Page 51: Programmazione Lineare - di.unito.it

51

• Se Dott = ∅ in quanto l’obiettivo duale e illimitato, allora Sa = ∅ (perl’Osservazione 16).

• Se Sa = ∅, allora Da = ∅ oppure l’obiettivo duale e illimitato.

• Se Da = ∅, allora Sa = ∅ oppure l’obiettivo primale e illimitato.

Il seguente e un esempio in cui sia Sa che Da sono insiemi vuoti.

Esempio 3 Si consideri il seguente problema primale

max 2x1 − x2

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

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

min u1 − 2u2

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

in cui si puo notare che anche Da = ∅.

Introduciamo ora il II teorema della dualita.

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 complementarita,cioe

(b−ATx∗)Tu∗ = 0, (2.7)

e(Au∗ − c)Tx∗ = 0. (2.8)

Dimostrazione Se valgono (2.7) e (2.8), sommandole tra loro si ottiene

bTu∗ − x∗TAu∗ + u∗TATx∗ − cTx∗ = 0

o, equivalentemente,

bTu∗ − x∗TAu∗ + x∗TAu∗ − cTx∗ = 0

da cuibTu∗ = cTx∗.

Page 52: Programmazione Lineare - di.unito.it

52 CAPITOLO 2. DUALITA

In base all’Osservazione 15, cio implica che le due soluzioni sono ottime.Vediamo ora di dimostrare il viceversa, ovvero che se le due soluzioni sonoottime soddisfano le condizioni di complementarita. Per il I teorema delladualita sappiamo che

bTu∗ = cTx∗.

Ora, sommiamo e sottraiamo x∗TAu∗ ed otteniamo

bTu∗ − x∗TAu∗ + x∗TAu∗ − cTx∗ = 0

che possiamo riscrivere come segue

(b−ATx∗)Tu∗ + (Au∗ − c)Tx∗ = 0. (2.9)

Ora, x∗ ∈ Sa implicab−ATx∗ ≥ 0 x∗ ≥ 0,

mentre u∗ ∈ Da implica

Au∗ − c ≥ 0 u∗ ≥ 0.

Quindi avremo(b−ATx∗)T︸ ︷︷ ︸

≥0

u∗︸︷︷︸≥0

≥ 0

(Au∗ − c)T︸ ︷︷ ︸≥0

x∗︸︷︷︸≥0

≥ 0

In base a (2.9) la somma di questi due termini deve essere uguale a 0.L’unica possibilita e che entrambi i termini siano nulli, e cioe che sianosoddisfatte le condizioni di complementarita (2.7) e (2.8).

Come esercizio si risolva il problema 2.2 ottenendo le soluzioni ottimedel primale e del duale e verificare che esse soddisfano le condizioni dicomplementarita.

2.1 Il simplesso duale

Nel simplesso visto in precedenza, che chiameremo simplesso primale se-guiamo il seguente schema

• cominciamo con una base ammissibile {y1, . . . , yn} per il primale (tut-ti i βi ≥ 0) ma con la base corrispondente del duale {yn+1, . . . , yn+m}non ammisibile per il duale (qualche γj > 0);

Page 53: Programmazione Lineare - di.unito.it

2.1. IL SIMPLESSO DUALE 53

Tabella 2.5:y1 · · · yn

yn+1 · · · · · · · · · β1

......

......

...yn+m · · · · · · · · · βm

z γ1 · · · γn γ0

• passiamo ad altre basi ammissibili per il primale ma con le corrispon-denti basi duali non ammissibili;

• se esistono soluzioni ottime, ci arrestiamo quando abbiamo non solouna base ammissibile per il primale, ma anche la base corrispondentedel duale anch’essa ammissibile (tutti i γj ≤ 0).

Si supponga ora di avere una base {y1, . . . , yn} non ammissibile per il pri-male ma con la corrispondente base del duale {yn+1, . . . , yn+m} ammissi-bile. Quindi, data la Tabella 2.5 relativa alla base {y1, . . . , yn} del primale,avremo che

∃ i ∈ {1, . . . ,m} : βi < 0,

(non ammissibilita della base primale) e

γj ≤ 0, j = 1, . . . , n

(ammissibilita per il duale). Il simplesso duale non e altro che il simplessoapplicato al problema duale, in cui seguiremo quindi il seguente schema

• cominciamo con una base ammissibile {yn+1, . . . , yn+m} per il duale(tutti i γj ≤ 0) ma con la base corrispondente del primale {y1, . . . , yn}non ammisibile per il primale (qualche βi < 0);

• passiamo ad altre basi ammissibili per il duale ma con le corrispon-denti basi primali non ammissibili;

• se esistono soluzioni ottime, ci arrestiamo quando abbiamo non solouna base ammissibile per il duale, ma anche la base corrispondentedel primale anch’essa ammissibile (tutti i βi ≥ 0).

Nel simplesso duale si opera direttamente sulla tabella primale e quindi,ricordando che la tabella duale e la trasposta cambiata di segno di quellaprimale, dovremo tenere presente di invertire i ruoli di righe e colonne e dicambiare i segni. Un’iterazione del simplesso duale e la seguente.

Page 54: Programmazione Lineare - di.unito.it

54 CAPITOLO 2. DUALITA

Verifica di ottimalita Se

βi ≥ 0 i = 1, . . . ,m

allora la base corrente e ottima, la soluzione di base del primale

yj = 0 j = 1, . . . , n yn+i = βi i = 1, . . . ,m

e ottima per il primale, mentre la soluzione di base

yj = −γj j = 1, . . . , n yn+i = 0 i = 1, . . . ,m

e ottima per il duale. Altrimenti si va al Passo 2.

Scelta della riga del cardine Scegli la riga k tale che

βk = min{βi} < 0

(per convenzione la prima dall’alto se il minimo e raggiunto su piurighe).

Verifica di illimitatezza del duale Se

αkj ≤ 0 j = 1, . . . , n,

allora il duale e illimitato (e di conseguenza, in base all’Osservazione16, per il primale si ha Sa = ∅). Altrimenti si vada al Passo 4.

Scelta della colonna del cardine Tra le colonne j con αkj > 0 si scelgala colonna h tale che

− γhαkh

= min{− γjαkj

: αkj > 0}.

(nel caso il minimo sia raggiunto in piu colonne si sceglie, per con-venzione, la prima da sinistra).

Operazione di cardine Si esegua l’operazione di cardine con cardine αkhe si ritorni al Passo 1.

2.2 Altre osservazioni sulla dualita

Una possibile domanda che ci si puo porre e la seguente. Se ho un vincoloaTi x ≤ bi di un prblema di PL il cui valore ottimo indicheremo con γ∗,come varia il valore dell’ottimo se perturbo di una piccola quantita ∆bi il

Page 55: Programmazione Lineare - di.unito.it

2.2. ALTRE OSSERVAZIONI SULLA DUALITA 55

termine noto del vincolo, ovvero trasformo il vincolo in aTi x ≤ bi+∆bi? Larisposta e strettamente legata alla soluzione del duale. Infatti, si prendala soluzione ottima del duale e sia u∗i il valore nell’ottimo del duale dellavariabile legata al vincolo aTi x ≤ bi del primale. Si puo dimostrare che se lasoluzione ottima del primale e non degenere, allora per piccole perturabzioni∆bi il nuovo valore ottimo sara γ∗ + u∗i∆bi. Come verifica su un esempio,si determini la soluzione ottima del problema

max x1 − x2

x1 + x2 ≤ 2x1 ≤ 1

x1, x2 ≥ 0

e del suo duale e si determini come cambia il valore ottimo del problemase il vincolo x1 ≤ 1 viene sostituito da x1 ≤ 1 + ∆, per ∆ sufficientementepiccolo.

Abbiamo visto sino ad ora come si determina il duale di un problema di PLin forma canonica. E possibile pero determinare il duale anche di problemidi PL in forma piu generale. Come per i problemi in forma canonica, vi sarauna stretta relazione tra le variabili di un problema ed i vincoli dell’altro.Piu precisamente avremo, come per la forma canonica, che:

1. nel primale ci sono n variabili esattamente come nel duale vi sono nvincoli. Inoltre, i coefficienti del j-esimo vincolo del duale coincidonocon i coefficienti della variabile xj nei vincoli del primale, mentre iltermine noto del j-esimo vincolo del duale coincide con il coefficientedi xj nell’obiettivo del primale.

2. Nel primale vi sono m vincoli esattamente come nel duale vi sonom variabili. INoltre, i coefficienti dell’i-esima variabile ui del dualecoincidono con i coefficienti dell’i-esimo vincolo del primale, mentre ilcoefficiente di ui nell’obiettivo del duale coincide con il termine notodell’i-esimo vincolo del primale.

Rispetto alla forma canonica quello che puo cambiare sono i versi delledisequazioni ed i segni delle variabili. Per stabilire questi ci si puo rifareallo specchietto nella Tabella 2.6. Lo specchietto ci dice, per esempio, chese il primale e un problema di massimo ed una variabile e nel primale ≥ 0,allora il vincolo corrispondente del duale e di ≥, oppure che se il primale eun problema di minimo ed un vincolo del primale e di =, allora la variabilecorrsipondente del duale e libera in segno (puo assumere sia valori negativiche positivi). Come esercizio, si usi lo specchietto per trovare il duale del

Page 56: Programmazione Lineare - di.unito.it

56 CAPITOLO 2. DUALITA

Tabella 2.6:min max

variabile ≥ 0 vincolo ≤variabile ≤ 0 vincolo ≥

variabile libera vincolo =vincolo ≥ variabile ≥ 0vincolo ≤ variabile ≤ 0vincolo = variabile libera

seguente problema di PL.

min x1 + 2x2 + 3x3

x1 + x2 − x3 ≤ 1x1 − 2x2 + x3 ≥ 2x1 − x2 − x3 = 4

x1 ≥ 0, x2 ≤ 0, x3 libera

Page 57: Programmazione Lineare - di.unito.it

Capitolo 3

Programmazione LineareIntera

Fino ad ora abbiamo affrontato problemi in cui le variabili potevano as-sumere valori reali. Ora invece ci concentreremo su problemi in cui levariabili possono assumere solo valori interi. Per prima cosa vedremo unpaio di esempi di problemi reali in cui le variabili possono assumere solovalori interi.

3.1 Modelli di programmazione lineare intera

3.1.1 Il problema dello zaino

Sono dati n tipi di oggetti. Agli oggetti di tipo i, i = 1, . . . , n, sono associatiun peso pi e un valore vi. E inoltre dato uno zaino con capacita pari ab. Il problema dello zaino consiste nel decidere quanti oggetti di ciascuntipo inserire nello zaino, tenendo conto che non si puo superare la capacitadello zaino e che si vuole massimizzare il valore complessivo degli oggettiinseriti. Agli oggetti di tipo i associo una variabile xi che rappresenta ilnumero di oggetti di tipo i da inserire nello zaino. Si noti che tali variabilisaranno necessariamente non negative e possono assumere solo valori interi.Abbiamo un unico vincolo nel problema, quello di non superare la capacitab dello zaino. Tale vincolo e espresso dalla seguente disequazione:

n∑i=1

pixi ≤ b.

57

Page 58: Programmazione Lineare - di.unito.it

58 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

L’obiettivo, da massimizzare, e rappresentato dalla seguente formula:

n∑i=1

vixi.

Quindi il modello del problema e il seguente

max∑ni=1 vixi∑n

i=1 pixi ≤ bxi ≥ 0, xi ∈ I i = 1, . . . , n

dove I indica l’insieme degli interi. Esiste anche una variante del problema,detta problema dello zaino binario, in cui esiste un solo esemplare di ognitipo di oggetto e quindi le variabili xi possono assumere i due soli valori0 (se non si inserisce l’oggetto i) oppure 1 (se lo si inserisce). Variabiliche possono assumere due soli valori vengono dette binarie. Il modello e ilseguente:

max∑ni=1 vixi∑n

i=1 pixi ≤ bxi ≥ 0, xi ∈ {0, 1} i = 1, . . . , n

Esempio 4 Si supponga di avere tre tipi 1,2 e 3 di oggetti, con pesi

p1 = 5 p2 = 7 p3 = 9

e valoriv1 = 11 v2 = 14 v3 = 18.

Si supponga inoltre di avere uno zaino con capacita pari a 18. Il modelloper il problema dello zaino e il seguente:

max 11x1 + 14x2 + 18x3

5x1 + 7x2 + 9x3 ≤ 18x1, x2, x3 ≥ 0, x1, x2, x3 ∈ I

mentre per il problema dello zaino binario l’unica differenza e rappresentatadal fatto che le variabili possono assumere i soli valori 0 e 1:

max 11x1 + 14x2 + 18x3

5x1 + 7x2 + 9x3 ≤ 18x1, x2, x3 ≥ 0, x1, x2, x3 ∈ {0, 1}

Page 59: Programmazione Lineare - di.unito.it

3.1. MODELLI DI PROGRAMMAZIONE LINEARE INTERA 59

3.1.2 Problemi di produzione e distribuzione di pro-dotti

Supponiamo di avere m negozi che hanno bisogno di un certo prodotto en centri di produzione dove tale prodotto puo essere realizzato. Avremoinoltre le seguenti indicazioni.

• Il negozio i richiede una quantita pari ad ai unita di prodotto.

• Il centro di produzione j ha la possibilita di realizzare fino ad unmassimo di Mj unita di prodotto.

• Trasportare un’unita di prodotto dal centro di produzione j al negozioi ha un costo pari a cij .

• Attivare il centro di produzione j ha un costo fisso pari a kj . Talecosto interviene se si produce anche una sola unita di prodotto nelcentro di produzione j ed e indipendente dalla quantita prodotta (sipensi ai costi di attivazione dei macchinari che sono gli stessi sia che siproduca una sola unita di prodotto, sia che se ne producano migliaia).

Il problema consiste nel decidere, per ogni centro di produzione j e negozioi, quante unita di prodotto realizzare nel centro di produzione j perchesiano inviate al negozio i, tenuto conto che si devono soddisfare le richiestedi tutti i negozi, non si possono superare le capacita produttive dei singolicentri e che si vuole realizzare il tutto minimizzando i costi.

Per prima cosa identifichiamo le variabili del problema. Per ogni coppianegozio i, i = 1, . . . ,m, e centro di produzione j, j = 1, . . . , n, definiremouna variabile xij che rappresenta le unita di prodotto realizzate nel centrodi produzione j per essere inviate al negozio i. Tali variabili sono ovviamen-te non negative e possono assumere solo valori interi. Oltre a tali variabili,introduciamo anche delle variabili binarie yj da associare a ciascun centrodi produzione. La variabile yj assumera valore 0 se il centro di produzionej non viene attivato, ovvero non viene realizzato alcun prodotto in esso,mentre assume il valore 1 se il centro viene attivato.Per esprimere il vincolo che deve essere soddisfatta la richiesta ai di pro-dotti del negozio i, richiederemo che la somma dei prodotti realizzati neivari centri di produzione j per il negozio i sia pari ad ai, il che corrispondealla seguente equazione:

n∑j=1

xij = ai.

Nel centro di produzione j la quantita massima di prodotto realizzabile epari a 0 se il centro non viene attivato (ovvero se yj = 0) ed e pari a Mj se

Page 60: Programmazione Lineare - di.unito.it

60 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

il centro viene attivato (ovvero se yj = 1). Il vincolo sul massimo numerodi prodotti realizzabili nel centro j e quindi rappresentato dalla seguentedisequazione:

m∑i=1

xij ≤Mjyj .

Per quanto riguarda i costi, avremo dei costi di trasporto dai centri diproduzione j ai negozi i rappresentati dalla seguente espressione:

m∑i=1

n∑j=1

cijxij .

A questi dovremo aggiungere i costi fissi kj per i soli centri di produzionej attivati (per i quali cioe si ha yj = 1). Tali costi sono rappresentati dallaseguente espressione

n∑j=1

kjyj .

(Si noti che i centri di produzione non attivati, cioe con yj = 0, non portanoalcun contributo a tali costi). I costi complessivi sarano dati dalla sommadi costi di trasporto e costi fissi:

m∑i=1

n∑j=1

cijxij +n∑j=1

kjyj .

Quindi il modello del problema e il seguente:

min∑mi=1

∑nj=1 cijxij +

∑nj=1 kjyj∑n

j=1 xij = ai i = 1, . . . ,m∑mi=1 xij ≤Mjyj j = 1, . . . , n

xij ≥ 0, xij ∈ I i = 1, . . . ,m, j = 1, . . . , nyj ∈ {0, 1} j = 1, . . . , n

Esempio 5 Si considerino 3 negozi N1, N2, N3 di elettrodomestici conrichieste di lavatrici pari rispettivamente a 500, 700 e 800. Si considerinoinoltre 4 centri di produzione C1, C2, C3, C4 con capacita di produzionemassima pari rispettivamente a 1500, 2000, 2500 e 2500. I costi per tra-sportare una singola lavatrice da un centro di produzione Cj ad un negozioNi sono riportati in Tabella 3.1, mentre i costi fissi per i centri di produ-zione sono rispettivamente pari a 100, 150, 150 e 200. Il modello risultante

Page 61: Programmazione Lineare - di.unito.it

3.1. MODELLI DI PROGRAMMAZIONE LINEARE INTERA 61

Tabella 3.1:N1 N2 N3

C1 2 1 5C2 1 5 3C3 4 3 1C4 2 3 3

e il seguente:

min 2x11 + x12 + 4x13 + 2x14 + x21 + 5x22

3x23 + 3x24 + 5x31 + 3x32 + 1x33 + 3x34

100y1 + 150y2 + 150y3 + 200y4

tenuto conto chex11 + x12 + x13 + x14 = 500x21 + x22 + x23 + x24 = 700x31 + x32 + x33 + x34 = 800x11 + x21 + x31 ≤ 1500y1

x12 + x22 + x32 ≤ 2000y2

x13 + x23 + x33 ≤ 2500y3

x14 + x24 + x34 ≤ 2500y4

xij ≥ 0, xij ∈ I i = 1, 2, 3 j = 1, 2, 3, 4y1, y2, y3, y4 ∈ {0, 1}

3.1.3 Uso delle variabili binarie per modellare vincolilogici

Le variabili binarie vengono utilizzate per modellare decisioni del tipo ”fareo non fare una cosa”, ”svolgere o non svolgere un’attivita”. Data la variabilebinaria x, ad essa si associa il valore 0 se si decide di non fare una cosa eil valore 1 se si decide di farla. Tali variabili vengono spesso utilizzateper modellare vincoli di tipo logico attraverso equazioni o disequazioni.Nel seguito verranno dati alcuni esempi di questo. Il vincolo logico ”se nonsvolgo l’attivita 1 allora non svolgo neppure l’attivita 2” puo essere espressotramite il vincolo

x2 ≤ x1

Page 62: Programmazione Lineare - di.unito.it

62 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

dove x1 e x2 sono ovviamente le variabili binarie associate rispettivamentealle attivita 1 e 2. Il vincolo logico ”se svolgo l’attivita 3 allora svolgoalmeno una tra le attivita 4 e 5” puo essere espresso tramite il vincolo

x3 ≤ x4 + x5

Il vincolo logico ”se svolgo l’attivita 6 allora devo svolgere sia l’attivita 7che l’attivita 8 ” puo essere espresso tramite il vincolo

2x6 ≤ x7 + x8

oppure attraverso la coppia di vincoli

x6 ≤ x7 x6 ≤ x8.

3.2 Relazione tra un problema lineare interoe il suo rilassamento lineare

Si consideri un problema di Programmazione Lineare Intera (abbreviatocon PLI nel seguito) in forma canonica:

w∗ = max cTx

ATx ≤ bx ≥ 0, x ∈ In

dove ricordiamo che I denota l’insieme degli interi. Si indichera con Za laregione ammissibile di questo problema, e quindi

Za = {x ∈ In : ATx ≤ b, x ≥ 0},

e con Zott l’insieme delle sue soluzioni ottime:

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

Chiameremo rilassamento lineare del problema di PLI, il problema di Pro-grammzaione Lineare Ordinaria (abbreviato con PLO nel seguito) ottenutodal problema di PLI omettendo la richiesta che le variabili siano intere, equindi

z∗ = max cTx

ATx ≤ bx ≥ 0

Page 63: Programmazione Lineare - di.unito.it

3.2. RELAZIONE TRA UN PROBLEMA LINEARE INTERO E IL SUO RILASSAMENTO LINEARE63

Esempio 6 Si consideri il seguente problema di PLI:

max x1 + x2

x1 + 2x2 ≤ 42x1 + x2 ≤ 4

x1, x2 ≥ 0, x1, x2 ∈ I.

Si determinino per via grafica la soluzione del problema di PLI e del suorilassamento lineare.

Come al solito, indicheremo con Sa e Sott rispettivamente la regione am-missibile e l’insieme delle soluzioni ottime del problema di PLO. Possiamonotare che

Za ⊆ Sae che i due problemi hanno la stessa funzione obiettivo cTx. Da cio conse-guono le seguenti relazioni tra il problema di PLI e il problema di PLO suorilassamento lineare.

1. Se Sa = ∅, allora Za = ∅.

2. Se l’obiettivo del problema di PLI e illimitato, allora lo e anche quellodel suo rilassamento lineare.

3. Se Sott 6= ∅ e Zott 6= ∅, allora il valore ottimo w∗ del problema diPLI non puo essere superiore al valore ottimo z∗ del suo rilassamentolineare, ovvero

w∗ ≤ z∗

4. Se Sott 6= ∅ contiene un punto x∗ a coordinate tutte intere, allorax∗ ∈ Zott e w∗ = z∗, come accade nel seguente esempio

max x2

x1 + 2x2 ≤ 42x1 + x2 ≤ 4

x1, x2 ≥ 0, x1, x2 ∈ I.

Altri casi possibili nelle relazioni tra un problema di PLI e il suo rilassa-mento lineare sono le seguenti.

1. Za = ∅ ma Sott 6= ∅, come nel seguente esempio:

max x2

Page 64: Programmazione Lineare - di.unito.it

64 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

x1 ≥ 14

x1 ≤ 34

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

2. Za = ∅ ma l’obiettivo del rilassamento lineare e illimitato, come nelseguente esempio:

max x2

x1 ≥ 14

x1 ≤ 34

x1, x2 ≥ 0, x1, x2 ∈ I.

3. Se A, b e c contengono solo valori razionali, allora Zott 6= ∅ implicaSott 6= ∅. Se vi sono coefficienti irrazionali allora puo accadere cheZott 6= ∅ ma il rilassamento lineare ha obiettivo illimitato, come nelseguente esempio:

max x2

x2 =√

2x1

x1, x2 ≥ 0, x1, x2 ∈ I.

dove Za (e quindi Zott) contiene la sola origine, ma l’obiettivo delrilassamento lineare e illimitato.

Un’importante osservazione e la seguente.

I problemi di PLO sono in generale molto piu semplici da risolvere deiproblemi di PLI 1. In particolare il rilassamento lineare di un problema diPLI e tipicamente molto piu facile da risolvere del problema di PLI stesso.

Questa osservazione puo spingere a risolvere i problemi di PLI con laseguente procedura:

• risolvo il rilassamento lineare del problema di PLI;

• arrotondo le variabili nella soluzione ottima che non hanno valoreintero ma decimale (se ne esistono: nel caso in cui non ne esistano lasoluzione del rilassamento lineare e anche soluzione del problema diPLI).

1Nella teoria della complessita i problemi di PLO sono classificati tra quelli risolvibiliin tempo polinomiale, mentre quelli di PLI sono verosimilmente solo risolvibili in tempoesponenziale

Page 65: Programmazione Lineare - di.unito.it

3.3. ALGORITMI DI TAGLIO 65

In realta questa procedura rischia di restituire risultati molto inesatti. Adesempio, in precedenza abbiamo visto un caso dove il rilassamento linea-re ha soluzione ottima mentre il problema di PLI ha regione ammissibilevuota. In tal caso, applicando la procedura vista sopra, restituiremmo unasoluzione ottima per un problema che non ha neppure una soluzione ammis-sibile. Va detto comunque che una procedura di questo tipo e accettabilequando si ha a che fare con variabili che assumono valori molto elevati. Senella soluzione ottima del rilassamento lineare ho una variabile con valorepari 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 dellavariabile, tale errore e tipicamente trascurabile. Al contrario, con variabiliintere che assumono valori piccoli, ad esempio 1.4, l’arrotondamento a 1del valore di tale variabile puo causare errori non trascurabili, come conse-guenza del fatto che la parte decimale (0.4) non e affatto irrilevante rispettoal valore di 1.4. Questo e in particolare vero quando si ha a che fare convariabili binarie, con le quali la procedura vista sopra va certamente evitata.

Restano allora da indicare procedure di risoluzione per i problemi di PLIapplicabili in tutti i casi. Una di queste verra vista nel seguito.

3.3 Algoritmi di taglio

Per introdurre gli algoritmi di taglio dobbiamo prima introdurre il concettodi taglio valido per un problema di PLI. Sia dato un problema di PLI conil suo rilassamento lineare. Sia x∗ una soluzione ottima del rilassamentolineare, che si suppone abbia almeno una coordinata non intera (se tutte lesue coordinate fossero intere allora x∗ ∈ Zott).

Definizione 13 Una disequazione wTx ≤ v si definisce taglio valido per ilproblema di PLI se non e soddisfatta da x∗ ma e soddisfatta da tutti i puntinella regione ammissibile del problema di PLI, ovvero

wTx∗ > v wTx ≤ 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 e soluzione anche delproblema di PLI. Altrimenti si genera (in modi che vedremo in seguito) untaglio valido, si aggiunge questo taglio ai vincoli del rilassamento lineare esi risolve il problema di PLO ottenuto con questa aggiunta. Se la soluzioneottima ha coordinate tutte intere, essa e soluzione anche del problema diPLI. Altrimenti si genera un nuovo taglio valido, si aggiunge anche questo

Page 66: Programmazione Lineare - di.unito.it

66 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

taglio ai vincoli del rilassamento lineare e si risolve il problema di PLOottenuto con questa ulteriore aggiunta. Si itera questa procedura fino aquando non si ottiene una soluzione intera. Dato il problema di PLI

max cTx

aTi x ≤ bi i = 1, . . . ,mxj ≥ 0, xj ∈ I j = 1, . . . , n

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

Inizializzazione Si risolva il rilassamento lineare

max cTx

aTi x ≤ bi i = 1, . . . ,mxj ≥ 0 j = 1, . . . , n

del problema di PLI. Se Sa = ∅, allora Za = ∅. Tralasceremo il casodi obiettivo illimitato del rilassamento lineare e quindi l’unica altrapossibilita e che esista una soluzione ottima, indicata con x∗1. Si pongak = 1.

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

Passo 2 Si generi un taglio valido wTk x ≤ vk che non sia soddisfatto da x∗kma sia soddisfatto da tutti i punti in Za, ovvero

wTk x∗k > vk wTk x ≤ vk ∀ x ∈ Za.

Passo 3 Si aggiunga il nuovo taglio valido ai vincoli originari del problemae ai tagli validi generati in precedenza e si risolva il problema di PLO

max cTx

aTi x ≤ bi i = 1, . . . ,mwTr x ≤ vr r = 1, . . . , kxj ≥ 0 j = 1, . . . , n

Se tale problema ha regione ammissibile vuota possiamo concludereche Za = ∅. Altrimenti sia x∗k+1 la sua soluzione ottima.

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

Page 67: Programmazione Lineare - di.unito.it

3.3. ALGORITMI DI TAGLIO 67

Resta ancora da chiarire come si genera un taglio valido. Ci sono moltimodi per generare tagli validi. Qui ne descriveremo un paio con alcuneconsiderazioni sull’efficienza. In entrambi i casi si richiede di compiere laseguente operazione, fondamentale per il funzionamento della procedura,prima di iniziare a risolvere il problema:

tutti i coefficienti e termini noti dei vincoli devono essere resi interi.

Ad esempio, nel problema di PLI

max x1 + x2

x1 ≤ 32

x2 ≤ 32

x1, x2 ≥ 0, x1, x2 ∈ I.

dovremo moltiplicare entrambi i vincoli per 2 in modo da rendere tutti icoefficienti e i termini noti interi, ottenendo quindi il problema:

max x1 + x2

2x1 ≤ 32x2 ≤ 3

x1, x2 ≥ 0, x1, x2 ∈ I.

Questa trasformazione garantisce che le variabili ui che verranno associate aciascun vincolo saranno anch’esse vincolate ad assumere valori interi quandole xj assumono valori interi, la qual cosa non si puo garantire senza latrasformazione. Nell’esempio verranno aggiunte ai due vincoli le variabiliu1 e u2 nel modo seguente

max x1 + x2

u1 = 3− 2x1

u2 = 3− 2x2

x1, x2, u1, u2 ≥ 0, x1, x2, u1, u2 ∈ I.

dove u1, u2 ∈ I non avrebbe potuto essere garantito senza la trasformazione.

3.3.1 Tagli di Dantzig

Supponiamo di aver risolto il rilassamento lineare e di aver ottenuto con labase ottima {y1, . . . , yn} la soluzione di base

yj = 0 j = 1, . . . , n yn+i = βi i = 1, . . . ,m

Page 68: Programmazione Lineare - di.unito.it

68 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

Tabella 3.2:u1 u2

x1 -1/2 0 3/2x2 0 -1/2 3/2z -1/2 -1/2 3

a coordinate non tutte intere (ovvero almeno uno dei βi non e intero).Questo ci dice che fissando tutte le variabili in base a 0 non otteniamouna soluzione a coordinate intere. Quindi per entrare in Za almeno unadelle variabili in base deve avere valore positivo. Essendo tali variabilivincolate ad assumere valori interi, questo equivale a dire che almeno unadelle variabili deve assumere valore ≥ 1, o, equivalentemente, che la sommadelle variabili in base deve essere ≥ 1. Da cio possiamo scrivere il seguentetaglio valido detto taglio di Dantzig.

y1 + · · ·+ yn ≥ 1.

Vediamo di ricavare il taglio di Dantzig per il nostro esempio. Applicandol’algoritmo del simplesso si arriva alla Tabella 3.2 che e la tabella ottima. Lasoluzione ottima x∗1 = 3/2, x∗2 = 3/2 del rilassamento lineare ha coordinatenon intere. Quindi posso introdurre un taglio. In base a quanto visto iltaglio di Dantzig si ottiene ponendo ≥ 1 le variabili in base, cioe

u1 + u2 ≥ 1.

Possiamo anche esprimere questo vincolo nelle variabili originarie x1 e x2.Ricordando che u1 = 3− 2x1 e u2 = 3− 2x2 si ha che il vincolo equivale a:

2x1 + 2x2 ≤ 5.

Come controllo si verifichi che il taglio non e soddisfatto dalla soluzioneottima x∗1 = 3/2, x∗2 = 3/2 del rilassamento lineare ma e soddisfatto da tuttii punti in Za. A questo punto l’algoritmo di taglio prescrive di aggiungere iltaglio ai vincoli precedenti e risolvere il problema ottenuto in questo modo.Per fare cio aggiungiamo una nuova variabile u3 da associare al taglio,ponendo

u3 = u1 + u2 − 1.

A questo punto abbiamo gia pronta la tabella relativa alla base {u1, u2}del nuovo problema. Infatti sara sufficiente aggiungere alla Tabella 3.2una riga relativa alla variabile u3 come mostrato in Tabella 3.3. Si notaimmediatamente che la base {u1, u2} non e ammissibile (come deve essere

Page 69: Programmazione Lineare - di.unito.it

3.3. ALGORITMI DI TAGLIO 69

Tabella 3.3:u1 u2

x1 -1/2 0 3/2x2 0 -1/2 3/2u3 1 1 -1z -1/2 -1/2 3

Tabella 3.4:u3 u2

x1 -1/2 1/2 1x2 0 -1/2 3/2u1 1 -1 1z -1/2 0 5/2

perche sia tagliata la soluzione ottima del rilassamento lineare), ma l’ultimariga continua ad avere valori negativi e quindi la base corrispondente delduale {x1, x2, u3} e ammissibile. Questo ci consente di utilizzare l’algoritmodel simplesso duale. Applicando tale algoritmo si giunge alla Tabella 3.4che e ottima. La soluzione ottima x∗1 = 1, x∗2 = 3/2 del nuovo problemaha una coordinata non intera. Quindi devo introdurre un nuovo taglio diDantzig. In base a quanto visto il taglio di Dantzig si ottiene ponendo ≥ 1le variabili in base, cioe

u3 + u2 ≥ 1.

Possiamo anche esprimere questo vincolo nelle variabili originarie x1 e x2.Ricordando che u3 = u1 + u2 − 1, u1 = 3− 2x1 e u2 = 3− 2x2 si ha che ilvincolo equivale a:

2x1 + 4x2 ≤ 7.

Come controllo si verifichi che il taglio non e soddisfatto dalla soluzioneottima x∗1 = 1, x∗2 = 3/2 del nuovo problema ma e soddisfatto da tutti ipunti in Za. A questo punto l’algoritmo di taglio prescrive di aggiungere iltaglio ai vincoli precedenti e risolvere il problema ottenuto in questo modo.Per fare cio aggiungiamo una nuova variabile u4 da associare al taglio,ponendo

u4 = u2 + u3 − 1.

A questo punto abbiamo gia pronta la tabella relativa alla base {u2, u3}del nuovo problema. Infatti sara sufficiente aggiungere alla Tabella 3.4una riga relativa alla variabile u4 come mostrato in Tabella 3.5. Si notaimmediatamente che la base {u2, u3} non e ammissibile (come deve esse-re perche sia tagliata la soluzione ottima del problema), ma l’ultima riga

Page 70: Programmazione Lineare - di.unito.it

70 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

Tabella 3.5:u3 u2

x1 -1/2 1/2 1x2 0 -1/2 3/2u1 1 -1 1u4 1 1 -1z -1/2 0 5/2

continua ad avere valori negativi e quindi la base corrispondente del duale{x1, x2, u1, u4} e ammissibile. Questo ci consente di utilizzare l’algoritmodel simplesso duale.La procedura viene ripetuta fino a quando si ottiene una soluzione a coor-dinate tutte intere.

Ci si puo chiedere se possiamo garantire che l’algoritmo di taglio che usai tagli di Dantzig termina in un numero finito di iterazioni. La risposta enegativa. Si possono costruire esempi in cui anche aggiungendo infiniti taglil’algoritmo non restitusice mai una soluzione ottima del problema di PLI.Questo mostra come i tagli di Dantzig possano essere molto inefficienti. Cisi chiede allora se esistono tagli piu efficienti, per i quali e possibile garanti-re la restituzione di una soluzione ottima in un numero finito di iterazioni.Tagli di questo tipo sono i tagli di Gomory, che ci apprestiamo a descrivere.

3.3.2 Tagli di Gomory

Supponiamo di essere giunti alla tabella ottima del rilassamento linearerelativa alla base {y1, . . . , yn} e di avere che la soluzione di base corrispon-dente ha almeno una variabile fuori base con valore non intero. Sia yn+k

una tale variabile e sia la seguente la riga relativa a yn+k nella tabellaottima:

yn+k | αk1 αk2 · · · αkn | βkcon βk ≥ 0 e non intero. Si ricordi che il significato di tale riga e il seguente

yn+k = αk1y1 + αk2y2 + · · ·+ αknyn + βk. (3.1)

Si consideri ora il seguente taglio, detto taglio di Gomory

fk1y1 + fk2y2 + · · ·+ fknyn − fk ≥ 0

dove fkj , j = 1, . . . , n, e la mantissa di −αkj , cioe

fkj = −αkj − b−αkjc ≥ 0

Page 71: Programmazione Lineare - di.unito.it

3.3. ALGORITMI DI TAGLIO 71

(bac rappresenta la parte intera di a ovvero il piu grande intero ≤ a), mentrefk e la mantissa di βk, cioe

fk = βk − bβkc > 0,

dove fk > 0 e una conseguenza della non interezza di βk. Possiamo associarecome di consueto a questo taglio una nuova variabile yn+m+1 nel modoseguente

yn+m+1 = fk1y1 + fk2y2 + · · ·+ fknyn − fk (3.2)

ed il nostro taglio equivale a richiedere che si abbia

yn+m+1 ≥ 0.

Vogliamo dimostrare la seguente osservazione.

Osservazione 18 Il taglio di Gomory e un taglio valido.

Dimostrazione Per prima cosa dimostriamo che la soluzione ottima delrilassemento lineare non soddisfa questo vincolo. Notiamo che per talesoluzione ottima si ha y1 = · · · = yn = 0 e quindi

yn+m+1 = −fk < 0.

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

y1, . . . , yn, yn+1, . . . , yn+m

in Za. Sostiuiamo le coordinate di tale punto in (3.1) e (3.2) ed otteniamorispettivamente

yn+k = αk1y1 + αk2y2 + · · ·+ αknyn + βk. (3.3)

yn+m+1 = fk1y1 + fk2y2 + · · ·+ fknyn − fk. (3.4)

Cio che si vuole dimostrare e che il valore di yn+m+1 e ≥ 0 e cioe che lagenerica soluzione ammissibile in Za

y1, . . . , yn, yn+1, . . . , yn+m (3.5)

soddisfa il taglio. Per prima cosa dimostraimo che in corrispondenza di ognipunto (3.5) in Za si ha che il valore di yn+m+1 e intero. Per dimostrarequesto sommiamo (3.3) e (3.4). Ricordando la definizione delle fkj e di fk,la somma ha come risultato

yn+m+1 = −yn+k − b−αk1cy1 − b−αk2cy2 − · · · − b−αkncyn + bβkc

Page 72: Programmazione Lineare - di.unito.it

72 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

Questo mostra che in corrispondenza di ogni punto in Za il valore yn+m+1

e un valore intero (le parti intere sono tutti valori interi e le variabili yj ,j = 1, . . . , n; in Za assumono valori interi).Da (3.4) abbiamo anche che

yn+m+1 + fk = fk1︸︷︷︸≥0

y1︸︷︷︸≥0

+ fk2︸︷︷︸≥0

y2︸︷︷︸≥0

+ · · ·+ fkn︸︷︷︸≥0

yn︸︷︷︸≥0

.

Questo ci dice che, in corrispondenza di ogni punto (3.5) di Za, si ha cheyn+m+1 + fk e ≥ 0 ed inoltre sappiamo che 0 < fk < 1 e in precedenzaabbiamo dimostrato che yn+m+1 assume valori interi in corrispondenza diogni punto di Za. Cio e possibile soltanto se yn+m+1 ≥ 0 in corrispondenzadi ogni punto di Za, come si voleva dimostrare.

Vediamo ora di applicare l’algoritmo di taglio con i tagli di Gomory nell’e-sempio visto in precedenza. Fino alla risoluzione del rilassamento linearenon ci sono differenze rispetto a quanto visto con i tagli di Dantzig. Quin-di riprendiamo con la Tabella 3.2 ottima per il rilassamento lineare. Sinota che la soluzione ottima non ha coordinate tutte intere. Per generareun taglio di Gomory dobbiamo considerare una riga con un βk non intero.Per convenzione prendiamo la prima dall’alto e quindi la riga relativa allavariabile x1. Il taglio e definito come segue:(

12−⌊

12

⌋)u1 + (0− b0c)u2 −

(32−⌊

32

⌋)≥ 0,

cioe12u1 −

12≥ 0.

Ricordando la definizione di u1 possiamo definire questo taglio in funzionedelle variabili originarie, ottenendo

x1 ≤ 1.

Si puo verificare che il taglio non e soddisfatto dalla soluzione ottima x∗1 =3/2, x∗2 = 3/2 del rilassamento lineare, ma e soddisfatto da tutti i punti diZa. A questo punto l’algoritmo di taglio prescrive di aggiungere il taglio aivincoli precedenti e risolvere il problema ottenuto in questo modo. Per farecio aggiungiamo una nuova variabile u5 da associare al taglio, ponendo

u5 =12u1 −

12

A questo punto abbiamo gia pronta la tabella relativa alla base {u1, u2}del nuovo problema. Infatti sara sufficiente aggiungere alla Tabella 3.2

Page 73: Programmazione Lineare - di.unito.it

3.3. ALGORITMI DI TAGLIO 73

Tabella 3.6:u1 u2

x1 -1/2 0 3/2x2 0 -1/2 3/2u5 1/2 0 -1/2z -1/2 -1/2 3

Tabella 3.7:u5 u2

x1 -1 0 1x2 0 -1/2 3/2u1 2 0 1z -1 -1/2 5/2

una riga relativa alla variabile u5 come mostrato in Tabella 3.6. Si notaimmediatamente che la base {u1, u2} non e ammissibile (come deve essereperche sia tagliata la soluzione ottima del rilassamento lineare), ma l’ultimariga ha valori negativi e quindi la base corrispondente del duale {x1, x2, u5}e ammissibile. Questo ci consente di utilizzare l’algoritmo del simplessoduale. Applicando tale algoritmo si ottiene la Tabella 3.7 che e ottima. Sinota che la soluzione ottima non ha coordinate tutte intere (x∗2 = 3/2). Pergenerare un taglio di Gomory prendiamo la prima riga dall’alto con un βknon intero e quindi la riga relativa alla variabile x2. Il taglio e definito comesegue:

(0− b0c)u5 +(

12−⌊

12

⌋)u2 −

(32−⌊

32

⌋)≥ 0,

cioe12u2 −

12≥ 0.

Ricordando la definizione di u2 possiamo definire questo taglio in funzionedelle variabili originarie, ottenendo

x2 ≤ 1.

Si puo verificare che il taglio non e soddisfatto dalla soluzione ottima x∗1 = 1,x∗2 = 3/2 del problema appena risolto, ma e soddisfatto da tutti i punti diZa. A questo punto l’algoritmo di taglio prescrive di aggiungere il taglio aivincoli precedenti e risolvere il problema ottenuto in questo modo. Per farecio aggiungiamo una nuova variabile u6 da associare al taglio, ponendo

u6 =12u2 −

12

Page 74: Programmazione Lineare - di.unito.it

74 CAPITOLO 3. PROGRAMMAZIONE LINEARE INTERA

Tabella 3.8:u5 u2

x1 -1 0 1x2 0 -1/2 3/2u1 2 0 1u6 0 1/2 -1/2z -1 -1/2 5/2

Tabella 3.9:u5 u6

x1 -1 0 1x2 0 -1 1u1 2 0 1u2 0 2 1z -1 -1 2

A questo punto abbiamo gia pronta la tabella relativa alla base {u2, u5}del nuovo problema. Infatti sara sufficiente aggiungere alla Tabella 3.7 unariga relativa alla variabile u6 come mostrato in Tabella 3.8. Si nota imme-diatamente che la base {u2, u5} non e ammissibile (come deve essere perchesia tagliata la soluzione ottima del problema precedente), ma l’ultima rigaha valori negativi e quindi la base corrispondente del duale {x1, x2, u1, u6}e ammissibile. Questo ci consente di utilizzare l’algoritmo del simplessoduale. Applicando tale algoritmo si ottiene la Tabella 3.9 che e ottima.La soluzione ha coordinate tutte intere e quindi l’algoritmo si arresta resti-tuendo come soluzione ottima x∗1 = 1 e x∗2 = 1 con valore ottimo pari a 1.Ci si puo chiedere se siamo stati solo fortunati oppure con i tagli di Gomoryl’algoritmo di taglio termina sempre in un numero finito di iterazioni. Valela seguente osservazione.

Osservazione 19 Se ad ogni iterazione il taglio di Gomory viene realizzatoa partire dalla prima riga dall’alto con un βk non intero, allora l’algoritmotermina in un numero finito di iterazioni.

Page 75: Programmazione Lineare - di.unito.it

Capitolo 4

Grafi

Per prima cosa diamo la definizione di grafo.

Definizione 14 Un grafo G e costituito da una coppia di insiemi (V,A)dove V e detto insieme dei nodi e A e detto insieme di archi ed e unsottinsieme di tutte le possibili coppie di nodi in V . Se le coppie di nodisono ordinate, il grafo e detto orientato, se non sono ordinate e detto nonorientato.

Esempio 7 Consideriamo un grafo G con insieme di nodi

V = {a, b, c, d, e},

mentre l’insieme di archi e 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) e diversadalla coppia (b, a)) il grafo e orientato, altrimenti (e quindi, ad esempio,la coppia (a, b) e la coppia (b, a) sono equivalenti tra loro) il grafo e nonorientato.

Per quanto sia in molti casi conveniente mantenere la distinzione tra grafiorientati e non orientati, nel seguito ci concentreremo solo sui grafi orien-tati, osservando che per ogni grafo non orientato ne esiste uno orientatoequivalente in cui l’insieme di nodi e lo stesso e per ogni coppia non or-dinata (i, j) che rappresenta un arco del grafo non orientato si creano duecoppie ordinate (i, j) e (j, i) che rappresentano due archi del grafo orientatoequivalente. Quindi, se l’esempio visto fosse stato un grafo non orientato,

75

Page 76: Programmazione Lineare - di.unito.it

76 CAPITOLO 4. GRAFI

lo avremmo potuto trasformare in uno orientato equivalente con gli stessinodi ed il seguente insieme di archi

{(a, b); (b, a); (a, c); (c, a); (b, c); (c, b); (b, e); (e, b); (c, d); (d, c); (d, b); (b, d)}

Diamo ora un’altra definizione.

Definizione 15 Dato un grafo orientato G = (V,A) e un arco (i, j) ∈ Adiremo che il nodo i e predecessore del nodo j e che il nodo j e successoredel nodo i.

Nel grafo dell’esempio, supposto orientato, il nodo a e predecessore del nodob, mentre b e successore di a. Abbiamo definito un grafo G attraverso lacoppia di insiemi V e A. E possibile pero rappresentare un grafo anche neimodi seguenti.

Rappresentazione grafica Ad ogni nodo corrisponde un pallino sul pia-no e ogni arco (i, j) corrisponde ad una linea che congiunge il pallinoche rappresenta il nodo i con il pallino che rappresenta il nodo j, sucui si traccia una freccia da i verso j (per grafi non orientati la frecciasi omette). In Figura 4.1 e mostrata la rappresentazione grafica delgrafo dell’esempio.

������

LLLLLLL

��������������������

SSSSSSSS

a

b

c

d

e

Figura 4.1:

Liste di adiacenza o rappresentazione analitica Ad ogni nodo si af-fianca una lista (eventualmente vuota) contenente tutti i suoi succes-sori. Per il nostro esempio le liste di adiacenza sono le seguenti:

a : (b, c) b : (c, e) c : (d) d : (b) e : ∅

Page 77: Programmazione Lineare - di.unito.it

77

Tabella 4.1:(a, b) (a, c) (b, c) (b, e) (c, d) (d, b)

a 1 1 0 0 0 0b -1 0 1 1 0 -1c 0 -1 -1 0 1 0d 0 0 0 0 -1 1e 0 0 0 -1 0 0

Matrice incidenza nodo-arco Si costruisce una matrice con una rigaper ogni nodo e una colonna per ogni arco. Nella colonna relativaall’arco (i, j) si mette +1 in corrispondenza della riga i, -1 in corri-spondenza della riga j e 0 in corrispondenza di tutte le altre righe. Peril nostro esempio la matrice di incidenza nodo-arco e data in Tabella4.1

Introduciamo ora alcune definizioni.

Definizione 16 Un arco (i, i) in cui cioe il nodo iniziale e finale coinci-dono e detto cappio.

Definizione 17 Un grafo privo di cappi e con al piu un arco che congiungeogni coppia di nodi e detto semplice.

Il grafo dell’esempio e semplice.

Definizione 18 Due archi che hanno un nodo in comune sono detti adia-centi.

Nell’esempio gli archi (a, b) e (a, c) sono adiacenti.

Definizione 19 Una sequenza di nodi

v0 → v1 → · · · → vr

tali che

(vi−1, vi) ∈ A oppure (vi, vi−1) ∈ A ∀ i = 1, . . . , r,

viene detta cammino. Il numero r di archi del cammino e detto lunghezzadel cammino. Un cammino e detto semplice se nessun arco e percorso piudi una volta, elementare se nessun nodo viene toccato piu di una volta. Icammini elementari sono casi particolari di cammini semplici.

Page 78: Programmazione Lineare - di.unito.it

78 CAPITOLO 4. GRAFI

Nell’esempio, il cammino a → b → d → c e un cammino elementare dilunghezza 3; il cammino a → b → c → d → b → e e semplice ma nonelementare (il nodo b e toccato piu di una volta); il cammino a → c →d →→ b → a → c non e ne semplice (l’arco (a, b) e percorso due volte) neelementare.

Definizione 20 Un cammino semplice in cui l’ultimo nodo coincide con ilprimo viene detto ciclo. Se il cammino e elementare, cioe tocca tutti i nodial piu una volta a parte il primo e ultimo nodo, si parla di ciclo elementare.

Nell’esempio a→ b→ c→ a e un ciclo elementare.

Definizione 21 Un cammino o un ciclo in cui tutti gli archi sono percorsisecondo il loro orientamento viene detto orientato, altrimenti si dice nonorientato.

Nell’esempio il cammino a → b → c e orientato mentre il cammino b →a→ c e non orientato.

Definizione 22 Dati due nodi i e j di un grafo G, se esiste un camminoda i a j, allora si dice che j e accessibile da i.

La relazione tra i nodi ”e accessibile da” e una relazione di equivalenza,ovvero soddisfa le tre proprieta riflessiva, simmetrica e transitiva. Come taleinduce classi di equivalenza nell’insieme dei nodi. Tali classi di equivalenzavengono dette componenti connesse del grafo. Ogni componente connessa eformata da nodi tutti accessibili tra loro ma non accessibili da nodi in altrecomponenti.

Definizione 23 Se il grafo contiene una sola componente connessa vienedetto connesso.

La seguente procedura consente di individuare le componenti connesse diun grafo e quindi anche di stabilire se un grafo e connesso.

Inizializzazione Si ponga W = V e r = 1.

Passo 1 Si selezioni un nodo i ∈W e si ponga S = {i} e Tr = ∅.

Passo 2 Si selezioni un nodo j ∈ S. Si rimuova j da S e si aggiungano inS tutti i nodi che non siano gia contenuti in Tr di cui j e predecessoreo successore, cioe

S = (S \ {j}) ∪ {k 6∈ Tr : (k, j) ∈ A o (j, k) ∈ A}.

Si ponga Tr = Tr ∪ {j}.

Page 79: Programmazione Lineare - di.unito.it

79

Passo 3 Se S = ∅, allora si vada al Passo 4. Altrimenti si ritorni al Passo2.

Passo 4 Si ponga W = W \ Tr. Se W = ∅, allora T1, T2, . . . , Tr sono gliinsiemi di nodi delle componenti connesse del grafo. Altrimenti siponga r = r + 1 e si ritorni al Passo 1.

Come esercizio si applichi la procedura per verificare che il grafo dell’esem-pio e connesso.

Definizione 24 Un nodo j e detto fortemente accessibile da i se esiste uncammino orientato da i a j.

Si noti che la relazione tra nodi ”e fortemente accessibile da” non e unarelazione di equivalenza. In particolare non vale per essa la proprieta disimmetria (nell’esempio e e fortemente accessibile da b ma il viceversa none vero).

Definizione 25 Un grafo in cui ogni nodo e fortemente accessibile da tuttigli altri e detto fortemente connesso.

Si noti che l’esistenza in un grafo di un ciclo orientato che tocca tuttii nodi del grafo e condizione necessaria e sufficiente per garantire che ilgrafo sia fortemente connesso. Il grafo del nostro esempio non e fortementeconnesso (come gia osservato b e anche tutti gli altri nodi del grafo nonsono fortemente accessibili da e).

Definizione 26 Un grafo si dice completo se esiste un arco tra ogni coppiadi nodi.

Il nostro grafo non e completo. Ad esempio, non c’e alcun arco tra a ed e.Lo e invece il grafo G = (V,A) con

V = {a, b, c, d}

eA = {(a, b); (c, a); (a, d); (b, c); (d, b); (c, d)}

Definizione 27 Dato un grafo G = (V,A) e un sottinsieme A′ ⊆ A, ungrafo G′ = (V,A′) e 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, seA′′ = A(V ′′) il sottografo viene detto sottografo indotto da V ′′.

Page 80: Programmazione Lineare - di.unito.it

80 CAPITOLO 4. GRAFI

Nell’esempio G′ = (V,A′) con

A′ = {(a, b); (b, c); (b, e); (c, d); (d, b)}

e un grafo parziale di G, mentre G′′ = (V ′′, A′′) con V ′′ = {a, b, d} e

A′′ = {(a, b)}

e un sottografo di G. Se invece si considera G′′ = (V ′′, A′′) con V ′′ ={a, b, d} e

A′′ = {(a, b); (d, b)}

questo e il sottografo di G indotto da V ′′.

Definizione 28 Un grafo G = (V,A) si dice bipartito se l’insieme V puoessere partizionato in due sottinsiemi 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 20 Un grafo e bipartito se e solo se non contiene cicli dilunghezza dispari.

La seguente procedura consente di stabilire se un grafo e bipartito.

Passo 1 Si selezioni un nodo i ∈ V e si ponga T1 = C1 = {i} e T2 = C2 = ∅

Passo 2 Si ponga

T2 = {k ∈ V \ C2 : ∃ i ∈ T1 tale che (i, k) ∈ A oppure (k, i) ∈ A}

Sia C2 = C2 ∪ T2.

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 e bipartito. Altrimenti si vadaal Passo 5.

Page 81: Programmazione Lineare - di.unito.it

81

Passo 5 Se C1 ∪ C2 = V e T1 = T2 = ∅, allora il grafo e bipartito conV1 = C1 e V2 = C2. Altrimenti si ritorni al Passo 2.

Nel nostro esempio selezionando inizialmente il nodo a e ponendolo in T1 eC1 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} e C1 = {a, e, d, c}. Al Passo 4 notiamo che C1 ∩ C2 ={c} 6= ∅ e quindi possiamo concludere che il grafo non e bipartito.

Definizione 29 Sia dato un grafo G = (V,A) con card(V ) = n dovecard(V ) denota la cardinalita (il numero di elementi) dell’insieme V . Sidice che G e un albero se soddisfa le seguenti condizioni (equivalenti traloro)

1. G e privo di cicli e connesso;

2. G e privo di cicli e card(A) = n− 1;

3. G e connesso e card(A) = n− 1;

4. esiste un unico cammino che congiunge ogni coppia di nodi.

Ad esempio, il grafo G = (V,A) con

V = {a, b, c, d, e} A = {(a, b); (b, c); (c, e); (e, d)}

illustrato in Figura 4.2, e un albero. Vale la seguente osservazione.

Osservazione 21 Dato un albero, l’aggiunta di un solo arco crea esatta-mente un ciclo.

Definizione 30 Sia dato un grafo connesso G = (V,A). Si definisce alberodi supporto o spanning tree di G un grafo parziale T = (V,AT ) di G (quindicon AT ⊆ A) che e un albero.

Page 82: Programmazione Lineare - di.unito.it

82 CAPITOLO 4. GRAFI

EEEEEE,,,,,,,,XXXXXX

�������

a

b

c

d

e

Figura 4.2: Un albero G.

Si noti che un albero di supporto di G deve contenere tutti i nodi di G eche in virtu del punto 2. (o del punto 3.) della Definizione 29, si dovraavere card(AT ) = card(V )− 1.

Esempio 8 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 4.3. Un albero di supporto di G e il sottografo T1 =(V,AT1) con

AT1 = {(b, c); (b, d); (a, d)}

un altro e il sottografo T2 = (V,AT2) con

AT2 = {(a, b); (b, c); (c, d)}

I due alberi di supporto di G sono illustrati in Figura 4.3.

La seguente procedura consente di individuare un albero di supporto di ungrafo connesso.

Inizializzazione Si indichino con e1, . . . , em, m = card(A), gli archi delgrafo G = (V,A). Si ponga i = 1 e AT = ∅.

Passo 1 Se (V,AT ∪ {ei}) non contiene cicli, allora si ponga AT = AT ∪{ei}, altrimenti si lasci AT invariato.

Passo 2 Se card(AT ) = card(V )−1, allora (V,AT ) e un albero di supportoper il grafo G, altrimenti si ponga i = i+ 1 e si ritorni al Passo 1.

Page 83: Programmazione Lineare - di.unito.it

4.1. BASE DI CICLI 83

EEEEEE ,,,,,,,,Z

ZZZZZZ

ZZZZZZZ

,,,,,,,,, E

EEEEE##########�������

a

b

c

d

a

b

c

d

a

b d

c

G

T1T2

Figura 4.3: Un grafo G e due suoi alberi di supporto T1 e T2.

4.1 Base di cicli

Introduciamo ora il concetto di base di cicli. Dato un ciclo in un grafoG = (V,A) ad esso possiamo associare un vettore di dimensione pari acard(A) nel modo seguente:

1. fisso un orientamento del ciclo;

2. la componente del vettore corrispondente ad un arco (i, j) ∈ A sarapari a:

• +1 se l’arco (i, j) viene attraversato dal ciclo nel suo stesso verso.• -1 se l’arco (i, j) viene attraversato dal ciclo nel verso opposto al

suo.• 0 se l’arco (i, j) non viene attraversato dal ciclo.

Dato il grafo G = (V,A) con

V = {a, b, c, d, e},

eA = {(a, b); (a, c); (a, e); (c, b); (d, c); (e, d)}

Page 84: Programmazione Lineare - di.unito.it

84 CAPITOLO 4. GRAFI

e il cicloa→ c→ d→ e→ a

con orientamento corrispondente a quello dell’arco (a, c), a tale ciclo associoil vettore

(a, b) (a, c) (a, e) (c, b) (d, c) (e, d)0 1 −1 0 −1 −1

Se avessi scelto come orientamento quello opposto all’arco (a, c) il vettoresarebbe stato il seguente

(a, b) (a, c) (a, e) (c, b) (d, c) (e, d)0 −1 1 0 1 1

cioe uguale al precedente cambiato di segno. La matrice le cui righe sonocostituite dai vettori associati a tutti i cicli di un grafo viene detta matricedei cicli del grafo. Nell’esempio sopra vi sono tre cicli con matrice dei cicliche (a meno di moltiplicazioni per -1 delle righe) e data da

(a, b) (a, c) (a, e) (c, b) (d, c) (e, d)0 1 −1 0 −1 −11 −1 0 −1 0 01 0 −1 −1 −1 −1

Il rango di tale matrice, ovvero il massimo numero di vettori riga relativi aicicli tra loro linearmente indipendenti, e detto numero ciclomatico del grafoed e indicato con ν(G), mentre un sottinsieme dei cicli i cui corrispondentivettori riga formano una base dell’insieme dei vettori riga viene detto basedi cicli. Nel nostro esempio si puo verificare che il numero ciclomatico epari a 2 e che i due cicli che si riferiscono alle prime due righe della matriceformano una base di cicli. Si noti che la scelta dell’orientamento dei cicliper la costruzione dei vettori riga non incide sul numero ciclomatico, inquanto moltiplicare una riga di una matrice per -1 non ne modifica il rango.Esistono vari modi per determinare il numero ciclomatico e una base di cicli.La seguente procedura ne e un esempio.

1. Individuare le componenti connesse

Gi = (Vi, Ai) i = 1, . . . , p

del grafo G = (V,A), dove

∪pi=1Vi = V Vi ∩ Vj = ∅ se i 6= j

e∪pi=1Ai = A Ai ∩Aj = ∅ se i 6= j

Page 85: Programmazione Lineare - di.unito.it

4.2. GRAFI PLANARI E TOPOLOGICAMENTE PLANARI 85

2. Per ogni componente connessa individuare uno spanning tree Ti =(Vi, A′i). Si noti che si dovra avere

card(A′i) = card(Vi)− 1

3. Aggiungendo un arco in Ai\A′i si ottiene un unico ciclo che apparterraalla base di cicli. Ripetendo questo per tutti gli archi in Ai \A′i e pertutte le p componenti connesse, tutti i cicli ottenuti in questo modoformano una base di cicli.

Si noti che il numero ciclomatico e pari al numero di cicli della base e quindisara pari a

ν(G) =p∑i=1

card(Ai \A′i) =p∑i=1

[card(Ai)− card(Vi) + 1] =

=p∑i=1

card(Ai)−p∑i=1

card(Vi) + p

da cuiν(G) = card(A)− card(V ) + p.

Nel nostro esempio si puo verificare che p = 1, mentre card(A) = 6 ecard(V ) = 5 da cui ν(G) = 6− 5 + 1 come gia precedentemente osservato.Sempre nell’esempio, se considero l’albero di supporto con gli archi

(a, b) (a, c) (a, e) (e, d)

aggiungendo l’arco (c, b) ottengo il ciclo

a→ c→ b→ a

e aggiungendo l’arco (d, c) ottengo il ciclo

a→ e→ d→ c→ a

I due cicli ottenuti in questo modo formano una base di cicli.

4.2 Grafi planari e topologicamente planari

Introduciamo ora il concetto di grafo topologicamente planare. La deno-minazione topologicamente planare si riferisce alle sole rappresentazionigrafiche dei grafi. Una rappresentazione grafica di un grafo si dice topo-logicamente planare se il grafo e connesso e se gli archi non hanno punti

Page 86: Programmazione Lineare - di.unito.it

86 CAPITOLO 4. GRAFI

QQQQQQQQQQQQQ

������������

a

b

c

d

Figura 4.4:

di contatto diversi dai nodi del grafo. Data la rappresentazione grafica diun grafo in Figura 4.4, essa non e topologicamente planare in quanto gliarchi (a, d) e (b, c) hanno un punto di contatto diverso dai nodi. D’altrocanto la rappresentazione grafica in Figura 4.5 dello stesso grafo e topolo-gicamente planare. Definiremo un grafo planare se ammette almeno una

QQQQQQQQQQQQQ

a

b

c

d

Figura 4.5:

rappresentazione grafica toplogicamente planare. Il grafo G = (V,A) con

V = {a, b, c, d}

eA = {(a, b); (a, c); (a, d); (b, c); (c, d); (d, b)}

di cui le Figure 4.4 e 4.5 sono due distinte rappresentazioni grafiche, eplanare in quanto ammette almeno una rappresentazione topologicamente

Page 87: Programmazione Lineare - di.unito.it

4.2. GRAFI PLANARI E TOPOLOGICAMENTE PLANARI 87

planare (ad esempio, quella in Figura 4.5). Dal disegno possiamo subitostabilire se una rappresentazione grafica e topologicamente planare. Piucomplicato e stabilire se dato un grafo esso e planare. Avremo bisogno dialcune definizioni.

Definizione 31 Sia dato un grafo G = (V,A) ed un suo arco (i, j) ∈ A.L’operazione di contrazione dell’arco (i, j) consiste nel trasformare il grafoG = (V,A) nel grafo G = (V ′, A′) dove i nodi i e j sono sostituiti da ununico nodo sij, cioe

V ′ = (V \ {i, j}) ∪ {sij}e gli archi sono gli stessi di A per quel che riguarda gli archi che non hannocome estremi i e j, l’arco (i, j) viene soppresso e ogni arco che ha comeuno dei due estremi i oppure j sostituisce tale estremo con il nodo sij (adesempio l’arco (k, i) e sostituito con (k, sij)). Quindi

A′ = {(k, h) ∈ A : k 6= i, j, h 6= i, j}∪{(sij , h) : h 6= i, j, (i, h) ∈ A o (j, h) ∈ A}∪

∪{(k, sij) : k 6= i, j, (k, i) ∈ A o (k, j) ∈ A} \ {(i, j)}

In Figura 4.6 e riportato il risultato della contrazione dell’arco (a, b).

�����

hhhhhh

������

BBBBB���������

����������

������

���������hhhhhhhh

a

bc

Sab c

d

e d e

Figura 4.6:

Definizione 32 Indichiamo con K5 un grafo completo con 5 nodi, ovveroun grafo con 5 nodi ed un arco che congiunge ogni coppia di nodi distinti(si veda la Figura 4.7).

Definizione 33 Indichiamo con K3,3 un grafo bipartito con 3 nodi in cia-scuna delle due parti della bipartizione (card(V1) = card(V2) = 3)e un arcoche congiunge ogni coppia di nodi delle due parti V1 e V2 della bipartizione(si veda la Figura 4.8).

Page 88: Programmazione Lineare - di.unito.it

88 CAPITOLO 4. GRAFI

������ c

cccc

AAAAAA

����������

EEEEEEEEEE

��������

QQQQQQQQ

Figura 4.7:

��������

@@@@@@@

HHHHHHHHHHHHHH

,,,,,,,,,

������

@@@@@@@

�������

���������������

Figura 4.8:

Siamo ora pronti ad enunciare il teorema di Kuratowski che caratterizza igrafi planari.

Teorema 6 Un grafo connesso e planare se e solo se esso stesso ed ognigrafo ottenuto da esso tramite contrazione di archi non contengono una K5

o una K3,3.

Come esercizio si dimostri che il grafo in Figura 4.9 non e planare.

Data una rappresentazione grafica di un grafo G topologicamente plana-re, le porzioni di piano limitate individuate dagli archi del grafo vengonodette facce finite del grafo, mentre la restante parte del piano viene dettafaccia infinita del grafo. Gli archi che delimitano una faccia finita formanoun ciclo della base di cicli del grafo. Quindi, il numero ciclomatico coincidecon il numero di facce finite del grafo. In Figura 4.10 sono mostrate le 3facce finite e la faccia infinita di un grafo topologicamente planare. Quindiil numero ciclomatico del grafo e 3, ottenibile anche attraverso la formula

card(A)− card(V ) + p = 7− 5 + 1 = 3,

Page 89: Programmazione Lineare - di.unito.it

4.2. GRAFI PLANARI E TOPOLOGICAMENTE PLANARI 89

������ c

cccc

AAAAAA

����������

EEEEEEEEEE

��������

QQQQQQQQ

�������

bbbbbb

ccccc

�������

BBBBB

(((((((

Figura 4.9:

mentre i cicli a→ b→ c→ a, b→ d→ c→ b e c→ d→ e→ c, i cui archidelimitano le facce finite, formano una base di cicli.

A un grafo topologicamente planare G si puo associare un grafo duale G′,il quale ha tanti nodi quante sono le facce (quelle finite piu quella infinita)del grafo G (nell’esempio in Figura 4.10 sono 3+1=4) e tanti archi quantisono gli archi di G (nell’esempio sono 7). Per ogni arco (i, j) di G si co-

"""""CCCCCC

ZZZZZZ

aaaaaaaa"""""""HHHHHHH

a

b

d

e

c

faccia infinita

facciafinita

facciafinita

facciafinita

Figura 4.10:

struisce un arco di G′ che congiunge le due facce che sono separate da tale

Page 90: Programmazione Lineare - di.unito.it

90 CAPITOLO 4. GRAFI

arco. Nell’esempio l’arco (d, e) separa la faccia finita delimitata dagli archi(c, d) (d, e) (c, e) e la faccia infinita del grafo G e quindi in G′ avremo unarco che congiunge i nodi di G′ corrispondenti a queste due facce. I nodi(cerchi) e gli archi (tratteggiati) del duale del nostro esempio sono mostratiin Figura 4.11.

d dd

d

"""""CCCCCC

ZZZZZZ

aaaaaaaa"""""""HHHHHHH

a

b

d

e

c

Figura 4.11:

Page 91: Programmazione Lineare - di.unito.it

Capitolo 5

Problemi di PLI echiusure convesse

Consideriamo il seguente problema di PL

max cxAx ≤ bx ≥ 0

con regione ammissibile

P = {x ∈ Rn : Ax ≤ b, x ≥ 0}. (5.1)

Se si aggiungono i vincoli di interezza sulle variabili la regione ammissibilediventa

S = P ∩ Zn

dove Z rappresenta l’insieme degli interi. Il problema di PLI corrispondentee il seguente

maxx∈S

cx (5.2)

Diamo ora la definizione di chiusura convessa di un insieme.

Definizione 34 Dato un insieme T , la chiusura convessa di T , indicatacon conv(T ), e il piu piccolo insieme convesso contenente T .

In Figura 5.1 e riportato un insieme T e la sua chiusura convessa. Siconsideri ora la chiusura convessa conv(S) di S. Si puo dimostrare che,

91

Page 92: Programmazione Lineare - di.unito.it

92 CAPITOLO 5. PROBLEMI DI PLI E CHIUSURE CONVESSE

������llllllll

conv(T)

T

Figura 5.1: Un insieme T e la sua chiusura convessa.

se S 6= ∅, conv(S) e un poliedro convesso o un troncone, cioe esiste unamatrice A′ ed un vettore b′ tale che

conv(S) = {x ∈ Rn : A′x ≤ b′, x ≥ 0}. (5.3)

Si consideri ora il seguente problema di PL

maxx∈conv(S)

cx (5.4)

Si puo dimostrare che:

• il problema (5.2) ammette soluzione se e solo se la ammette il proble-ma (5.4);

• ogni soluzione ottima del problema (5.2) e soluzione ottima del pro-blema (5.4);

• esiste almeno una soluzione ottima (di base) del problema (5.4) che eanche soluzione ottima del problema (5.2).

Questo vuol dire che se conoscessimo la matrice A′ ed il vettore b′ che defi-niscono conv(S), potremmo risolvere il nostro problema di PLI risolvendoil problema di PL (5.4). Il problema e che in molti casi conv(S) non e noto.Gli algoritmi di taglio visti rappresentano un tentativo di approssimare inmodo sempre piu preciso conv(S) attraverso l’aggiunta di tagli successivi.Citiamo anche il fatto che in alcuni casi conv(S) e noto ma e formato daun numero esponenziale di vincoli, il che rende inefficiente la risoluzione delproblema (5.4).

Esempio 9 Si consideri il seguente problema di PLI,

maxx1 + x2

x1 +12x2 ≤

74

Page 93: Programmazione Lineare - di.unito.it

93

12x1 + x2 ≤

74

x1, x2 ≥ 0 interi

Si ha P = {(x1, x2) : Ax ≤ b, x1, x2 ≥ 0}, con

A =[

1 12

12 1

]b =

[7474

].

L’insieme S = P ∩ Z2 e formato dai quattro punti

(0, 0) (0, 1) (1, 0) (1, 1)

Si ha che

conv(S) = {(x1, x2) : x1 ≤ 1, x2 ≤ 1, x1, x2 ≥ 0}.

(vedi Figura 5.2). In tal caso

A′ =[

1 00 1

]b′ =

[11

].

Si noti che indipendentemente dalla funzione obiettivo i problemi (5.2) e(5.4) hanno sempre soluzione in questo caso. Con la funzione obiettivox1 + x2 entrambi i problemi hanno l’unica soluzione (1, 1). Se si considerainvece l’obiettivo x1, si ha che il problema (5.2) ha soluzioni (1, 0) e (1, 1),mentre il problema (5.4) ha come soluzioni l’intero segmento avente comeestremi (1, 0) e (1, 1). E comunque sempre vero che esiste almeno unasoluzione del problema (5.4) che e anche soluzione del problema (5.2).Se si risolve il problema con l’algoritmo di Gomory, si puo vedere che ilprimo taglio e dato dalla seguente disequazione 3x1 +4x2 ≤ 7. Aggiungendotale taglio si vede, in Figura 5.3, come si ottenga un’approssimazione piuprecisa rispetto a P di conv(S).

Dopo aver chiarito cosa sia la chiusura convessa di un insieme e l’importanzadi tale chiusura per i problemi di PLI, ci concentreremo ora su una specialeclasse di problemi di PLI, quelli per cui la chiusura convessa di S = P ∩Zncoincide con P , ovvero

conv(S) = conv(P ∩ Zn) = P. (5.5)

Si noti che nell’esempio precedente cio non era vero. I problemi di PLIper cui si verifica questa condizione sono importanti perche sono molto piusemplici da risolvere rispetto agli altri problemi di PLI. Infatti, essendoconv(S) = P e viste le strette relazioni tra le soluzioni dei problemi (5.2) e

Page 94: Programmazione Lineare - di.unito.it

94 CAPITOLO 5. PROBLEMI DI PLI E CHIUSURE CONVESSE

HHHHHHHHHHHHHHHHHHHHHHHHHHHHAAAAAAAAAAAAAAAAAAAAAAAAAAA

conv(S)

P

Figura 5.2: La chiusura convessa di S per l’esempio considerato.

(5.4), possiamo risolvere tali problemi semplicemente eliminando i vincolidi interezza sulle variabili, ovvero risolvendo il problema di PL

maxx∈P

cx

Per intenderci, se si applica l’algoritmo di Gomory, ci viene subito restitui-ta una soluzione intera senza bisogno di aggiungere tagli. Inoltre, in molticasi questi problemi hanno strutture particolari che consentono di risolverliattraverso algoritmi specifici senza dover utilizzare l’algoritmo del simples-so oppure utilizzando questo in una forma adattata al particolare tipo diproblema.Nel seguito mostreremo casi in cui la condizione (5.5) e soddisfatta.

Page 95: Programmazione Lineare - di.unito.it

5.1. MATRICI TOTALMENTE UNIMODULARI 95

5.1 Matrici totalmente unimodulari

Prima di approfondire ulteriormente il discorso sui problemi per cui conv(S) =P , introduciamo il concetto di matrice totalmente unimodulare.

Definizione 35 Una matrice A si dice totalmente unimodulare (TU nelseguito) se ogni sua sottomatrice quadrata ha determinante pari a 0, +1 o-1.

Si noti che una matrice TU puo avere come elementi solo i valori 0, +1 e-1 visto che ogni suo elemento e una particolare sottomatrice quadrata diordine 1× 1. Si citano di seguito alcune proprieta delle matrici TU.

Proprieta 1 Se A e una matrice TU si ha che

1. AT e TU

2. [A I], dove I e la matrice identica, e TU

3. una matrice ottenuta duplicando righe e/o colonne di A e ancora TU

4. una matrice ottenuta moltiplicando righe e/o colonne di A per -1 eancora TU

5. una matrice ottenuta scambiando righe di A (oppure colonne di A)tra loro e ancora TU

6. una matrice ottenuta da A mediante un’operazione di cardine e ancoraTU

Ci chiediamo ora come sia possibile riconoscere una matrice TU senza dovercalcolare i determinanti di tutte le sottomatrici quadrate. Esistono alcuneregole, tra cui la seguente.

Osservazione 22 Sia A una matrice i cui elementi sono tutti uguali a 0,+1 o -1 e lungo ogni colonna non vi sono piu di due elementi diversi da 0.Allora A e TU se e solo se l’insieme delle righe di A puo essere suddivisoin due sottinsiemi Q1 e Q2 tali che se una colonna contiene due elementidiversi da 0 si ha che:

• se i due elemnti hanno lo stesso segno allora una delle due righe incui si trovano e in Q1 e l’altra in Q2;

• se hanno segno opposto le righe corrispondenti sono entrambe conte-nute in Q1 od entrambe in Q2.

Page 96: Programmazione Lineare - di.unito.it

96 CAPITOLO 5. PROBLEMI DI PLI E CHIUSURE CONVESSE

Esempio 10 Sia A la seguente matrice

A =

1 1 0 00 0 1 11 0 1 00 1 0 1

Prendendo Q1 = {1, 2} e Q2 = {3, 4} si verifica immediatamente che lacondizione e soddisfatta e quindi A e TU.

Vale il seguente corollario.

Corollario 1 Sia A una matrice i cui elementi sono tutti uguali a 0, +1o -1 e lungo ogni colonna non vi sono piu di due elementi diversi da 0.Se nelle colonne con due elementi diversi da 0 la somma di tali elementie uguale a 0 (ovvero un elemento e uguale a +1 e l’altro a -1), allora A eTU.

Dimostrazione E sufficiente porre

Q1 = {tutte le righe di A} Q2 = ∅.

Esempio 11 Sia A la seguente matrice

A =

1 1 0 00 −1 1 1−1 0 0 0

0 0 0 −1

In base al corollario tale matrice e TU.

Ma perche sono importanti le matrici TU? La loro importanza e legata aquesto teorema (non dimostrato).

Teorema 7 Sia

P (b) = {x ∈ Rn : Ax ≤ b, x ≥ 0}

eS(b) = P (b) ∩ Zn,

con b vettore di interi. Si dimostra che A e TU se e solo se per ogni vettoredi interi b per cui P (b) 6= ∅ si ha che

conv(S(b)) = P (b).

Page 97: Programmazione Lineare - di.unito.it

5.1. MATRICI TOTALMENTE UNIMODULARI 97

In altre parole questo ci dice che la soluzione di un problema di PLI conmatrice dei vincoli TU e vettore dei termini noti intero puo essere ottenutasemplicemente eliminando i vincoli di interezza. Ci si puo chiedere se fadifferenza avere una regione ammissibile definita da vincoli di uguaglianza,ovvero se e ancora vero che essendo

P (b) = {x ∈ Rn : Ax = b, x ≥ 0}

con A TU, b vettore di interi e P (b) 6= ∅, si ha che

conv(S(b)) = P (b).

Possiamo notare che

P (b) = {x ∈ Rn : Ax ≤ b,−Ax ≤ −b, x ≥ 0}

e quindi ricondurci al caso in cui i vincoli sono tutti di ≤. Il problema eche in questo modo cambiamo anche la matrice dei vincoli che diventa[

A−A

]mentre il vettore dei termini noti diventa[

b−b

].

Il vettore dei termini noti continua ad essere intero (b e −b sono entrambiinteri). Resta solo da verificare se essendo A TU anche la nuova matricedei vincoli e TU. Ma in base al punto 3 della Proprieta 1 se duplico tuttele righe di A ho ancora una matrice TU e quindi[

AA

]e TU. Inoltre, in base al punto 4 della Proprieta 1 se moltiplico per -1 tuttele righe duplicate di A ho ancora una matrice TU e quindi[

A−A

]e TU. Quindi il caso con vincoli di uguaglianza si riconduce al caso di vincolidi ≤.

Page 98: Programmazione Lineare - di.unito.it

98 CAPITOLO 5. PROBLEMI DI PLI E CHIUSURE CONVESSE

Esempio 12 Si consideri il seguente problema

max x1 + x2 + x3 + x4

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

Il problema di PL ottenuto eliminando i vincoli di interezza ha regioneammissibile

P (b) = {x ∈ Rn : Ax = b, x ≥ 0}

con

A =

1 1 0 0−1 0 1 0

0 −1 0 10 0 −1 −1

e

b =

2432

Si puo verificare attraverso il Corollario 1 che A e TU. Essendo b un vettoredi interi, il problema di PLI puo essere risolto eliminando semplicemente ivincoli di interezza.

Page 99: Programmazione Lineare - di.unito.it

5.1. MATRICI TOTALMENTE UNIMODULARI 99

HHHHHHHHHHHHHHHHHHHHHHHHHHHHAAAAAAAAAAAAAAAAAAAAAAAAAAA

conv(S)

P

3x1+4x2<=7

Figura 5.3: L’aggiunta di un taglio fornisce un’approssimazione dellachiusura convessa di S migliore di P .

Page 100: Programmazione Lineare - di.unito.it

100 CAPITOLO 5. PROBLEMI DI PLI E CHIUSURE CONVESSE

Page 101: Programmazione Lineare - di.unito.it

Capitolo 6

Problemi di flusso a costominimo

Sia data una rete (grafo orientato e connesso) G = (V,A) come quellamostrata in Figura 6.1. Si consideri il seguente problema:

min∑

(i,j)∈A cijxij∑j:(i,j)∈A xij −

∑j:(j,i)∈A xji = bi ∀ i ∈ V

xij ≥ 0 interi ∀ (i, j) ∈ A

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’unita di flusso inviata lungo l’arco (i, j) ha costo paria cij . La variabile xij rappresenta la quantita di flusso inviata lungo l’arco(i, j). La somma ∑

j:(j,i)∈A

xji

rappresenta il flusso complessivo entrante nel nodo i, la somma∑j:(i,j)∈A

xij

rappresenta il flusso complessivo uscente dal nodo i e quindi il vincolo∑j:(i,j)∈A

xij −∑

j:(j,i)∈A

xji = bi

dice che la differenza tra flusso uscente e flusso entrante nel nodo i deveessere pari a bi. Se bi > 0 il flusso uscente supera quello entrante e quindi

101

Page 102: Programmazione Lineare - di.unito.it

102 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

il nodo viene detto nodo sorgente. Se bi < 0 il flusso entrante supera quellouscente ed il nodo viene detto nodo destinazione. Se bi = 0 i due flussientrante ed uscente si equivalgono ed il nodo viene detto di transito. Inpratica ci sono nodi in cui il flusso viene prodotto (i nodi sorgente), altri incui transita (i nodi transito) ed altri ancora verso cui viene convogliato (inodi destinazione). Inviare un flusso xij lungo il generico arco (i, j) ha uncosto pari a cijxij . L’obiettivo e quello di soddisfare le richieste di tutti inodi (rappresentate dai valori bi) in modo tale da avere un costo complessivodel flusso inviato lungo i diversi archi che sia il piu piccolo possibile.

Esempio 13 Sia data la rete in Figura 6.1. I valori bi sono riportati di

��������

@@@@@@@@

cccccccccc

����������

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

5

-2

2

0

6-4

34

Figura 6.1: Una rete con i relativi valori bi associati ai nodi ed i costi unitaridi trasporto lungo gli archi.

fianco ai nodi mentre lungo gli archi sono riportati i valori cij. I nodi 1,2e 3 sono nodi sorgente mentre i nodi 4 e 5 sono nodi destinazione (non visono nodi transito). Il problema corrispondente e il seguente

min 5x12 − 4x23 + 6x42 − 2x13 + 0x34 + 2x15 + 4x53 + 3x45

x12 + x13 + x15 = 2x23 − x12 − x42 = 5

x34 − x13 − x23 − x53 = 1x42 + x45 − x34 = −4

Page 103: Programmazione Lineare - di.unito.it

103

x53 − x15 − x45 = −4x12, x23, x42, x13, x34, x15, x53, x45 ≥ 0 interi

Analizziamo ora la matrice dei vincoli per questi problemi. In essa avremotante righe quanti sono i nodi della rete e tante colonne quanti sono gliarchi della rete. Tale matrice viene detta matrice di incidenza nodo-arcodella rete. Essa avra nella colonna relativa all’arco (i, j) due soli elementidiversi da 0, un +1 nella riga i relativa al nodo da cui l’arco esce e un -1nella riga j relativa al nodo in cui l’arco entra. Ma allora ci ritroviamonella situazione di una matrice con elementi tutti uguali a 0, +1 o -1, connon piu di due elementi diversi da 0 lungo ogni colonna e con tali elementidi segno opposto. Il Corollario 1 ci dice che tale matrice e TU e quindi,essendo tutti i bi interi per ipotesi, possiamo eliminare i vincoli di interezzasulle variabili. Quindi, i problemi di flusso a costo minimo, pur essendoproblemi di PLI, sono problemi piu semplici dei generici problemi di PLIin quanto risolvibili come se fossero problemi di PL.

Esempio 14 Nel nostro esempio la matrice di incidenza nodo-arco e laseguente:

A =

1 1 1 0 0 0 0 0−1 0 0 1 −1 0 0 0

0 −1 0 −1 0 1 −1 00 0 0 0 1 −1 0 10 0 −1 0 0 0 1 −1

(6.1)

Come gia anticipato, i problemi di PLI risolvibili come problemi di PLeliminando i vincoli di interezza hanno tipicamente una struttura tale daconsentire di sviluppare tecmiche specifiche per tali problemi piu efficientidel simplesso o quantomeno di applicare il simplesso stesso con tecniche piulegate alla struttura del problema. Cio che vedremo nel seguito e il metododel simplesso su reti, ovvero il metodo del simplesso adattato a problemidi flusso a costo minimo su reti. Prima pero accenniamo brevemente ad unrisultato sul rango della matrice di incidenza nodo-arco di una rete.

6.0.1 Rango della matrice di incidenza nodo-arco diuna rete

Se sommiamo tra loro tutte le | V | righe della matrice otteniamo il vettorenullo. Infatti in ogni colonna ci sono esattamente un +1 e un -1 (si facciala verifica sull’esempio). Quindi le | V | righe sono tra loro linearmentedipendenti ed il rango non potra essere superiore a | V | −1. Si puodimostrare (ma non lo faremo) che il rango e esattamente pari a | V | −1.

Page 104: Programmazione Lineare - di.unito.it

104 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

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 traloro linearmente dipendenti) ci mostra che uno (ed un solo) vincolo delproblema puo essere eliminato in quanto ridondante. Non importa qualevincolo si elimina. Come convenzione si puo fissare di eliminare l’ultimaequazione. Nel seguito quindi l’ultimo vincolo si intendera soppresso equando si parlera di matrice dei vincoli si intendera la matrice di incidenzanodo-arco privata dell’ultima riga. Nel nostro esempio quindi la matricedei vincoli sara

A =

1 1 1 0 0 0 0 0−1 0 0 1 −1 0 0 0

0 −1 0 −1 0 1 −1 00 0 0 0 1 −1 0 1

ovvero la matrice (6.1) in cui e stata soppressa l’ultima riga.

6.1 Il simplesso su rete

Vedremo ora come il simplesso possa essere adattato ai problemi di flusso acosto minimo su reti. Cominceremo con lo stabilire il legame esistente trabasi del simplesso ed alberi di supporto della rete.NOTA BENE! Per mancanza di uno standard, quando nel seguito si farariferimento a variabili in base e fuori base, si dovra intendere l’opposto diquanto visto nella PL. Quelle che venivano dette variabili in base sono orada intendersi come variabili fuori base e viceversa. Si noti che, essendo ilnumero di righe (ed il rango) della matrice dei vincoli pari a | V | −1, lebasi sono sempre formate da | V | −1 variabili. Ma non tutti gli aggregatidi | V | −1 variabili danno origine ad una base. Per formare una basedevono anche soddisfare la proprieta che la matrice ottenuta considerandole sole colonne relative ad esse nella matrice dei vincoli sia invertibile. Nelnostro esempio, se si considera l’albero di supporto in Figura 6.2 si ha chele colonne ad esso relativo nella matrice dei vincoli formano la seguentematrice

1 0 0 00 1 0 00 −1 1 00 0 −1 1

che e invertibile e quindi le variabili corrispondenti formano una base.

Page 105: Programmazione Lineare - di.unito.it

6.1. IL SIMPLESSO SU RETE 105

@@@@@@@@

����������

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

2

0

-4

3

Figura 6.2: Un albero di supporto per la rete del nostro esempio.

6.1.1 Relazioni tra basi ed alberi di supporto

Si consideri un generico albero di supporto della rete. Esso sara formatoda | V | −1 archi. Si puo dimostrare (ma non lo faremo) che la soluzioneottenuta mettendo le variabili relative agli archi dell’albero di supporto inbase e tutte le altre fuori base (si ricordi ancora l’inversione della termi-nologia rispetto a quanto visto nella PL) si ottiene una soluzione di base(non necessariamente ammissibile e quindi non necessariamente un vertice)del problema. Abbozzeremo invece una dimostrazione del viceversa e cioeche data una qualsiasi base, i | V | −1 archi relativi alle variabili in baseformano un albero di supporto. Per dimostrarlo ragioniamo per assurdoe supponiamo che gli archi non formino un albero di supporto. Poiche gliarchi sono | V | −1, se non formano un albero di supporto devono formarealmeno un ciclo. Vediamo cosa succede in presenza di un ciclo sul nostroesempio, precisando che quanto vedremo su tale esempio puo essere genera-lizzato a tutti i casi in cui compaia un ciclo. Supponiamo che le | V | −1 = 4variabili in base siano quelle relative agli archi

(1, 2) (2, 3) (5, 3) (1, 5)

che formano il ciclo mostrato in Figura 6.3. Fissiamo un arco del ciclo,ad esempio (1, 2) ed imponiamo che il verso di percorrenza del ciclo siaquello dell’arco (1, 2). Per ogni colonna nella matrice dei vincoli relativa

Page 106: Programmazione Lineare - di.unito.it

106 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

@@@@@@@@

,,,,,,,,,

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

Figura 6.3: Un insieme di archi che formano un ciclo non possono dareorigine ad una base.

ad un arco del ciclo la moltiplichiamo per +1 se il ciclo attraversa l’arconel suo verso, per -1 se lo attraversa nel verso opposto. Poi sommiamo ivettori ottenuti in questo modo. Nel nostro caso moltiplicheremo per +1le colonne relative agli archi (1, 2) e (2, 3) e per -1 quelle relative agli archi(5, 3) e (1, 5). Quindi avremo

+1

1−100

+ 1

01−10

− 1

00−10

− 1

1000

=

0000

Cio dimostra che esiste una combinazione lineare non nulla delle colonneche restituisce il vettore nullo. Quindi tali colonne non formano una ma-trice invertibile e non rappresentano una base. Come detto, e possibilegeneralizzare questo risultato: ogni qualvolta gli archi relativi ad un insie-me di variabili formano un ciclo, le corrispondenti colonne della matrice deivincoli sono linearmente dipendenti e quindi le variabili non formano unabase. L’unica possibilita per avere una base e che gli archi non forminoalcun ciclo. Ma in base alla definizione di albero, in un grafo con | V | nodi,| V | −1 archi che non formano alcun ciclo formano un albero di supporto.Abbiamo quindi mostrato il seguente importante risultato.

Page 107: Programmazione Lineare - di.unito.it

6.1. IL SIMPLESSO SU RETE 107

Osservazione 23 In un problema di flusso su rete a costo minimo vi euna corrispondenza uno a uno tra basi ed alberi di supporto, ovvero ad ogniinsieme di | V | −1 variabili che formano una base corrisponde un alberodi supporto e viceversa.

Quindi, per i problemi di flusso su reti a costo minimo sara indifferenteparlare di basi o di alberi di supporto.

6.1.2 Alberi di supporto e soluzione di base corrispon-dente

Supponiamo ora di avere un albero di supporto (vedi Figura 6.2) nel nostroesempio e poniamoci la seguente domanda: in corrispondenza di tale alberoe quindi di tale soluzione di base, qual e il valore delle variabili? Perprima cosa le variabili associate ad archi che non appartengono all’albero disupporto avranno associato un valore pari a 0. Quindi nel nostro esempio:

x12 = x13 = x42 = x53 = 0.

Partiamo ora dai nodi foglia dell’albero di supporto (in questo caso i nodi1 e 2). Essendoci un solo arco dell’albero incidente su di essi c’e anche unsolo modo di soddisfare il vincolo relativo a tali nodi e cioe inviando lungoquell’unico arco un flusso pari al valore bi per quel nodo (si ricordi che ilflusso lungo gli altri archi incidenti sul nodo e pari a 0). Ora, per il nodo 1si ha b1 = 2 e quindi il solo modo di soddisfare il vincolo relativo al nodo 1 eporre x15 = 2; per il nodo 2 si ha b2 = 5 e quindi il solo modo di soddisfare ilvincolo relativo al nodo 2 e porre x23 = 2. Una volta sistemati i nodi fogliamarchiamo in modo diverso (ad esempio tratteggiandoli) gli archi incidentisu di essi (vedi Figura 6.4). Si noti che il valore del flusso lungo gli architratteggiati e gia stato fissato. Avremo quindi il nostro albero di supportoil cui insieme di archi indicheremo con T ed un suo sottoalbero formatodall’insieme di archi T ′ ⊆ T che contiene i soli archi di T non trattegiati. Siconsiderino ora i nodi foglia del sottoalbero T ′. Prendiamo, per esempio, ilnodo 3. I soli archi dell’albero di supporto T che incidono sul nodo 3 sono(2, 3), arco tratteggiato e lungo cui quindi il valore del flusso e gia statofissato (x23 = 5), e (3, 4). A questo punto per soddisfare il vincolo relativoal nodo 3 (con b3 = 1) l’unica possibilita e inviare in uscita dal nodo 3lungo l’arco (3, 4) un flusso pari a 6 e quindi porre x34 = 6. Per il nodo5 abbiamo che i soli archi dell’albero di supporto T che incidono sul nodo5 sono (1, 5), arco tratteggiato e lungo cui quindi il valore del flusso e giastato fissato (x15 = 2), e (4, 5). A questo punto per soddisafare il vincolorelativo al nodo 5 (con b5 = −4) l’unica possibilita e inviare in entrata alnodo 5 lungo l’arco (4, 5) un flusso pari a 2 e quindi porre x45 = 2. A

Page 108: Programmazione Lineare - di.unito.it

108 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

����������

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

2

0

-4

3

Figura 6.4: Il valore del flusso lungo gli archi tratteggiati e gia stato fissato.

questo punto tratteggiamo anche i nuovi archi lungo cui il flusso e statofissato (vedi Figura 6.5). Possiamo notare che a questo punto tutti gli archisono tratteggiati e quindi possiamo arrestarci. Se avessimo avuto altri archinon tratteggiati avremmo proseguito analizzando i nodi foglia dell’albero T ′

formato dagli archi non tratteggiati. Quindi la soluzione relativa all’alberodi supporto T e 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 siparla di soluzione di base o albero di supporto ammissibile ( e quindi sitratta di un vertice della regione ammissibile).Posiamo ora riassumere la procedura che abbiamo applicato nel nostroesempio nel modo seguente.

Inizializzazione Siano tutti gli archi nell’insieme di archi T dell’albero disupporto a tratto continuo e sia T ′ = T .

Passo 1 Se T ′ = ∅ allora STOP. Altrimenti per ogni nodo foglia di T ′ sifissi nell’unico modo possibile il valore del flusso dell’unico arco inT ′ incidente su tale nodo e si tratteggi tale arco. Si indichi con Ul’insieme degli archi tratteggiati in questo modo.

Page 109: Programmazione Lineare - di.unito.it

6.1. IL SIMPLESSO SU RETE 109

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

2

0

-4

3

Figura 6.5: Il valore del flusso lungo gli archi tratteggiati e gia stato fissato.

Passo 2 Si aggiorni T ′ eliminando da esso tutti gli archi che sono statitratteggiati, ovvero si ponga T ′ = T ′ \ U e si ritorni al Passo 1.

NOTA BENE Nel caso in cui una o piu delle variabili relative all’alberodi supporto fossero uguali a 0 avremmo una soluzione degenere.

6.1.3 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 unasoluzione ottima in un problema di PL, e controllare se tutti i coefficienti dicosto ridotto sono non positivi in un problema di massimo oppure tutti nonnegativi in un problema di minimo. Nella tabella del simplesso i coefficientidi costo ridotto appaiono nell’ultima riga della tabella. Nel simplesso su retenon abbiamo alcuna tabella e dobbiamo quindi vedere come calcolare talivalori. Per prima cosa ricordiamo che vanno calcolati per le sole variabilifuori base (al solito, si ricordi l’inversione di terminologia rispetto al metododel simplesso visto in precedenza). Quindi i coefficienti vanno calcolatiper le sole variabili associate ad archi che non fanno parte dell’albero disupporto. La procedura per tale calcolo verra illustrata sul nostro esempio.Prendiamo una qualsiasi variabile fuori base e quindi un qualsiasi arco

Page 110: Programmazione Lineare - di.unito.it

110 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

che non faccia parte dell’albero di supporto, ad esempio l’arco (1, 3). Perprima cosa aggiungiamo l’arco all’albero. Si formera esattamente un cicloche verra orientato nel verso dell’arco (1, 3) e quindi il ciclo sara

1→ 3→ 4→ 5→ 1

come si vede da Figura 6.6. Si noti che il ciclo attraversa gli archi (1, 3),

@@@@@@@@

����������

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

2

0

-4

3

Figura 6.6: 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 versoopposto. Il coefficiente di costo ridotto relativo all’arco (1, 3), indicatocon c13 verra calcolato sommando tra loro tutti i costi relativi agli archiattraversati dal ciclo nel loro stesso verso e sottraendo al risultato i costidegli 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 e negativo e questo ci dice imme-diatamente che non possiamo concludere che la soluzione di base correntee ottima. Possiamo ripetere la procedura per tutti gli archi fuori base percalcolare tutti i coefficienti di costo ridotto. Si ottengono i seguenti risultati:

c42 = 2 c12 = 2 c53 = 7.

Come gia osseravto, la presenza di un coefficiente di costo ridotto negativo(c13) ci impedisce di concludere che la soluzione di base corrente e ottima.

Page 111: Programmazione Lineare - di.unito.it

6.1. IL SIMPLESSO SU RETE 111

In questi casi nel metodo del simplesso che avete visto si procede ad uncambio di base attraverso un’operazione di cardine sulla tabella. Vediamoora come questo viene fatto nel simplesso su rete.

6.1.4 Cambio di base ovvero l’operazione di cardinenel simplesso su rete

Per il cambio di base dovremo dare una regola per stabilire quale variabilefuori base far entrare in base e quale in base dovra uscire dalla base. Perquanto riguarda la variabile fuori base da far entrare in base, la scelta eristretta alle sole variabili con coefficiente di costo ridotto negativo (le soleincrementando le quali si puo far diminuire il costo complessivo del flusso).Tra queste fisseremo come regola di scegliere quella (o una di quelle, sesono piu di una) con il coefficiente di costo ridotto il piu negativo possibile.Nel nostro esempio non abbiamo alcuna scelta da fare visto che la solavariabile fuori base con coefficiente di costo ridotto negativo e quella relativaall’arco (1, 3). Aggiungiamo tale arco all’albero e riotteniamo la Figura 6.6.Inizialmente il flusso lungo l’arco (1, 3) e nullo (x13 = 0). Incrementiamo a∆ il valore di tale flusso. Quindi avremo un nuovo flusso pari a ∆ in uscitadal nodo 1 ed in entrata al nodo 3. Per poter continuare a rispettare i vincolirelativi al nodo 1 e 3 dovremo diminuire di ∆ il flusso lungo l’arco (1, 5) edaumentare di ∆ il flusso lungo l’arco (3, 4). A questo punto per soddisfareil vincolo relativo al nodo 4 dobbiamo incrementare di ∆ il flusso lungol’arco (4, 5). Si noti che il vincolo relativo al nodo 5 e ancora soddisfattopoiche nel nodo 5 arriva un flusso pari a ∆ in piu dal nodo 4 ma ancheun flusso ancora pari a ∆ in meno dal nodo 1. Gli archi relativi al nodo 2non subiscono variazioni e quindi il vincolo relativo al nodo 2 continua adessere soddisfatto. Si puo riassumere quanto visto nel modo seguente. Unavolta aggiunto l’arco (1, 3) si forma un ciclo che viene orientato nel versodell’arco (1, 3) stesso. Il flusso viene incrementato di ∆ lungo ogni arco cheil ciclo attraversa nel suo stesso verso e decrementato di ∆ lungo gli archiche 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 casopossiamo incrementare ∆ fino a 2 ma non oltre in quanto incrementandolooltre il flusso relativo all’arco (1, 5) diventerebbe negativo. La prima varia-bile che diventa nulla incrementando ∆ corrispondera alla variabile da faruscire di base. Se piu variabili diventano nulle contemporaneamente incre-mentando ∆ (caso degenere) se ne seleziona una di esse arbitrariamente.

Page 112: Programmazione Lineare - di.unito.it

112 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

L’albero di supporto corrispondente alla nuova base sara quello ottenutoinserendo 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 equella riportata in Figura 6.7 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

����������

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

Figura 6.7: La nuova base (albero di supporto) del problema.

l’arco relativo alla variabile fuori base avesse tutti gli archi orientati nellostesso verso del ciclo stesso (vedi Figura 6.8) allora potrei far crescere ∆all’infinito senza che nessun flusso si annulli (tutti i flussi lungo il ciclo ven-gono incrementati). Cio corrisponde al caso di problema illimitato.

Possiamo ora concludere il nostro esempio andando a calcolare i nuovicoefficienti 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 e otti-ma. Piu precisamente, essendo tutti non solo non negativi ma anche stret-tamente positivi, si conclude che la soluzione e anche l’unica soluzioneottima.

Page 113: Programmazione Lineare - di.unito.it

6.1. IL SIMPLESSO SU RETE 113

����������

llllllll

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=1

Figura 6.8: Tutti gli archi del ciclo hanno lo stesso orientamento: ilproblema ha obiettivo illimitato.

6.1.5 Calcolo della soluzione del duale

Una volta ottenuta la soluzione ottima per il problema primale possiamo de-terminare la soulzione ottima del problema duale. Prendiamo nella matricedei vincoli le sole colonne relative agli archi nell’albero di supporto otti-mo. Sia B la matrice ottenuta in questo modo. A questo punto dobbiamosemplicemente risolvere il sistema

wB = cB

dove cB e il vettore dei costi di flusso unitario ristretto alle sole variabi-li associate ad archi dell’albero di supporto ottimo. Nel nostro esempioavremo

[w1 w2 w3 w4]

1 0 0 00 1 0 0−1 −1 1 00 0 −1 1

=

−2−403

e quindi

w1 − w3 = −2 w2 − w3 = −4 w3 − w4 = 0 w4 = 3

da cuiw1 = 1 w2 = −1 w3 = 3 w4 = 3.

Page 114: Programmazione Lineare - di.unito.it

114 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

6.1.6 Determinazione di una soluzione di base ammis-sibile iniziale

Nella descrizione del simplesso su rete siamo partiti assumendo di averegia a disposizione un albero di supporto ammissibile. Non sempre peroquesto e vero e non e neppure detto che una soluzione ammissibile esista.Avremo quindi bisogno di una procedura che ci dica se ci sono soluzioniammissibili e, nel caso esistano, ce ne restituisca una. Utilizzeremo unatecnica due fasi. Nella prima fase aggiungiamo alla nostra rete un nuovonodo q e congiungiamo tale nodo con ogni nodo i della rete tale che bi < 0attraverso l’arco (q, i), mentre lo congiungiamo con ogni nodo i della retetale 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 a1 per tutti gli archi incidenti sul nodo q e 0 per tutti gli archi della reteoriginaria. Per il nostro esempio la nuova rete sara quella in Figura 6.9. Per

��������

@@@@@@@@

cccccccccc

����������

1

2

3 4

5

b1=2

b2=5

b4=-4

b5=-4

b3=10

q

bq=0

1

1

1

1

1

0 00

00

0

0

Figura 6.9: Il problema di prima fase per determinare una soluzioneammissibile iniziale.

questo problema si ha immediatamente a disposizione un albero di supportoammissibile, quello formato da tutti gli archi incidenti su q, con i seguenti

Page 115: Programmazione Lineare - di.unito.it

6.1. IL SIMPLESSO SU RETE 115

valori delle variabili:

xqi = −bi ∀ i : bi < 0xiq = bi ∀ i : bi ≥ 0

mentre tutte le altre variabili sono nulle. A questo punto risolviamo questoproblema con il simplesso su rete nel modo gia visto in precedenza. Sela soluzione ottima di tale problema e maggiore di 0, allora il problemaoriginario ha regione ammissibile vuota. Se invece la soluzione ottima epari a 0 e l’albero di supporto ottimo contiene solo uno dei nuovi archi(quelli incidenti su q), eliminando tale arco si ottiene un albero di supportoammissibile per il problema originario. A questo punto possiamo eliminareil nodo q e tutti gli archi incidenti su di esso, ripristinare gli originari costidegli archi e cominciare a risolvere il problema (seconda fase del metodo).Non illustreremo la prima fase del metodo sul nostro solito esempio inquanto ci sarebbero troppi calcoli da fare. La illustreremo su un esempiodi piu piccole dimensioni.

Esempio 15 Si consideri la rete in Figura 6.10. Nella prima fase aggiun-giamo il nodo q e gli archi incidenti su di esso ed aggiorniamo i costi deiflussi come indicato in Figura 6.11. Per il problema della prima fase un

�������

HHHHHHHH

1

2

3

b1=1

b2=3

b3=-4

2

3

5

Figura 6.10: Una rete.

albero di supporto ammissibile e quello formato dagli archi incidenti su q,ovvero (1, q), (2, q) e (q, 3). La soluzione iniziale e

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.

Page 116: Programmazione Lineare - di.unito.it

116 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

�������

HHHHHHHH

1

2

3 q

b1=1

b2=3

b3=-4

0

0

0

1

1

1

Figura 6.11: La rete ausiliaria per determinare un flusso ammissibile inizialeper la rete di Figura 6.10.

La soluzione non e ottima in quanto abbiamo coefficienti di costo ridottonegativi. Scelgo una delle variabili fuori base con coefficiente di costo ri-dotto piu negativo, ad esempio quella associata all’arco (1, 3). Applicandola procedura per il cambio di base ottengo il nuovo albero di supporto (1, 3),(2, q) e (q, 3). La nuova soluzione e

xq3 = 3 x2q = 3 x13 = 1,

tutte le altre variabili nulle. Il calcolo dei coefficienti di costo ridotto resi-tuisce

c12 = 2 c1q = 1 c23 = −2.

La soluzione non e ottima in quanto abbiamo coefficienti di costo ridottonegativi. Scelgo una delle variabili fuori base con coefficiente di costo ridottopiu negativo, in tal caso c’e solo quella associata all’arco (2, 3). Applicandola procedura per il cambio di base ottengo il nuovo albero di supporto (1, 3),(2, 3) e (q, 3). La nuova soluzione e

xq3 = 0 x23 = 3 x13 = 1,

tutte le altre variabili nulle. Il calcolo dei coefficienti di costo ridotto resi-tuisce

c12 = 0 c1q = 1 c2q = 1.

La soluzione e ottima ed e pari a 0. Quindi il problema ammette soluzioniammissibili. Inoltre, poiche la soluzione ottima contiene un solo arco inci-dente sul nodo q, eliminando tale arco ottengo immediatamente un alberodi 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 adentrare nella seconda fase e risolvere il problema originario.

Page 117: Programmazione Lineare - di.unito.it

6.2. CASI PARTICOLARI DI PROBLEMI DI FLUSSO A COSTO MINIMO117

6.2 Casi particolari di problemi di flusso acosto minimo

6.2.1 Problema del cammino minimo

Data una rete G = (V,A) con costi associati agli archi tutti non negativi,si fissino due nodi s e t. Si vuole determinare il cammino a costo minimo(o distanza minima se i costi corrispondono alle lunghezza degli archi dapercorrere) dal nodo s al nodo t. Il problema puo essere formulato comequello di inviare una singola unita di flusso dal nodo s al nodo t cercandodi minimizzare il costo per far giungere tale unita dal nodo s al nodo t.Quindi avremo un particolare problema di flusso a costo minimo in cui dalnodo s esce un’unita di flusso (bs = +1), nel nodo t ne entra una (bt = −1),mentre tutti gli altri sono nodi di transito bi = 0 (vedi Figura 6.12). Ilproblema ha la formulazione seguente:

min∑

(i,j)∈A cijxij∑j: (s,j)∈A xsj −

∑j: (j,s)∈A xjs = +1∑

j: (t,j)∈A xtj −∑j: (j,t)∈A xjt = −1∑

j: (i,j)∈A xij −∑j: (j,i)∈A xji = 0 ∀ i ∈ V \ {s, t}

xij ∈ {0, 1} ∀ (i, j) ∈ A

Si noti che, rispetto al generico problema di flusso a costo minimo, invecedel vincolo di interezza delle variabili xij , (cioe xij ≥ 0 interi) qui abbiamovincoli di binarieta sulle variabili (xij ∈ {0, 1} ovvero non solo le variabilidevono essere intere ma esse possono assumere i soli valori 0 e 1). In realtasi dimostra che anche in questo caso la chiusura convessa della regioneammissibile del problema si ottiene semplicemente sostituendo i vincoli dibinarieta xij ∈ {0, 1} con i vincoli xij ≥ 0, cioe richiedendo soltanto chele variabili siano non negative, esattamente come per i generici problemidi flusso a costo minimo la chiusura convessa della regione ammissibile siottiene semplicemente eliminando i vincoli di interezza delle variabili.

6.2.2 Il problema del trasporto

Se nel problema del cammino a costo minimo la rete puo avere una formaqualsiasi ma i nodi possono avere solo valori bi particolari, nel problema deltrasporto i nodi possono avere generici valori bi ma la rete ha una strutturaparticolare. Piu precisamente, nel problema del trasporto la rete e un grafobipartito. Siano V1 e V2 i sottinsiemi in cui e partizionato l’insieme deinodi. Dai nodi in V1 ci sono solo archi uscenti e nei nodi in V2 ci sono solo

Page 118: Programmazione Lineare - di.unito.it

118 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

!!!!!!!!!!!

hhhhhhhhhhQQQQQQQQQQQ

BBBBB"""""""

@@@@@@@

���������

aaaaaaaa

s

tbs=1

bt=-11

2

3

4

5

b1=0

b2=0

b3=0

b4=0

b5=0

4

4

6

3

2 5

8

67

5

Figura 6.12: La rete per un problema di cammino a costo minimo.

archi entranti e quindi per ogni (i, j) ∈ A si ha i ∈ V1 e j ∈ V2. Quindibi > 0 per ogni i ∈ V1 e bi < 0 per ogni i ∈ V2. I nodi i in V1 possono esserevisti come magazzini in cui si trovano le quantita bi di un certo prodotto.I nodi j in V2 possono essere visti come negozi che richiedono le quantitabj del prodotto. Il trasporto di un’unita di prodotto dal nodo i al nodo j(se esiste un arco che congiunge i e j) ha un costo pari a cij . Si tratta dideterminare le quantita di prodotto da inviare da ogni magazzino verso ogninegozio in modo tale da rendere minimo il costo complessivo di trasporto.Un caso particolare e illustrato in Figura 6.13. Il problema si presenta nellaseguente forma:

min∑

(i,j)∈A cijxij∑j: (i,j)∈A xij = bi ∀ i ∈ V1

−∑i: (i,j)∈A xij = bj ∀ j ∈ V2

xij ≥ 0 interi ∀ (i, j) ∈ A

Come si vede, si tratta di un particolare esempio di problema di flusso acosto minimo.

6.2.3 Il problema dell’assegnamento

Il problema di assegnamento e un caso particolare del problema del traspor-to in cui | V1 |=| V2 | ed inoltre bi = 1 per ogni i ∈ V1 e bj = −1 per ognij ∈ V2. Il problema si puo interpretare come quello di formare coppie di

Page 119: Programmazione Lineare - di.unito.it

6.2. CASI PARTICOLARI DI PROBLEMI DI FLUSSO A COSTO MINIMO119

hhhhhhhhhhhhhhh

������

������

�����

HHHHHHHHHHHHHHHH

!!!!!!!!!!!!!!!

�����������������

����������������

5

6

8 4

3

2

7

9

1

2

3

4

5

6

7

b1=4

b2=6

b3=8

b4=1

b5=-10

b6=-5

b7=-4

Figura 6.13: Un esempio di problema di trasporto.

elementi di V1 e V2 in modo da rendere minimo il costo complessivo di taliaccoppiamenti. Un esempio particolare e il caso in cui V1 e un insieme dicompiti, V2 un insieme di persone ed il costo cij , i ∈ V1 e j ∈ V2, e il costodi far svolgere il compito i alla persona j (vedi Figura 6.14). Il problemasi presenta nella seguente forma:

min∑

(i,j)∈A cijxij∑j: (i,j)∈A xij = 1 ∀ i ∈ V1∑i: (i,j)∈A xij = 1 ∀ j ∈ V2

xij ≥ 0 interi ∀ (i, j) ∈ A

Si puo dimostrare che, per la forma dei vincoli del problema di assegna-mento, il richiedere xij ≥ 0 interi e equivalente a richiedere che le variabilisiano binarie, ovvero xij ∈ {0, 1}, cioe i soli valori interi che possono assu-mere le variabili xij in un problema di assegnamento sono i valori 0 e 1.Quindi una formulazione equivalente del problema e la seguente:

min∑

(i,j)∈A cijxij∑j: (i,j)∈A xij = 1 ∀ i ∈ V1∑i: (i,j)∈A xij = 1 ∀ j ∈ V2

Page 120: Programmazione Lineare - di.unito.it

120 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

hhhhhhhhhhhhhhh

������

������

�����

HHHHHHHHHHHHHHHH

!!!!!!!!!!!!!!!

5

6

8 4

3

2

1

2

3

4

5

6 b6=-1

b5=-1

b4=-1b1=1

b2=1

b3=1

Figura 6.14: Un esempio di problema di assegnamento.

xij ∈ {0, 1} ∀ (i, j) ∈ A

I valori 0 e 1 delle variabili vengono interpretati nel modo seguente: sexij = 0, allora l’elemento j ∈ V2 non viene accoppiato con l’elementoi ∈ V1; se xij = 1, allora l’elemento j ∈ V2 viene accoppiato con l’elementoi ∈ V1.

6.2.4 Il problema di massimo flusso

Sia data una rete G = (V,A) dove vengono individuati due nodi in V , unoindicato con S e l’altro con D (vedi Figura 6.15). Vogliamo produrre lamassima quantita di flusso possibile in S e farlo giungere a D attraverso gliarchi della rete. Ad ogni arco (i, j) della rete e associata una quantita Kij

che e la sua capacita (il flusso massimo trasportabile lungo tale arco). Ilflusso puo essere per esempio un prodotto che, attraverso una rete stradale,deve essere fatto giungere da una sorgente (il nodo S) ad una destinazione(il nodo D) oppure dell’informazione da far viaggiare attraverso una retedi comunicazione. I nodi intermedi (i nodi diversi da S e T ) sono nodi ditransito bi = 0. Il problema si presenta nella seguente forma:

max y∑j:(S,j)∈A xSj −

∑j:(j,S)∈A xjS = y∑

j:(D,j)∈A xDj −∑j:(j,D)∈A xjD = −y∑

j:(i,j)∈A xij −∑j:(j,i)∈A xji = 0 ∀ i ∈ V \ {S,D}

0 ≤ xij ≤ Kij interi ∀ (i, j) ∈ A

Page 121: Programmazione Lineare - di.unito.it

6.2. CASI PARTICOLARI DI PROBLEMI DI FLUSSO A COSTO MINIMO121

������

hhhhhh

EEEEE

JJJJJJJJ

ZZZZZZZ

!!!!!!

PPPPPPP

�������

QQQQQQS

D

1

2

3

4

5

8

8

2

56

1

4

3

6

2

Figura 6.15: Un esempio di problema di flusso massimo. Si noti che i numerial di sopra degli archi non rappresentano costi ma capacita degli archi.

y ≥ 0

In questa forma non si presenta come un problema di flusso a costo minimo.Per prima cosa si presenta come problema di massimo invece che comeproblema di minimo. A questo si rimedia facilmente ricordando che

max y = −min−y

Inoltre, nei problemi di flusso a costo minimo abbiamo che i valori bi sonofissi mentre qui abbiamo che per S e D essi sono delle variabili (+y per ilnodo S e −y per il nodo D). Anche a questo si puo ovviare modificando larete con l’aggiunta di un arco da D verso S con KDS = +∞ (vedi Figura6.16). Avremo quindi una nuova rete G′ = (V,A′) dove A′ = A∪ {(D,S)}.In tal caso si dimostra che il problema di flusso massimo e equivalente alseguente:

−min−xDS∑j:(i,j)∈A′ xij −

∑j:(j,i)∈A′ xji = 0 ∀ i ∈ V

0 ≤ xij ≤ Kij interi ∀ (i, j) ∈ A′

dove tutti i nodi sono di transito (bi = 0 per ogni i ∈ V e i costi unitaridi tutti gli archi sono nulli, a parte per l’arco (D,S) per il quale il costounitario e pari a -1 (osservando questo problema si puo notare che e identicoal precedente con la sola differenza che la variabile y e stata sostituita dallavariabile xDS). C’e ancora una differenza rispetto al generico problema diflusso minimo: oltre al fatto di dover essere non negativi, i flussi lungo gli

Page 122: Programmazione Lineare - di.unito.it

122 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

������

hhhhhh

EEEEE

JJJJJJJJ

ZZZZZZZ

!!!!!!

PPPPPPP

�������

QQQQQQS

D

1

2

3

4

5

bS=0bD=0

b1=0

b2=0

b3=0

b4=0

b5=0

-1/infinito

0/8

0/8

0/1

0/4

0/60/6

0/2

0/6

0/3

0/2

Figura 6.16: La riformulazione del di un problema di flusso massimo comeproblema di flusso a costo minimo con l’aggiunta di un arco dalla desti-nazione D alla sorgente S. Si noti che i numeri al di sopra degli archirappresentano i loro costi nel problema di flusso a costo minimo affiancatidalle loro capacita.

archi sono anche limitati superiormente dai valori di capacita Kij . In realtaesiste anche per i generici problemi di flusso a costo minimo la possibilitadi apportare opportune modifiche (che pero non vedremo) al simplesso surete per trattare il caso in cui esistono anche limiti superiori per i flussi chepossono scorrere lungo gli archi oltre al fatto che tali flussi devono esserenon negativi.

6.2.5 Un’importante osservazione

I quattro casi particolari di problemi riconducibili a problemi di flusso acosto minimo potrebbero essere risolti tutti con il simplesso su rete. Inrealta per essi vengono utilizzate procedure di risoluzione specifiche per taliproblemi che sono piu efficienti del simplesso su rete o versioni del simplessosu rete adattate ulteriormente a tali problemi. Questo dimostra un punto

Page 123: Programmazione Lineare - di.unito.it

6.2. CASI PARTICOLARI DI PROBLEMI DI FLUSSO A COSTO MINIMO123

importante, di cui si dovrebbe tener conto ogni volta che si affronta unproblema: con quanta maggiore precisione si riesce ad individuare il tipo diproblema che si deve affrontare, tanto piu efficientemente possiamo speraredi risolvere il nostro problema. Ad esempio, per quanto sia legittimo risol-vere un problema del cammino a costo minimo come un generico problemadi flusso a costo minimo e quindi attraverso il simplesso su rete, ignorarela sua particolare struttura vuol dire rinunciare ad avvalersi delle tecnichepiu efficienti per la risoluzione di tale problema. Non vedremo procedurealternative e piu efficienti per tutti i quattro casi trattati. Ci limiteremo,a titolo illustrativo, al solo problema di cammino a costo minimo (gli altritre problemi vengono approfonditi nel corso successivo).

6.2.6 Un algoritmo per il problema del cammino acosto minimo

Proporremo ora una procedura (algoritmo di Dijkstra) che consente di de-terminare il cammino minimo non solo da un nodo s ad un nodo t ma daun nodo s a tutti gli altri nodi della rete. E importante sottolineare chela procedura fornisce garanzie di determinare la soluzione ottima solo se icosti degli archi sono tutti non negativi. La procedura e la seguente.

Inizializzazione Sia U = V \ {s}. Si ponga

d[s] = 0 d[i] = +∞ ∀ i ∈ U,

ep[i] = − ∀ i ∈ V.

Sia k = s.

Passo 1 Per ogni i ∈ U sed[k] + cki < d[i],

porred[i] = d[k] + cki p[i] = k.

Passo 2 Sia r ∈ U tale ched[r] = min

i∈Ud[i].

Porre U = U \ {r} e k = r.

Passo 3 Se U = ∅, allora STOP. Altrimenti si ritorni al Passo 1.

Page 124: Programmazione Lineare - di.unito.it

124 CAPITOLO 6. PROBLEMI DI FLUSSO A COSTO MINIMO

Al termine dell’esecuzione dell’algoritmo il vettore d contiene le distanzeminime di tutti i nodi dal nodo s (durante l’esecuzione della procedura ilvettore d contiene le distanze minime da s ai nodi in V \U , mentre per i nodiin U contiene le distanze minime da s a tali nodi passando solo attraversonodi in V \U). Se, dato un nodo t si vuole non solo sapere qual e la distanzaminima da s a t ma anche il cammino lungo il quale si ha questa distanza,si deve utilizzare il vettore p. Il cammino si conclude ovviamente nel nodot. Il nodo che precede t nel cammino e il nodo h1 = p[t]. A sua volta ilnodo h1 e preceduto dal nodo h2 = p[h1]; procedo in questo modo fino ache il nodo hi+1 = p[hi] coincide con s. Il cammino minimo da s a t saraquindi

s→ hi → . . .→ h1 → t.

Per meglio comprendere la procedura la vediamo applicata al problema inFigura 6.17.

"""""""

ZZZZZZZ

aaaaaaaaaa

���������1

2

3

4

1

4

2

3

4

Figura 6.17: Un esempio di problema di cammino minimo.

Esempio 16 Il nodo s e, nel nostro caso, il nodo 1. Inizialmente avremo

d[1] = 0 d[2] = d[3] = d[4] = +∞.

ep[1] = p[2] = p[3] = p[4] = −

con U = {2, 3, 4} e k = 1.ITERAZIONE 1 Alla prima iterazione avremo

d[1] + c12 = 0 + 1 < d[2] = +∞ ⇒ d[2] = d[1] + c12 = 1 p[2] = 1

d[1] + c13 = 0 + 4 < d[3] = +∞ ⇒ d[3] = d[1] + c13 = 4 p[3] = 1

d[1] + c14 = 0 +∞ = d[2]

Page 125: Programmazione Lineare - di.unito.it

6.2. CASI PARTICOLARI DI PROBLEMI DI FLUSSO A COSTO MINIMO125

(si noti che se un arco non e presente nella rete si associa ad esso un costopari a +∞). Avremo quindi

d[2] = mini∈U

d[i] = min{d[2], d[3], d[4]}.

Quindi poniamo k = 2 e U = {3, 4}.ITERAZIONE 2 Alla seconda iterazione avremo

d[2] + c23 = 1 + 2 < d[3] = 4 ⇒ d[3] = d[2] + c23 = 3 p[3] = 2

d[2] + c24 = 1 + 4 < d[4] = +∞ ⇒ d[4] = d[2] + c24 = 5 p[4] = 2

Avremo quindid[3] = min

i∈Ud[i] = min{d[3], d[4]}.

Quindi poniamo k = 3 e U = {4}.ITERAZIONE 3 Alla terza iterazione avremo

d[3] + c34 = 3 + 3 > d[4] = 5

Avremo quindid[4] = min

i∈Ud[i] = min{d[4]}.

Quindi poniamo k = 4 e U = ∅. Essendo U = ∅ ci arrestiamo. Notiamoche d[4] = 5 e quindi il cammino minimo dal nodo 1 al nodo 4 e pari a5. Se vogliamo ricostruire tale cammino minimo, consideriamo il vettorep. Si ha che p[4] = 2 e quindi nel cammino minimo il nodo 4 e precedutodal nodo 2. Procedendo a ritroso, si ha che p[2] = 1. Dal momento che ilnodo 1 e quello di partenza ci arrestiamo ed il cammino minimo dal nodo1 al nodo 4 sara

1→ 2→ 4