Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni206 pagine

Ottimizzazione 2223

Caricato da

daniele fanelli
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
6 visualizzazioni206 pagine

Ottimizzazione 2223

Caricato da

daniele fanelli
Copyright
© All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Indice

1 Introduzione 3
1.1 Modelli Matematici . . . . . . . . . . . . . . . . . . . . . . . . 3
1.1.1 Il problema della dieta . . . . . . . . . . . . . . . . . . 5
1.1.2 Un problema di miscelazione . . . . . . . . . . . . . . . 8
1.1.3 Un problema di pianificazione della produzione . . . . 10
1.1.4 Il problema dello zaino . . . . . . . . . . . . . . . . . . 11
1.1.5 Un problema di pianificazione . . . . . . . . . . . . . . 12
1.1.6 Un problema di scheduling del personale . . . . . . . . 14
1.1.7 Un problema di pianificazione urbana . . . . . . . . . . 16
1.1.8 Un esempio sportivo . . . . . . . . . . . . . . . . . . . 18
1.1.9 Il problema del trasporto . . . . . . . . . . . . . . . . . 19
1.1.10 Un esempio di pianificazione edilizia . . . . . . . . . . 21
1.1.11 Un esempio di modello non lineare . . . . . . . . . . . 23
1.1.12 Un altro esempio di modello non lineare . . . . . . . . 26
1.2 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

2 Richiami di algebra lineare e geometria dei poliedri 33


2.1 Elementi di Algebra Lineare . . . . . . . . . . . . . . . . . . . 33
2.1.1 Calcolo della matrice inversa . . . . . . . . . . . . . . . 41
2.1.2 Rango di una matrice . . . . . . . . . . . . . . . . . . . 45
2.2 Geometria poliedrale . . . . . . . . . . . . . . . . . . . . . . . 45

3 Programmazione lineare 49
3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
3.2 Il metodo grafico . . . . . . . . . . . . . . . . . . . . . . . . . 51
3.2.1 Alcune osservazioni sul metodo grafico . . . . . . . . . 54
3.3 La geometria dei problemi di programmazione lineare . . . . . 68
3.4 Il Metodo del Simplesso . . . . . . . . . . . . . . . . . . . . . 73

1
INDICE 2

3.4.1 Forma algebrica del metodo del simplesso . . . . . . . . 74


3.4.2 Forma tabellare del metodo del simplesso . . . . . . . . 84
3.5 Problemi di programmazione lineare in forma non standard . . 96
3.6 Il Metodo del Simplesso a due fasi . . . . . . . . . . . . . . . . 101
3.7 Il Metodo del Simplesso in Forma Matriciale . . . . . . . . . . 124
3.7.1 Calcolo di una soluzione di base ammissibile . . . . . . 126
3.7.2 Forma matriciale delle equazioni correnti . . . . . . . . 129
3.8 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134

4 Programmazione Lineare Intera 141


4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
4.2 L’algoritmo Branch-and-Bound per Problemi di Programma-
zione Binaria . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
4.2.1 Sommario dell’algoritmo Branch-and-Bound . . . . . . 146
4.3 L’algoritmo Branch-and-Bound per la Programmazione Intera 156
4.4 L’algoritmo Branch-and-Cut per la Programmazione Binaria . 162
4.5 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

5 Teoria della dualità 174


5.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
5.2 Dualità per problemi di programmazione lineare . . . . . . . . 176
5.3 Dualità, basi ottime e metodo del simplesso . . . . . . . . . . 179
5.4 Altre forme di dualità . . . . . . . . . . . . . . . . . . . . . . 181
5.4.1 Il metodo del simplesso duale . . . . . . . . . . . . . . 184
5.5 Analisi di sensitività e postottimale . . . . . . . . . . . . . . . 198
5.5.1 Analisi di sensitività . . . . . . . . . . . . . . . . . . . 199
5.5.2 Prezzi ombra . . . . . . . . . . . . . . . . . . . . . . . 200
5.6 Esercizi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Capitolo 1

Introduzione

1.1 Modelli Matematici


Il termine modello indica una struttura appositamente costruita per eviden-
ziare le caratteristiche di oggetti reali. Alcune volte i modelli possono essere
concreti (come ad esempio i modelli che rappresentano i prototipi di aerei,
navi oppure automobili), ma spesso sono di tipo astratto, come i cosiddetti
modelli matematici che usano appunto il simbolismo matematico per eviden-
ziare determinate caratteristiche di oggetti veri. In poche parole i modelli
matematici non sono altro che insiemi di relazioni che descrivono, in modo
semplificato, fenomeni reali. L’interesse nella modellistica deriva dal fatto
che essa consente di studiare l’evoluzione di tali fenomeni senza che questo
accadano realmente. Si pensi per esempio alle simulazioni matematiche de-
gli effetti di eventi catastrofici come i terremoti in zone abitate, in grado di
fornire informazioni sulle loro conseguenze che ovviamente non potrebbero
mai essere note se non dopo tale evento (e di conseguenza del tutto inutili). I
campi di applicazione dei modelli matematici sono attualmente i più svariati:
esempi concreti sono i modelli che descrivono la dinamica delle popolazioni,
oppure la diffusione di epidemie oppure lo studio dell’inquinamento in de-
terminati territori. Nei capitoli seguenti saranno analizzate le proprietà dei
modelli matematici di ottimizzazione e saranno descritti alcuni metodi nu-
merici per determinarne la soluzione.
I modelli matematici possono essere di due tipi:

1. Modelli stocastici: quando descrivono problemi influenzati da eventi


casuali (ad esempio il modello matematico della teoria delle code, in

3
CAPITOLO 1. INTRODUZIONE 4

cui il tempo di servizio di uno sportello è di tipo casuale);


2. Modelli deterministici: quando descrivono relazioni esatte tra grandez-
ze.
Una seconda suddivisione riguarda la validità dei modelli dal punto di vista
temporale, infatti i modelli matematici possono essere:
1. Modelli statici: se le relazioni tra le grandezze restano invariate nel
tempo;
2. Modelli dinamici: se le relazioni tra le grandezze dipendono dal tempo.
Un’ultimo tipo di classificazione è inerente la tipologia di relazioni matema-
tiche tra grandezze:
1. Modelli lineari: se le relazioni tra le grandezze sono descritte da equa-
zioni/disequazioni di tipo lineare;
2. Modelli non lineari: se almeno una delle relazioni tra le grandezze non
è di tipo lineare.
L’approccio modellistico di un problema reale viene realizzato attraverso
diverse fasi:
1. Analisi del problema: Consiste nell’analisi della struttura del problema
con lo scopo di determinare l’obiettivo da raggiungere e le relazioni
logico-funzionali;
2. Costruzione del modello: Si descrivono in termini matematici le prin-
cipali caratteristiche del problema e si traducono le relazioni tra le
grandezze del problema;
3. Analisi del modello: Si deducono analiticamente le proprietà mate-
matiche del modello (esistenza, unicità della soluzione, stabilità della
soluzione e altre);
4. Soluzione numerica: Si definisce un algoritmo per determinare (anche
via software) la soluzione del problema;
5. Validazione dei risultati: Si verifica la congruenza dei risultati numerici
rispetto ai dati sperimentali di cui si è in possesso. Nel caso in cui i
dati siano discordanti allora si effettua un raffinamento del modello e
si ripetono i passi precedenti.
CAPITOLO 1. INTRODUZIONE 5

Come detto la costruzione del modello matematico consiste nel tradurre una
serie di relazioni logiche tra le grandezze reali coinvolte in termini, appunto,
matematici. Per far questo è necessario applicare leggi fisiche, economiche,
di mercato tradotte in equazioni algebriche, disequazioni, funzioni e cosı̀ via.
Poichè il modello è definito per mezzo delle relazioni che lo costituiscono è
necessario che queste siano il più indipendenti possibile dai dati introdotti
poichè un modello deve essere usato in più situazioni e con valori differenti.
I risultati numerici devono essere considerati sempre in modo critico: la loro
affidabilità dipende da molti fattori (precisione dei dati, affidabilità del soft-
ware, efficacia e stabilità dell’algoritmo numerico e altri).
Nei successivi paragrafi saranno descritti alcuni classici Problemi di Ottimiz-
zazione in diversi ambiti applicativi.

1.1.1 Il problema della dieta


Supponiamo di avere n alimenti (o classi di alimenti, carne, pesce, uova,
legumi e altri) che contengono m sostanze nutritive (per esempio proteine,
vitamine, carboidrati e altre). Si vuole determinare la quantità giornaliera di
ciascun alimento che una persona deve assumere in modo tale da minimizzare
il costo giornaliero del cibo ma garantendo il fabbisogno minimo di ogni
sostanza nutriente.
Per formulare il modello matematico del problema dobbiamo innanzitutto
elencare i dati assegnati. Infatti è necessario conoscere quindi i seguenti dati:

• cj = costo unitario del j−esimo alimento, per j = 1, . . . , n;

• bi = fabbisogno minimo giornaliero dell’i−esimo nutriente, per i =


1, . . . , m;

• aij = quantità dell’i−esimo nutriente presente nell’unità del j−esimo


alimento, per i = 1, . . . , m e j = 1, . . . , n.

Finora il problema è stato descritto in linguaggio naturale e, per formulare il


relativo modello matematico, bisogna seguire una serie di passi. Innanzitutto
bisogna capire quali sono le grandezze che si vogliono determinare.

I Passo: Identificare le variabili


CAPITOLO 1. INTRODUZIONE 6

In questo caso l’identificazione è molto semplice in quanto dobbiamo de-


terminare le quantità giornaliere di ciascun alimento, quindi definiamo le
seguenti grandezze:
xj = quantità giornaliera del j−esimo alimento, per j = 1, . . . , n.
II Passo: Definire la funzione obiettivo

L’obiettivo è la minimizzazione del costo giornaliero della dieta noti i co-


sti unitari cj , ovvero il costo complessivo di tutti gli alimenti. La quantità x1
del primo alimento costa c1 x1 , la quantità x2 del secondo costa c2 x2 , cosicchè
il costo complessivo degli alimenti è
n
X
Z = c1 x1 + c2 x2 + · · · + cn xn = cj xj .
j=1

L’obiettivo è quello di determinare le quantità xj , j = 1, . . . , n, in modo


tale che venga minimizzato il valore di Z, purchè le quantità dell’i−esimo
nutriente sia superiore al valore minimo giornaliero bi . Le variabili xj non
possono assumere valori arbitrari ma questi devono essere tali da soddisfare
una serie di vincoli, ovvero un vincolo per ciascuna sostanza nutriente. E
questo porta all’ultima fase nella definizione del modello.

III Passo: Determinare i vincoli del problema

I vincoli riguardano esclusivamente le sostanze nutrienti. Bisogna calcola-


re la quantità complessiva di ciascuna sostanza nutriente presente in tutti n
gli alimenti assunti nelle quantità x1 , x2 , . . . , xn . Per esempio nella quantità
x1 del primo alimento è presente a11 x1 quantità del primo nutriente, a21 x1
del secondo e cosı̀ via. Nella quantità x2 del secondo alimento sono presenti
a12 x2 quantità del primo nutriente, a22 x2 del secondo e cosı̀ via. Volendo
determinare la quantità del primo nutriente questa risulta:
a11 x1 + a12 x2 + · · · + a1n xn
che deve soddisfare la seguente disuguaglianza:
a11 x1 + a12 x2 + · · · + a1n xn ≥ b1
che costituisce il primo vincolo del modello. In generale la necessità di
soddisfare il fabbisogno dell’i−esimo nutriente definisce un vincolo:
ai1 x1 + ai2 x2 + · · · + ain xn ≥ bi .
CAPITOLO 1. INTRODUZIONE 7

In questo modo definiamo esattamente m vincoli. Al termine di questa fase


abbiamo un passo finale che consiste nella formulazione del modello.

IV Passo: Formulazione completa del modello

In definitiva il problema può essere formulato nel seguente modo:


n
X
min Z = cj xj
j=1

Soggetto a:
Xn
aij xj ≥ bi , i = 1, . . . , m
j=1

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

Supponiamo per esempio di dover decidere la composizione della dieta gior-


naliera a base di pasta, carne, verdura e formaggio, tenendo conto che gior-
nalmente si devono assumere almeno 70 g. di proteine, almeno 50 g. di grassi
ed almeno 250 g. di zuccheri. Nella seguente tabella sono indicati i grammi
di nutrienti in ogni 100 grammi di alimento ed i relativi costi.
Pasta Carne Verdura Formaggio
Proteine 9.9 20.8 2 22
Grassi 1.2 1.1 0.2 26
Zuccheri 75.3 0 4 0
Costo e/kg 1.4 12 1.2 12

Ad esempio un etto di pasta contiene 9.9 grammi di proteine, 1.2 g. di grassi


e 75.3 g. di zuccheri. Di consequenza un chilo di pasta contiene 99 grammi
di proteine, 12 grammi di grassi e 753 grammi di zuccheri. L’obiettivo che
ci poniamo è quello di minimizzare la spesa giornaliera per l’acquisto degli
alimenti in modo tale che venga soddisfatto il fabbisogno giornaliero di grassi,
zuccheri e proteine.
Indicando con x1 la quantità (in chilogrammi) di pasta, con x2 la quantità
(in chilogrammi) di carne, con x3 la quantità (in chilogrammi) di verdura e
con x4 la quantità (in chilogrammi) di formaggio da acquistare, il problema
CAPITOLO 1. INTRODUZIONE 8

può essere formulato come segue:


min Z = 1.4x1 + 12x2 + 1.2x3 + 12x4
Soggetto a:
99x1 +208x2 +20x3 +220x4 ≥ 70
12x1 +11x2 +2x3 +260x4 ≥ 50
753x1 +40x3 ≥ 250
x1 , x2 , x3 , x4 ≥ 0.

1.1.2 Un problema di miscelazione


Una fonderia deve produrre 1000 pezzi del peso ciascuno di un chilogrammo.
Il ferro con cui tali pezzi sono fatti dovrà contenere manganese e silicio nelle
seguenti quantità:

0.45% ≤manganese, 3.25% ≤ silicio ≤ 5.5%.

Sono disponibili tre tipi di materiale ferroso le cui caratteristiche sono ripor-
tate nella seguente tabella:
Materiale ferroso A B C
Silicio (%) 4.00 1.00 0.60
Manganese (%) 0.45 0.50 0.40
Costo (e/kg.) 0.025 0.030 0.018
Inoltre si può aggiungere direttamente manganese al costo di 10 Euro al kg. Il
problema che si vuole modellare è quello di determinare il piano di produzione
che minimizza il costo del materiale utilizzato. Si vogliono cioè individuare le
quantità di materiale per ciascuno dei tre tipi A, B, o C e di manganese puro
da acquistare per produrre i 1000 pezzi richiesti, spendendo il meno possibile.
Proviamo a costruire un modello analitico per il problema. A questo scopo
introduciamo le variabili x1 , x2 , x3 , x4 , aventi il seguente significato:
x1 (≥ 0): la quantità in kg di materiale ferroso A da utilizzare;
x2 (≥ 0): la quantità in kg di materiale ferroso B da utilizzare;
x3 (≥ 0): la quantità in kg di materiale ferroso C da utilizzare;
x4 (≥ 0): la quantità in kg di manganese da utilizzare.
Abbiamo imposto che le quantità di prodotto acquistate siano dei valori non
negativi (vincoli di nonnegatività). Il costo complessivo dei materiali risulta
essere:
0.025x1 + 0.030x2 + 0.018x3 + 10x4 .
CAPITOLO 1. INTRODUZIONE 9

Gli altri vincoli da rispettare sono descritti in seguito. Innanzitutto la


quantità complessiva di prodotto deve essere pari a 1000 kg.:
x1 + x2 + x3 + x4 = 1000.
La quantità di silicio, in kg, presente nel prodotto risultante è data da
0.04x1 + 0.01x2 + 0.006x3
e deve essere compresa nei limiti voluti (cioè deve essere superiore a 32.5
kg su 1000 kg di prodotto finito e inferiore a 55 kg nella stessa quantità di
prodotto, pari rispettivamente al 3.25% e al 5.5%):
32.5 ≤ 0.04x1 + 0.01x2 + 0.006x3 ≤ 55.
Possiamo quindi esprimere la condizione sulla percentuale di silicio mediante
i due vincoli lineari (per semplicità i due vincoli sono stati moltiplicati per
100):
4x1 +x2 +0.6x3 ≥ 3250
4x1 +x2 +0.6x3 ≤ 5500.
Analogamente, per la condizione sulla percentuale di manganese (che deve
essere superiore a 4.5 kg su 1000 kg di prodotto, pari allo 0.45%) si ottiene
0.0045x1 + 0.005x2 + 0.004x3 + x4 ≥ 4.5
e quindi
0.45x1 + 0.5x2 + 0.4x3 + 100x4 ≥ 450.
Il problema della determinazione di un piano di produzione che minimizza il
costo può quindi essere formulato come segue:
min Z = 0.025x1 + 0.030x2 + 0.018x3 + 10x4

4x1 +x2 +0.6x3 ≥ 3250


4x1 +x2 +0.6x3 ≤ 5500
0.45x1 +0.5x2 +0.4x3 +100x4 ≥ 450
x1 +x2 +x3 +x4 = 1000

xi ≥ 0, i = 1, 2, 3, 4.
Le variabili x1 , x2 , x3 e x4 corrispondono alle scelte operative che il problema
reale richiede di compiere, e ciascun vincolo del modello corrisponde ad una
condizione imposta dal problema reale. Determinare i valori delle variabili in
modo che i vincoli siano soddisfatti e la funzione obiettivo assuma il minimo
valore fornisce il miglior piano di produzione.
CAPITOLO 1. INTRODUZIONE 10

1.1.3 Un problema di pianificazione della produzione


Un’industria chimica produce quattro tipi di fertilizzante, la cui lavorazione
è affidata a due reparti: produzione e confezionamento. Per ottenere fertiliz-
zante pronto per la vendita è necessaria la lavorazione in entrambi i reparti.
La seguente tabella riporta, per ciascun tipo di fertilizzante, i tempi (in ore)
necessari per la lavorazione in ciascun reparto per avere una tonnellata di
prodotto pronto per la vendita
Reparto Tipo 1 Tipo 2 Tipo 3 Tipo 4
Produzione 2 1.5 0.5 2.5
Confezionamento 0.5 0.25 0.25 1
Dopo aver dedotto, da ciascuna tonnellata, il costo del materiale grezzo, una
tonnellata di fertilizzante produce i seguenti profitti (in euro per tonnellata):
Tipo 1 Tipo 2 Tipo 3 Tipo 4
Profitto netto 250 230 110 350
Si vuol determinare la quantità di fertilizzante di ciascun tipo da produrre
settimanalmente in modo tale da massimizzare il profitto sapendo che il
reparto produzione può lavorare al più 100 ore la settimana mentre il reparto
confezionamento al più 50 ore settimanali.
Definiamo, come variabili del modello, quelle pari al numero di tonnellate
prodotte settimanalmente per ciascun tipo di fertilizzante:

xi = tonnellate dell’i−esimo tipo di fertilizzante prodotte settimanalmente.

Scopo è la massimizzazione del profitto complessivo, che si ottiene moltipli-


cando il profitto unitario per il numero di tonnellate prodotte:

Z = 250x1 + 230x2 + 110x3 + 350x4 .

I vincoli riguardano il numero di ore settimanali che i due reparti possono


lavorare. Per il reparto produzione il vincolo sul tempo necessario a produrre
le quantità di prodotto pari a x1 , x2 , x3 e x4 è:

2x1 + 1.5x2 + 0.5x3 + 2.5x4 ≤ 100,

mentre per il reparto confezionamento il vincolo è:

0.5x1 + 0.25x2 + 0.25x3 + x4 ≤ 50.


CAPITOLO 1. INTRODUZIONE 11

Il problema della pianificazione settimanale della produzione può quindi


essere formulato come segue:

max Z = 250x1 + 230x2 + 110x3 + 350x4

2x1 +1.5x2 +0.5x3 +2.5x4 ≤ 100


0.5x1 +0.25x2 +0.25x3 +x4 ≤ 50

xi ≥ 0, i = 1, 2, 3, 4.

1.1.4 Il problema dello zaino


Sia dato un insieme E di n oggetti, a ciascuno dei quali è associato un peso
wi ed un valore ci , i = 1, . . . , n, valori interi e positivi. Il problema dello
zaino (KP, da Knapsack Problem) consiste nel determinare un sottoinsieme
di elementi che abbia valore totale massimo ed il cui peso totale non superi
un prefissato intero b. Il nome deriva dal fatto che viene usualmente descritto
come il problema di scegliere quali oggetti di un assegnato insieme mettere
in uno zaino in modo da non superare un dato peso (o capacità) e da mas-
simizzare appunto il valore complessivo degli oggetti selezionati. Si assume
che sia n
X
0<b< wi ,
i=1

altrimenti il problema sarebbe banale e che inoltre sia

wi ≤ b, i = 1, . . . , n

in quanto nessun elemento di peso superiore alla capacità b può far parte di
una soluzione e quindi ogni elemento di peso superiore a b può essere eliminato
da E. Il problema può essere scritto come un problema di massimo. Possiamo
formulare il problema come uno di programmazione lineare introducendo, per
ogni oggetto i = 1, 2, . . . , n, una variabile xi ∈ {0, 1}, con il significato che
la variabile assume valore 1 se l’elemento i-esimo appartiene al sottoinsieme
selezionato, e 0 altrimenti (si decide cioè se inserire o meno l’oggetto). La
funzione obiettivo, da massimizzare, è
n
X
Z= ci xi
i=1
CAPITOLO 1. INTRODUZIONE 12

in cui sono sommati i valori dei soli oggetti selezionati. La condizione relativa
alla capacità dello zaino diviene
n
X
wi xi ≤ b
i=1

infatti, dato che ciascuna xi può assumere solo i valori 0 o 1, nella somma
vengono considerati i pesi dei soli oggetti selezionati. La formulazione finale
del problema è la seguente
n
X
max Z = ci xi
i=1
n
X
wi xi ≤ b
i=1
xi ∈ {0, 1}.

1.1.5 Un problema di pianificazione


Una comunità agricola, composta da tre cooperative, deve pianificare la pro-
duzione agricola per l’intero anno. Il rendimento di ogni cooperativa dipende
dalla quantità di terreno disponibile e dalla quantità di acqua, come risulta
dalla seguente tabella:
Cooperativa Terra disponibile Acqua disponibile
(ettari) (migliaia metri cubi)
1 160 400
2 240 600
3 120 175

I raccolti possibili sono barbabietole, cotone e sorgo. Queste coltivazioni


differiscono per la quantità di acqua di cui necessitano e per il rendimento
netto per ettaro, dati riportati nella seguente tabella:
Prodotto Consumo di acqua Guadagno netto
(metri-cubi/ettaro) (euro/ettaro)
Barbabietole 3 1000
Cotone 2 750
Sorgo 1 250
CAPITOLO 1. INTRODUZIONE 13

Si deve considerare inoltre che per ciascuna coltivazione la comunità ha fissato


la massima quantità di terreno coltivabile che si può usare: 240 ettari per le
barbabietole, 200 per il cotone e 130 per il sorgo. Inoltre è stato stabilito che
la percentuale di terreno che ogni cooperativa può utilizzare per le coltivazioni
deve essere la stessa.
Ovviamente le quantità da determinare sono le aree di ciascuna delle tre
cooperative da destinare alle tre coltivazioni, quindi definiamo nove variabili:
Coltivazione Cooperativa
1 2 3
Barbabietola x1 x2 x3
Cotone x4 x5 x6
Sorgo x7 x8 x9

Ovviamente la funzione da massimizzare è il guadagno totale netto che si


ottiene moltiplicando la quantità totale di ettari destinati a ciascun singolo
prodotto per il guadagno netto per ettaro:

Z = 1000(x1 + x2 + x3 ) + 750(x4 + x5 + x6 ) + 250(x7 + x8 + x9 ).

I vincoli sono di quattro tipi:


1) Terra utilizzabile da ciascuna cooperativa:

x1 +x4 +x7 ≤ 160


x2 +x5 +x8 ≤ 240
x3 +x6 +x9 ≤ 120,

2) Acqua utilizzabile da ciascuna cooperativa:

3x1 +2x4 +x7 ≤ 400


3x2 +2x5 +x8 ≤ 600
3x3 +2x6 +x9 ≤ 175,

3) Terra utilizzabile complessivamente per ciascuna coltivazione:

x1 +x2 +x3 ≤ 240


x4 +x5 +x6 ≤ 200
x7 +x8 +x9 ≤ 130,
CAPITOLO 1. INTRODUZIONE 14

4) Stessa proporzione di terra coltivata:


x1 + x4 + x7 x2 + x5 + x8
=
160 240
x2 + x5 + x8 x3 + x6 + x9
=
240 120
x3 + x6 + x9 x1 + x4 + x7
= ,
120 160
che in questo caso sono espresse scrivendo tutte le variabili al primo membro:

3(x1 + x4 + x7 ) − 2(x2 + x5 + x8 ) = 0
x2 + x5 + x8 − 2(x3 + x6 + x9 ) = 0
4(x3 + x6 + x9 ) − 3(x1 + x4 + x7 ) = 0,

ovviamente oltre alla condizioni di nonnegatività, xi ≥ 0, i = 1, . . . , 9.

1.1.6 Un problema di scheduling del personale


Una compagnia aerea sta riorganizzando i servizi nel proprio aeroporto prin-
cipale e per questo deve effettuare una politica di nuove assunzioni delle quali
si deve decidere la numerosità. Per questo vengono analizzate le necessità
legate ai diversi momenti della giornata, considerando che il proprio perso-
nale deve essere ripartito in 5 turni di lavoro che coprono l’intero arco delle
24 ore:
Turno 1: dalle 6.00 alle 14.00
Turno 2: dalle 8.00 alle 16.00
Turno 3: dalle 12.00 alle 20.00
Turno 4: dalle 16.00 alle 24.00
Turno 5: dalle 22.00 alle 6.00.
Inoltre, per il numero minimo di lavoratori che devono essere presenti nelle
diverse fasce orarie della giornata e per i relativi costi di un’unita di personale
sono stati individuati i seguenti dati:
CAPITOLO 1. INTRODUZIONE 15

Turno
Fascia oraria 1 2 3 4 5 Addetti
6.00-8.00 × 40
8.00-10.00 × × 70
10.00-12.00 × × 65
12.00-14.00 × × × 80
14.00-16.00 × × 65
16.00-18.00 × × 70
18.00-20.00 × × 80
20.00-22.00 × 40
22.00-24.00 × × 50
24.00-6.00 × 15
Costo per addetto 170e 160e 175e 180e 200e

Il problema è determinare il numero di dipendenti che devono essere assegnati


a ciascun turno in modo tale da minimizzare il costo complessivo e superando
il numero minimo di persone che devono essere presenti in ciascuna fascia
oraria.
È opportuno in questo caso definire le seguenti variabili:

xj = numero di dipendenti assegnati al turno j, j = 1, 2, 3, 4, 5.

Il vincolo principale per i possibili valori di queste variabili è che il loro


numero presente durante ogni intervallo di tempo deve superare i valori ri-
portati nell’ultima colonna. Per esempio dalle 8.00 alle 10.00 sono in servizio
i dipendenti del secondo e del terzo turno e la loro somma deve superare 70:

x1 + x2 ≥ 70.

La funzione da minimizzare è il costo complessivo giornaliero che è la somma


dei costi relativi ai dipendenti assegnati a ciascun turno, quindi:

minimizzare Z = 170x1 + 160x2 + 175x3 + 180x4 + 200x5


CAPITOLO 1. INTRODUZIONE 16

mentre i vincoli sono:


x1 ≥ 40
x1 +x2 ≥ 70
x1 +x2 ≥ 65
x1 +x2 +x3 ≥ 80
x2 +x3 ≥ 65
x3 +x4 ≥ 70
x3 +x4 ≥ 80
x4 ≥ 40
x4 +x5 ≥ 50
x5 ≥ 15

e inoltre
xj ≥ 0, xj ∈ N, j = 1, . . . , 5.
Possiamo osservare che alcuni vincoli non sono necessari. Infatti i vincoli di
nonnegatività per x1 , x4 e x5 sono ridondanti in virtù del primo, dell’ottavo
e del decimo vincolo, cosı̀ come anche il terzo vincolo, a causa della presenza
del secondo (se la somma tra x1 e x2 deve essere maggiore di 70 allora è
chiaro che supera anche 65) ma anche il sesto esattamente per un motivo
analogo.

1.1.7 Un problema di pianificazione urbana


Il piano regolatore di una città prevede che in una zona debbano essere co-
struiti il nuovo ospedale, il carcere, una caserma dei Vigili del Fuoco, una
scuola, un parcheggio ed una chiesa. Sono state individuate 6 zone in cui le
strutture potrebbero essere costruite e, per ciascun’opera, sono stati deter-
minati i costi per l’eventuale realizzazione in ognuna delle aree. Tali costi (in
milioni di euro) sono riassunti nella seguente tabella.

Zona 1 Zona 2 Zona 3 Zona 4 Zona 5 Zona 6


Carcere 7.0 8.0 6.5 9.0 8.0 7.0
Ospedale 9.0 9.0 8.0 7.0 6.0 9.0
Caserma 4.0 4.5 3.5 4.0 3.0 3.5
Scuola 2.0 2.0 1.5 2.5 1.0 1.5
Parcheggio 0.5 0.3 0.5 0.6 0.5 0.6
Chiesa 2.0 1.5 1.0 1.5 2.0 1.8
CAPITOLO 1. INTRODUZIONE 17

Si vuole pianificare la costruzione delle 6 opere pubbliche minimizzando il


costo complessivo della loro realizzazione.
In questo caso il problema che si vuole descrivere è quello di associare ad
ogni elemento di un insieme (ovvero quello delle opere da costruire) un singolo
elemento di un secondo insieme (ovvero quello delle zone edificabili), in modo
tale che non ci sia nessun elemento (di entrambi gli insiemi) che non sia
associato a nulla oppure abbia più associazioni. Definiamo quindi le variabili
xij tali che

 1 se la i−esima opera viene realizzata nella j−esima zona;
xij =
0 altrimenti

per i, j = 1, . . . , 6. Ogni xij è una variabile binaria (può assumere solo due
valori). Per esempio se fosse x11 = 1 allora tutte le variabili x1j , con j 6= 1,
e xi1 , con i 6= 1, dovrebbero essere uguali a zero. Il valore assunto da tale
insieme di variabili potrebbe essere riassunto in una matrice, per esempio la
seguente  
1 0 0 0 0 0
 0 0 1 0 0 0 
 
 0 0 0 0 0 1 
X =  . (1.1)
 0 0 0 1 0 0 

 0 1 0 0 0 0 
0 0 0 0 1 0
Indicato con cij il costo richiesto per la realizzazione della i−esima opera
nella j−esima zona, il costo complessivo richiesto risulterebbe essere
6 X
X 6
Z= cij xij (1.2)
i=1 j=1

Se la scelta fosse stata quella schematizzata dalla matrice (1.1) allora il costo
complessivo sarebbe stato pari a

Z = 7 + 8 + 3.5 + 2.5 + 0.3 + 2 = 15.3 Me.

Obiettivo è quello di minimizzare la funzione (1.2) al variare di tutte le


possibili matrici (1.1). I vincoli sono legati alla richiesta che in ogni riga ed
in ogni colonna della matrice X ci sia solo un elemento uguale a 1. Questo
CAPITOLO 1. INTRODUZIONE 18

può essere tradotto richiedendo che la somma degli elementi di ogni riga e di
ogni colonna della matrice X sia uguale a 1 e che gli elementi possano essere
uguali a 0 o a 1.
Riassumendo il modello matematico è il seguente
6 X
X 6
min Z = cij xij
i=1 j=1

soggetto ai vincoli
6
X
xij = 1, i = 1, . . . , 6
j=1
X6
xij = 1, j = 1, . . . , 6
i=1
xij ∈ {0, 1}.

1.1.8 Un esempio sportivo


Sapendo che una squadra di pallavolo dopo 15 partite di campionato ha vinto
20 set e ne ha persi 30, si vuol determinare il massimo dei punti che potrebbe
avere ottenuto.
Come noto i possibili risultati di una partita di pallavolo sono solo sei: tre in
caso di vittoria (per 3 set a zero, 3 set a 1 oppure 3 set a 2) e tre in caso di
sconfitta (analogamente 0-3, 1-3 oppure 2-3). Il numero di punti assegnati per
la vittoria è 3 (se il risultato è 3-0 oppure 3-1) oppure 2 (se il risultato è 3-2).
Per la sconfitta è assegnato solo un punto se il risultato è 2-3, altrimenti non
sono assegnati punti. Poichè è noto il numero dei set vinti e persi conviene
definire sei variabili, ognuna delle quali conta un diverso risultato:

x1 = numero di vittorie per 3 − 0;


x2 = numero di vittorie per 3 − 1;
x3 = numero di vittorie per 3 − 2;
x4 = numero di sconfitte per 0 − 3;
x5 = numero di sconfitte per 1 − 3;
x6 = numero di sconfitte per 2 − 3.

In questo caso il numero di punti è la funzione

Z = 3x1 + 3x2 + 2x3 + x6


CAPITOLO 1. INTRODUZIONE 19

che deve essere massimizzata. I vincoli sono tre:


1) Il numero di partite:
x1 + x2 + x3 + x4 + x5 + x6 = 15;
2) Il numero di set vinti
3x1 + 3x2 + 3x3 + x5 + 2x6 = 20;
3) Il numero di set persi
x2 + 2x3 + 3x4 + 3x5 + 3x6 = 30.
Riassumendo, la formulazione matematica del problema è la seguente
max Z = 3x1 + 3x2 + 2x3 + x6
x1 + x2 +x3 +x4 +x5 +x6 = 15
3x1 + 3x2 +3x3 +x5 +2x6 = 20
x2 +2x3 +3x4 +3x5 +3x6 = 30.
xi ≥ 0, xi ∈ N, i = 1, . . . , 6.

1.1.9 Il problema del trasporto


Una ditta di trasporto deve trasferire container vuoti dai propri 6 Magazzini,
situati a Verona, Perugia, Roma, Pescara, Taranto e Lamezia, ai principali
Porti nazionali (Genova, Venezia, Ancona, Napoli, Bari). Le disponibilità di
container vuoti ai Magazzini sono le seguenti
Container vuoti
Verona 10
Perugia 12
Roma 20
Pescara 24
Taranto 18
Lamezia 30
e le richieste ai Porti sono le seguenti:
Container richiesti
Genova 20
Venezia 15
Ancona 25
Napoli 33
Bari 21
CAPITOLO 1. INTRODUZIONE 20

Il costo del trasporto dei container dai magazzini ai porti è proporzionale alla
distanza percorsa dal camion che lo trasporta. I costi (in e) di trasporto per
un singolo container sono riportati nella seguente tabella:
Genova Venezia Ancona Napoli Bari
Verona 290 115 355 715 810
Perugia 380 340 165 380 610
Roma 505 530 285 220 450
Pescara 655 450 155 240 315
Taranto 1010 840 550 305 95
Lamezia 1072 1097 747 372 333
Si vuole formulare il relativo problema di ottimizzazione avendo come obiet-
tivo la minimizzazione dei costi di trasporto.
Innanzitutto associamo ad ognuno dei sei magazzini un numero intero (1=Ve-
rona, 2=Perugia, 3=Roma, 4=Pescara, 5=Taranto, 6=Lamezia) e ad ognuno
dei porti un altro numero intero (1=Genova, 2=Venezia, 3=Ancona, 4=Na-
poli, 5=Bari). Per determinare il costo complessivo del trasporto si deve
conoscere il numero di container che sono trasportati da ciascun magazzino
ad ogni porto. Definiamo pertanto le seguenti variabili nonnegative
xij = il numero di container spediti dal magazzino i al porto j,
con i = 1, . . . , 6, e j = 1, . . . , 5.
Per semplicità indichiamo con cij il costo unitario per trasportare un contai-
ner dall’i−esimo magazzino al j−esimo porto.
La funzione obiettivo, da minimizzare, è pertanto
6 X
X 5
Z= cij xij .
i=1 j=1

I vincoli derivano dalla richiesta che ovviamente tutti i container presen-


ti in ciascun magazzino devono essere inviati ai porti. Pertanto avremo
esattamente 6 vincoli di uguaglianza:
x11 +x12 +x13 +x14 +x15 = 10
x21 +x22 +x23 +x24 +x25 = 12
x31 +x32 +x33 +x34 +x35 = 20
x41 +x42 +x43 +x44 +x55 = 24
x51 +x52 +x53 +x54 +x55 = 18
x61 +x62 +x63 +x64 +x65 = 30
CAPITOLO 1. INTRODUZIONE 21

Analogamente ogni porto potrà ricevere un numero di container pari alla


sua capacità. Dobbiamo pertanto aggiungere altri 5 vincoli, uno per ciascun
porto:
x11 +x21 +x31 +x41 +x51 +x61 = 20
x12 +x22 +x32 +x42 +x52 +x62 = 15
x13 +x23 +x33 +x43 +x53 +x63 = 25
x14 +x24 +x34 +x44 +x54 +x64 = 33
x15 +x25 +x35 +x45 +x55 +x65 = 21
A questi vanno aggiunti i vincoli di interezza per ciascuna variabile xij .
Riassumiamo il modello finale:
X6 X 5
Z= cij xij
i=1 j=1
x11 +x12 +x13 +x14 +x15 = 10
x21 +x22 +x23 +x24 +x25 = 12
x31 +x32 +x33 +x34 +x35 = 20
x41 +x42 +x43 +x44 +x55 = 24
x51 +x52 +x53 +x54 +x55 = 18
x61 +x62 +x63 +x64 +x65 = 30
x11 +x21 +x31 +x41 +x51 +x61 = 20
x12 +x22 +x32 +x42 +x52 +x62 = 15
x13 +x23 +x33 +x43 +x53 +x63 = 25
x14 +x24 +x34 +x44 +x54 +x64 = 33
x15 +x25 +x35 +x45 +x55 +x65 = 21
xij ∈ N, i = 1, . . . , 6, j = 1, . . . , 5.

1.1.10 Un esempio di pianificazione edilizia


In un terreno di 8 ettari una società deve costruire alcuni impianti sportivi,
ovvero campi di calcio, di calcetto, di tennis, di pallavolo e di pallacanestro.
Si vuole massimizzare il numero di impianti da costruire considerando che i
relativi costi e le dimensioni sono riassunti nella seguente tabella:
Impianto Dimensioni (in metri) Costo (in Me)
Calcio 100 × 50 1.0
Calcio a 5 40 × 20 0.4
Tennis 24 × 11 0.3
Pallavolo 18 × 9 0.5
Pallacanestro 28 × 15 0.5
CAPITOLO 1. INTRODUZIONE 22

Bisogna inoltre considerare che l’estensione di ciascun impianto va aumenta-


ta del 10% per gli spazi da adibire a strade, spogliatoi e spazio libero intorno
ai campi, che la società ha a disposizione 4 milioni di euro, che bisogna co-
struire almeno un impianto per ciascuna tipologia e che il numero di campi
di pallacanestro e pallavolo non deve superare la metà del numero degli altri
impianti.
La funzione da massimizzare è il numero di impianti complessivo pertanto bi-
sogna conoscere il numero di ciascun tipo di impianto da costruire. Definiamo
pertanto 5 variabili:
x1 = Numero di campi di calcio da costruire
x2 = Numero di campi di calcio a 5 da costruire
x3 = Numero di campi di tennis da costruire
x4 = Numero di campi di pallavolo da costruire
x5 = Numero di campi di pallacanestro da costruire.
La funzione obiettivo, da massimizzare, è pertanto la seguente:

Z = x1 + x2 + x3 + x4 + x5 .

Il primo vincolo riguarda lo spazio a disposizione, bisogna pertanto calcolare


i metri quadri richiesti da ciascun impianto sportivo.
Supericie campo di calcio = 100 × 50 m2 = 5000 +10% = 5500m2
Supericie campo di calcio a 5 = 40 × 20 m2 = 800 +10% = 880m2
Supericie campo di tennis = 24 × 11 m2 = 464 +10% = 510.4m2
Supericie campo di pallavolo = 18 × 9 m2 = 162 +10% = 178.2m2
Supericie campo di pallacanestro = 28 × 15 m2 = 720 +10% = 792m2 .
Pertanto deve risultare:

5500x1 + 880x2 + 510.4x3 + 178.2x4 + 792x5 ≤ 80000m2.

Il secondo vincolo riguarda i costi complessivi che non devono superare la


cifra disponibile:

x1 + 0.4x2 + 0.3x3 + 0.5x4 + 0.5x5 ≤ 4 Me.

L’ultima riguarda il vincolo sul numero di campi di pallacanestro e pallavolo:


x1 + x2 + x3
x4 + x5 ≤ .
2
CAPITOLO 1. INTRODUZIONE 23

Il vincolo di nonnegatività è sostituito dal requisito che tutte le variabili xi


devono essere maggiori o uguali di 1. La formulazione del problema è la
seguente:

max Z = x1 + x2 + x3 + x4 + x5
5050x1 +880x2 +510.4x3 +178.2x4 +792x5 ≤ 80000
x1 +0.4x2 +0.3x3 +0.5x4 +0.5x5 ≤ 4
x1 +x2 +x3 −2x4 −2x5 ≥ 0.
x1 , x2 , x3 , x4 , x5 ≥ 1, variabili intere.

1.1.11 Un esempio di modello non lineare


Un’industria chimica deve costruire un serbatoio scoperto da adibire all’im-
magazzinamento di un prodotto liquido utilizzando una quantità di lamiera
pari a 150 metri quadri. Il serbatoio deve essere collocato all’interno di un
capannone a pianta quadrata con lato di 15 metri e con un tetto spiovente
dall’altezza di 7 metri fino all’altezza di 4 metri. Per semplicità si suppone
che il serbatoio abbia la forma di un prisma retto con base quadrata. Si vuole
formulare il problema di determinare le dimensioni del serbatoio in modo tale
che il volume sia massimo.
CAPITOLO 1. INTRODUZIONE 24

Appare chiaro che, dovendo determinare le dimensioni del serbatoio, ovvero


la lunghezza del lato di base e dell’altezza, si pongano, come variabili del
problema:
x1 = lunghezza del lato di base
x2 = lunghezza dell’altezza.
Il volume del serbatoio è quindi
Z = x21 x2
che è la funzione da massimizzare.
I vincoli sulle variabili del problema sono di due tipi:
1) vincoli sulla quantità di lamiera da utilizzare;
2) vincoli sulle dimensioni del serbatoio rispetto al capannone che lo deve
contenere.
La lamiera disponibile (ovvero 150 metri quadri) deve essere sufficiente per
costruire solo la base e le pareti laterali, ovvero la superficie complessiva deve
essere
x21 + 4x1 x2 = 150.
CAPITOLO 1. INTRODUZIONE 25

Per quello che riguarda le dimensioni deve essere innanzitutto


x1 ≤ 15.
Per determinare il vincolo sull’altezza calcoliamo prima la pendenza del tetto
(ovvero il rapporto tra la differenza di ordinate e quella di ascisse):
7−4 3
p= = = 0.2
15 15
cosicchè, dalla seguente figura (non in scala)

y = 0.2 x1

x1

x2

si evince che deve essere


x2 + 0.2x1 = 7.
Il problema di programmazione lineare può quindi essere riassunto nel se-
guente modo:
max Z = x21 x2
x21 + 4x1 x2 = 150
x1 ≤ 15
0.2x1 + x2 ≤ 7
x1 , x2 ≥ 0.
In questo esempio sia la funzione Z che i vincoli sulle variabili x1 , x2 sono di
tipo non lineare.
CAPITOLO 1. INTRODUZIONE 26

1.1.12 Un altro esempio di modello non lineare


Una compagnia petrolifera si rifornisce di greggio in tre città portuali, indi-
cate con A, B e C. Il porto B è ubicato a 200 km a est e a 150 km a nord
del porto A. Il porto C si trova a 100 km a est e a 300 km a nord del por-
to A. La compagnia intende costruire una nuova raffineria in modo tale da
minimizzare la quantità totale di tubi occorrenti per collegare la raffineria ai
porti. Inoltre la raffineria non può essere costruita a sud del porto A nè a
meno di 100 km di distanza da questo.
Innanzitutto scegliamo un sistema di riferimento in cui il porto A coincide
con l’origine, in modo tale che i tre porti abbiano le seguenti coordinate:
A(0, 0), B(200, 150) e C(100, 300).

x2 C

R B

x1
A

Siano (x1 , x2 ) le coordinate del punto dove costruire la raffineria R. Calcolia-


mo le distanze di R dai tre porti:
p
AR = px21 + x22
BR = p(x1 − 200)2 + (x2 − 150)2
CR = (x1 − 100)2 + (x2 − 300)2
CAPITOLO 1. INTRODUZIONE 27

cosicchè la distanza totale dai tre porti è la funzione


q p p
Z = x21 + x22 + (x1 − 200)2 + (x2 − 150)2 + (x1 − 100)2 + (x2 − 300)2 .

Un primo vincolo è che risulti x2 ≥ 0 (la raffineria deve trovarsi infatti a nord
del porto A). Inoltre deve distare da questo più di 100 km quindi deve essere

x21 + x22 ≥ 1002.

Il problema può essere quindi formulato nel seguente modo


p p p
min Z = x21 + x22 + (x1 − 200)2 + (x2 − 150)2 + (x1 − 100)2 + (x2 − 300)2

x21 + x22 ≥ 10000

x2 ≥ 0.

1.2 Esercizi
Esercizio 1.2.1 Una multinazionale produce biocarburanti in uno stabili-
mento composto da tre reparti: Preparazione, Purificazione ed Estrazione.
Le tipologie di carburanti sono due: il biometano ed il biodiesel. I tempi
necessari per la lavorazione di una tonnellata di prodotto sono riportati nel-
la seguente tabella, insieme alla capacità produttiva giornaliera di ciascun
reparto.
Ore di lavorazione per tonnellata Capacità
Reparto Biometano Biodiesel giornaliera (ore)
Preparazione 0.50 0.75 18
Purificazione 1.10 1.35 18
Estrazione 1.85 1.95 15
Il management intende pianificare la produzione giornaliera dei due tipi di
carburante sapendo che il biometano produce un ricavo di 500 e per tonnel-
lata, il biodiesel 590 e per tonnellata con l’obiettivo di massimizzare il ricavo
giornaliero. Si scriva il relativo modello di ottimizzazione.

Esercizio 1.2.2 Un’azienda chimica può produrre due tipi di fertilizzanti.


Ogni quintale di fertilizzante di tipo A contiene 0.1 quintali di azoto e 0.3
CAPITOLO 1. INTRODUZIONE 28

quintali di potassio e ha un prezzo di vendita di 300e. Ogni quintale di ferti-


lizzante di tipo B contiene 0.2 quintali di azoto, 0.1 quintali di potassio e ha
un prezzo di vendita di 400e. L’azienda dispone di 9 quintali di azoto e di
10 quintali di potassio. Si scriva il relativo modello di ottimizzazione volendo
conoscere le produzioni giornaliere espresse in quintali di A e B che rendono
massimo il ricavo supponendo che, per problemi di tipo tecnologico, le produ-
zioni di A e B devono essere nel rapporto 1/2 e che ci sia una domanda di
mercato pari almeno a 20 quintali di prodotto tra A e B.

Esercizio 1.2.3 Un’azienda deve produrre 2 profilati metallici (A e B) che


richiedono l’impiego di manodopera, disponibile al massimo in 36 squadre.
Per la produzione giornaliera di un lotto di A e di un lotto di B si impiegano
rispettivamente 3 e 6 squadre. È necessario produrre tra A e B almeno 4 lotti
al giorno. Si possono impiegare due diverse tecnologie (1 e 2). La tecnologia
1 produce al massimo 2 lotti di B per ogni lotto di A (cioè le produzioni di
B ed A sono al massimo nel rapporto due a uno). La tecnologia 2 produce al
massimo 2 lotti di A per ogni lotto di B (cioè le produzioni di A e B sono al
massimo nel rapporto due a uno). Il profitto unitario è lo stesso per entrambi
i prodotti. Si scriva il relativo modello di ottimizzazione volendo determinare
il piano di produzione giornaliero che massimizzi il profitto totale. (Osserva-
zione. Ogni soluzione ammissibile deve essere tale da soddisfare entrambi i
vincoli sulle tecnologie utilizzate.)

Esercizio 1.2.4 Un’azienda di materie plastiche ha avuto una commessa per


la quale deve consegnare entro una settimana almeno 4 tonnellate di mate-
riale dei prodotti A e B. Problemi di organizzazione del lavoro impongono
che la differenza tra le quantità prodotte di B e di A sia al massimo pari a 4
tonnellate. I vincoli posti dal sistema tecnologico impongono invece che per
ogni tonnellata di A si producano almeno 2 tonnellate di B. I costi di produ-
zione di A e di B sono nel rapporto uno a tre. Si scriva il relativo modello
di ottimizzazione volendo conoscere il piano di produzione che minimizzi il
costo totale.

Esercizio 1.2.5 In un commissariato di polizia si deve provvedere alla rior-


ganizzazione dei turni giornalieri, ciascuno dei quali è composto da 4 ore.
Ogni poliziotto deve lavorare giornalmente per due turni alternati, per esem-
pio, chi inizia a lavorare al primo turno lavorerà anche al terzo, chi inizia
al secondo turno lavorerà anche al quarto, e cosı̀ via. Nella seguente tabella,
CAPITOLO 1. INTRODUZIONE 29

per ogni turno, è riportato il numero minimo di poliziotti che devono essere
presenti in quel turno:

Turno 1 2 3 4 5 6
Orario 0 − 4 4 − 8 8 − 12 12 − 16 16 − 20 20 − 24
Num. minimo 30 25 50 40 60 35

Per esempio, nel turno 4, cioè dalle ore 12 alle ore 16, devono essere in
servizio almeno 40 poliziotti. La retribuzione dei poliziotti è di 14 euro all’ora
per i turni diurni (3, 4, 5 e 6) e di 20 euro all’ora per i turni notturni (1 e
2). Formulare il problema come problema di ottimizzazione, con l’obiettivo
di minimizzare le spese giornaliere di retribuzione dei poliziotti.

Esercizio 1.2.6 L’allenatore della staffetta italiana 4 × 100 mista di nuoto


deve decidere i 4 atleti da schierare dei 6 disponibili. Nella seguente tabella
sono riportati i tempi medi, in secondi, di ciascun nuotatore in ognuna delle
4 frazioni:

Nuotatore Dorso Rana Delfino Stile libero


Alberto 65 73 63 57
Bruno 67 70 65 58
Carlo 68 72 69 55
Donato 67 75 70 59
Erminio 71 69 75 57
Francesco 69 71 66 59

Scrivere il relativo modello di ottimizzazione per assegnare ciascun nuota-


tore ad una delle 4 frazioni volendo minimizzare il tempo complessivo della
staffetta.

Esercizio 1.2.7 Un’industria chimica produce due tipi di concimi, A e B,


che si differenziano per il diverso contenuto di azoto e ferro. Il concime di
tipo A deve contenere almeno il 25% di azoto e almeno il 10% di ferro, mentre
il concime di tipo B deve contenere asattamente il 20% di azoto e almeno il
16% di ferro. I comcimi si ottengono facendo due composti contenenti azoto
e ferro. L’industria dispone di 30.000 kg di composto 1, acquistato al prezzo
di 3 e/kg, e di 25.000 kg di composto 2, acquistato al prezzo di 4 e/kg. Il
composto 1 contiene il 40% di ferro ed il 50% di azoto, il composto 2 contiene
il 6% di ferro ed il 70% di azoto. Si scriva il modello di ottimizzazione della
CAPITOLO 1. INTRODUZIONE 30

produzione dei due concimi sapendo che la quantità di concime deve essere
pari a 40.000 kg per quello di tipo A e 50.000 kg per quello di tipo B con
l’obiettivo di minimzzare i costi di produzione.

Esercizio 1.2.8 Un’azienda ospedaliera deve riorganizzare i turni del per-


sonale paramedico. Ogni infermiere, indipendentemente dalla collocazione
all’interno della settimana, lavora 5 giorni consecutivi e poi ha diritto a due
giorni di riposo. Le esigenze di servizio per i vari giorni della settimana
richiedono la presenza del seguente numero minimo di infermieri:

Giorno Numero minimo


Lunedı̀ 28
Martedı̀ 18
Mercoledı̀ 20
Giovedı̀ 26
Venerdı̀ 22
Sabato 13
Domenica 13

Ciascun infermiere viene retribuito in base al giorno della settimana in cui


lavora. In particolare il costo che l’ospedale sostiene per retribuire un infer-
miere è di 50 euro al giorno (per i turni del lunedı̀, martedı̀, mercoledı̀, giovedı̀
e venerdı̀), di 75 euro al giorno per i turni di sabato e di 85 euro al giorno per i
turni di domenica. Ad esempio, un infermiere il cui turno comincia il giovedı̀,
per i suoi 5 giorni lavorativi (dal giovedı̀ al lunedı̀) riceve una retribuzione
pari a euro 310 (ovvero 50 × 3 + 75 + 85). Scrivere il relativo modello di
ottimizzazione considerando che l’obiettivo dell’azienda ospedaliera è quello
di minimizzare i costi complessivi settimanali di retribuzione degli infermieri.

Esercizio 1.2.9 Il Ministero della Sanità ha in progetto la costruzione di


ospedali ortopedici specializzati, che nel raggio di 200 km siano in grado di
servire le seguenti città: Latina, Lecce, Matera, Napoli, Potenza, Salerno e
Roma. Nel seguito, per ogni città, sono elencate quelle situate a una distanza
inferiore ai 200 km:
1. Latina: Latina, Napoli, Roma;
2. Lecce: Lecce, Matera;
3. Matera: Lecce, Matera, Potenza;
4. Napoli: Latina, Napoli, Potenza, Salerno;
5. Potenza: Matera, Napoli, Potenza, Salerno;
CAPITOLO 1. INTRODUZIONE 31

6. Salerno: Napoli, Potenza, Salerno;


7. Roma: Latina, Roma.
Ad esempio, se un ospedale venisse costruito a Napoli, esso sarebbe in grado
di servire anche le città di Latina, Potenza e Salerno, che si trovano a una
distanza da Napoli inferiore a 200 km. Si vuole decidere in quale delle 7 città
costruire gli ospedali, in maniera tale che ogni città abbia almeno un ospedale
ad una distanza non superiore a 200 km e tenendo conto che in una stessa
città non si può costruire più di un ospedale.
Scivere il relativo modello di ottimizzazione avendo l’obiettivo di minimizzare
il numero di ospedali da costruire.

Esercizio 1.2.10 Un coltivatore ha a disposizione 16 ettari di terreno da


coltivare a lattuga o a patate. Le risorse a sua disposizione sono 70 kg. di
semi di lattuga, 18 tonnellate di tuberi e 160 tonnellate di concime. Suppo-
nendo che il mercato sia in grado di assorbire tutta la produzione, la resa
stimata per la lattuga è 3000e per ettaro e quella per le patate è 6500e per
ettaro. L’assorbimento di risorse per un ettaro coltivato è di 7 kg di semi e 10
tonnellate di concime per la lattuga e 3 tonnellate di tuberi e 20 di concime
per le patate. Scrivere il modello di ottimizzazione volendo stabilire quanti
ettari di terreno destinare a lattuga e quanti a patate e avendo l’obiettivo di
massimizzare il ricavo.

Esercizio 1.2.11 Una ditta di produzione di elettrodomestici produce dei


frigoriferi in tre stabilimenti e li smista in quattro magazzini intermedi di
vendita. La produzione settimanale nei tre stabilimenti A, B e C è rispet-
tivamente di 50, 70 e 20 unità. La quantità richiesta dai 4 magazzini è
rispettivamente di 10, 60, 30 e 40 unità. I costi per il trasporto di un frigo-
rifero tra gli stabilimenti e i magazzini 1, 2, 3 e 4 sono i seguenti:
• dallo stabilimento A: 6, 8, 3, 4 euro;
• dallo stabilimento B: 2, 3, 1, 3 euro;
• dallo stabilimento C: 2, 4, 6, 5 euro.
Scrivere il modello di ottimizzazione con l’obiettivo di minimizzare i costi per
il trasporto delle merci dagli stabilimenti ai magazzini.

Esercizio 1.2.12 Un’industria alimentare produce hamburger del peso di al-


meno 100 grammi costituito da carne macinata di manzo e di maiale. Il
macinato di manzo contiene l’80% di polpa ed il 20% di grasso e costa al-
lindustria 6 euro al chilogrammo. Il macinato di maiale contiene il 68% di
CAPITOLO 1. INTRODUZIONE 32

polpa ed il 32% di grasso e costa allindustria 3.5 euro al chilogrammo. Si


vuole determinare la quantità di macinato di manzo e di maiale da utilizzare
per produrre ogni singolo hamburger che superi il peso minimo ed evitando
che il contenuto grasso dellhamburger superi i 25 grammi ma che sia supe-
riore a 10 grammi avendo l’obiettivo di minimizzare il costo delle materie
prime.

Esercizio 1.2.13 Un condominio deve effettuare la ristrutturazione del fab-


bricato. Un ingegnere incaricato di redarre il capitolato di spesa individua
cinque lavori da eseguire prioritariamente:
I lavoro: Rifacimento dell’impianto elettrico;
II lavoro: Rifacimento dell’impianto idrico;
III lavoro: Tinteggiatura vano scale;
IV lavoro: Rifacimento frontespizio;
V lavoro: Rifacimento balconi.
L’amministratore contatta cinque ditte che sottopongono un preventivo per
ciascuna della cinque voci previste dal capitolato riassunto nella seguente
tabella:
Ditta 1 Ditta 2 Ditta 3 Ditta 4 Ditta 5
I Lavoro 6.0 5.5 6.0 4.0 5.0
II Lavoro 8.0 8.0 7.0 8.0 7.5
III Lavoro 4.0 4.5 4.0 5.0 5.5
IV Lavoro 10.0 9.0 10.0 8.0 9.0
V Lavoro 3.0 3.5 2.5 2.9 3.0

L’assemblea condominiale deve assegnare i lavori alle ditte con l’obiettivo di


minimizzare il costo complessivo della ristrutturazione ma volendo assegnare
ogni singolo lavoro ad una ditta diversa in modo tale da minimizzare il tempo
di esecuzione dei lavori.
Capitolo 2

Richiami di algebra lineare e


geometria dei poliedri

2.1 Elementi di Algebra Lineare


Un vettore x ∈ Rn è un insieme ordinato di n numeri reali disposti per
convenzione in una colonna e viene rappresentato nel seguente modo:
 
x1
 x2 
x =  ..  .
 
 . 
xn

Il vettore può essere anche rappresentato come una riga utilizzando l’opera-
zione di trasposizione, che viene indicata aggiungendo T come apice:

xT = x1 x2 . . . xn−1 xn .
 

Considerando l’insieme Rn come uno spazio ad n dimensioni un vettore x ∈


Rn può essere visto un punto appartenente al suddetto spazio. Da questo
punto di vista i termini vettore e punto possono essere considerati come
sinonimi. Si definisce norma euclidea di un vettore x ∈ Rn o lunghezza la
quantità non negativa v
u n
uX
kxk = t x2i
i=1

33
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 34

e può essere considerata come una misura della grandezza di un vettore


(ricordiamo che nello spazio Rn non esiste il concetto di ordinamento).
Si possono definire operazioni che coinvolgono vettori e scalari, per esempio
se α ∈ R e x ∈ Rn allora il vettore v = αx è il seguente
 
αx1
 αx2 
αx =  ..  ,
 
 . 
αxn
ma anche le classiche operazioni tra vettori, come la somma tra x, y ∈ Rn :
 
x1 + y1
 x2 + y2 
v =x+y = .. .
 
 . 
xn + yn
La combinazione lineare tra m vettori x(1) , . . . , x(m) ∈ Rn ed altrettanti
scalari α1 , . . . , αm è ottenuta come
 Pm (i) 
i=1 α i x 1
 
 P 
 m α x(i) 
Xm  i=1 i 2 
v= αi x(i) =  ,
 
i=1

 .
..


 
 
Pm (i)
i=1 αi xn

che ovviamente è sempre un vettore appartenente ad Rn .


Gli m vettori x(1) , . . . , x(m) ∈ Rn si dicono linearmente dipendenti se esistono
m scalari α1 , . . . , αm , non tutti nulli, tali che la combinazione lineare tra gli
m vettori e gli m scalari sia uguale a zero.
Un primo tipo di prodotto tra vettori è il cosiddetto prodotto interno (o
scalare), spesso indicato come (·, ·), e che è definito nel seguente modo: siano
x, y ∈ Rn , allora
X n
T
(x, y) = x y = xi yi = α
i=1
e il risultato è un numero reale. Il prodotto scalare soddisfa le seguenti
proprietà:
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 35

1. xT x ≥ 0 per ogni x ∈ Rn e (x, x) = 0 se e solo se x = 0;

2. xT y = y T x per ogni x, y ∈ Rn ;

3. (αx)T y = α(xT y) per ogni α ∈ R e per ogni x, y ∈ Rn ;

4. (x + y)T z = xT z + y T z per ogni x, y, z ∈ Rn .

5. se xT y = 0 allora i due vettori si dicono ortogonali.

Assegnati due numeri interi positivi m, n ∈ N, m, n ≥ 1, si definisce matrice


una tabella avente m righe ed n colonne. Se gli elementi della matrice sono
numeri reali allora l’insieme delle matrici aventi m righe ed n colonne si
indica con Rm×n . Per convenzione le matrici si indicano con lettere maiuscole
dell’alfabeto latino. Se A ∈ Rm×n allora m ed n si dicono dimensioni della
matrice. Se consideriamo due numeri interi i, j ∈ N, tali che 1 ≤ i ≤ m e
1 ≤ j ≤ n, questi identificano, rispettivamente, una riga ed una colonna della
matrice A, e l’elemento che si trova nella posizione (i, j) viene indicato con
aij . Una matrice di dimensione m × n può essere rappresentata nel seguente
modo:  
a11 a12 . . . a1n
 a21 a22 . . . a2n 
A =  .. .. ..  .
 
 . . . 
am1 am2 . . . amn
Se m = n allora la matrice A si dice quadrata di dimensione n o di ordine
n altrimenti si dice rettangolare. Gli elementi aij di una matrice quadrata A
di ordine n tali che i = j sono detti elementi principali o diagonali e formano
la cosiddetta diagonale principale di A.
Assegnata una matrice A ∈ Rm×n si definisce matrice trasposta di A la
matrice B = AT ∈ Rn×m tale che

bij = aji , i = 1, . . . , n, j = 1, . . . , m.

Se accade che A = AT allora la matrice è detta simmetrica. Assegnate due


matrici A, B ∈ Rm×n si definisce somma di A e B, e si denota con C = A+B,
la matrice C ∈ Rm×n i cui elementi sono:

cij = aij + bij i = 1, . . . , m, j = 1, . . . , n.


CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 36

In modo analogo si definisce la differenza tra matrici, infatti D = A − B è la


matrice avente elementi:
dij = aij − bij i = 1, . . . , m, j = 1, . . . , n.
Se α ∈ R ed A ∈ Rm×n allora la matrice C = αA è definita da:
cij = αaij .
Se A ∈ Rm×p e B ∈ Rp×n si definisce prodotto di A per B la matrice C ∈ Rm×n
i cui elementi sono
p
X
cij = aik bkj i = 1, . . . , m, j = 1, . . . , n.
k=1

Si noti che affinchè tale prodotto abbia senso è necessario che il numero delle
colonne di A coincida con il numero delle righe di B. Quando ciò accade
le matrici si dicono conformabili, altrimenti si dicono non conformabili. Ad
esempio nel nostro caso se m 6= n allora il prodotto BA non ha senso. Ha
sempre significato considerare i prodotti AB e BA se A e B sono matrici
quadrate dello stesso ordine (m = n).
È facile verificare che il prodotto tra matrici gode della proprietà associativa
ma in generale non di quella commutativa. Vale invece la seguente proprietà:
(AB)T = B T AT .
Esempio 2.1.1 Siano A e B le seguenti matrici:
   
3 1 0 2 1 −1
A =  −1 2 1 ; B =  0 1 1 .
3 1 1 2 1 1
Calcoliamo la matrice C = AB. L’elemento cij è uguale alla somma dei
prodotti degli elementi della i−esima riga di A per la j−esima colonna di B.
c11 = 3·2+1·0+0·2= 6
c12 = 3·1+1·1+0·1= 4
c13 = 3 · (−1) + 1 · 1 + 0 · 1 = −2
c21 = −1 · 2 + 2 · 0 + 1 · 2 = 0
c22 = −1 · 1 + 2 · 1 + 1 · 1 = 2
c23 = −1 · (−1) + 2 · 1 + 1 · 1 = 4
c31 = 3·2+1·0+1·2= 8
c32 = 3·1+1·1+1·1= 5
c33 = 3 · (−1) + 1 · 1 + 1 · 1 = −1.
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 37

In definitiva  
6 4 −2
C =  0 2 4 .
8 5 −1
Calcolando il prodotto D = BA si trova invece:
 
2 3 0
D= 2 3 2 
8 5 2

da cui risulta evidente che AB 6= BA.

Si definisce matrice identità di ordine n la matrice quadrata diagonale In


avente tutti gli elementi principali uguali a 1:

1 0 0 ... 0
 
 0 1 0 ... 0 
 . . 
. . .
In =  .. . . . . . . ..  .
 
 . .. ..
 ..

. . 0 
0 ... ... 0 1

La matrice identità è l’elemento neutro per il prodotto, cioè se A ∈ Rn×n si


ha
AIn = In A = A.
Siano A, B ∈ Rn×n le seguenti matrici
   
A11 A12 B11 B12
A= , B=
A21 A22 B21 B22

dove A11 , B11 ∈ Rp×p , A12 , B12 ∈ Rp×(n−p) , A21 , B21 ∈ R(n−p)×p e infine
A22 , B22 ∈ R(n−p)×(n−p) , con p < n, rappresentano a loro volta matrici e non
semplici elementi. Si dice cioè che A e B sono state suddivise a blocchi.
Il prodotto AB può essere calcolato utilizzando tale decomposizione delle
matrici:  
A11 B11 + A12 B21 A11 B12 + A12 B22
AB = .
A21 B11 + A22 B21 A21 B12 + A22 B22
Tale modo di effettuare il prodotto tra matrici viene detto prodotto a bloc-
chi ed è molto utile quando le matrici hanno una particolare struttura (per
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 38

esempio se uno dei blocchi è identicamente nullo oppure è uguale alla matrice
identità). Data una matrice A ∈ Rm×n , una matrice B ∈ Rh×k , 0 < h ≤ m,
0 < k ≤ n, è detta sottomatrice di A se è ottenuta da A eliminando m − h
righe ed n − k colonne. Data una matrice A ∈ Rm×n , una sottomatrice qua-
drata B di ordine k ≤ n di A è detta principale se gli elementi principali
di B sono anche gli elementi principali di A. Una sottomatrice B principale
di ordine k di A è detta principale di testa se è formata dagli elementi aij ,
i, j = 1, . . . , k.
Esiste un secondo prodotto tra vettori, il cosiddetto prodotto esterno: se
x ∈ Rn e y ∈ Rm allora viene definito nel seguente modo:

A = xy T

e il risultato è una matrice di dimensione n × m i cui elementi sono:

aij = xi yj , i = 1, . . . , n, j = 1, . . . , m.

Osservazione. A differenza del prodotto scalare il prodotto esterno può


essere eseguito anche tra vettori che hanno un numero differente di elementi.
Esempio 2.1.2 Siano x e y i seguenti vettori:
 
1
x= 2 
3
e  
−1
y =  −2  .
4
Calcoliamo prima il prodotto interno:

xT y = 1 · (−1) + 2 · (−2) + 3 · 4 = 7.

Osserviamo che tale operazione gode della proprietà commutativa, poichè


y T x = 7.
Per quello che riguarda il prodotto esterno, il risultato è la matrice
 
−1 −2 4
A = xy T =  −2 −4 8  .
−3 −6 12
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 39

Tale prodotto non gode della proprietà commutativa, infatti:


 
−1 −2 −3
B = yxT =  −2 −4 −6  .
4 8 12
Infatti B 6= A, anche se va osservato che B = AT .
Se A ∈ Rm×n e x ∈ Rn è possibile definire il prodotto matrice per vettore
nel seguente modo:
n
X
y = Ax, yi = aij xj , i = 1, . . . , m
j=1

quindi y ∈ Rm . Non è possibile effettuare il prodotto AxT perchè le dimen-


sioni non sono compatibili.
Esempio 2.1.3 Sia  
5 1 0
A =  −1 1 2 
5 −5 1
e sia x il vettore 
1
x =  2 .
3
Calcoliamo il vettore prodotto y = Ax:
y1 = 5 · 1 + 1 · 2 + 0 · 3 = 7
y2 = −1 · 1 + 1 · 2 + 2 · 3 = 7
y3 = 5 · 1 − 5 · 2 + 1 · 3 = −2.
Definizione 2.1.1 Se A ∈ Rn×n è una matrice di ordine n = 1, si definisce
determinante di A il numero
det A = a11 .
Se la matrice A è quadrata di ordine n allora, fissata una qualsiasi riga (co-
lonna) di A, diciamo la i-esima (j-esima), applicando la cosiddetta regola di
Laplace il determinante di A è:
n
X
det A = aij (−1)i+j det Aij
j=1
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 40

dove Aij è la matrice che si ottiene da A cancellando la i-esima riga e la


j-esima colonna.

Il determinante è pure uguale a


n
X
det A = aij (−1)i+j det Aij ,
i=1

cioè il determinante è indipendente dall’indice di riga (o di colonna) fissato.


Se A è la matrice di ordine 2
 
a11 a12
A= .
a21 a22

allora
det A = a11 a22 − a21 a12 .
Assegnata la matrice A di ordine 3
 
a11 a12 a13
A =  a21 a22 a23 
a31 a32 a33

e prendendo i = 1 risulta
     
a22 a23 a21 a23 a21 a22
det A = a11 det − a12 det + a13 det .
a32 a33 a31 a33 a31 a32

Il determinante ha le seguenti proprietà:


1. Se A è una matrice triangolare o diagonale allora
n
Y
det A = aii ;
i=1

2. det I = 1;
3. det AT = det A;
4. det AB = det A det B (Regola di Binet);
5. se α ∈ R allora det αA = αn det A;
6. det A = 0 se una riga (o una colonna) è nulla, oppure una riga (o una
colonna) è proporzionale ad un’altra riga (o colonna) oppure è combinazione
lineare di due (o più) righe (o colonne) di A.
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 41

Una matrice A di ordine n si dice non singolare se il suo determinante è


diverso da zero, in caso contrario viene detta singolare. Si definisce inversa
di A la matrice A−1 tale che:
AA−1 = A−1 A = In
Per quello che riguarda il determinante della matrice inversa vale la seguente
proprietà:
1
det A−1 = .
det A
Ricordiamo che se A, B e C sono matrici invertibili, in base alla regola di
Binet, anche il loro prodotto è una matrice invertibile e risulta
(AB)−1 = B −1 A−1 .
Questa proprietà vale anche se abbiamo più di due matrici, cioè:
(ABC)−1 = C −1 B −1 A−1 .

2.1.1 Calcolo della matrice inversa


Per il calcolo della matrice inversa si può utilizzare il cosiddetto algoritmo
di Gauss-Jordan, che si basa su un’operazione fondamentale che consente di
trasformare una matrice A (in generale di dimensione m × n) in un’altra
A in cui la k−esima colonna sia uguale alla h−esima colonna della matrice
identità di ordine m, purchè l’elemento ahk sia diverso da zero.
Per eseguire tale trasformazione si devono eseguire le seguenti operazioni:
1. Dividere la riga di indice h per l’elemento ah,k ;
2. Sottrarre da ogni riga i della matrice (con i 6= h) la riga h della matrice
(quella appena modificata) moltiplicata per aik .

Esempio 2.1.4 Consideriamo la matrice


 
3 4 2 1
 0 2 2 1 .
5 6 3 1
Essendo a22 = 2 6= 0 possiamo prendere tale elemento come pivot. Dividiamo
la seconda riga per a22 :  
3 4 2 1
 0 1 1 1/2  .
5 6 3 1
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 42

Adesso eseguiamo la sottrazione tra la prima riga e la seconda riga moltipli-


cata per 4:  
3 4 −2 −11
 0 1 1 1/2  .
5 6 3 1
Adesso eseguiamo la sottrazione tra la terza riga e la seconda riga moltiplicata
per 6:  
3 4 −2 −11
 0 1 1 1/2  .
5 6 −3 −2
L’algoritmo di Gauss-Jordan consiste nell’applicare la suddetta trasforma-
zione m volte, ottenendo una matrice che avrà m colonne uguali alla matrice
identità. Per calcolare l’inversa di una matrice quadrata di ordine n appli-
chiamo tale algoritmo alla matrice [A In ] di ordine n × 2n prendendo come
pivot gli elementi in posizione (i, i) con i = 1, . . . , n. Alla fine di tale proce-
dura si otterrà la matrice [In B] di dimensione n × 2n. Si osserva pertanto
che
A−1 [A In ] = [In B]
da cui si ricava che B = A−1 .

Esempio 2.1.5 Consideriamo la matrice


 
3 4 2
A =  0 2 2 .
5 6 3

Aggiungiamo a questa la matrice identità di ordine 3


 
3 4 2 1 0 0
 0 2 2 0 1 0 .
5 6 3 0 0 1

ed eseguiamo un’operazione di pivot sull’elemento a11 = 3.


Innanzitutto dividiamo la prima riga per a11 = 3 :
 
1 4/3 2/3 1/3 0 0
 0 2 2 0 1 0 .
5 6 3 0 0 1
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 43

Essendo a21 = 0 non eseguiamo nessuna operazione sulla seconda riga.


Sottraiamo alla terza riga la prima moltiplicata per 5 (o analogamente som-
miamo alla terza riga la prima moltiplicata per -5):
5 6 3 0 0 1 +

−5 −20/3 −10/3 −5/3 0 0 =

0 −2/3 −1/3 −5/3 0 1


Si ottiene la seguente matrice
 
1 4/3 2/3 1/3 0 0
 0 2 2 0 1 0 .
0 −2/3 −1/3 −5/3 0 1
Poichè a22 = 2 6= 0 possiamo eseguire l’operazione di pivot su tale elemento.
Dividiamo la seconda riga per 2:
 
1 4/3 2/3 1/3 0 0
 0 1 1 0 1/2 0  .
0 −2/3 −1/3 −5/3 0 1
Sommiamo alla prima riga la seconda moltiplicata per −4/3 :
1 4/3 2/3 1/3 0 0 +

0 −4/3 −4/3 0 −2/3 0 =

1 0 −2/3 1/3 −2/3 0


Il risultato è la nuova prima riga della matrice.
Sommiamo ora alla terza riga la seconda moltiplicata per 2/3 :
0 −2/3 −1/3 −5/3 0 1 +

0 2/3 2/3 0 1/3 0 =

0 0 1/3 −5/3 1/3 1


CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 44

Il risultato è la nuova terza riga della matrice.


Abbiamo ottenuto la seguente matrice
 
1 0 −2/3 1/3 −2/3 0
 0 1 1 0 1/2 0  .
0 0 1/3 −5/3 1/3 1

Poichè a33 = 4 6= 0 possiamo eseguire l’operazione di pivot su tale elemento.


Dividiamo la terza riga per 1/3 :
 
1 0 −2/3 1/3 −2/3 0
 0 1 1 0 1/2 0  .
0 0 1 −5 1 3

Sommiamo alla prima riga la terza moltiplicata per 2/3:

1 0 −2/3 1/3 −2/3 0 +

0 0 2/3 −10/3 2/3 2 =

1 0 0 −3 0 2

Il risultato di tale operazione costituisce la nuova prima riga della matrice.


Sommiamo alla seconda riga la terza moltiplicata per −1:

0 1 1 0 1/2 0 +

0 0 −1 5 −1 −3 =

0 1 0 5 −1/2 −3

Otteniamo la matrice
 
1 0 0 −3 0 2
 0 1 0 5 −1/2 −3  .
0 0 1 −5 1 3

Avendo ottenuto una matrice le cui prime tre colonne coincidono con quelle
della matrice identità abbiamo terminato il calcolo della matrice inversa di
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 45

A che risulta essere:


 
−3 0 2
A−1 =  5 −1/2 −3  .
−5 1 3

2.1.2 Rango di una matrice


Assegnata una matrice A ∈ Rm×n , il rango di A, indicato con rk(A), è
definito come il numero di righe (o di colonne) della più grande sottomatrice
non singolare di A. Il rango di A coincide anche con il numero massimo
di righe o colonne linearmente indipendenti di A. Il rango, a differenza del
determinante, è definito anche per matrici rettangolari, e si ha che

rk(A) ≤ min {m, n} .

Se risulta
rk(A) = min {m, n}
allora si dice che la matrice ha rango pieno.
Se A è rettangolare con m ≤ n, allora un insieme di k ≤ m colonne di A
forma una sottomatrice corrispondente ad una matrice di base se:
1. le k colonne sono linearmente indipendenti;

2. aggiungendo una qualsiasi colonna restante di A a tale insieme si ot-


tengono k + 1 colonne linearmente dipendenti.

2.2 Geometria poliedrale


Assegnati k vettori x(1) , . . . , x(k) ∈ Rn e k scalari α1 , . . . , αk ∈ R allora il
vettore
Xk
y= αi x(i) , y ∈ Rn
i=1

si dice:
• combinazione affine di x(1) , . . . , x(k) se
k
X
αj = 1;
j=1
CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 46

• combinazione conica di x(1) , . . . , x(k) se αj ≥ 0, per j = 1, . . . , k;


• combinazione convessa di x(1) , . . . , x(k) se αj ≥ 0, per j = 1, . . . , k, e
k
X
αi = 1.
i=1

Definizione 2.2.1 Un insieme P ⊂ Rn è convesso se per ogni x, y ∈ P


risulta
λx + (1 − λ)y ∈ P, ∀λ ∈ [0, 1].

Se un insieme è convesso allora, per ogni coppia di punti appartenenti ad esso,


il segmento che li congiunge appartiene interamente all’insieme. I seguenti
sono esempi di insiemi convessi.

I seguenti sono invece esempi di insiemi non convessi.


CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 47

Un iperpiano I di Rn è un insieme di punti che soddisfa un’equazione lineare


e separa i punti di Rn in due regioni dette semispazi. Dato un vettore
a ∈ Rn , uno scalare b ∈ R ed un vettore di variabili x ∈ Rn , allora I può
essere rappresentato come

I = x ∈ R n | aT x = b .


I punti di Rn sono suddivisi in due semispazi S1 ed S2 tali che

S1 ∩ S2 = I.

I due semispazi sono rappresentabili nel seguente modo:



S1 = x ∈ R n | a T x ≤ b

S2 = x ∈ R n | a T x ≥ b .

L’unione dei semispazi S1 ed S2 corrisponde a Rn .

Definizione 2.2.2 Un insieme S ⊆ Rn è uno spazio affine se e solo se la


combinazione affine di ogni sottoinsieme finito di vettori di S appartiene ad
S.

Assegnata una matrice A ∈ Rm×n , un vettore b ∈ Rm ed un vettore di


variabili x ∈ Rn allora l’insieme

S = {x ∈ Rn | Ax = b}

è uno spazio affine. Se il sistema di equazioni Ax = b è composto da una


sola equazione allora lo spazio affine è un iperpiano. Uno spazio affine è un
insieme convesso.

Definizione 2.2.3 Un cono poliedrale C è l’intersezione di un insieme


finito di semispazi i cui iperpiani passano per l’origine.

Assegnata una matrice A ∈ Rm×n ed un vettore di variabili x ∈ Rn , C può


essere rappresentato come

C = {x ∈ Rn | Ax ≤ 0} .

Anche un cono poliedrale è un insieme convesso.


CAPITOLO 2. ALGEBRA LINEARE E POLIEDRI 48

Definizione 2.2.4 Un poliedro P è l’intersezione di un numero finito di


semispazi.

Assegnata una matrice A ∈ Rm×n , un vettore b ∈ Rm ed un vettore di


variabili x ∈ Rn , allora il poliedro P può essere rappresentato come

P = {x ∈ Rn | Ax ≤ b} .

Un poliedro P è limitato se esiste uno scalare M sufficientemente grande


tale che, per ogni x ∈ P si ha che

kxk ≤ M.

Un poliedro limitato si dice politopo.


Assegnato un poliedro P un punto x ∈ P si dice vertice se non può essere
ottenuto come combinazione convessa di altri punti di P.
Capitolo 3

Programmazione lineare

3.1 Introduzione
I problemi di ottimizzazione, alcuni dei quali sono stati descritti nel prece-
dente capitolo, hanno la seguente forma

max Z = f (x)
(3.1)
x∈S
dove f è una funzione
f : Rn −→ R
mentre S ⊆ Rn . Una possibile variazione del problema (3.1) è che il problema
sia quello di minimizzare f (x). La funzione

Z = f (x1 , x2 , . . . , xn )

viene detta funzione obiettivo, le variabili x1 , x2 , . . . , xn , prendono il nome


di variabili decisionali. Una qualunque assegnazione di valore alle variabili
decisionali è detta soluzione. L’insieme S, che viene definito solitamente
attraverso una serie di disequazioni, o anche equazioni, dette vincoli, prende
il nome di regione ammissibile, o regione di ammissibilità. Ogni x ∈ S viene
detto soluzione ammissibile. Una soluzione non ammissibile è una soluzione
che viola almeno un vincolo. La soluzione ottima è quella che fornisce il
valore migliore per la funzione obiettivo (cioè il massimo o il minimo in base
al tipo di problema da risolvere). Un problema viene detto inammissibile
se S = ∅. Tra i diversi problemi di ottimizzazione è possibile distinguere i
seguenti tipi:

49
CAPITOLO 3. PROGRAMMAZIONE LINEARE 50

• Problemi di Ottimizzazione Continua, se le variabili possono assumere


valori reali, ovvero x ∈ Rn , in particolare si parla di Ottimizzazione
Vincolata se S ⊂ Rn , Ottimizzazione Non Vincolata se S = Rn .

• Problemi di Ottimizzazione Discreta, se le variabili possono assumere


valori interi, ovvero x ∈ Nn , in particolare si parla di Programmazione
Intera se S ⊂ Nn , Programmazione Binaria se le variabili decisionali
possono assumere come valore solo 0 oppure 1.

• Problemi di Programmazione Mista, se alcune variabili possono assu-


mere valori interi mentre le altre possono assumere valori reali.
Quando la funzione f (x) è di tipo lineare, ovvero può essere scritta come

Z = c1 x1 + c2 x2 + · · · + cn xn

ed anche i vincoli che definiscono S sono di tipo lineare allora il problema di


ottimizzazione viene detto di programmazione lineare, dove in questo caso il
termine programmazione deve essere inteso come sinonimo di pianificazione.
Come visto negli esempi del precedente capitolo la programmazione lineare
riguarda la pianificazione di alcune attività al fine di ottenere il risultato
migliore, ovvero l’uso ottimale delle risorse disponibili. Dal punto di vista
matematico il modello consiste nel determinare il valore assunto dalle variabili
decisionali in modo tale che la funzione f (x) sia massima. I vincoli lineari
posti sulle variabili decisionali sono detti vincoli funzionali (o strutturali):

a11 x1 +a12 x2 + . . . +a1n xn ≤ b1


a21 x1 +a22 x2 + . . . +a2n xn ≤ b2
.. .. .. ..
. . . .
am1 x1 +am2 x2 + . . . +amn xn ≤ bm ,

con bi ≥ 0, i = 1, . . . , m. A questi si aggiungono vincoli di nonnegatività per


le variabili decisionali: xi ≥ 0, i = 1, . . . , n. Il numero di variabili decisionali
è indipendente dal numero di vincoli strutturali. Il tipo di problema appena
definito viene detto in forma standard, e chiaramente è possibile definire
problemi che abbiano caratteristiche differenti da quanto visto, per esempio
si potrebbe porre il problema di minimizzare la funzione obiettivo, oppure
qualche vincolo potrebbe essere in forma di uguaglianza

ai1 x1 + ai2 x2 + · · · + ain xn = bi


CAPITOLO 3. PROGRAMMAZIONE LINEARE 51

oppure con differente verso nella disuguaglianza

ai1 x1 + ai2 x2 + · · · + ain xn ≥ bi ,

oppure potrebbe mancare qualche vincolo di nonnegatività oppure si potreb-


be richiedere che una variabile sia intera oppure binaria.

3.2 Il metodo grafico


Quando un problema ha soltanto due variabili decisionali, per esempio x1 e
x2 , allora è possibile risolverlo per via grafica. Tale tecnica consiste nel trac-
ciare, nel piano (x1 , x2 ) (cioè x1 ascissa e x2 ordinata), i contorni della regione
ammissibile. Si considerano quindi i vincoli uno per uno e si identificano le
regioni del piano contenenti i punti che soddisfano tale vincolo e che vengono
intersecate con la regione già identificata grazie ai vincoli che sono già stati
considerati. I vincoli di nonnegatività x1 , x2 ≥ 0 restringono la ricerca della
regione di ammissibilità al solo primo quadrante del piano cartesiano.
Consideriamo ora il seguente problema di programmazione lineare:

max Z = 3x1 + 5x2


x2 ≤ 3
x1 +x2 ≤ 5
−x1 +x2 ≤ 2
x1 ≥ 0, x2 ≥ 0.

Rappresentiamo graficamente le regioni del piano (x1 , x2 ) che sono identifi-


cate dai vincoli del problema. Per identificare la regione del piano cartesiano
identificata dal primo vincolo tracciamo il grafico della retta

x2 = 3.

I punti sono quelli che si trovano al di sotto di questa, come evidenziato nella
figura.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 52

x2
x2 ≤ 3

x1

Per il secondo vincolo consideriamo la retta

x1 + x2 = 5.

Per individuare la regione di interesse osserviamo che l’origine (0, 0) soddisfa


la disequazione quindi la porzione del piano di interesse è quella che la con-
tiene. La regione ammissibile si ottiene effettuando l’intersezione tra quella
appena determinata e l’insieme identificato dal primo vincolo.

x2
x1 + x2 ≤ 5
(2, 3)

(5, 0) x1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 53

Procediamo in modo analogo anche per il terzo vincolo, ottenendo la seguente


regione ammissibile.

x2 −x1 + x2 ≤ 2
(1, 3) (2, 3)

(0, 2)

(5, 0) x1

x2

Z = 21

Z = 18

Z = 15 x1

Z = 10
CAPITOLO 3. PROGRAMMAZIONE LINEARE 54

Si ricava ora la variabile x2 dall’espressione della funzione obiettivo


3 1
Z = 3x1 + 5x2 ⇒ x2 = − x1 + Z.
5 5
L’equazione della funzione obiettivo in forma esplicita rappresenta un fascio
di rette parallele aventi coefficiente angolare −3/5 ed ordinata del punto di
intersezione con l’asse x2 pari a Z/5. Assegnando qualche valore a Z si può
determinare in quale direzione di tale fascio il valore aumenta. In questo mo-
do il valore massimo della funzione obiettivo viene assunto necessariamente
nel vertice della regione ammissibile che viene incontrato per ultimo proce-
dendo nella direzione del fascio di rette che aumenta il valore di Z. Ponendo
Z = 0 la retta del fascio passa per l’origine del riferimento cartesiano mentre
la retta passante per il punto (0, 2) ha valore Z = 10. I valori di Z crescono
(come era prevedibile) in corrispondenza di rette del fascio che si muovono
verso la direzione delle ordinate crescenti. Quindi la soluzione ottima coinci-
de con il punto (2, 3) in cui la funzione obiettivo assume valore Z = 21.
Volendo verificare che la soluzione ottima è quella trovata si può calcolare il
valore di Z anche negli altri vertici:
nel punto (1, 3) si ha Z = 18;
nel punto (5, 0) si ha Z = 15.
Riassumendo il metodo grafico per risolvere problemi di programmazione
lineare in due dimensioni prevede i seguenti passi:
1. Individuare la regione ammissibile calcolando l’intersezione tra tutti gli
insiemi cui appartengono i punti che soddisfano ogni singolo vincolo;
2. Individuare la direzione del fascio di rette identificato dalla funzione
obiettivo;
3. Individuare la direzione di crescita o decrescita di Z in base al tipo di
problema assegnato;
4. Identificare la soluzione ottima come l’ultimo vertice della regione am-
missibile intersecata con una retta del fascio che si muove lungo la
direzione individuata al passo precedente.

3.2.1 Alcune osservazioni sul metodo grafico


Osservazione 1. Il metodo grafico si può applicare facilmente quando il pro-
blema ha due variabili. Se il problema avesse tre variabili decisionali la
CAPITOLO 3. PROGRAMMAZIONE LINEARE 55

regione ammissibile diventerebbe una figura solida (un poliedro in particola-


re) mentre la funzione obiettivo sarebbe un fascio di piani paralleli. È chiaro
come la rappresentazione grafica di tali enti geometrici diventi molto più
complessa, seppur non impossibile da studiare.
Osservazione 2. Il metodo grafico consente alcune osservazioni che sono va-
lide anche nel caso in cui le variabili decisionali siano un numero maggiore.
Infatti la soluzione si trova sempre sulla frontiera della regione ammissibile ed
è localizzata (quando esiste ed è unica) in un vertice. Sulla questione relativa
all’esistenza e all’unicità della soluzione tuttavia ci sono altre osservazioni da
fare.
Osservazione 3. Consideriamo la stessa regione ammissibile dell’esempio fatto
ma cambiamo la funzione obiettivo:

max Z = x1 + x2

allora cambia la soluzione.

x2


x1

Z=0 Z=2 Z=4 Z=5

Infatti osserviamo che le soluzioni sarebbero state tutti i punti appartenenti


al segmento congiungente (5, 0) e (2, 3), cioè sarebbero state infinite.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 56

Osservazione 4. Se i vincoli fossero stati i seguenti:

−x1 +x2 ≤ 1
2x1 −3x2 ≤ 4
x1 ≥ 0, x2 ≥ 0.

allora la regione ammissibile sarebbe stata la seguente

x2

(0, 1)

(2, 0) x1

cioè una regione illimitata superiormente allora anche la funzione obiettivo


sarebbe stata illimitata e quindi la soluzione sarebbe stata Z = +∞, quindi
il problema di massimo non avrebbe ammesso soluzione.
Osservazione 5. Se invece si fossero considerati i vincoli opposti, cioè

−x1 +x2 ≥ 1
2x1 −3x2 ≥ 4
x1 ≥ 0, x2 ≥ 0.

allora la regione ammissibile sarebbe stata l’intersezione tra gli insiemi evi-
denziati nel seguente grafico, ovvero sarebbe stata vuota ed il problema non
avrebbe ammesso soluzione.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 57

x2

(0, 1)

(2, 0) x1

Esempio 3.2.1 Applicare il metodo grafico per risolvere il seguente problema


di programmazione lineare:

min Z = 3x1 + 4x2


x1 +x2 ≥ 4
x2 ≤ 10
x1 −x2 ≤ 0
x1 ≥ 0, x2 ≥ 0.

Rappresentiamo graficamente le regioni del piano (x1 , x2 ) che sono identifi-


cate dai vincoli del problema, iniziando dalla retta x1 + x2 = 4
CAPITOLO 3. PROGRAMMAZIONE LINEARE 58

x2

x1

L’insieme dei punti che soddisfa il primo vincolo è quello che non contiene
l’origine pertanto coincide con quello evidenziato in ciano. La retta x2 =
10 è parallela all’asse x1 cosicchè il secondo vincolo identifica i punti che
appartengono alla striscia delimitata dalle due rette e, intersecandola con
l’insieme già ottenuto si ottiene il seguente

x2

x1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 59

Il terzo vincolo è delimitato dalla retta x1 = x2 (ovvero la bisettrice del


primo e terzo quadrante), e, poichè è soddisfatto dal punto di coordinate
(0, 1) allora la regione ammissibile è la seguente

x2

x1

Consideriamo ora la funzione obiettivo e ricaviamo la variabile x2


3 1
Z = 3x1 + 4x2 ⇒ x2 = − x1 + Z
4 4
che rappresenta l’equazione del fascio di rette parallele di coefficiente ango-
lare −3/4. Poichè la funzione obiettivo deve essere minimizzata la soluzione
coincide con il punto della regione ammissibile che appartiene al fascio e
avente il minimo valore di Z. Tracciando la retta del fascio passante per
l’origine (con Z = 0 quindi)
CAPITOLO 3. PROGRAMMAZIONE LINEARE 60

x2

x1

si vede graficamente che la soluzione è il punto (2, 2) per cui Z = 14.

x2

x1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 61

Esempio 3.2.2 Applicare il metodo grafico per risolvere il seguente problema


di programmazione lineare:

max Z = x1 − x2
x1 +x2 ≥ 2
x1 +x2 ≤ 8
x1 −2x2 ≤ 0
x1 ≥ 0, x2 ≥ 0.

Rappresentiamo graficamente le regioni del piano (x1 , x2 ) che sono identifi-


cate dai vincoli del problema, iniziando dalla retta x1 + x2 = 2

x2

x1

L’insieme dei punti che soddisfa il primo vincolo è quello che non contiene
l’origine pertanto coincide con quello evidenziato in ciano. La retta x1 + x2 =
8 è parallela alla retta giá tracciata e, poichè l’origine soddisfa il vincolo stesso
la regione ammissibile identificata dal secondo vincolo identifica i punti che
appartengono alla striscia delimitata dalle due rette:
CAPITOLO 3. PROGRAMMAZIONE LINEARE 62

x2

x1

Il terzo vincolo è delimitato dalla retta x1 = 2x2 (passante per l’origine e


per il punto di coordinate (2, 1)) e, poichè al disequazione è soddisfatta dalle
coordinate del punto (0, 1) allora la regione ammissibile è la seguente
x2

x1

Consideriamo ora la funzione obiettivo e ricaviamo la variabile x2


Z = x1 − x2 ⇒ x2 = x1 − Z
CAPITOLO 3. PROGRAMMAZIONE LINEARE 63

che rappresenta l’equazione del fascio di rette parallele alla bisettrice del
primo e terzo quadrante. Una generica retta appartente a tale fascio interseca
l’asse x2 nel punto di coordinate (0, −Z). Poichè il valore della funzione
obiettivo (cioè Z) deve essere massimizzato, la direzione di crescita è quella
verso il basso (nella direzione in cui il valore −Z diminuisce e quindi Z
aumenta) Tracciando la retta del fascio passante per l’origine (con Z = 0
quindi)

x2

x1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 64

x2

Z = 8/3

x1

Soluzione ottima risulta essere il punto di coordinate (8/3, 16/3) in cui Z =


8/3.

Esempio 3.2.3 Applicare il metodo grafico per risolvere il seguente problema


di programmazione lineare:

max Z = x1 − 2x2
x1 +x2 ≥ 4
x1 −x2 ≤ 1
x1 ≥ 1
x1 ≥ 0, x2 ≥ 0.

Rappresentiamo graficamente le regioni del piano (x1 , x2 ) che sono identifi-


cate dai vincoli del problema, iniziando dalla retta x1 + x2 = 4
CAPITOLO 3. PROGRAMMAZIONE LINEARE 65

x2

x1

L’insieme dei punti che soddisfa il primo vincolo è quello che non contiene
l’origine pertanto coincide con quello evidenziato in ciano. La retta x1 −x2 =
1 è parallela alla bisettrice del primo e terzo quadrante e passa per il punto
di coordinate (1, 0), poichè l’origine soddisfa il vincolo la regione ammissibile
identificata dal secondo vincolo identifica i punti che si trovanp al di sopra
della retta:
x2

x1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 66

L’ultimo vincolo restringe la regione ammissibile a tutti i punti che hanno


prima coordinata maggiore di 1, pertanto la regione ammisssibile risulta la
seguente:

x2

x1

Consideriamo ora la funzione obiettivo e ricaviamo la variabile x2


1 Z
Z = x1 − 2x2 ⇒ x2 = x1 −
2 2
che rappresenta l’equazione del fascio di rette di coefficiente angolare 1/2.
Una generica retta appartente a tale fascio interseca l’asse x2 nel punto di
coordinate (0, −Z/2). Poichè il valore della funzione obiettivo (cioè Z) deve
essere massimizzato, la direzione di crescita è quella verso il basso (nella
direzione in cui il valore −Z diminuisce e quindi Z aumenta) Tracciamo la
retta del fascio passante per l’origine (con Z = 0 quindi)
CAPITOLO 3. PROGRAMMAZIONE LINEARE 67

x2

Z=0

x1

Appare chiaro che la soluzione ottima è il punto di coordinate (5/2, 3/2), in


cui Z = −1/2.

x2

Z = −1/2

x1

Osserviamo che, nel precedente esempio, nonostante la regione ammissibile


fosse illimtata la funzione obiettivo ammette un valore massimo finito e non
pari a +∞ (come si potrebbe erroneamente concludere).
CAPITOLO 3. PROGRAMMAZIONE LINEARE 68

3.3 La geometria dei problemi di program-


mazione lineare
Nei paragrafi seguenti l’attenzione sarà rivolta allo studio delle proprietà
geometriche e alla risoluzione dei problemi di programmazione lineare in
forma standard. cioè tali che

1. Funzione obiettivo da massimizzare;


2. Vincoli funzionali (o strutturali) nella forma ≤ e termine noto bi ≥ 0
per ogni i;
3. Vincoli di nonnegatività per le variabili decisionali.

Osserviamo che il vincolo di nonnegatività del termine noto serve a di-


scriminare effettivamente tra le diverse tipologie di disuguaglianza. Infatti
considerando il vincolo
3x1 − 5x2 + x3 ≥ 2
moltiplicandolo per -1 diventerebbe

−3x1 + 5x2 − x3 ≤ −2

e quindi apparentemente potrebbe essere trattato come un vincolo di tipo ≤.


In realtà le cose sono piuttosto differenti e vedremo in seguito che esistono
meccanismi sostanzialmente molto diversi per risolvere problemi con diffe-
renti tipi di disuguaglianza.
In termini matematici il problema in forma standard è il seguente

max Z = c1 x1 + c2 x2 + · · · + cn xn

a11 x1 +a12 x2 +... +a1n xn ≤ b1


a21 x1 +a22 x2 +... +a2n xn ≤ b2
.. .. .. ..
. . . .
am1 x1 +am2 x2 + . . . +amn xn ≤ bm
xi ≥ 0, i = 1, . . . , n,

ed inoltre bi ≥ 0, i = 1, . . . , m.
Le variabili xi che definiscono le incognite del problema sono dette, come
abbiamo visto, variabili decisionali. Talvolta questi problemi possono essere
CAPITOLO 3. PROGRAMMAZIONE LINEARE 69

rappresentati in forma compatta ponendo


   
c1 x1
 c2   x2 
c =  ..  , x= .. ,
   
 .   . 
cn xn

con c, x ∈ Rn , la funzione obiettivo risulta essere pertanto pari al prodotto


scalare tra i vettori c e x, e, per quello che riguarda i vincoli, posto
   
a11 a12 . . . a1n b1
 a21 a22 . . . a2n   b2 
A =  .. .. ..  , b =  ..  ,
   
 . . .   . 
am1 am2 . . . amn bm

costituiscono un sistema di disequazioni

Ax ≤ b.

La forma matriciale di un problema di programmazione lineare in forma


standard risulta essere la seguente

max Z = cT x
Ax ≤ b
x ≥ 0.

Si definisce frontiera del vincolo l’iperpiano in Rn di equazione

ai1 x1 + ai2 x2 + · · · + ain xn = bi .

L’insieme dei punti che soddisfa la disequazione

ai1 x1 + ai2 x2 + · · · + ain xn ≤ bi

rappresenta un semispazio in Rn . La regione ammissibile è l’intersezione di


tutti i semispazi e gli iperpiani definiti dai vincoli. Una proprietà importan-
te di cui gode sempre la regione ammissibile è che si tratta di un insieme
convesso. La relazione
λx + (1 − λ)y
CAPITOLO 3. PROGRAMMAZIONE LINEARE 70

x2

C G
A

O E F x1

Figura 3.1:

prende il nome di combinazione lineare convessa. Tale concetto può essere


generalizzato considerando k elementi t1 , . . . tk ∈ P e definendo una loro
combinazione lineare convessa nel seguente modo
k
X k
X
w= λi ti , purchè λi = 1.
i=1 i=1

I punti di intersezione tra n iperpiani sono detti vertici. I vertici ammissibili


sono quelli che appartengono alla regione ammissibile mentre i vertici non
ammissibili sono quelli che non appartengono alla regione ammissibile. Se
consideriamo la Figura 3.1 allora i punti O, A, C, D ed E sono vertici ammis-
sibili, mentre i punti B, F e G sono vertici non ammissibili.
Osservazione. È chiaro che anche gli iperpiani di equazione
xi = 0
che corrispondono ai vincoli di nonnegatività delimitano la regione ammissi-
bile. Per i problemi di programmazione lineare in forma standard accade che
proprio per questo l’origine è sempre un vertice ammissibile (soddisfa sicura-
mente i vincoli funzionali che hanno termine noto nonnegativo ed appartiene,
per ogni i all’iperpiano di equazione xi = 0).
CAPITOLO 3. PROGRAMMAZIONE LINEARE 71

Teorema 3.3.1 (di Weyl-Minkowski. Enunciato) Ogni punto interno al


politopo P ⊂ Rn può essere espresso come combinazione lineare convessa di
un insieme di vertici di P .

Fondamentale nella teoria dei problemi di programmazione lineare è il se-


guente teorema del quale viene fornita una dimostrazione, seppur non molto
rigorosa.

Teorema 3.3.2 Se la regione ammissibile è un politopo allora il massimo


della funzione obiettivo non può essere un punto interno.

Dimostrazione. Sia w un punto interno al politopo e supponiamo che,


applicando il Teorema 3.3.1, esistono due vertici x e y tali che

w = λx + (1 − λ)y, λ ∈ [0, 1].

Calcoliamo la funzione obiettivo nei due vertici e poniamo

Z1 = cT x, Z2 = cT y,

e supponiamo che sia Z1 < Z2 . Calcoliamo la funzione obiettivo in w:

Z ∗ = cT w = cT (λx + (1 − λ)y) = λcT x + (1 − λ)cT y = λZ1 + (1 − λ)Z2 .

Ovviamente risulta

Z ∗ = λZ1 + (1 − λ)Z2 < λZ2 + (1 − λ)Z2 = λZ2 + Z2 − λZ2 = Z2 .

Quindi appare chiaro come il valore della funzione obiettivo in un qualun-


que punto interno sia sempre inferiore rispetto al valore assunto in un ver-
tice. La dimostrazione può essere generalizzata supponendo che w sia una
combinazione convessa di un insieme di vertici. ✷
In un problema di programmazione lineare con n variabili decisionali, due
vertici si dicono adiacenti se condividono le frontiere di n − 1 vincoli. Facen-
do riferimento alla Figura 3.1 sono vertici adiacenti, per esempio, A e C, ma
anche C e D, mentre non sono vertici adiacenti O e C.
Invece nella seguente figura in R3 il vertice A ha come vertici adiacen-
ti (esattamente tre) i punti B, C e D. Con ciascuno di questi condivide
l’appartenenza a due piani che delimitano la regione ammissibile.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 72

B

D
• A


C
Due vertici adiacenti sono collegati attraverso un segmento che giace sulla
frontiera comune e che viene detto spigolo della regione ammissibile. Una
delle idee alla base del metodo del simplesso è la proprietà che la soluzione
ottima è sempre uno dei vertici della regione ammissibile, e inoltre se si con-
sidera un qualsiasi problema di programmazione lineare che possiede almeno
una soluzione ottima allora se un vertice non ha vertici adiacenti migliori
(valutati attraverso la funzione obiettivo), allora deve essere necessariamente
la soluzione ottima. Consideriamo infatti la seguente figura in R2 .

x2

C
A D

x1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 73

Il valore della funzione obiettivo nel vertice A è sicuramente maggiore di


quello dei due vertici adiacenti B e C. Se esistesse un vertice D non adiacen-
te ad A migliore di quest’ultimo allora la regione ammissibile non potrebbe
essere un insieme convesso. Questa proprietà è fondamentale per l’applica-
zione del metodo descritto nei seguenti paragrafi per risolvere problemi di
programmazione lineare in forma standard, ovvero il metodo del simplesso.

3.4 Il Metodo del Simplesso


Il metodo del simplesso è una procedura iterativa di tipo algebrico che si
applica a problemi di programmazione lineare in forma standard. Il metodo
del simplesso si basa sulle seguenti idee chiave:

1. Il metodo del simplesso è un algoritmo di tipo iterativo che concentra


l’attenzione esclusivamente sui vertici della regione ammissibile, pas-
sando, ad ogni iterazione, da un vertice ad un altro, finchè non trova la
soluzione ottima oppure conclude che la funzione obiettivo è illimitata
(ovvero Z = +∞), identificando anche il caso in cui la soluzione ottima
non è unica.

2. Il metodo sceglie come vertice iniziale l’origine (tutte le variabili deci-


sionali sono poste uguali a zero).

3. Considerato un determinato vertice risulta più conveniente, da un pun-


to di vista computazionale, ottenere informazioni sui vertici adiacenti.
Passando da un vertice all’altro la procedura per trovare la soluzione
ottima si snoda attraverso gli spigoli della regione ammissibile.

4. Dopo aver identificato il vertice ammissibile la procedura si muove


lungo lo spigolo dove il tasso di incremento di Z è maggiore.

5. Un tasso di miglioramento positivo per la funzione obiettivo implica


che il vertice adiacente è migliore di quello attuale, un tasso negativo
indica invece che è peggiore. Se nessuno dei vertici adiacenti produce
un tasso positivo significa che è stata raggiunta la soluzione ottima.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 74

3.4.1 Forma algebrica del metodo del simplesso


Consideriamo il seguente problema di programmazione lineare:

max Z = 3x1 + 5x2


x1 ≤ 4
2x2 ≤ 12
3x1 + 2x2 ≤ 18
x1 ≥ 0, x2 ≥ 0.

Tracciamo la regione ammissibile ed identifichiamo i suoi vertici.

x2 (0, 9)

(0, 6) (2, 6) (4, 6)

(4, 3)

(0, 0) (4, 0) (6, 0) x1

Si verifica agevolmente che il vertice (2, 6) è soluzione ottima in cui il valore


della funzione obiettivo è Z = 36.
La procedura algebrica del metodo del simplesso si basa sulla risoluzione di
un sistema di equazioni lineari. Il primo passo di inizializzazione del metodo
CAPITOLO 3. PROGRAMMAZIONE LINEARE 75

consiste nel convertire i vincoli funzionali di disuguaglianza in equivalen-


ti vincoli di uguaglianza. Questa trasformazione avviene introducendo le
cosiddette variabili slack (scarto). Considerando il primo vincolo

x1 ≤ 4 ⇒ 4 − x1 ≥ 0

e ponendo
x3 = 4 − x1
risulta
x3 ≥ 0
cosicchè le variabili x1 e x3 soddisfano l’equazione

x1 + x3 = 4.

Procedendo in modo analogo per gli altri vincoli funzionali, il problema di


programmazione lineare

max Z = 3x1 + 5x2


x1 ≤ 4
2x2 ≤ 12
3x1 + 2x2 ≤ 18
x1 ≥ 0, x2 ≥ 0

diventa il seguente

max Z = 3x1 + 5x2


x1 +x3 = 4
2x2 +x4 = 12 (3.2)
3x1 + 2x2 +x5 = 18
xi ≥ 0, i = 1, 2, 3, 4, 5

che viene detto problema in forma aumentata. Le variabili slack introdotte


sono appunto x3 , x4 e x5 .
Si definisce soluzione aumentata quella soluzione per cui alle variabili deci-
sionali sono state aggiunte le variabili slack.
Si definisce soluzione di base (basica) un vertice cui sono stati aggiunti i va-
lori delle variabili slack.
Si definisce soluzione basica ammissibile (in breve BFS=Basic Feasible Solu-
tion) un vertice ammissibile cui sono state aggiunte le variabili slack.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 76

Se una variabile slack è uguale a zero, allora la soluzione corrente appartiene


alla frontiera del vincolo funzionale, mentre se il valore della variabile slack è
positivo allora la soluzione corrente si trova all’interno della regione ammis-
sibile rispetto a tale vincolo. In realtà si può osservare che se una soluzione
ha una variabile (sia decisionale che slack) uguale a zero questo vuol dire che
appartiene ad uno degli spigoli che delimitano la regione ammissibile:

x2

x4 = 0 (2, 6)
(0, 6)

x5 = 0

(4, 3)
x1 = 0

x3 = 0

(0, 0) x2 = 0 (4, 0) x1

Il numero di BFS è finito e possiamo elencarle tutte:

(0, 0, 4, 12, 18)


(0, 6, 4, 0, 6)
(2, 6, 2, 0, 0)
(4, 3, 0, 6, 0)
(4, 0, 0, 12, 6),

i valori delle variabili sono desunte dalle equazioni dei vincoli scritte in forma
aumentata (3.2). Per esempio posto x1 = x2 = 0, dall’equazione del primo
vincolo si deduce x3 = 4, dal secondo x4 = 12 e dal terzo x5 = 18. Ancora,
posto x1 = 0 e x2 = 6 sempre dall’equazione del primo vincolo si ricava
x3 = 4, x4 = 0 perchè appartiene al segmento in cui x4 è nulla, mentre x5 si
CAPITOLO 3. PROGRAMMAZIONE LINEARE 77

ricava dall’equazione del terzo vincolo

x5 = 18 − 2x2 = 6.

Per le altre BFS si procede in modo analogo.


In base alle osservazioni fatte risulta ovvio che ogni BFS ha almeno due varia-
bili uguali a zero. Il motivo di questa proprietà sta nel fatto che, nella forma
aumentata, si deve risolvere un sistema di 3 equazioni lineari in 5 incognite.
Il sistema presenta, quindi, 2 gradi di libertà, cioè a due variabili possono
essere assegnati valori arbitrari, per esempio zero.
Le due variabili poste uguali a zero sono dette variabili non di base (o non in
base) mentre le altre tre variabili sono dette variabili di base. Il numero di
variabili di base è uguale al numero di vincoli funzionali, mentre il numero di
variabili non di base è la differenza tra il numero complessivo di variabili ed il
numero di vincoli. Se le variabili di base soddisfano i vincoli di nonnegatività
allora la soluzione è una BFS.
Due BFS adiacenti condividono tutte le variabili non di base tranne una,
quindi per passare da una BFS ad una adiacente è necessario che una varia-
bile non di base lo diventi e viceversa.
Per esempio se consideriamo la BFS (0, 0, 4, 12, 18) allora (0, 6, 4, 0, 6) è adia-
cente ad essa in quanto x1 risulta non essere in base in entrambe, mentre la
BFS (2, 6, 2, 0, 0) non lo è in quanto non hanno in comune alcuna variabile
non in base.
Cerchiamo ora di descrivere matematicamente i passi delle singole iterazioni
previste dal metodo del simplesso. Il primo passo è quello di riscrivere le
equazioni del modello, scrivendo anche la funzione obiettivo come se fosse
un’ulteriore equazione:

(0) Z− 3x1 − 5x2 = 0


(1) x1 +x3 = 4
(2) 2x2 +x4 = 12
(3) 3x1 + 2x2 +x5 = 18.

Si parte da una soluzione base e si usa l’equazione (0) per calcolare il valore
della funzione obiettivo. Anche Z viene considerata come variabile sempre
in base.
Scegliere l’origine come vertice ammissibile significa porre x1 = x2 = 0 cioè
si considera come soluzione basica ammissibile (0, 0, 4, 12, 18). Appare chiaro
che inizialmente le variabili in base sono le variabili slack, i cui valori vengono
CAPITOLO 3. PROGRAMMAZIONE LINEARE 78

calcolati sfruttando le equazioni (1), (2) e (3), in particolare


x3 = 4, x4 = 12, x5 = 18,
mentre la funzione obiettivo calcolata vale 0.
Il problema, scritto attraverso le equazioni (0)-(3), ha le seguenti proprietà:
1) Nella funzione obiettivo sono presenti solo variabili non in base (ad ecce-
zione di Z);
2) Ogni variabile in base è presente solo in un’equazione con coefficiente
uguale a 1.
Un problema scritto in tale forma viene detto in forma canonica.
Il vantaggio offerto dalla prima proprietà è che, essendo nullo il va-
lore di tutte le variabili presenti nella funzione obiettivo, il valore
assunto da questa nella BFS corrente coincide con il termine noto
della funzione stessa.
La seconda proprietà consente di ottenere immediatamente il va-
lore della variabile in base presente nell’equazione che è uguale al
termine noto (poichè tutte le altre variabili presenti nell’equazione
hanno valore zero).
In un problema in forma canonica è possibile associare ad ogni equazione una
(ed una sola) variabile di base:
(0) Z− 3x1 − 5x2 = 0 Variabile di base Z
(1) x1 +x3 = 4 Variabile di base x3
(2) 2x2 +x4 = 12 Variabile di base x4
(3) 3x1 + 2x2 +x5 = 18 Variabile di base x5 .
Trasformare, ad ogni passo, il problema in forma canonica consente, una vol-
ta determinata la nuova BFS, di aggiornare il valore delle variabili in base e
della funzione obiettivo.
Poichè le variabili slack non compaiono nell’espressione di Z, i coefficienti
delle variabili non di base x1 , x2 indicano il tasso di incremento della funzio-
ne obiettivo prodotto da un eventuale aumento del valore di tali variabili.
Poichè i tassi di miglioramento, cioè i coefficienti di x1 e x2 , sono positivi si
può concludere che (0, 0, 4, 12, 18) non è soluzione ottima.
Passo 1 della singola iterazione: Stabilire la direzione dello sposta-
mento.
Incrementare il valore di una variabile non di base rispetto al valore zero
corrente (pur adattando i valori in modo tale da soddisfare i vincoli) corri-
sponde a muoversi lungo uno spigolo che inizia dal vertice ammissibile. La
CAPITOLO 3. PROGRAMMAZIONE LINEARE 79

scelta della variabile non di base viene fatta osservando l’espressione della
funzione obiettivo:
Z = 3x1 + 5x2 .
Aumentare x1 significa che il tasso di miglioramento della funzione obiettivo
è 3, mentre per x2 è 5. Appare chiaro che conviene scegliere x2 come variabile
entrante in base.
Passo 2 della singola iterazione: Criterio di arresto.
Bisogna determinare il valore da assegnare alla variabile entrante senza che
la nuova soluzione basica esca dalla regione di ammissibilità. Il valore della
variabile non di base x1 resta zero.

(1) x1 +x3 = 4 x3 = 4
(2) 2x2 +x4 = 12 x4 = 12 − 2x2
(3) 3x1 +2x2 +x5 = 18 x5 = 18 − 2x2 .

La nonnegatività delle variabili impone dei vincoli sulle relazioni appena


scritte:
x3 = 4 ≥ 0 Nessun limite su x2

x4 = 12 − 2x2 ≥ 0 x2 ≤ 12/2 = 6

x5 = 18 − 2x2 ≥ 0 x2 ≤ 18/2 = 9.
Quindi il valore di x2 può essere incrementato fino a 6, valore che rende la
variabile attualmente in base x4 = 0. Oltre tale valore x4 assume valore ne-
gativo violando l’ammissibilità della soluzione. Questi calcoli costituiscono
quello che è noto come test del minimo rapporto. Obiettivo di tale test è
determinare quale variabile di base assume per prima il valore zero all’au-
mentare del valore della variabile entrante. Si possono escludere da tale test
tutte quelle variabili associate ad equazioni in cui il coefficiente della varia-
bile entrante è zero oppure negativo. Quindi per ogni equazione in cui il
coefficiente della variabile entrante è strettamente positivo, il test calcola il
rapporto tra il termine noto ed il coefficiente della variabile entrante. La va-
riabile di base nell’equazione con il minimo rapporto è quella che raggiunge
per prima il valore 0 e quindi rappresenta, di fatto, la variabile uscente dalla
base. Nell’esempio fatto entra x2 ed esce x4 .
Passo 3 della singola iterazione: Ottenere la nuova BFS.
La situazione determinata dal passo 2 del metodo del simplesso è schematiz-
zata nella seguente tabella:
CAPITOLO 3. PROGRAMMAZIONE LINEARE 80

BFS iniziale Nuova BFS


Variabili di base x3 = 4, x4 = 12, x5 = 18 x2 = 6, x3 =?, x5 =?
Variabili non di base x1 = 0, x2 = 0 x1 = 0, x4 = 0

Il sistema
(0) Z −3x1 −5x2 =0
(1) x1 +x3 =4
(2) 2x2 +x4 = 12
(3) 3x1 +2x2 +x5 = 18

deve essere scritto ora in forma canonica, cioè ogni variabile in base deve
comparire solo in un’equazione e con coefficiente uguale a 1 e nell’equazione
(0) i coefficienti delle variabili in base devono essere uguali a zero. La trasfor-
mazione può avvenire effettuando delle opportune combinazioni lineari tra le
equazioni del problema attraverso il cosiddetto metodo di Gauss-Jordan.
Innanzitutto dividiamo l’equazione (2) per 2 ottenendo la nuova seconda
equazione:
1
(2′ ) x2 + x4 = 6.
2
Per eliminare il coefficiente di x2 dall’equazione (3) sommiamo all’equazione
(3) l’equazione (2′ ) moltiplicata per -2:

(3) 3x1 +2x2 +x5 = 18 +

−2 × (2′ ) −2x2 −x4 = −12

(3′ ) 3x1 −x4 +x5 = 6.

L’equazione (1) resta invariata perchè il coefficiente di x2 è già uguale a


zero. Ora dobbiamo eliminare il coefficiente della variabile entrante in base
dall’equazione (0), sommando all’equazione (0) l’equazione (2′ ) moltiplicata
per 5 :
(0) Z −3x1 −5x2 = 0 +

5
5 × (2′ ) 5x2 + x4 = 30
2
5
(0′ ) Z −3x1 + x4 = 30.
2
CAPITOLO 3. PROGRAMMAZIONE LINEARE 81

Il sistema è diventato quindi


5
(0) Z −3x1 + x4 = 30 Variabile di base Z
2

(1) x1 +x3 = 4 Variabile di base x3

1
(2) x2 + x4 = 6 Variabile di base x2
2

(3) 3x1 −x4 +x5 = 6 Variabile di base x5 .

Dalle equazioni (1) e (2) rispettivamente si ricava che x5 = 6 e x3 = 4. Quindi


la nuova BFS è (0, 6, 4, 0, 6). Si osservi che ogni variabile di base appare in
una sola equazione con coefficiente 1.
Test di ottimalità:
Effettuando il test di ottimalità sulla nuova funzione obiettivo
5
Z = 3x1 − x4 + 30
2
si deduce che è necessaria una seconda iterazione poichè il coefficiente di x1
è positivo, infatti la variabile entrante deve essere proprio x1 . Per calcolare
la variabile uscente dobbiamo effettuare il test del minimo rapporto tra le
equazioni (1), (2) e (3).

(1) x3 = 4 − x1 ≥ 0 x1 ≤ 4

(2) x2 = 6 ≥ 0 Nessun limite su x2

(3) x5 = 6 − 3x1 ≥ 0 x1 ≤ 6/3 = 2.

Da tale test risulta che la variabile uscente è x5 .


BFS precedente Nuova BFS
Variabili di base x2 = 6, x3 = 4, x5 = 6 x1 = 2, x2 = 6, x3 =?
Variabili non di base x1 = 0, x4 = 0 x4 = 0, x5 = 0
CAPITOLO 3. PROGRAMMAZIONE LINEARE 82

Il sistema
5
(0) Z −3x1 + x4 = 30
2

(1) x1 +x3 = 4

1
(2) x2 + x4 = 6
2

(3) 3x1 −x4 +x5 = 6

deve essere trasformato in modo tale che i coefficienti della colonna relativa
alla variabile entrante x1 siano uguali a quelli della colonna relativa alla va-
riabile uscente x5 , quindi bisogna rendere 1 il coefficiente di x1 nell’equazione
(3) ed eliminare quelli di x1 dalle equazioni (0) e (1). L’equazione (3) viene
divisa per 3 diventando:
1 1
(3) x1 − x4 + x5 = 2.
3 3
Il sistema è diventato
5
(0) Z −3x1 + x4 = 30
2

(1) x1 +x3 = 4

1
(2) x2 + x4 = 6
2
1 1
(3) x1 − x4 + x5 = 2.
3 3
Sommiamo all’equazione (3) la (1) moltiplicata per −1:

(1) x1 +x3 = 4 +

1 1
−1 × (3) x1 x4 − x5 = −2
3 3
1 1
(1′ ) x3 + x4 − x5 = 2
3 3
CAPITOLO 3. PROGRAMMAZIONE LINEARE 83

e sommiamo all’equazione (0) la (3) moltiplicata per 3:


5
(0) Z −3x1 + x4 = 30 +
2

3 × (3) 3x1 −x4 +x5 = 6

3
(0′ ) Z + x4 +x5 = 36.
2
Il sistema è diventato
3
(0) Z + x4 +x5 = 36 Variabile di base Z
2
1 1
(1) x3 + x4 − x5 = 2 Variabile di base x3
3 3
1
(2) x2 + x4 = 6 Variabile di base x2
2
1 1
(3) x1 − x4 + x5 = 2 Variabile di base x1 .
3 3
Dalla (1) segue che x3 = 2 quindi la nuova BFS è (2, 6, 2, 0, 0) da cui si
ottiene il valore della funzione obiettivo Z = 36 che è ottimo perchè tutti i
coefficienti dell’equazione (0)
3
Z = − x4 − x5 + 36
2
sono negativi quindi non è possibile trovare nessuna direzione di ulteriore
crescita.

Esercizio 3.4.1 Calcolare le coordinate in forma aumentata di tutti i vertici


ammissibili della regione delimitata dai seguenti vincoli:

x1 ≤ 3
x1 +x2 ≤ 6
−x1 +x2 ≤ 2
x1 , x2 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 84

3.4.2 Forma tabellare del metodo del simplesso


La forma tabellare del metodo del simplesso consente di organizzare i dati
del problema in modo sintetico e di avere in forma compatta tutte le infor-
mazioni che consentono di effettuare le iterazioni previste dal metodo. Nella
tabella, detta anche tableau, compaiono, riga per riga, i coefficienti di tutte
le equazioni del problema, compresa l’equazione (0) (che sarebbe la funzio-
ne obiettivo). In ogni colonna sono riportati tutti i coefficienti relativi ad
una stessa variabile ed i termini noti bi . Nella prima colonna è specificata
la variabile in base presente nell’equazione riportata nella riga, ovviamente
per l’equazione (0) si suppone che la variabile in base sia Z. Consideriamo
il seguente problema:
max Z = x1 + 2x2 + x3
x1 +x2 +3x3 ≤ 6
2x1 +3x2 +x3 ≤ 15
x1 , x2 , x3 ≥ 0.
Introduciamo le variabili slack x4 e x5 , cosicchè, in forma aumentata, il
sistema algebrico diventa:
(0) Z −x1 −2x2 −x3 = 0
(1) x1 +x2 +3x3 +x4 = 6
(2) 2x1 +3x2 +x3 +x5 = 15,
con vincolo di nonnegatività su tutte le variabili. Il tableau iniziale del
metodo del simplesso è il seguente

Tableau iniziale
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 −2 −1 0 0 0
x4 (1) 0 1 1 3 1 0 6
x5 (2) 0 2 3 1 0 1 15

Identifichiamo in x2 la variabile entrante in base, in quanto il coefficiente


negativo dell’equazione (0) più grande in modulo è proprio quello di x2 .
Evidenziamo la colonna relativa alla variabile entrante in base, che viene
detta colonna pivot:
CAPITOLO 3. PROGRAMMAZIONE LINEARE 85

Tableau iniziale
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 −2 −1 0 0 0
x4 (1) 0 1 1 3 1 0 6
x5 (2) 0 2 3 1 0 1 15

A questo punto applichiamo il criterio del minimo rapporto per decidere


quale variabile deve uscire dalla base attraverso i seguenti passi:
1. si individuano nella colonna pivot tutti i coefficienti strettamente positivi;
2. si divide il termine noto per tale coefficiente;
3. si identifica il più piccolo tra tali rapporti;
4. la variabile di base corrispondente a tale riga (detta riga pivot) è quella
uscente.

Tableau iniziale
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 −2 −1 0 0 0
x4 (1) 0 1 1 3 1 0 6 → 6/1 = 6
x5 (2) 0 2 3 1 0 1 15 → 15/3 = 5

Il criterio del minimo rapporto stabilisce che dalla base deve uscire la variabile
x5 . Evidenziamo tutti i coefficienti dell’equazione relativa alla riga di x5 :

Tableau iniziale
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 −2 −1 0 0 0
x4 (1) 0 1 1 3 1 0 6
x5 (2) 0 2 3 1 0 1 15
CAPITOLO 3. PROGRAMMAZIONE LINEARE 86

La variabile entrante x2 prende il posto, nella prima colonna, della variabile


uscente x5 .
Ora la colonna relativa alla variabile entrante in base deve essere resa uguale
a quella della variabile uscente. Per rendere unitario l’elemento pivot (cioè
3) dobbiamo dividere l’equazione (2) proprio per questo numero ottenendo i
nuovi coefficienti che andranno inseriti nel nuovo tableau:
x1 x2 x3 x4 x5 bi

2 1 1
(2) 3
1 3
0 3
5

Nelle operazioni sul tableau non vengono considerati i coefficienti della co-
lonna relativa a Z perchè rimangono inalterati in tutte le iterazioni.
Adesso si devono azzerare, con opportune combinazioni lineari tra le equa-
zioni, i coefficienti di x2 nelle equazioni (0) e (1).
Per quello che riguarda il coefficiente 1 nell’equazione (1) si può sottrarre
da questa l’equazione (2) che adesso presenta lo stesso coefficiente, ovvero
sommare alla stessa l’equazione (2) moltiplicata per −1:

x1 x2 x3 x4 x5 bi

(1) 1 1 3 1 0 6 +

−1 × (2) − 23 −1 − 13 0 − 13 −5 =

1 8
(1′ ) 3
0 3
1 − 13 1

Per quello che riguarda il coefficiente -2 nell’equazione (0) si può sommare a


questa l’equazione (2) moltiplicata per 2:

x1 x2 x3 x4 x5 bi

(0) −1 −2 −1 0 0 0 +

4 2 2
2 × (2) 3
2 3
0 3
10 =

1
(0′ ) 3
0 − 13 0 2
3
10
CAPITOLO 3. PROGRAMMAZIONE LINEARE 87

Adesso i valori possono essere riportati nel tableau relativo alla prima iterata
del metodo del simplesso.

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
1
Z (0) 1 3 0 − 13 0 2
3 10
1 8
x4 (1) 0 3 0 3 1 − 13 1
x2 2 1 1
(2) 0 3 1 3 0 3 5

Dobbiamo effettuare un’altra iterazione perchè il test di ottimalità non è


verificato in quanto nell’equazione (0) è presente un coefficiente negativo.
Variabile entrante è x3 mentre variabile uscente è x4 (applicando il test del
minimo rapporto).

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
1
Z (0) 1 3 0 − 13 0 2
3 10
1 8
x4 (1) 0 3 0 3 1 − 13 1
x2 2 1 1
(2) 0 3 1 3 0 3 5

Dopo la seconda iterazione abbiamo il seguente tableau, che è stato ottenuto


prima moltiplicando l’equazione (1) per 3/8:

x1 x2 x3 x4 x5 bi

1 3
(1) 8
0 1 8
− 18 3
8
CAPITOLO 3. PROGRAMMAZIONE LINEARE 88

poi sommando all’equazione (2) la (1) moltiplicata per −1/3:

x1 x2 x3 x4 x5 bi

2 1 1
(2) 3
1 3
0 3
5 +

1
−1/3 × (1) − 24 0 − 31 − 18 1
24
− 18 =

5
(2′ ) 8
1 0 − 81 3
8
39
8

In seguito, per azzerare il coefficiente −1/3 dall’equazione (0) sommiamo a


quest’ultima l’equazione (1) moltiplicata per 1/3 :

x1 x2 x3 x4 x5 bi

1
(0) 3
0 − 13 0 2
3
10 +

1 1 1 1 1
1/3 × (1) 24
0 3 8
− 24 8
=

3 1 5 81
(0′ ) 8
0 0 8 8 8

Il tableau del metodo è diventato pertanto

Iterazione 2
Var. x1 x2 x3 x4 x5
base Eq. Z bi
3 1 5 81
Z (0) 1 8 0 0 8 8 8
1 3
x3 (1) 0 8 0 1 8
− 18 3
8
5
x2 (2) 0 8 1 0 − 18 3
8
39
8

Siamo arrivati alla soluzione ottima (0, 39/8, 3/8, 0, 0) in cui la funzione obiet-
tivo vale Z = 81/8.
Terminiamo questo paragrafo analizzando alcune situazioni che si possono
verificare applicando il metodo del simplesso ad un problema di programma-
zione lineare.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 89

Scelta della variabile entrante e di quella uscente


Nell’applicazione del metodo del simplesso potrebbero verificarsi due situa-
zioni:

1. Nell’equazione (0) due, o più, variabili non di base hanno lo stesso


coefficiente negativo più piccolo e pertanto possono entrambe entrare in
base presentando lo stesso tasso di incremento per la funzione obiettivo;

2. Due, o più quozienti, soddisfano il test del minimo rapporto ovvero,


incrementando il valore della variabile entrante in base, ci sono più
variabili di base che raggiungeranno simultaneamente il valore zero.

Ci chiediamo come bisogna comportarsi in questo caso e soprattutto se esiste


un modo ottimale per scegliere la variabile.
Il secondo caso presenta un aspetto molto delicato in quanto delle variabili
che soddisfano il test solo una uscirà dalla base mentre l’altra, o le altre,
resteranno in base pur assumendo valore zero nell’iterazione successiva.
In questo caso tali variabili, cosı̀ come la relativa BFS, sono dette degeneri.
In presenza di BFS degeneri il cambiamento di base può non migliorare il
valore della funzione obiettivo poichè il minimo rapporto può essere ugua-
le a zero anche nelle iterazioni successive pertanto possono entrare in base
variabili con valore uguale a zero. Una conseguenza di tale situazione è che
potrebbe percorrersi ciclicamente (e cioè all’infinito) una sequenza di basi
degeneri associate allo stesso vertice. Questi casi, che in verità non derivano
da problemi reali, possono essere evitati applicando alcune regole cosiddette
anticiclo che cambiano il criterio per la scelta delle variabili entranti o uscenti
dalla base. La più nota è senz’altro la Regola di Bland che impone di sce-
gliere, tra le variabili candidate ad entrare o ad uscire, sempre quella che ha
indice minore. È possibile dimostrare che, applicando la regola di Bland, il
metodo del simplesso converge sempre in un numero finito di iterazioni.
Anche per quello che riguarda la scelta della variabile entrante in base non c’è
alcun modo di sapere, a priori, la scelta migliore, pertanto di solito conviene
applicare la regola di Bland anche in questo caso.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 90

Esempio 3.4.1 Risolvere il seguente problema in forma standard:

max Z = 5x1 + 6x2 + 4x3


−x1 +3x2 +4x3 ≤ 18
2x1 +2x2 +x3 ≤ 4
3x1 +2x3 ≤ 8
x1 , x2 , x3 ≥ 0.

Scriviamo innanzitutto il problema in forma aumentata introducendo tre


variabili slack:
max Z = 5x1 + 6x2 + 4x3
−x1 +3x2 +4x3 +x4 = 18
2x1 +2x2 +x3 +x5 = 4
3x1 +2x3 +x6 = 8
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.

Le equazioni da risolvere sono:

(0) Z −5x1 −6x2 −4x3 = 0


(1) −x1 +3x2 +4x3 +x4 = 18
(2) 2x1 +2x2 +x3 +x5 = 4
(3) 3x1 +2x3 +x6 = 8

Iterazione 0
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 −5 −6 −4 0 0 0 0
x4 (1) 0 −1 3 4 1 0 0 18
x5 (2) 0 2 2 1 0 1 0 4
x6 (3) 0 3 0 2 0 0 1 8
CAPITOLO 3. PROGRAMMAZIONE LINEARE 91

Iterazione 1
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 1 0 −1 0 3 0 12
5
x4 (1) 0 −4 0 2 1 − 32 0 12
x2 1 1
(2) 0 1 1 2 0 2 0 2
x6 (3) 0 3 0 2 0 0 1 8

Iterazione 2
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 3 2 0 0 4 0 16
x4 (1) 0 −9 −5 0 1 −4 0 2
x3 (2) 0 2 2 1 0 1 0 4
x6 (3) 0 −1 −4 0 0 −2 1 0

Soluzione è (0, 0, 4, 2, 0, 0) con valore della funzione obiettivo Z = 16. Os-


serviamo che la variabile in base x6 assume valore nullo, pertanto la BFS
trovata è degenere.

Nessuna variabile di base uscente-Z illimitata


Questa situazione si verifica quando nel tableau del metodo del simplesso ad
un coefficiente negativo dell’equazione (0) corrispondente ad una variabile
non di base è associata una colonna di coefficienti tutti nulli o negativi.
Questo vuol dire che la variabile entrante può essere incrementata all’infinito
senza uscire dalla regione di ammissibilità e lasciando che anche Z può essere
aumentata all’infinito, cioè Z = +∞. Una situazione del genere si veri-
fica quando è stato commesso qualche errore nella definizione del modello
utilizzato per descrivere il problema reale.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 92

Risolviamo quindi il seguente problema:

max Z = 6x1 + 4x2 + x3 + x4


2x1 +x2 −3x3 +4x4 ≤ 10
3x1 +x2 +5x4 ≤ 6
x1 , x2 , x3 , x4 ≥ 0.

Scriviamo innanzitutto il problema in forma aumentata

max Z = 6x1 + 4x2 + x3 + x4


2x1 +x2 −3x3 +4x4 +x5 = 10
3x1 +5x2 +5x4 +x6 = 6
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.

Le equazioni da risolvere sono:

(0) Z −6x1 −4x2 −x3 −x4 = 0


(1) 2x1 +x2 −3x3 +4x4 +x5 = 10
(2) 3x1 +x2 +5x4 +x6 = 6

Iterazione 0
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 −6 −4 −1 −1 0 0 0
x5 (1) 0 2 1 −3 4 1 0 10
x6 (2) 0 3 1 0 5 0 1 6

Iterazione 1
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 0 −2 −1 9 0 2 12
1 2
x5 (1) 0 0 3 −3 3 1 − 32 6
x1 1 5 1
(2) 0 1 3 0 3 0 3 2
CAPITOLO 3. PROGRAMMAZIONE LINEARE 93

Iterazione 2
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 6 0 −1 19 0 4 24
x5 (1) 0 −1 0 −3 −1 1 −1 4
x2 (2) 0 3 1 0 5 0 1 6

La variabile x3 può entrare in base ma non c’è alcuna variabile candidata ad


uscire. Quindi la funzione obiettivo è illimitata e risulta Z = +∞.

Il caso di soluzioni ottime multiple


Può verificarsi che un problema ammetta infinite soluzioni tutte ottime (è
il caso in cui due vertici adiacenti sono entrambi ottimi e quindi anche il
relativo spigolo che li congiunge è costituito da soluzioni ottime). Questo caso
si verifica quando il coefficiente di una variabile non di base nell’equazione (0)
è uguale a zero e nella colonna ci sono coefficienti positivi relativi a variabili
che potrebbero uscire dalla base. Volendo si potrebbe effettuare un’ulteriore
iterazione del metodo del simplesso, verificando che la funzione obiettivo non
cambia valore, e trovando un altro vertice ammissibile.
Risolvere il seguente problema di programmazione lineare in forma standard:

max Z = 4x1 + 5x2 + 3x3 + 5x4

x1 +x2 +x3 +2x4 ≤ 12


3x1 +2x2 −x3 +2x4 ≤ 6
x1 +2x3 ≤ 10

x1 , x2 , x3 , x4 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 94

Scriviamo il problema nella forma aumentata introducendo tre variabili slack:

max Z = 4x1 + 5x2 + 3x3 + 5x4

x1 +x2 +x3 +2x4 +x5 = 12


3x1 +2x2 −x3 +2x4 +x6 = 6
x1 +2x3 +x7 = 10

x1 , x2 , x3 , x4 , x5 , x6 , x7 ≥ 0.

Le equazioni da risolvere sono

(0) Z −4x1 −5x2 −3x3 −5x4 = 0


(1) x1 +x2 +x3 +2x4 +x5 = 12
(2) 3x1 +2x2 −x3 +2x4 +x6 = 6
(3) x1 +2x3 +x7 = 10.

Iterazione 0
Var. x1 x2 x3 x4 x5 x6 x7
base Eq. Z bi
Z (0) 1 −4 −5 −3 −5 0 0 0 0
x5 (1) 0 1 1 1 2 1 0 0 12
x6 (2) 0 3 2 −1 2 0 1 0 6
x7 (3) 0 1 0 2 0 0 0 1 10

Iterazione 1
Var. x1 x2 x3 x4 x5 x6 x7
base Eq. Z bi
7
Z (0) 1 2 0 − 11
2 0 0 5
2 0 15
x5 (1) 0 − 12 0 3
2 1 1 − 12 0 9
3
x2 (2) 0 2 1 − 12 1 0 1
2 0 3
x7 (3) 0 1 0 2 0 0 0 1 10
CAPITOLO 3. PROGRAMMAZIONE LINEARE 95

Iterazione 2
Var. x1 x2 x3 x4 x5 x6 x7
base Eq. Z bi
25 5 11 85
Z (0) 1 4 0 0 0 0 2 4 2

x5 (1) 0 − 54 0 0 1 1 − 12 − 34 3
2

x2 7 1 1 11
(2) 0 4 1 0 1 0 2 4 2

x3 1 1
(3) 0 2 0 1 0 0 0 2 5

A questo punto osserviamo che la BFS in forma non aumentata


11
x1 = 0, x2 = , x3 = 5, x4 = 0
2
in cui la funzione obiettivo assume valore Z = 85/2, soddisfa il test di ottima-
lità e pertanto è soluzione ottima. Bisogna osservare però che la variabile x4 ,
nonostante non sia in base, ha coefficiente nullo nell’equazione (0) e che è pre-
sente invece una variabile in base, ovvero x5 , che soddisfa il test del minimo
rapporto e che potrebbe uscire dalla base. Eseguiamo pertanto un’ulteriore
iterazione facendo entrare x4 ed uscire x5 :

Iterazione 2
Var. x1 x2 x3 x4 x5 x6 x7
base Eq. Z bi
25 5 11 85
Z (0) 1 4 0 0 0 0 2 4 2

x5 (1) 0 − 54 0 0 1 1 − 12 − 34 3
2

x2 7 1 1 11
(2) 0 4 1 0 1 0 2 4 2

x3 1 1
(3) 0 2 0 1 0 0 0 2 5
CAPITOLO 3. PROGRAMMAZIONE LINEARE 96

Iterazione 3
Var. x1 x2 x3 x4 x5 x6 x7
base Eq. Z bi
25 5 11 85
Z (0) 1 4 0 0 0 0 2 4 2

x4 (1) 0 − 54 0 0 1 1 − 12 − 34 3
2

x2 (2) 0 3 1 0 0 −1 1 1 4
x3 1 1
(3) 0 2 0 1 0 0 0 2 5

Anche la BFS
3
x1 = 0, x2 = 4, x3 = 5, x4 =
2
in cui la funzione obiettivo assume valore Z = 85/2, soddisfa il test di otti-
malità, pertanto estistendo due vertici ottimi significa che tutti i punti che
appartengono allo spigolo che li congiunge sono soluzione ottima.

3.5 Problemi di programmazione lineare in


forma non standard
Ricordiamo che un problema di programmazione lineare in forma standard
ha le seguenti proprietà:

1. funzione obiettivo da massimizzare;

2. vincoli di tipo ≤ e termini noti positivi;

3. nonnegatività delle variabili decisionali.

Esamineremo nei paragrafi successivi come si risolvono i problemi in cui una


(o più) delle proprietà elencate viene meno. In alcuni casi è possibile ricon-
durre il problema alla forma standard, utilizzando degli opportuni cambi di
variabile, in altri invece ciò non è possibile.
Infatti in alcuni problemi in forma non standard l’origine non è un verti-
ce ammissibile e quindi manca una soluzione basica ammissibile iniziale per
poter innescare il metodo del simplesso. Inoltre nei problemi con vincoli di
uguaglianza non è possibile introdurre le variabili slack, e quindi sceglierle
CAPITOLO 3. PROGRAMMAZIONE LINEARE 97

come variabili di base. In questi casi l’approccio utilizzato è l’introduzione


delle cosiddette variabili artificiali, che definiscono un vero e proprio pro-
blema artificiale che viene risolto per ottenere, se esiste, la soluzione basica
ammissibile.
Analizziamo ora i diversi modi di affrontare il problema in base alle possibili
difformità del problema rispetto alla forma standard.

Termini noti negativi


Se uno dei termini noti è negativo allora l’intero vincolo può essere moltipli-
cato per −1, quindi
x1 − x2 ≤ −1
diventa
−x1 + x2 ≥ 1.
Considereremo come si tratta il vincolo funzionale nella forma ≥ nei succes-
sivi paragrafi, adesso analizziamo il caso di un vincolo di uguaglianza. D’ora
in poi si continuerà a supporre che il termine noto di un vincolo sia sempre
positivo (oppure nullo) e a considerare i vincoli in modo tale che rispettino
sempre questa proprietà.

Minimizzazione della funzione obiettivo


Quando il problema da risolvere è la minimizzazione della funzione obiettivo
può essere trasformato in forma standard facendolo diventare di massimo.
Infatti il punto in cui viene assunto il valore minimo di una funzione coincide
con quello in cui viene raggiunto il massimo dalla medesima funzione ma con
il segno cambiato. Quindi
n
X n
X
min Z = cj xj ⇔ max −Z = (−cj )xj
j=1 j=1

e si può applicare il metodo del simplesso a tale funzione obiettivo. Si deve


poi considerare che, una volta trovato il valore massimo di tale funzione
obiettivo, per ottenere il valore del minimo voluto si dovrà cambiare il suo
segno.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 98


−Z = −f (x)
Z = f (x) •

Variabili senza un esplicito limite inferiore


Se il vincolo di nonnegatività fosse sostituito dal seguente
xj ≤ 0
allora basterebbe porre
x′j = −xj ≥ 0,
effettuare il cambio di variabile xj = −x′j nella funzione obiettivo e nei vincoli,
ed applicare il metodo del simplesso.
Se la variabile xj non ha un esplicito limite inferiore, ovvero il vincolo
xj ∈ R
sostituisce quello di nonnegatività xj ≥ 0 , allora è necessario sostituire ad
xj la differenza tra due nuove variabili nonnegative, ponendo
xj = x+ −
j − xj , x+ −
j , xj ≥ 0.

Ogni BFS per la nuova forma del modello ha la proprietà che x+ j = 0 oppure
x−j = 0 (oppure possono essere entrambe nulle). Nella soluzione ottenuta con
il metodo del simplesso si ha:
 
 xj se xj ≥ 0;  |xj | se xj ≤ 0;
+ −
xj = xj =
0 altrimenti, 0 altrimenti.
 
CAPITOLO 3. PROGRAMMAZIONE LINEARE 99

Per esempio nel problema di programmazione lineare

max Z = 3x1 + x2 − 4x3


2x1 +x2 −x3 ≤ 4
2x1 +2x2 +3x3 ≤ 9
x1 , x2 ≥ 0, x3 ∈ R
poniamo
x3 = x+ −
3 − x3 , x+ −
3 , x3 ≥ 0

e scriviamo il problema in forma aumentata introducendo due variabili slack:

max Z = 3x1 + x2 − 4x+ −


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

Le equazioni da risolvere sono:

(0) Z −3x1 −x2 +4x+3 −4x−3 = 0


+
(1) 2x1 +x2 −x3 +x−
3 +x4 = 4
+ −
(2) 2x1 +2x2 +3x3 −3x3 +x5 = 9

Iterazione 0
Var.
base Eq. Z x1 x2 x+
3 x−
3
x4 x5 bi
Z (0) 1 −3 −1 4 −4 0 0 0
x4 (1) 0 2 1 −1 1 1 0 4
x5 (2) 0 2 2 3 −3 0 1 9

Iterazione 1
Var.
base Eq. Z x1 x2 x+
3 x−
3
x4 x5 bi
Z (0) 1 5 3 0 0 4 0 16
x−
3 (1) 0 2 1 −1 1 1 0 4
x5 (2) 0 8 5 0 0 3 1 21
CAPITOLO 3. PROGRAMMAZIONE LINEARE 100

La soluzione è x1 = x2 = x+ −
3 = 0, x3 = 4 da cui segue

x3 = −4

e quindi la BFS è (0, 0, −4) con valore della funzione obiettivo Z = 16.
Questa tecnica ha lo svantaggio di incrementare il numero di variabili decisio-
nali rispetto al problema originale. Infatti se nessuna variabile avesse limite
inferiore il loro numero raddoppierebbe. Questo approccio può essere modi-
ficato in modo tale da aggiungere solo una variabile decisionale al modello.
Infatti ad ogni variabile non limitata inferiormente si può sostituire

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

in cui x′′ rappresenta sempre la stessa variabile. L’interpretazione di x′′ in


questo caso è che −x′′ rappresenta il valore attuale della più grande (in ter-
mini assoluti) variabile originale negativa, cosicchè x′j rappresenta di quanto
xj eccede tale valore.

Variabili definite in un intervallo


Supponiamo che, per una variabile xj , sia definito il seguente vincolo

lj ≤ xj ≤ Lj , lj < Lj .

Sottraendo il valore lj dalle disequazioni si ottiene

0 ≤ xj − lj ≤ Lj − lj .

Introducendo una nuova variabile

x′j = xj − lj ,

il vincolo
x′j ≤ Lj − lj
viene considerato come un vincolo funzionale mentre il limite inferiore

x′j = xj − lj ≥ 0,

diviene il conseuto vincolo di nonnegatività. Pertanto si effettua il seguente


cambio di variabile
xj = x′j + lj
CAPITOLO 3. PROGRAMMAZIONE LINEARE 101

in ogni equazione del problema. Per esempio, nel seguente problema:

max Z = 3x1 + 5x2


x1 ≤ 4
2x2 ≤ 12
3x1 + 2x2 ≤ 18
x1 ≥ −10, x2 ≥ 1.

Definiamo le variabili

x′1 = x1 + 10, x′2 = x2 − 1, x′1 , x′2 ≥ 0,

cosicchè
x1 = x′1 − 10, x2 = x′2 + 1
ed il problema diventa

max Z = 3(x′1 − 10) + 5(x′2 + 1)


x′1 − 10 ≤4
2(x2 + 1)

≤ 12
3(x1 − 10) + 2(x2 + 1) ≤ 18
′ ′

x′1 , x′2 ≥ 0

e quindi
max Z = 3x′1 + 5x′2 − 25
x′1 ≤ 14
2x′2 ≤ 10
3x′1 + 2x′2 ≤ 46
x′1 , x′2 ≥ 0.

3.6 Il Metodo del Simplesso a due fasi


In questo paragrafo saranno analizzati gli ultimi due casi di problemi in forma
non standard, ovvero il caso in cui il vincolo sia di uguaglianza oppure il caso
di vincolo tipo ≥. Per ora consideriamo il primo caso. Le difficoltà nella
risoluzione del problema sono

1. l’origine non è (nella gran parte dei casi) un vertice ammissibile quindi il
metodo del simplesso non è applicabile in quanto manca la BFS iniziale
da cui iniziare l’esplorazione dei vertici ammissibili;
CAPITOLO 3. PROGRAMMAZIONE LINEARE 102

2. non è possibile introdurre le variabili slack da usare come variabili in


base in quanto il vincolo si presenta già come un’equazione.
Tali problemi vengono risolti utilizzando una versione modificata del metodo
del simplesso, detta metodo del simplesso a due fasi. Il nome deriva dal
fatto che, in una prima fase, viene determinata la BFS iniziale, se esiste,
mentre nella seconda viene risolto il problema partendo proprio da tale BFS.
Sostanzialmente nelle due fasi vengono definiti (e risolti) due diversi problemi.
Iniziamo considerando il caso di un vincolo di uguaglianza. Sia assegnato il
seguente problema:
max Z = 5x1 + x2 + 6x3
x1 +5x2 −x3 ≤ 4
x1 +2x2 +3x3 = 6
x1 , x2 , x3 ≥ 0.
Scriviamo quindi il problema nella forma aumentata introducendo una va-
riabile slack:
max Z = 5x1 + x2 + 6x3
x1 +5x2 −x3 +x4 = 4
(3.3)
x1 +2x2 +3x3 = 6
x1 , x2 , x3 , x4 ≥ 0.
Appare ovvio che nel sistema manca una variabile in base, pertanto è neces-
sario introdurne una modificando artificialmente il problema:

max Z = 5x1 + x2 + 6x3


x1 +5x2 −x3 +x4 = 4
(3.4)
x1 +2x2 +3x3 +x5 = 6
x1 , x2 , x3 , x4 , x5 ≥ 0.

La variabile x5 , detta appunto variabile artificiale, viene indicata in modo


diverso in quanto deve assumere valore zero in qualsiasi BFS ammissibile del
problema (3.3). Il problema definito nella prima fase del metodo deve essere
tale che la sua soluzione abbia tutte le variabili artificiali (in questo caso x5 )
uguali a zero, quindi:

I Fase
max Z = −x5
x1 +5x2 −x3 +x4 = 4
x1 +2x2 +3x3 +x5 = 6
x1 , x2 , x3 , x4 , x5 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 103

In generale se il problema è di massimo si sceglie come funzione obiettivo


P
Z=− variabili artificiali
ovvero tale che Z ≤ 0 ed assuma valore massimo (nullo) proprio quando le
variabili artificiali introdotte siano tutte uguali a zero.
Nella seconda fase, avendo già una BFS ammissibile, calcolata nella prima
fase, non è necessario l’uso di alcuna variabile artificiale, pertanto possiamo
applicare il metodo del simplesso alla funzione obiettivo del problema di
partenza:
II Fase
max Z = 5x1 + x2 + 6x3
x1 +5x2 −x3 +x4 = 4
x1 +2x2 +3x3 = 6
x1 , x2 , x3 , x4 ≥ 0.
Applichiamo ora il metodo del simplesso al problema definito nella I fase,
considerando che le variabili di base sono x4 e x5 , e che la BFS iniziale è
(0, 0, 0, 4, 6). Le equazioni della I fase sono
(0) Z +x5 = 0
(1) x1 +5x2 −x3 +x4 = 4
(2) x1 +2x2 +3x3 +x5 = 6.
Poniamo il problema in forma canonica eliminando il coefficiente della varia-
bile di base x5 dalla funzione obiettivo. Per questo sottraiamo dall’equazione
(0) l’equazione (2), ottenendo le nuove equazioni:
(0) Z −x1 −2x2 −3x3 = −6
(1) x1 +5x2 −x3 +x4 = 4
(2) x1 +2x2 +3x3 +x5 = 6.
Scriviamo il tableau della iterazioni del metodo del simplesso applicato alla
I fase:
Iterazione 0
Var. x1 x2 x3 x4
base Eq. Z x5 bi
Z (0) 1 −1 −2 −3 0 0 −6
x4 (1) 0 1 5 −1 1 0 4
x5 (2) 0 1 2 3 0 1 6
CAPITOLO 3. PROGRAMMAZIONE LINEARE 104

Iterazione 1
Var. x1 x2 x3 x4
base Eq. Z x5 bi
Z (0) 1 0 0 0 0 1 0
x4 4 17 1
(1) 0 3 3 0 1 3 6
x3 1 2 1
(2) 0 3 3 1 0 3 2

Abbiamo ottenuto la soluzione ottima della I fase in cui il valore della funzio-
ne obiettivo è 0 (come era atteso), la BFS (0, 0, 2) è quella iniziale per la II
fase. Terminata la prima fase del metodo del simplesso, prima di procedere
alla successiva, si devono effettuare alcune operazioni sul tableau che è stato
ottenuto. Innanzitutto devono essere eliminate le colonne relative alle varia-
bili artificiali, inoltre deve essere sostituita la funzione obiettivo ed infine il
problema deve essere posto in forma canonica (cioè devono essere azzerati
i coefficienti della funzione obiettivo relativi alle variabili in base), quindi
eliminiamo la colonna relativa alla variabile x5 e sostituiamo l’equazione (0):
(0) Z −5x1 −x2 −6x3 = 0

Tableau finale I Fase con funzione obiettivo II Fase


Var. x1 x2 x3 x4
base Eq. Z bi
Z (0) 1 −5 −1 −6 0 0
x4 4 17
(1) 0 3 3 0 1 6
x3 1 2
(2) 0 3 3 1 0 2

A questo punto si elimina il coefficiente della variabile di base x3 dalla


funzione obiettivo e si ottiene il tableau iniziale della II fase:

Iterazione 0
Var. x1 x2 x3 x4
base Eq. Z bi
Z (0) 1 −3 3 0 0 12
x4 4 17
(1) 0 3 3 0 1 6
x3 1 2
(2) 0 3 3 1 0 2
CAPITOLO 3. PROGRAMMAZIONE LINEARE 105

Iterazione 1
Var. x1 x2 x3 x4
base Eq. Z bi
63 9 51
Z (0) 1 0 4 0 4 2

x1 17 3 9
(1) 0 1 4 0 4 2

x3 (2) 0 0 − 34 1 − 14 1
2

Abbiamo ottenuto la soluzione ottima del problema di massimo (9/2, 0, 1/2)


con valore della funzione obiettivo Z = 51/2.
Esempio 3.6.1 Applicare il metodo del simplesso adue fasi per risolvere il
seguente problema di programmazione lineare in forma non standard:
max Z = 4x1 + 2x2 + x3
2x1 +x2 = 4
x1 +3x2 +3x3 = 8
x1 , x2 , x3 ≥ 0.
Scriviamo quindi il problema nella forma aumentata introducendo una va-
riabile artificiale in ogni vincolo di uguaglianza:
max Z = 4x1 + 2x2 + x3
2x1 +x2 +x4 = 4
(3.5)
x1 +3x2 +3x3 +x5 = 8
x1 , x2 , x3 , x4 , x5 ≥ 0.
Scriviamo ora i problemi da risolvere nelle due fasi:
I Fase
max Z = −x4 − x5
2x1 +x2 +x4 = 4
x1 +3x2 +3x3 +x5 = 8
x1 , x2 , x3 , x4 , x5 ≥ 0.

II Fase
max Z = 4x1 + 2x2 + x3
2x1 +x2 = 4
x1 +3x2 +3x3 = 8
x1 , x2 , x3 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 106

Applichiamo ora il metodo del simplesso al problema definito nella I fase,


considerando che le variabili di base sono x4 e x5 , e che la BFS iniziale è
(0, 0, 0, 4, 8). Le equazioni della I fase sono

(0) Z +x4 +x5 = 0


(1) 2x1 +x2 +x4 = 4
(2) x1 +3x2 +3x3 +x5 = 8.

Poniamo il problema in forma canonica eliminando i coefficienti delle variabili


artificiali dalla funzione obiettivo. Per questo sottraiamo dall’equazione (0)
le equazioni (1) e (2), ottenendo le nuove equazioni:

(0) Z −3x1 −4x2 −3x3 = −12


(1) 2x1 +x2 +x4 = 4
(2) x1 +3x2 +3x3 +x5 = 8.

Scriviamo il tableau della iterazioni del metodo del simplesso applicato alla
I fase:

Iterazione 0
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 −3 −4 −3 0 0 −12
x4 (1) 0 2 1 0 1 0 4
x5 (2) 0 1 3 3 0 1 8

Iterazione 1
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 − 35 0 1 0 4
3
− 43
5
x4 (1) 0 3 0 −1 1 − 13 4
3

x2 1 1 8
(2) 0 3 1 1 0 3 3
CAPITOLO 3. PROGRAMMAZIONE LINEARE 107

Iterazione 2
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 0 0 0 1 1 0
x1 (1) 0 1 0 − 35 3
5
− 15 4
5
6
x2 (2) 0 0 1 5
− 15 2
5
12
5

Abbiamo ottenuto la soluzione ottima della I fase in cui il valore della funzione
obiettivo è 0 (come era atteso), la BFS (4/5, 12/5, 0) è quella iniziale per la
II fase. Per risolvere la seconda eliminiamo dal tableau le colonne relative
alle variabili artificiali e sostituiamo la funzione obiettivo scrivendo la nuova
l’equazione (0):

(0) Z −4x1 −2x2 −x3 = 0

Tableau I Fase con funzione obiettivo II Fase


Var. x1 x2 x3
base Eq. Z bi
Z (0) 1 −4 −2 −1 0
x1 (1) 0 1 0 − 35 4
5

x2 6 12
(2) 0 0 1 5 5

A questo punto si eliminano i coefficienti delle variabile di base x1 e x2 dalla


funzione obiettivo e si ottiene il tableau iniziale della II fase:

Iterazione 0
Var. x1 x2 x3
base Eq. Z bi
Z (0) 1 0 0 −1 8
x1 (1) 0 1 0 − 35 4
5
x2 6 12
(2) 0 0 1 5 5
CAPITOLO 3. PROGRAMMAZIONE LINEARE 108

Iterazione 1
Var. x1 x2 x3
base Eq. Z bi
5
Z (0) 1 0 6 0 10
x1 1
(1) 0 1 2 0 2
x3 5
(2) 0 0 6 1 2

Abbiamo ottenuto la soluzione ottima del problema di massimo (2, 0, 2) con


valore della funzione obiettivo Z = 10.

Vincoli funzionali nella forma ≥


Consideriamo il seguente problema di programmazione lineare:
max Z = x1 + 4x2 + 3x3
x1 +3x2 −6x3 ≥ 6
2x1 −x2 +5x3 ≤ 10
x1 , x2 , x3 ≥ 0.

Il primo vincolo viene modificato in uno di uguaglianza definendo la variabile


x4 , detta variabile surplus, posta uguale a:

x4 = x1 + 3x2 − 6x3 − 6, x4 ≥ 0.

In questo modo il vincolo diventa l’uguaglianza

x1 + 3x2 − 6x3 − x4 = 6

ed è necessario aggiungere un’ulteriore variabile artificiale x5 poichè x4 non


può essere usata come variabile di base perchè nell’equazione ha coefficiente
−1 mentre la forma canonica del problema prevede che le variabili in base
debbano avere necessariamente coefficiente 1. Nel secondo vincolo è necessa-
rio aggiungere la usuale variabile slack. Il problema nella forma aumentata
è il seguente:
max Z = x1 + 4x2 + 3x3
x1 +3x2 −6x3 −x4 +x5 = 6
2x1 −x2 +5x3 +x6 = 10
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 109

Obiettivo della prima fase del metodo è:

Massimizzare Z = −x5

fino ad ottenere x5 = 0. Nella seconda fase invece si vuole

Massimizzare Z = x1 + 4x2 + 3x3

con x5 = 0. La soluzione ottima della prima fase viene utilizzata come BFS
iniziale per la seconda.
Riscriviamo ora i problemi che devono essere risolti nelle due fasi.

I Fase:
max Z = −x5
x1 +3x2 −6x3 −x4 +x5 = 6
2x1 −x2 +5x3 +x6 = 10
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0,

II Fase
max Z = x1 + 4x2 + 3x3
x1 +3x2 −6x3 −x4 = 6
2x1 −x2 +5x3 +x6 = 10
x1 , x2 , x3 , x4 , x6 ≥ 0.

Le equazioni della prima fase sono

(0) Z +x5 = 0
(1) x1 +3x2 −6x3 −x4 +x5 = 6
(2) 2x1 −x2 +5x3 +x6 = 10

Per porre in problema in forma canonica bisogna prima sottrarre dall’equa-


zione (0) l’equazione (1), ottenendo le nuove equazioni

(0) Z −x1 −3x2 +6x3 +x4 = −6


(1) x1 +3x2 −6x3 −x4 +x5 = 6
(2) 2x1 −x2 +5x3 +x6 = 10.

Adesso possiamo scrivere il tableau del metodo del simplesso:


CAPITOLO 3. PROGRAMMAZIONE LINEARE 110

Iterazione 0
Var. x1 x2 x3 x4 x6
base Eq. Z x5 bi
Z (0) 1 −1 −3 6 1 0 0 −6
x5 (1) 0 1 3 −6 −1 1 0 6
x6 (2) 0 2 −1 5 0 0 1 10

Iterazione 1
Var. x1 x2 x3 x4 x6
base Eq. Z x5 bi
Z (0) 1 0 0 0 0 1 0 0
1
x2 (1) 0 3 1 −2 − 31 1
3 0 2
7
x6 (2) 0 3 0 3 − 13 1
3 1 12

Eliminiamo ora la colonna relativa alle variabile artificiale x5 e sostituiamo


la funzione obiettivo:

Tableau iniziale II Fase


Var. x1 x2 x3 x4 x6
base Eq. Z bi
Z (0) 1 −1 −4 −3 0 0 0
1
x2 (1) 0 3 1 −2 − 31 0 2
7
x6 (2) 0 3 0 3 − 13 1 12

A questo punto, per rendere il tableau in forma canonica, eliminiamo il


coefficiente di x2 dall’equazione (0), moltiplicando l’equazione (1) per 4 e
sommandola, appunto, all’equazione (0);
CAPITOLO 3. PROGRAMMAZIONE LINEARE 111

Iterazione 0
Var. x1 x2 x3 x4 x6
base Eq. Z bi
1
Z (0) 1 3 0 −11 − 34 0 8
1
x2 (1) 0 3 1 −2 − 13 0 2
7
x6 (2) 0 3 0 3 − 13 1 12

Iterazione 1
Var. x1 x2 x3 x4 x6
base Eq. Z bi
80
Z (0) 1 9 0 0 − 23
9
11
3 52
17
x2 (1) 0 9 1 0 − 59 2
3 10
7
x3 (2) 0 9 0 1 − 19 1
3 4

Poichè la variabile x4 può entrare in base ma nessuna variabile soddisfa il


test del minimo rapporto, la funzione è illimitata, quindi il problema non
ammette soluzione e
Z = +∞.

Il metodo del simplesso a due fasi per problemi di minimo


Supponiamo di dover risolvere il seguente problema di minimo:

min Z = x1 + 5x2 + 4x3


x1 +3x3 = 6
x1 +x2 +x3 ≥ 4
x1 , x2 , x3 , x4 , x5 ≥ 0.

Scriviamo quindi il problema nella forma aumentata introducendo una va-


riabile surplus e due variabili artificiali:

min Z = x1 + 5x2 + 4x3


x1 +3x3 +x4 = 6
x1 +x2 +x3 −x5 +x6 = 4
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 112

Il problema che definisce la prima fase del metodo a due fasi deve essere tale
che la sua soluzione abbia tutte le variabili artificiali (in questo caso x4 e x6 )
uguali a zero, quindi:
I Fase
min Z = x4 + x6
x1 +3x3 +x4 = 6
x1 +x2 +x3 −x5 + x6 = 4
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
In generale se il problema è di minimo si sceglie come funzione obiettivo
P
Z= variabili artificiali
ovvero tale che Z ≥ 0 ed assuma valore minimo (nullo) proprio quando le
variabili artificiali introdotte sono tutte uguali a zero.
Nella seconda fase si può applicare il metodo del simplesso alla funzione
obiettivo del problema di partenza:
II Fase
min Z = x1 + 5x2 + 4x3

x1 +3x3 = 6
x1 +x2 +x3 −x5 = 4
x1 , x2 , x3 , x5 ≥ 0.
Poichè il problema è di minimo dobbiamo trasformarlo in un problema di
massimo cambiando il segno ai due membri della funzione obiettivo in en-
trambi i problemi:
I Fase
max −Z = −x4 − x6
x1 +3x3 +x4 = 6
x1 +x2 +x3 −x5 + x6 = 4
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
II Fase
max −Z = −x1 − 5x2 − 4x3

x1 +3x3 = 6
x1 +x2 +x3 −x5 = 4
x1 , x2 , x3 , x5 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 113

Le equazioni della I fase sono

(0) −Z +x4 +x6 = 0


(1) x1 +3x3 +x4 = 6
(2) x1 +x2 +x3 −x5 + x6 = 4.

Per porre in problema in forma canonica bisogna prima sottrarre dall’equa-


zione (0) l’equazione (1), ottenendo le nuove equazioni:

(0) −Z −x1 −3x3 +x6 = −6


(1) x1 +3x3 +x4 = 6
(2) x1 +x2 +x3 −x5 + x6 = 4

e poi sottrarre dall’equazione (0) l’equazione (2), ottenendo la nuova equa-


zione:
(0) −Z −2x1 −x2 −4x3 +x5 = −10
(1) x1 +3x3 +x4 = 6
(2) x1 +x2 +x3 −x5 + x6 = 4.

Adesso possiamo scrivere il tableau del metodo del simplesso:

Iterazione 0
Var. x1 x2 x3 x5
base Eq. Z x4 x6 bi
Z (0) −1 −2 −1 −4 0 1 0 −10
x4 (1) 0 1 0 3 1 0 0 6
x6 (2) 0 1 1 1 0 −1 1 4

Iterazione 1
Var. x1 x2 x3 x5
base Eq. Z x4 x6 bi
Z (0) −1 − 32 −1 0 4
3 1 0 −2
x3 1 1
(1) 0 3 0 1 3 0 0 2
2
x6 (2) 0 3 1 0 − 13 −1 1 2
CAPITOLO 3. PROGRAMMAZIONE LINEARE 114

Iterazione 2
Var. x1 x2 x3 x5
base Eq. Z x4 x6 bi
Z (0) −1 0 0 0 1 0 1 0
x3 1 1
(1) 0 3 0 1 3 0 0 2
2
x2 (2) 0 3 1 0 − 13 −1 1 2

Ora eliminiamo dal tableau finale della I fase le colonne relative alle variabili
artificiali e sostituiamo i coefficienti dell’equazione obiettivo della II fase:

Tableau II Fase
Var. x1 x2 x3 x5
base Eq. Z bi
Z (0) −1 1 5 4 0 0
x3 1
(1) 0 3 0 1 0 2
x2 2
(2) 0 3 1 0 −1 2

II Fase-Eliminaz. coeff. Equazione (0)


Var. x1 x2 x3 x5
base Eq. Z bi
Z (0) −1 − 73 0 4 5 −10
x3 1
(1) 0 3 0 1 0 2
x2 2
(2) 0 3 1 0 −1 2

Iterazione 0
Var. x1 x2 x3 x5
base Eq. Z bi
Z (0) −1 − 11
3 0 0 5 −18
x3 1
(1) 0 3 0 1 0 2
x2 2
(2) 0 3 1 0 −1 2
CAPITOLO 3. PROGRAMMAZIONE LINEARE 115

Iterazione 1
Var. x1 x2 x3 x5
base Eq. Z bi
11
Z (0) −1 0 2 0 − 12 −7
x3 (1) 0 0 − 12 1 1
2 1
3
x1 (2) 0 1 2 0 − 32 3

Iterazione 2
Var. x1 x2 x3 x5
base Eq. Z bi
Z (0) −1 0 5 1 0 −6
x5 (1) 0 0 −1 2 1 2
x1 (2) 0 1 0 3 0 6

La BFS ottima è (6, 0, 0) mentre il valore minimo della funzione obiettivo è:

Z = 6.

Problemi non ammissibili


Nel metodo del simplesso il problema fondamentale è l’identificazione di una
BFS iniziale quando una soluzione semplice non è disponibile. L’uso di va-
riabili artificiali consente di trasformare il problema in uno artificiale e la
stessa tecnica consente di ottenere una BFS iniziale per tale problema. Il
metodo del simplesso a due fasi consente di ottenere una soluzione ottima
partendo dalla BFS iniziale del problema artificiale. Tale tecnica tuttavia
contiene una possibile minaccia. Infatti potrebbe essere difficile trovare una
soluzione ammissibile perchè non ce ne sono, ciò nonostante, trasformando
il problema e applicando il metodo del simplesso, questo trova una soluzione
apparentemente ottima. Esiste un modo per verificare quando tale situazione
si verifica: infatti se il problema originale non ha soluzioni ammissibili, allora
la prima fase del metodo del simplesso a due fasi fornisce una soluzione finale
in cui almeno una variabile artificiale è in base ed assume un valore maggiore
CAPITOLO 3. PROGRAMMAZIONE LINEARE 116

di zero.
Consideriamo per esempio il seguente problema di programmazione lineare:
max Z = 6x1 + x2
x1 +x2 ≥ 5
2x1 +x2 = 2
x1 ≥ 0, x2 ≥ 0
e scriviamo direttamente il problema artificiale
max Z = 6x1 + x2
x1 +x2 −x3 +x4 = 5
2x1 +x2 +x5 = 2
x1 , x2 , x3 , x4 , x5 ≥ 0.
L’applicazione del metodo del simplesso a due fasi implica la risoluzione dei
seguenti problemi:
I Fase
max Z = −x4 − x5
x1 +x2 −x3 +x4 = 5
2x1 +x2 +x5 = 2
x1 , x2 , x3 , x4 , x5 ≥ 0;
II Fase
max Z = 6x1 + x2
x1 +x2 −x3 = 5
2x1 +x2 = 2
x1 , x2 , x3 ≥ 0.
Le equazioni della prima fase sono:
(0) Z +x4 +x5 = 0
(1) x1 +x2 −x3 +x4 = 5
(2) 2x1 +x2 +x5 = 2
Trasformiamo il problema della prima fase in forma canonica eliminando
dalla funzione obiettivo i coefficienti delle variabili di base x4 e x5 . Prima
sottraiamo dall’equazione (0) l’equazione (1)
Z +x4 +x5 = 0
−x1 −x2 +x3 −x4 = −5
Z −x1 −x2 +x3 +x5 = −5.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 117

Poi sottraiamo dall’equazione (0) l’equazione (2)

Z −x1 −x2 +x3 +x5 = −5


−2x1 −x2 −x5 = −2
Z −3x1 −2x2 +x3 = −7.
Applichiamo il metodo del simplesso al problema definito nella prima fase:

Iterazione 0
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 −3 −2 1 0 0 −7
x4 (1) 0 1 1 −1 1 0 5
x5 (2) 0 2 1 0 0 1 2

Iterazione 1
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 0 − 12 1 0 3
2 −4
1
x4 (1) 0 0 2 −1 1 − 12 4
x1 1 1
(2) 0 1 2 0 0 2 1

Iterazione 2
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 1 0 1 0 2 −3
x4 (1) 0 −1 0 −1 1 −1 3
x2 (2) 0 2 1 0 0 1 2
CAPITOLO 3. PROGRAMMAZIONE LINEARE 118

Il test di ottimalità è verificato quindi il metodo ha trovato (apparentemente)


la soluzione per il problema definito nella prima fase, soluzione ottima che è
(0, 2, 0, 3, 0). Tuttavia la variabile artificiale x4 è rimasta in base e questo vuol
dire che il problema di partenza non ammette alcuna soluzione ammissibile
e quindi neanche quella ottima.

Variabile artificiale in base con valore nullo


In determinati esercizi può capitare che al termine della prima fase sia presen-
te in base una variabile artificiale che però assume valore zero. Tale situazione
è schematizzata nel seguente tableau:
Eq. x1 ... xj ... xn ... xh ... bi
Z c1 ... cj ... cn ... 0 ... 0
.. .. .. .. ..
. . . . 0 .
.. .. .. .. ..
. . . . 0 .
xh ai1 ... aij ... ain ... 1 ... 0
.. .. .. .. ..
. . . . 0 .
.. .. .. .. ..
. . . . 0 .

Quindi, la riga i del tableau è relativa ad una variabile artificiale in base


di valore 0. A questo punto, basta effettuare un’operazione di pivot sulla
riga i in corrispondenza di una qualsiasi colonna j tale che aij sia diverso da
zero. La variabile artificiale xh lascia la base e il suo posto è preso da xj . Si
noti che si può effettuare l’operazione di pivot anche su un elemento aij < 0:
sostanzialmente i valori delle variabili non cambiano poichè xj entra in base
assumendo valore 0 e pertanto la soluzione rimane ammissibile. Si passa cioè
da una soluzione degenere ad un’altra che rappresenta lo stesso punto nello
spazio e quindi la stessa soluzione. Se non dovesse esistere nessun aij 6= 0
in corrispondenza della riga i e delle colonne delle variabili decisionali allora
questo vuol dire che la riga i della matrice A ed il relativo termine noto sono
stati trasformati, con operazioni elementari tra righe, in una riga nulla. Ciò
equivale a dire che il vincolo i-esimo del sistema è ridondante e può pertanto
essere eliminato. Quindi, nel caso aij = 0 per ogni j, si può eliminare la riga
i avendo una variabile di base in meno e quindi togliendo xh dalla base senza
sostituirla con nessuna altra variabile.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 119

Esempio 3.6.2 Applicare il metodo del simplesso a due fasi per risolvere il
seguente problema di programmazione lineare in forma non standard:

max Z = 4x1 + 2x2 + 3x3


x1 +2x2 +3x3 = 4
2x1 +x2 −x3 = 8
x1 , x2 , x3 ≥ 0.

Scriviamo quindi il problema nella forma aumentata introducendo una va-


riabile artificiale in ogni vincolo di uguaglianza:

max Z = 4x1 + 2x2 + 3x3


x1 +2x2 +3x3 +x4 = 4
(3.6)
2x1 +x2 −x3 +x5 = 8
x1 , x2 , x3 , x4 , x5 ≥ 0.

Scriviamo ora i problemi da risolvere nelle due fasi:

I Fase
max Z = −x4 − x5
x1 +2x2 +3x3 +x4 = 4
2x1 +x2 −x3 +x5 = 8
x1 , x2 , x3 , x4 , x5 ≥ 0.

II Fase
max Z = 4x1 + 2x2 + 3x3
x1 +2x2 +3x3 = 4
x1 +x2 −x3 = 8
x1 , x2 , x3 ≥ 0.
Applichiamo ora il metodo del simplesso al problema definito nella I fase,
considerando che le variabili di base sono x4 e x5 , e che la BFS iniziale è
(0, 0, 0, 4, 8). Le equazioni della I fase sono

(0) Z +x4 +x5 = 0


(1) x1 +2x2 +3x3 +x4 = 4
(2) 2x1 +x2 −x3 +x5 = 8.

Poniamo il problema in forma canonica eliminando i coefficienti delle variabili


artificiali dalla funzione obiettivo. Per questo sottraiamo dall’equazione (0)
CAPITOLO 3. PROGRAMMAZIONE LINEARE 120

le equazioni (1) e (2), ottenendo le nuove equazioni:


(0) Z −3x1 −3x2 −2x3 = −12
(1) x1 +2x2 +3x3 +x4 = 4
(2) 2x1 +x2 −x3 +x5 = 8.
Scriviamo il tableau della iterazioni del metodo del simplesso applicato alla
I fase:

Iterazione 0
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 −3 −3 −2 0 0 −12
x4 (1) 0 1 2 3 1 0 4
x5 (2) 0 2 1 −1 0 1 8

Iterazione 1
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 0 3 7 3 0 0
x1 (1) 0 1 2 3 1 0 4
x5 (2) 0 0 −3 −7 −2 1 0

La BFS trovata a questo punto è (4, 0, 0, 0, 0) con variabili in base x1 e x5 .


Osserviamo che in realtà questa BFS risulta essere ammissibile anche per il
problema di partenza quindi l’unico problema è sostituire la variabile artifi-
ciale in base con un’altra qualsiasi. Si sceglie quindi di far entrare in base x2
anche se il suo coefficiente nell’equazione (2) è negativo.

Iterazione 2
Var. x1 x2 x3
base Eq. Z x4 x5 bi
Z (0) 1 0 0 0 1 1 0
x1 (1) 0 1 0 − 53 − 31 2
3 4
7 2
x2 (2) 0 0 1 3 3
− 13 0
CAPITOLO 3. PROGRAMMAZIONE LINEARE 121

Abbiamo ottenuto cosı̀ la BFS ammissibile (4, 0, 0) che era sostanzialmente la


stessa trovata al termine della prima iterazione. Per risolvere la seconda fase,
al solito, eliminiamo dal tableau le colonne relative alle variabili artificiali e
sostituiamo la funzione obiettivo scrivendo la nuova l’equazione (0):

(0) Z −4x1 −2x2 −3x3 = 0

Tableau I Fase con funzione obiettivo II Fase


Var. x1 x2 x3
base Eq. Z bi
Z (0) 1 −4 −2 −3 0
x1 (1) 0 1 0 − 53 4
x2 7
(2) 0 0 1 3 0

A questo punto si eliminano i coefficienti delle variabile di base x1 e x2 dalla


funzione obiettivo e si ottiene il tableau iniziale della II fase:

Iterazione 0
Var. x1 x2 x3
base Eq. Z bi
Z (0) 1 0 0 −5 16
x1 (1) 0 1 0 − 53 4
x2 7
(2) 0 0 1 3 0

Iterazione 1
Var. x1 x2 x3
base Eq. Z bi
15
Z (0) 1 0 7 0 16
x1 5
(1) 0 1 7 0 4
x3 3
(2) 0 0 7 1 0

Abbiamo ottenuto la soluzione ottima del problema di massimo (4, 0, 0) con


valore della funzione obiettivo Z = 16.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 122

Esempio 3.6.3 Applicare il metodo del simplesso a due fasi per risolvere il
seguente problema di programmazione lineare:
max Z = 2x1 + 4x2 + 6x3
3x1 +2x2 +4x3 = 4
3x1 +x2 +4x3 = 5
x1 +3x2 +x3 = 6
x1 , x2 , x3 ≥ 0.
Scriviamo quindi il problema nella forma aumentata introducendo una va-
riabile artificiale in ogni vincolo di uguaglianza:
max Z = 2x1 + 4x2 + 6x3
3x1 +2x2 +4x3 +x4 = 4
3x1 +x2 +4x3 +x5 = 5
x1 +3x2 +x3 +x6 = 6
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
Scriviamo ora i problemi da risolvere nelle due fasi:
I Fase
max Z = −x4 − x5 − x6
3x1 +2x2 +4x3 +x4 = 4
3x1 +x2 +4x3 +x5 = 5
x1 +3x2 +x3 +x6 = 6
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
II Fase
max Z = 2x1 + 4x2 + 6x3
3x1 +2x2 +4x3 = 4
3x1 +x2 +4x3 = 5
x1 +3x2 +x3 = 6
x1 , x2 , x3 ≥ 0.
Applichiamo ora il metodo del simplesso al problema definito nella I fase,
considerando che le variabili di base sono quelle artificiali e che la BFS iniziale
è (0, 0, 0, 4, 8). Le equazioni della I fase sono
(0) Z +x4 +x5 +x6 = 0
(1) 3x1 +2x2 +4x3 +x4 = 4
(2) 3x1 +x2 +4x3 +x5 = 5
(3) x1 +3x2 +x3 +x6 = 6.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 123

Poniamo il problema in forma canonica eliminando i coefficienti delle variabili


artificiali dalla funzione obiettivo. Per questo sottraiamo dall’equazione (0)
le equazioni (1), (2) e (3) ottenendo le nuove equazioni:

(0) Z −7x1 −6x2 −9x3 = −15


(1) 3x1 +2x2 +4x3 +x4 = 4
(2) 3x1 +x2 +4x3 +x5 = 5
(3) x1 +3x2 +x3 +x6 = 6.

Scriviamo il tableau della iterazioni del metodo del simplesso applicato alla
I fase:

Iterazione 0
Var. x1 x2 x3
base Eq. Z x4 x5 x6 bi
Z (0) 1 −7 −6 −9 0 0 0 −15
x4 (1) 0 3 2 4 1 0 0 4
x5 (2) 0 3 1 4 0 1 0 5
x6 (3) 0 1 3 1 0 0 1 6

Iterazione 1
Var. x1 x2 x3
base Eq. Z x4 x5 x6 bi
Z (0) 1 − 41 − 32 0 9
4 0 0 −6
x3 3 1 1
(1) 0 4 2 1 4 0 0 1
x5 (2) 0 0 −1 0 −1 1 0 1
1 5
x6 (3) 0 4 2 0 − 41 0 1 5
CAPITOLO 3. PROGRAMMAZIONE LINEARE 124

Iterazione 2
Var. x1 x2 x3
base Eq. Z x4 x5 x6 bi
Z (0) 1 2 0 3 3 0 0 −3
x2 3 1
(1) 0 2 1 2 2 0 0 2
3
x5 (2) 0 2 0 2 − 21 1 0 3
x6 (3) 0 − 72 0 −5 − 32 0 1 0

La BFS corrente soddisfa il test di ottimalità pertanto siamo arrivati al ter-


mine della prima fase. Tuttavia osserviamo che due variabili artificiali sono
rimaste in base ed una delle due ha valore diverso da zero. Questa condizione
è sufficiente per affermare che il problema è inammissibile (infatti potremmo
far uscire dalla base la variabile artificiale con valore nullo eseguendo un’altra
iterazione ma comunque rimarebbe in base l’altra variabile).
Riepiloghiamo a questo punto i possibili scenari che si possono presentare al
termine della prima fase:

1. Tutte le variabili artificiali sono fuori dalla base, quindi si procede alla
risoluzione della seconda fase;

2. Almeno una variabile artificiale è rimasta in base con valore diverso da


zero, in questo caso si conclude che il problema non ammette soluzione
in quanto la regione ammissibile è l’insieme vuoto:

3. Una variabile artificiale resta in base con valore nullo, in questo caso si
procede ad un’ulteriore iterazione facendo entrare in base un’altra va-
riabile purchè abbia coefficiente diverso da zero nell’equazione associata
alla variabile artificiale in base. Subito dopo si passa alla risoluzione
della seconda fase.

3.7 Il Metodo del Simplesso in Forma Matri-


ciale
Come accennato in uno dei precedenti paragrafi un problema di programma-
zione lineare può essere descritto in modo più compatto utilizzando matrici
CAPITOLO 3. PROGRAMMAZIONE LINEARE 125

ed vettori. Pertanto un modo alternativo per comprendere le operazioni ef-


fettuate dal metodo del simplesso è quello di tradurle utilizzando, appunto,
una notazione matriciale, più compatta e probabilmente più semplice da im-
plementare. Ricordiamo che, nella notazione matriciale, abbiamo introdotto
i vettori:      
c1 x1 b1
 c2   x2   b2 
c =  ..  , x =  ..  , b =  .. 
     
 .   .   . 
cn xn bm
e la matrice dei coefficienti delle disequazioni vincolari
 
a11 a12 . . . a1n
 a21 a22 . . . a2n 
A =  .. .. .. 
 
 . . . 
am1 am2 . . . amn

in modo tale che il problema possa essere scritto come

max Z = cT x
Ax ≤ b
x≥0

Per ottenere la forma aumentata del problema si introduce il vettore xS delle


variabili slack,  
xn+1
 xn+2 
xS =  .. 
 
 . 
xn+m
cosicchè i vincoli diventano
 
  x
A, I =b
xS
con  
x
≥0
xS
dove I è la matrice identità di ordine m e 0 è il vettore nullo avente n + m
elementi.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 126

3.7.1 Calcolo di una soluzione di base ammissibile


L’approccio generale del metodo del simplesso è quello di ottenere una se-
quenza di BFS sempre migliori finchè non si raggiunge la soluzione ottima.
Una delle caratteristiche principali del metodo del simplesso in forma ma-
triciale riguarda il modo con cui esso risolve il problema di determinare una
nuova BFS dopo aver identificato le variabili in base e quelle non in ba-
se. Date queste variabili la BFS risultante è la soluzione del sistema di m
equazioni  
  x
A I =b
xS
in cui le n variabili non di base nel vettore di n + m elementi
 
x
xS

sono poste uguali a zero. Eliminando tali variabili, ovvero ponendo il loro
valore uguale a zero, rimane un sistema di m equazioni in m incognite

BxB = b (3.7)

dove il vettore  
xB1
 xB2 
xB =  ..
 

 . 
xBm
è ottenuto da [x xS ] eliminando le variabili non di base mentre la matrice
 
B11 B12 . . . B1m
 B21 B22 . . . B2m 
B =  .. .. .. 
 
 . . . 
Bm1 Bm2 . . . Bmm

è ottenuta da [A, I] eliminando le colonne corrispondenti alle variabili non


di base. Gli elementi di xB e le colonne di B possono essere disposti in un
ordine differente quando viene applicato il metodo del simplesso.
Il metodo del simplesso introduce in base le variabili per cui B è non singolare,
CAPITOLO 3. PROGRAMMAZIONE LINEARE 127

in modo tale che la matrice B −1 esista. Risolvere il sistema (3.7) significa


sostanzialmente invertire la matrice B e calcolare il vettore
B −1 BxB = B −1 b
da cui segue che la soluzione per le variabili di base è
xB = B −1 b.
Indicando con cB il vettore i cui elementi sono i coefficienti della funzione
obiettivo corrispondenti agli elementi di xB allora il valore della funzione
obiettivo per la soluzione di base è:
Z = cTB xB = cTB B −1 b.
Considerando l’esempio introdotto all’inizio del capitolo possiamo evidenzia-
re, nelle diverse iterazioni, i valori della matrice B e dei vettori xB .
Inizialmente i vettori sono:
 
3    
 5  4   x3
  x1
c=  0  , b = 12 , x = x2 , xS = x4
    
 0  18 x5
0
la matrice delle equazioni:
 
10 0 1 0 0
[A, I] =  0 2 0 1 0  .
3 2 0 0 1
Iterazione 0: 

x3
xB =  x4 
x5
 
1 0 0
B =  0 1 0  = B −1
0 0 1
e pertanto     
1 0 0 4 4
xB = B −1 b =  0 1 0   12  =  12  ,
0 0 1 18 18
CAPITOLO 3. PROGRAMMAZIONE LINEARE 128

poichè 
0
cB =  0 
0
si ha 
4
Z = cTB xB =
 
0 0 0  12  = 0.
18
Iterazione 1:  
x3
xB =  x2 
x5
   
1 0 0 1 0 0
B =  0 2 0  , B −1 =  0 1/2 0 
0 2 1 0 −1 1
e pertanto
      
x3 1 0 0 4 4
xB =  x2
 =  0 1/2 0   12  = 6 ,

x5 0 −1 1 18 6

poichè 
0
cB =  5 
0
si ha  
4
Z = cTB xB =
 
0 5 0  6  = 30.
6
Iterazione 2:  
x3
xB =  x2 
x1
   
1 0 1 1 1/3 −1/3
B =  0 2 0  , B −1 =  0 1/2 0 
0 2 3 0 −1/3 1/3
CAPITOLO 3. PROGRAMMAZIONE LINEARE 129

e pertanto
      
x3 1 1/3 −1/3 4 2
−1
xB = x2 = B b = 0 1/2
   0   12 = 6  ,
 
x1 0 −1/3 1/3 18 2
poichè 
0
cB =  5 
3
si ha  
2
Z = cTB xB =
 
0 5 3  6  = 36.
2

3.7.2 Forma matriciale delle equazioni correnti


L’insieme delle equazioni correnti del metodo del simplesso (cioè il tableau)
può essere rappresentato in forma matriciale nel seguente modo:
 
 T
 Z  
1 −c 0  0
x = .
0 A I b
xS
Ad ogni passo vengono eseguite su questi dati una serie di operazioni algebri-
che (in particolare il prodotto di un’equazione per una costante e combina-
zioni lineari tra le equazioni) che possono essere espresse in forma matriciale
come il prodotto di una matrice per entrambi i membri dell’equazione appena
scritta. Tale matrice è molto simile, come vedremo, alla matrice identità. In
modo simbolico questa matrice può essere rappresentata usando le informa-
zioni relative ai termini noti del nuovo sistema di equazioni. Infatti ad ogni
iterazione i termini noti sono Z = cTB B −1 b e xB = B −1 b, quindi possiamo
scrivere        T −1 
Z 1 cTB B −1 0 cB B b
= = .
xB 0 B −1 b B −1 b
Eseguendo le stesse operazioni sui due membri dell’equazione la stessa ma-
trice deve premoltiplicare anche le equazioni a sinistra, quindi poichè
    
1 cTB B −1 1 −cT 0 1 cTB B −1 A − cT cTB B −1
=
0 B −1 0 A I 0 B −1 A B −1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 130

la forma matriciale delle insieme delle equazioni dopo ogni iterazione è


 
 T −1 T T −1
 Z  T −1 
1 cB B A − c cB B  x  = cB B−1 b .
0 B −1 A B −1 B b
xS

Le forme del simplesso viste (forma algebrica, forma tabellare e forma ma-
triciale) prendono esattamente sempre le stesse decisioni (variabile entrante,
variabile uscente), l’unica differenza è il modo usato per effettuare i calcoli
per poi prendere tali decisioni. La forma matriciale fornisce sicuramente un
modo compatto che non richiede la scrittura di una sequenza di equazioni
algebriche o di tabelle.

Esempio 3.7.1 Consideriamo il seguente problema di programmazione li-


neare
max Z = x1 + 2x2 + x3 + x4 + x5 + x6

x1 +2x2 +3x3 +x4 = 3


2x1 −x2 −5x3 +x5 = 2
x1 +2x2 −x3 +x6 = 1
x1 , x2 , x3 , x4 , x5 , x6 ≥ 0.
Stabilire se la base formata dalle colonne 1, 3 e 4 è una soluzione ottima.

In questo caso
B = {1, 3, 4}, N = {2, 5, 6}
Le colonne della matrice [A, I] relative alle variabili di base e non di base
sono    
1 3 1 2 0 0
AB =  2 −5 0  , AN =  −1 1 0 ,
1 −1 0 2 0 1
I vettori dei costi
   
cB = 1 1 1 , cN = 2 1 1 .

Calcoliamo A−1
B :  
0 −1 5
1
A−1
B =  0 −1 2 
3
3 4 −11
CAPITOLO 3. PROGRAMMAZIONE LINEARE 131

ed il vettore dei costi aggiornati




10/3
c = cTB A−1 T
B AN − c =
 1/3  .
7/3
Poichè i coefficienti della funzione obiettivo sono tutti positivi abbiamo iden-
tificato una soluzione ottima
   
x1 1
−1
xB = AB b = x3 = 0  ,
  
x4 2

le altre variabili (fuori base) sono tutte nulle.


Esempio 3.7.2 Considerare i seguenti vincoli:
x1 +2x2 +3x3 = 2
x1 −x3 +x4 = 3
con xi ≥ 0, per i = 1, . . . , 4. Individuare quali tra le seguenti coppie di indici
individua una BFS ammissibile:

{1, 2} {1, 4} {2, 3} {2, 4}

La matrice dei coefficienti dei vincoli è


 
1 2 3 0
A=
1 0 −1 1
Per ogni insieme B assegnato si tratta di vedere se le colonne relative sono
linearmente indipendenti, e tra quelle che verificano tale proprietà se i valori
assunti dalle variabili in base sono ammissibili.
 
1 2
B = {1, 2} AB = det AB = −2
1 0
 
x1 +2x2 = 2 x1 = 3
x3 = x4 = 0
x1 = 3 x2 = −1/2
In questo caso la risposta è no.
 
1 0
B = {1, 4} AB = det AB = 1
1 1
CAPITOLO 3. PROGRAMMAZIONE LINEARE 132
 
x1 = 2 x1 = 2
x2 = x3 = 0
x1 +x4 = 3 x4 = 1
In questo caso la risposta è si.
 
2 3
B = {2, 3} AB = det AB = −2
0 −1
 
2x2 +3x3 = 2 x2 = 11/2
x1 = x4 = 0
−x3 = 3 x3 = −3
In questo caso la risposta è no.
 
2 0
B = {2, 4} AB = det AB = 2
0 1
 
2x2 = 2 x2 = 1
x1 = x3 = 0
x4 = 3 x4 = 3
In questo caso la risposta è si.

Esempio 3.7.3 Considerare il seguente insieme di vincoli:

x1 +x2 +x3 = 2
x1 +x4 = 2
x2 +x5 = 1

con xi ≥ 0, per i = 1, . . . , 5. Individuare quali tra le seguenti terne di indici


individua una BFS:

{1, 2, 3} {1, 2, 4} {1, 2, 5}

La matrice dei coefficienti dei vincoli è


   
1 1 1 0 0 2
A= 1 0 0 1 0 , b= 2 
0 1 0 0 1 1

Per ogni insieme assegnato si tratta di vedere se le colonne relative sono


linearmente indipendenti, e tra quelle che verificano tale proprietà se i valori
assunti dalle variabili in base sono ammissibili.

B = {1, 2, 3}
CAPITOLO 3. PROGRAMMAZIONE LINEARE 133
 
1 1 1
AB =  1 0 0 
0 1 0
    
0 1 0 2 2
xB = A−1
B b =
 0 0 1  2  =  1 
1 −1 −1 1 −1
In questo caso non abbiamo una BFS.
In alternativa al calcolo dell’inversa della matrice AB si può risolvere il siste-
ma lineare che si ottiene ponendo le variabili fuori base uguali a zero (cioè
x4 = x5 = 0): 
 x1 +x2 +x3 = 2
x1 = 2
x2 = 1

x1 = 2 x2 = 1 x3 = −1.
da cui risulta che gli indici assegnati non individuano una BFS.

B = {1, 2, 4}
 
1 1 0
AB =  1 0 1 
0 1 0
    
1 0 −1 2 1
−1
xB = AB b =  0 0 1   2 = 1 
 
−1 1 1 1 1
In questo caso gli indici individuano una BFS.

B = {1, 2, 5}
 
1 1 0
AB =  1 0 0 
0 1 1
    
0 1 0 2 2
−1
xB = AB b =  1 −1 0   2 = 0 
 
−1 1 1 1 1
In questo caso gli indici individuano una BFS seppur degenere.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 134

Esempio 3.7.4 Considerati i vincoli definiti nell’esercizio precedente, cosa


si può dire sulla base composta dagli indici {1, 3, 4}?
In questo caso risulta  
1 1 0
AB =  1 0 0 
0 0 0
e
det AB = 0
quindi le tre variabili non formano una base.

3.8 Esercizi
Esercizio 3.8.1 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = 5x1 + 2x2
x1 −x2 ≤ 0
−x1 +x2 ≤ 4
5x1 +2x2 ≤ 10
x1 , x2 ≥ 0.
(Soluzione ottima Z = 10).
Esercizio 3.8.2 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = x1 − x2
x1 +x2 ≤ 6
x1 +x2 ≥ 2
x1 −x2 ≤ 4
x1 , x2 ≥ 0.
(Soluzione ottima Z = 4).
Esercizio 3.8.3 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = x1 − x2
x1 +x2 ≤ 8
x1 +x2 ≥ 3
x1 −x2 ≤ 5
x1 ≥ 1, x2 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 135

(Soluzione ottima Z = 5).


Esercizio 3.8.4 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = x1 + 3x2
−x1 +x2 ≤ 3
x1 +x2 ≥ 6
2x1 −x2 ≤ 0
x1 , x2 ≥ 0.
(Soluzione ottima Z = 21).
Esercizio 3.8.5 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = x1 + x2
3x1 +6x2 ≤ 24
x1 +x2 ≥ 4
−2x1 +x2 ≤ 0
x1 −2x2 ≤ 0
x1 , x2 ≥ 0.
(Soluzione ottima Z = 6).
Esercizio 3.8.6 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = 2x1 + 4x2
x1 −x2 ≤ 3
−x1 +x2 ≤ 1
2x1 +4x2 ≤ 8
x1 , x2 ≥ 0.
(Soluzione ottima Z = 8).
Esercizio 3.8.7 Applicare il metodo grafico per risolvere il seguente proble-
ma di programmazione lineare
max Z = x1 + x2
−x2 ≤ −1
x1 −x2 ≤ 1
−2x1 +x2 ≤ 2
x1 , x2 ≥ 0.
CAPITOLO 3. PROGRAMMAZIONE LINEARE 136

(Problema illimitato).
Esercizio 3.8.8 Risolvere il seguente problema di programmazione lineare
max Z = 4x1 + 3x2 − x3
3x1 +4x2 −2x3 ≤ 5
3x2 +3x3 ≤ 6
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 10).
Esercizio 3.8.9 Risolvere il seguente problema di programmazione lineare
max Z = 4x1 + 4x2 + x3
4x1 +3x2 +5x3 ≤ 8
2x1 −x2 +4x3 ≤ 6
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 32/3).
Esercizio 3.8.10 Risolvere il seguente problema di programmazione lineare
max Z = 4x1 − 2x2 + 3x3
4x1 +3x2 +2x3 ≤ 4
3x1 +x2 +x3 ≤ 3
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 6).
Esercizio 3.8.11 Risolvere il seguente problema di programmazione lineare
max Z = 4x1 + x2 + x3
−x1 +2x2 +3x3 ≤ 3
2x1 +x2 ≤ 4
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 29/3).
Esercizio 3.8.12 Risolvere il seguente problema di programmazione lineare
max Z = 3x1 − x2 + 5x3
3x1 +3x3 ≤ 4
2x1 −2x2 +3x3 ≤ 3
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 37/6).
CAPITOLO 3. PROGRAMMAZIONE LINEARE 137

Esercizio 3.8.13 Risolvere il seguente problema di programmazione lineare


max Z = 8x1 + x2 + x3
3x1 +2x2 ≤ 4
2x1 +2x2 −5x3 ≤ 1
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = +∞).
Esercizio 3.8.14 Risolvere il seguente problema di programmazione lineare
max Z = 3x1 + x3
4x1 +x2 +x3 ≤ 2
5x1 +x2 +x3 ≤ 3
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 2).
Esercizio 3.8.15 Risolvere il seguente problema di programmazione lineare
max Z = 6x1 + 3x2 + 8x3
2x1 −x2 +4x3 ≤ 6
x1 +4x3 ≤ 5
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = +∞).
Esercizio 3.8.16 Risolvere il seguente problema di programmazione lineare
max Z = x1 + 3x2 + 6x3
3x1 +3x2 +6x3 ≤ 10
3x1 +x2 +4x3 ≤ 6
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 10).
Esercizio 3.8.17 Risolvere il seguente problema di programmazione lineare
max Z = 2x1 + 3x2 + 4x3
−x1 +3x2 +2x3 ≤ 4
x1 +3x2 +3x3 ≤ 6
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 12).
CAPITOLO 3. PROGRAMMAZIONE LINEARE 138

Esercizio 3.8.18 Risolvere il seguente problema di programmazione lineare


max Z = 3x1 − x2 + 3x3
3x1 +4x2 +3x3 ≤ 4
3x1 +2x2 +x3 ≤ 1
x1 , x2 , x3 ≥ 0.
(Soluzione ottima Z = 3).
Esercizio 3.8.19 Risolvere il seguente problema di programmazione lineare
max Z = 8x1 + x2 − x3
3x1 +2x2 ≤ 4
2x1 +2x2 −5x3 ≤ 1
x1 , x2 ≥ 0, x3 ∈ R.
(Soluzione ottima Z = 31/3).
Esercizio 3.8.20 Risolvere il seguente problema di programmazione lineare
max Z = 7x1 − x2 + 6x3
3x1 −x2 +4x3 ≤ 2
3x1 +x2 +4x3 ≤ 4
x1 , x3 ≥ 0, x2 ∈ R.
(Soluzione ottima Z = 6).
Esercizio 3.8.21 Risolvere il seguente problema di programmazione lineare
max Z = 4x1 + 3x2 + 2x3
4x1 +5x2 +5x3 ≥ 5
3x1 +2x2 +5x3 = 6
x1 , x2 , x3 ≥ 0
(Soluzione ottima Z = 9).
Esercizio 3.8.22 Risolvere il seguente problema di programmazione lineare
min Z = 8x1 + 4x2 + 2x3
−2x1 +3x2 +5x3 = 6
2x1 +4x2 +4x3 ≤ 8
x1 , x2 , x3 ≥ 0
(Soluzione ottima Z = 12/5).
CAPITOLO 3. PROGRAMMAZIONE LINEARE 139

Esercizio 3.8.23 Risolvere il seguente problema di programmazione lineare


min Z = 3x1 + 2x2 + 4x3
4x1 +3x2 +3x3 ≥ 8
3x1 −x2 +2x3 = 6
x1 , x2 , x3 ≥ 0
(Soluzione ottima Z = 6).
Esercizio 3.8.24 Risolvere il seguente problema di programmazione lineare
min Z = 3x1 + 4x2 + 6x3
3x1 +4x2 +5x3 = 10
2x1 +2x2 = 4
x1 , x2 , x3 ≥ 0
(Soluzione ottima Z = 52/5).
Esercizio 3.8.25 Risolvere il seguente problema di programmazione lineare
max Z = −x1 + 3x2 + 4x3
3x1 +4x2 +3x3 = 4
−2x1 +2x2 +3x3 = 5
x1 , x2 , x3 ≥ 0
(Problema non ammissibile).
Esercizio 3.8.26 Risolvere il seguente problema di programmazione lineare
max Z = 3x1 + 2x2 + 2x3
3x1 +2x2 +4x3 ≥ 2
3x1 +x2 +4x3 ≤ 6
x1 , x2 , x3 ≥ 0
(Soluzione ottima Z = 12).
Esercizio 3.8.27 Risolvere il seguente problema di programmazione lineare
max Z = 4x1 + 3x2 + x3
2x1 +3x2 +6x3 = 6
3x1 +2x2 −x3 = 9
x1 , x2 , x3 ≥ 0
(Soluzione ottima Z = 12).
CAPITOLO 3. PROGRAMMAZIONE LINEARE 140

Esercizio 3.8.28 Risolvere il seguente problema di programmazione lineare

max Z = 4x1 − 3x2 + 5x3


3x1 +4x2 +3x3 ≥ 4
3x1 −x2 +5x3 ≤ 5
x1 , x2 , x3 ≥ 0

(Soluzione ottima Z = 20/3).

Esercizio 3.8.29 Risolvere il seguente problema di programmazione lineare

max Z = 3x1 + 4x2 + 6x3


2x1 +2x2 = 4
3x1 +4x2 +5x3 ≤ 10
x1 , x2 , x3 ≥ 0

(Soluzione ottima Z = 54/5).

Esercizio 3.8.30 Risolvere il seguente problema di programmazione lineare

max Z = 4x1 + 3x2 + 3x3


3x1 +2x2 +3x3 = 4
3x1 +4x2 +x3 = 2
x1 , x2 , x3 ≥ 0

(Soluzione ottima Z = 13/3).


Capitolo 4

Programmazione Lineare Intera

4.1 Introduzione
Un problema di programmazione lineare intera (in breve PLI) si presenta
nella forma n
X
max Z = cj xj
j=1
n
X (4.1)
aij xj ≤ bi , i = 1, 2, . . . , m,
j=1
xj variabile intera, per j = 1, . . . , n.
In questo capitolo affronteremo la risoluzione di problemi di PLI in forma
standard considerando che i metodi che saranno descritti possono essere
adattati anche a problemi in forma non standard. Nella programmazione
intera il maggiore problema che si presenta è che la regione ammissibile è
composta da un numero discreto (ovvero finito o infinitamente numerabile)
di punti e non forma un insieme compatto. Nella seguente figura viene ri-
portato un esempio di regione ammissibile definita dai vincoli del generico
problema (4.1) considerando le variabili decisionali come se fossero reali e
all’interno della quale sono evidenziati i punti che rappresentano invece la
regione ammissibile (discreta) del problema di programmazione intera.

141
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 142

• • • •
• • • • • •
• • • • • • • •
• • • • • • • • • •
• • • • • • • • •
• • • • • • • •

È evidente dalla figura che il problema non può essere risolto con i classici
metodi per la programmazione lineare a variabili reali (ad esempio, il metodo
del simplesso) in quanto in generale non tutti i vertici hanno coordinate intere
e quindi anche il vertice ottimale non è detto che abbia coordinate intere
(dipende dalla regione ammissibile e dalla funzione obiettivo).
Poichè i problemi di PLI sono, in generale, più difficili da risolvere rispetto
a quelli di programmazione lineare, si potrebbe essere tentati dall’uso di una
tecnica di approsimazione che consiste nell’applicare il metodo del simplesso
al problema ignorando il vincolo di interezza delle variabili, e approssimando
la soluzione, di solito reale, al valore intero più vicino. Un primo problema
legato a tale approccio sta nel fatto che tale approssimazione non garantisce
che questa sia ancora ammissibile. Consideriamo il seguente esempio.

Esempio 4.1.1
max Z = x2
1
−x1 +x2 ≤
2
7
x1 +x2 ≤
2
x1 , x2 ∈ N.
Risolviamo il problema in modo grafico ignorando il vincolo di interezza delle
variabili, ottenendo quello che si chiama problema rilassato.
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 143

Soluzioni arrotondate

• • • • • •

Soluzione ottima problema rilassato


• • • • •

• • • • •

Come si vede in figura soluzione ottima del problema è x1 = 3/2 e x2 = 2.


Non è possibile approssimare x1 ad un valore intero poichè la soluzione non
sarebbe ammissibile.
Esempio 4.1.2
max Z = x1 + 5x2
x1 +10x2 ≤ 20
x1 ≤ 2
x1 , x2 ∈ N.

• •

Soluzione ottima intera


• • •

Soluzione ottima problema rilassato
• • • •
Approssimazione soluzione ottima prob. ril.
• • • •
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 144

In questo caso tralasciando il vincolo di interezza la soluzione ottima è x1 = 2


e x2 = 9/5. Effettuando un’approssimazione si otterrebbe una soluzione am-
missibile con x1 = 2 e x2 = 1 con valore Z = 7, che, tuttavia, è lontana
dalla soluzione del problema di programmazione intera x1 = 0 e x2 = 2 con
Z = 10.
Uno dei metodi per risolvere problemi di PLI è il metodo del Branch-and-
Bound, che descriveremo nel prossimo paragrafo. Il metodo consente di ri-
solvere il problema suddividendo la regione ammissibile (e quindi l’insieme
delle soluzioni) in sottoinsiemi più piccoli e risolvendo il problema in ciascuno
di questi. Questa suddivisione viene fatta ricorsivamente, dividendo a loro
volta i sottoinsiemi in altri, più piccoli, e riapplicando sempre la stessa proce-
dura. In questo modo viene generato un albero di problemi ognuno dei quali
ammette una soluzioni ammissibile per il problema rilassato. La procedura
termina quando non ci sono più sottoproblemi da risolvere e a questo pun-
to la migliore soluzione intera ottenuta come soluzione ottima del problema
di partenza. Altri problemi che rientrano nella programmazione intera sono
quelli in cui le variabili decisionali possono assumere solo i valori 0 e 1. In
questo caso si parla di programmazione binaria. La procedura per risolvere
questi problemi sarà descritta nel successivo paragrafo.

4.2 L’algoritmo Branch-and-Bound per Pro-


blemi di Programmazione Binaria
I problemi di programmazione binaria sono quelli in cui ogni variabile xi
è associata ad una determinata decisione e pertanto può assumre solo due
valori 
 1 se la decisione è si;
xi =
0 se la decisione è no.

Tali variabili sono dette binarie. Ogni problema di programmazione bina-


ria con n variabili decisionali ha un numero finito di soluzioni, pari a 2n .
Queste potrebbero essere enumerate per trovare quella ottima ma il loro nu-
mero, esponenziale, rende tale approccio improponibile dal punto di vista
computazionale. Il metodo di Branch-and-Bound costituisce una validissima
alternativa a tale procedura. Descriviamo ora le diverse fasi dell’algoritmo:
1. Branching, ovvero il modo di scegliere il sottoinsieme di soluzioni da
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 145

esplorare;
2. Bounding, ovvero il calcolo di un opportuno limite per la soluzione otti-
ma;
3. Fathoming, ovvero la cancellazione di sottoinsiemi di soluzioni all’interno
ai quali la soluzione ottima non può appartenere.

Branching
Quando si opera con variabili binarie il modo più semplice di procedere è
quello di suddividere l’insieme delle soluzioni ammissibili in sottoinsiemi, fis-
sando ad ogni passo il valore di una variabile detta variabile di branching (i
cui valori possibili sono chiaramente solo 0 e 1). Esistono tecniche piuttosto
sofisticate per la scelta della variabile di branching, in alternativa si può se-
guire l’ordine naturale, per esempio al primo passo si sceglie x1 , quindi x2
e cosı̀ via. I due valori della variabile di branching definiscono due sotto-
problemi che vengono risolti in modo approssimato, come sarà descritto nel
paragrafo successivo. In questo modo si definisce un vero e proprio albero,
detto albero delle soluzioni, che si ramifica iterazione dopo iterazione, quan-
do vengono definiti (e risolti) i sottoproblemi definiti attribuendo i valori alle
diverse variabili di branching. Nel corso dell’algoritmo alcuni di questi pro-
blemi potranno essere tagliati (fathomed) mentre altri saranno ulteriormente
suddivisi in sottoproblemi.

Bounding
Per ogni sottoproblema si deve ottenere un limite (bound) sulla soluzione
ammissibile. Un modo classico per ottenere questa informazione è quello di
risolvere il problema rilassato (anche detto rilassamento lineare), che viene
ottenuto cancellando (o sostituendo) i vincoli che lo rendono difficile da ri-
solvere.
Per un problema di programmazione binaria si taglia proprio il vincolo xj ∈
{0, 1} che viene sostituito dai vincoli

xj ≤ 1, xj ≥ 0

per ogni j. Per risolvere il problema rilassato si può applicare, per esempio,
il metodo del simplesso (oppure anche il metodo grafico qualora il numero di
variabili decisionali sia uguale a due).
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 146

Fathoming
Una volta risolto un problema rilassato un’eventualità è che l’insieme delle
sue soluzioni non possa contenere con certezza la soluzione ottima. In que-
sto caso può essere tagliato, cioè non si considerano più i sottoproblemi che
esso potrebbe generare in quanto si è certi che essi non porteranno ad una
soluzione migliore. Esistono tre criteri per tagliare un sottoproblema.
Un criterio è quello di avere ottenuto una soluzione binaria del rilassamento
lineare. Infatti se la soluzione ottima del rilassamento lineare è una solu-
zione binaria, questa deve essere soluzione ottima anche del problema di
programmazione binaria. Se questa soluzione binaria è la migliore soluzione
trovata fino all’iterazione attuale allora viene memorizzata come soluzione
incombente (cioè la migliore soluzione ammissibile trovata finora). Si pone

Z ∗ = valore di Z per la soluzione incombente.

Quindi il sottoproblema in questione non viene più preso in considerazione.


Poichè Z ∗ è la migliore soluzione trovata finora questo suggerisce un altro
criterio per tagliare un sottoproblema. Infatti se il valore ottimo della fun-
zione obiettivo del rilassamento lineare è inferiore a Z ∗ allora non c’è bisogno
di considerare ulteriormente tale sottoproblema.
Un ulteriore criterio per tagliare un sottoproblema è legato al fatto che se il
problema rilassato non ha soluzioni ammissibili allora a maggior ragione il
problema non rilassato non può averne.
Riepilogando, i Criteri di Fathoming sono i seguenti:
Criterio n. 1: il limite è inferiore a Z ∗ ;
Criterio n. 2: il rilassamento lineare del sottoproblema non ha soluzioni
ammissibili;
Criterio n. 3: la soluzione ottima del rilassamento lineare ha componenti
binarie.

4.2.1 Sommario dell’algoritmo Branch-and-Bound


Riepiloghiamo i passi del metodo di Branch-and-Bound per un problema
di programmazione binaria in cui si deve trovare il massimo della funzione
obiettivo.
Inizializzazione:
Porre Z ∗ = −∞. Applicare il passo di bounding, il passo di fathoming all’in-
tero problema. Se non viene tagliato allora viene classificato come problema
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 147

completo e si esegue la prima iterazione.


Singola Iterazione:
Fase 1. Branching: Tra i sottoproblemi rimanenti se ne seleziona uno (non
cè un criterio prestabilito, ma si può scegliere quello generato più di recente
oppure quello che ha il bound più grande). Da questo si generano due nuovi
sottoproblemi fissando la variabile di branching ai valori 0 e 1.
Fase 2. Bounding: Per ogni sottoproblema si ottiene un limite (bound) ri-
solvendo il suo rilassamento lineare e approssimando per difetto il valore di
Z della soluzione ottima risultante al più grande numero intero inferiore ad
esso (se Z è reale).
Fase 3. Fathoming: Per ogni nuovo sottoproblema si applicano i 3 criteri di
fathoming e si scartano quelli che ne soddisfano uno.
Se uno dei sottoproblemi viene scartato in base al terzo criterio di fathoming
allora si deve eventualmente aggiornare il valore della soluzione incombente
Z ∗.
Test di ottimalità:
Si ferma l’algoritmo quando non rimangono più sottoproblemi da risolvere,
la soluzione incombente è ottima, altrimenti eseguire un’altra iterazione.
Il motivo della scelta del sottoproblema creato più di recente è che duran-
te la fase di bounding vengono risolti problemi di programmazione lineare
solitamente usando il metodo del simplesso. Piuttosto che eseguire ogni vol-
ta il metodo dall’inizio conviene applicare una riottimizzazione che consiste
nel modificare il tableau finale del precedente problema tenendo conto delle
piccole differenze nel modello ed applicando poche iterazioni del metodo del
simplesso.

Esempio 4.2.1 Applichiamo il metodo Branch-and-Bound al seguente pro-


blema di Programmazione Lineare Binaria:

max Z = 9x1 + 5x2 + 6x3


6x1 +3x2 +5x3 ≤ 10
−x1 −x2 +x3 ≤ 0
xj variabile binaria per j = 1, 2, 3.
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 148

Il primo passo dell’algoritmo è quello di risolvere il rilassamento lineare del


problema completo:

max Z = 9x1 + 5x2 + 6x3


(1) 6x1 +3x2 +5x3 ≤ 10
(2) −x1 −x2 +x3 ≤ 0
(3) x1 ≤ 1
(4) x2 ≤ 1
(5) x3 ≤ 1
x1 , x2 , x3 ≥ 0.

Applichiamo il metodo del simplesso introducendo 5 variabili slack.

Iterazione 0
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 −9 −5 −6 0 0 0 0 0 0
x4 (1) 0 6 3 5 1 0 0 0 0 10
x5 (2) 0 −1 −1 1 0 1 0 0 0 0
x6 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 149

Iterazione 1
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 −5 −6 0 0 9 0 0 9
x4 (1) 0 0 3 5 1 0 −6 0 0 4
x5 (2) 0 0 −1 1 0 1 1 0 0 1
x1 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1

Iterazione 2
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 − 75 0 6
5 0 9
5 0 0 69
5
3 1
x3 (1) 0 0 5 1 5 0 − 56 0 0 4
5

x5 (2) 0 0 − 85 0 − 15 1 11
5 0 0 1
5

x1 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 − 35 0 − 15 0 6
5 0 1 1
5
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 150

Iterazione 3
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
6 9 7 76
Z (0) 1 0 0 0 5 0 5 5 0 5
1
x3 (1) 0 0 0 1 5 0 − 56 − 35 0 1
5

x5 (2) 0 0 0 0 − 15 1 11
5
8
5 0 9
5

x1 (3) 0 1 0 0 0 0 1 0 0 1
x2 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 0 − 15 0 6
5
3
5 1 4
5

Soluzione del problema rilassato è (1, 1, 1/5) mentre il valore della funzione
obiettivo è 76/5 = 15 + 1/5 che viene approssimato al valore intero

Z = 15.

Nessuno dei criteri di fathoming consente di tagliare il problema completo


quindi scegliamo x1 come variabile di branching e definiamo due sottopro-
blemi, uno in cui fissiamo x1 = 0 e l’altro con x1 = 1 :

Sottoproblema 1
Fissato x1 = 0

max Z = 5x2 + 6x3


(1) 3x2 + 5x3 ≤ 10
(2) − x2 + x3 ≤ 0
(3) xj variabile binaria per j = 2, 3;

Sottoproblema 2
Fissato x1 = 1

max Z = 9 + 5x2 + 6x3


(1) 3x2 + 5x3 + 6 ≤ 10
(2) − x2 + x3 − 1 ≤ 0
(3) xj variabile binaria per j = 2, 3
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 151

ovvero
Sottoproblema 2

max Z = 9 + 5x2 + 6x3


(1) 3x2 + 5x3 ≤ 4
(2) − x2 + x3 ≤ 1
(3) xj variabile binaria per j = 2, 3.
Risolviamo ora il sottoproblema 1 rilassato:

max Z = 5x2 + 6x3


3x2 +5x3 ≤ 10
−x2 +x3 ≤ 0
x2 ≤ 1
x3 ≤ 1
x2 , x3 ≥ 0

Applichiamo il metodo del simplesso introducendo 4 variabili slack.

Iterazione 0
Var. x2 x3 x4 x5 x6 x7
base Eq. Z bi
Z (0) 1 −5 −6 0 0 0 0 0
x4 (1) 0 3 5 1 0 0 0 10
x5 (2) 0 −1 1 0 1 0 0 0
x6 (3) 0 1 0 0 0 1 0 1
x7 (4) 0 0 1 0 0 0 1 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 152

Iterazione 1
Var. x2 x3 x4 x5 x6 x7
base Eq. Z bi
Z (0) 1 −11 0 0 6 0 0 0
x4 (1) 0 8 0 1 −5 0 0 10
x3 (2) 0 −1 1 0 1 0 0 0
x6 (3) 0 1 0 0 0 1 0 1
x7 (4) 0 1 1 0 −1 0 1 1

Iterazione 2
Var. x2 x3 x4 x5 x6 x7
base Eq. Z bi
Z (0) 1 0 0 0 6 11 0 11
x4 (1) 0 0 0 1 −5 −8 0 2
x3 (2) 0 0 1 0 1 1 0 1
x2 (3) 0 1 0 0 0 1 0 1
x7 (4) 0 0 0 0 −1 −1 1 0

Soluzione del sottoproblema 1 rilassato è (0, 1, 1) mentre il valore della fun-


zione obiettivo è
Z = 11.
Poichè la soluzione è binaria allora il sottoproblema viene tagliato in base
al terzo criterio di fathoming. Inoltre poniamo Z ∗ = 11 in quanto questa
è divenuta la soluzione incombente (cioè la migliore soluzione ammissibile
trovata finora).
Risolviamo ora il sottoproblema 2 rilassato:
max Z = 5x2 + 6x3 + 9
3x2 +5x3 ≤ 4
−x2 +x3 ≤ 1
x2 ≤ 1
x3 ≤ 1
x2 , x3 ≥ 0
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 153

Anche in questo caso applicando il metodo del simplesso si devono introdurre


4 variabili slack.

Iterazione 0
Var. x2 x3 x4 x5 x6 x7
base Eq. Z bi
Z (0) 1 −5 −6 0 0 0 0 9
x4 (1) 0 3 5 1 0 0 0 4
x5 (2) 0 −1 1 0 1 0 0 1
x6 (3) 0 1 0 0 0 1 0 1
x7 (4) 0 0 1 0 0 0 1 1

Iterazione 1
Var. x2 x3 x4 x5 x6 x7
base Eq. Z bi
Z (0) 1 − 75 0 6
5 0 0 0 69
5

x3 3 1 4
(1) 0 5 1 5 0 0 0 5

x5 (2) 0 − 85 0 − 15 1 0 0 1
5

x6 (3) 0 1 0 0 0 1 0 1
x7 (4) 0 − 35 0 − 15 0 0 1 1
5

Iterazione 2
Var. x2 x3 x4 x5 x6 x7
base Eq. Z bi
6 7 76
Z (0) 1 0 0 5 0 5 0 5
1
x3 (1) 0 0 1 5 0 − 35 0 1
5

x5 (2) 0 0 0 − 15 1 8
5 0 9
5

x2 (3) 0 1 0 0 0 1 0 1
x7 (4) 0 0 0 − 15 0 3
5 1 4
5
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 154

Soluzione del sottoproblema 1 rilassato è (1, 1, 1/5) mentre il valore della


funzione obiettivo è 76/5 che viene approssimato al valore intero

Z = 15.

Visualizziamo l’albero delle soluzioni ottenuto finora:

Completo Z = 15
(1, 1, 1/5)

x1 1 Z = 15
0 Z ∗ = 11
(1, 1, 1/5) (0, 1, 1)
F(3)
Passiamo ora alla seconda iterazione e scriviamo i sottoproblemi ponendo
x2 = 1 e x2 = 0:
Sottoproblema 3
Fissato x2 = 0

max Z = 9 + 6x3
(1) 5x3 ≤ 4
(2) x3 ≤ 1
(3) x3 variabile binaria,
Sottoproblema 4
Fissato x2 = 1

max Z = 14 + 6x3
(1) 3 + 5x3 ≤ 4
(2) − 1 + x3 ≤ 1
(3) x3 variabile binaria,
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 155

ovvero
Sottoproblema 4

max Z = 14 + 6x3
(1) 5x3 ≤ 1
(2) x3 ≤ 2
(3) x3 variabile binaria.
In questo caso è superfluo risolvere il rilassamento lineare dei problemi binari
perchè le soluzioni sono molto semplici. Infatti x3 = 0 è soluzione del sotto-
problema 3, e Z = 9 è il relativo valore della funzione obiettivo. Poichè tale
valore è inferiore rispetto alla soluzione incombente il sottoproblema viene
tagliato applicando il primo criterio di fathoming. La soluzione del sottopro-
blema 4 è x3 = 0, in cui la funzione obiettivo ammette valore Z = 14, che
diviene la nuova soluzione incombente

Z ∗ = 14,

ed il sottoproblema viene tagliato applicando il terzo criterio di fathoming.


Poichè non ci sono ulteriori sottoproblemi da risolvere la soluzione incom-
bente è quella ottima e l’albero delle soluzioni finale è il seguente.

Completo Z = 15
(1, 1, 1/5)

x1 1 Z = 15
0 Z ∗ = 11
(1, 1, 1/5) (0, 1, 1)
F(3)

x2 1 Z ∗ = 14
0 Z=9
(1, 1, 0) (1, 0, 0)

F(3) F(1)
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 156

4.3 L’algoritmo Branch-and-Bound per la Pro-


grammazione Intera
Consideriamo il seguente problema di PLI:
n
X
max Z = cj xj
j=1
n
X
aij xj ≤ bi , i = 1, 2, . . . , m,
j=1
xj variabile intera, per j = 1, . . . , n.

L’algoritmo è molto simile al branch-and-bound per variabili binarie nel sen-


so che si utilizza la tecnica del rilassamento lineare per i passi di bounding e
fathoming. I cambiamenti sono i seguenti.
Innanzitutto la scelta della variabile di branching non avviene secondo l’or-
dine naturale poichè ora si considerano solo le variabili che devono assumere
valori interi e che invece hanno un valore non intero nella soluzione ottima
nel rilassamento dell’attuale sottoproblema. Di solito tra queste variabili vie-
ne scelta la prima nell’ordinamento naturale ma potrebbero essere utilizzate
anche tecniche più sofisticate.
Il secondo cambiamento riguarda i valori assegnati alla variabile di branching.
Poichè tale variabile può assumere valori interi non è possibile definire i due
sottoproblemi uguagliandola a 0 o 1, nè si può generare un sottoproblema per
ogni possibile valore, allora si definiscono due sottoproblemi specificando due
possibili intervalli di valori. In dettaglio, se xi è la variabile di branching ed
x∗i è il suo valore nella soluzione ottima del rilassamento lineare si definiscono
due sottoproblemi aggiungendo il vincolo

xi ≤ ⌊x∗i ⌋

nel primo e
xi ≥ ⌊x∗i ⌋ + 1
in cui ⌊x∗i ⌋ indica la parte intera del numero reale x∗i :

⌊x∗i ⌋ = max {n ∈ Z | n ≤ x∗i } .

Osserviamo che per problemi di PLI la variabile di branching non scompare


dai sottoproblemi definiti, questo vuol dire che la stessa variabile potrebb
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 157

essere scelta come variabile di branching in più iterazioni.


Il terzo cambiamento riguarda il passo di bounding. Nel caso di un pro-
blema di programmazione lineare intera pura il valore ottimo della funzione
obiettivo del rilassamento lineare Z viene approssimato per difetto al fine di
ottenere un valore intero. Se alcune variabili possono assumere valori reali
tale arrotondamento non è necessario.
La quarta modifica riguarda il terzo criterio di fathoming. Nel caso della
programmazione intera mista il criterio deve richiedere che solo le variabili
vincolate ad essere intere lo siano effettivamente nella soluzione ottima del
rilassamento lineare.
Vediamo quindi di riassumere l’algoritmo di Branch-and-Bound per problemi
di programmazione lineare intera mista.
Inizializzazione:
Porre Z ∗ = −∞. Si applicano le operazioni di bounding e fathoming al pro-
blema di partenza. Se il problema non viene tagliato allora si esegue la prima
iterazione.
Singola iterazione:
1. Branching: si sceglie uno dei sottoproblemi non tagliati (per esempio
quello generato più recentemente). Si sceglie la variabile di branching,
cioè la prima variabile intera che nella soluzione ottima del rilassamen-
to lineare non ha valore intero. Se xj è la variabile di branching ed
x∗j il suo valore non intero allora si generano due nuovi sottoproblemi
aggiungendo rispettivamente i vincoli

xj ≤ ⌊x∗j ⌋ e xj ≥ ⌊x∗j ⌋ + 1.

2. Bounding: per ogni nuovo sottoproblema si risolve il relativo rilassa-


mento lineare e si usa come bound il valore di Z della soluzione ottima
ottenuta.

3. Fathoming: ad ogni nuovo sottoproblema si applicano i seguenti criteri


di fathoming tagliando i sottoproblemi che ne soddisfano uno:
Criterio 1: il bound risulta minore o uguale rispetto al valore della
soluzione incombente Z ∗ ;
Criterio 2: il rilassamento lineare non ha soluzioni ammissibili;
Criterio 3: la soluzione ottima per il rilassamento lineare ha valori
interi per tutte le variabili vincolate ad assumere valori interi (se questa
soluzione è migliore di quella incombente diventa la nuova soluzione
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 158

incombente e si riapplica il criterio 1 a tutti i sottoproblemi non ancora


tagliati).
Test di ottimalità:
Si ferma l’algoritmo quando non ci sono sottoproblemi da risolvere, allora la
soluzione incombente è quella ottima. Se non c’è alcuna soluzione incombente
allora il problema non ha soluzioni ammissibili, in caso contrario si esegue
un’altra iterazione.
Esempio 4.3.1 Risolvere il seguente problema di PLI:
max Z = 2x1 + 3x2 + 2x3
x1 +2x3 ≤ 3
2x1 +x2 ≤ 5
x1 , x2 , x3 ∈ N.
Innanzitutto risolviamo, usando il metodo del simplesso, il rilassamento li-
neare del problema di partenza che viene ottenuto eliminando il vincolo di
interezza delle tre variabili. Introduciamo due variabili slack, x4 e x5 , che
sono inizialmente le variabili in base.

Iterazione 0
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −2 −3 −2 0 0 0
x4 (1) 0 1 0 2 1 0 3
x5 (2) 0 2 1 0 0 1 5

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 4 0 −2 0 3 15
x4 (1) 0 1 0 2 1 0 3
x2 (2) 0 2 1 0 0 1 5
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 159

Iterazione 2
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 5 0 0 1 3 18
x3 1 1 3
(1) 0 2 0 1 2 0 2

x2 (2) 0 2 1 0 0 1 5

La soluzione ottenuta (0, 5, 3/2) non è intera, quindi non può essere applicato
il terzo criterio di fathoming ed il problema non viene tagliato, inoltre

Z = 18

diviene il bound per i successivi sottoproblemi pur non essendo soluzione


incombente in quanto la soluzione non è intera. Consideriamo ora come
variabile di branching x3 poichè è la prima variabile che nella soluzione del
problema rilassato non ha un valore intero e definiamo due sottoproblemi in
cui aggiungiamo rispettivamente i seguenti vincoli:
 
3
x3 ≤ =1
2
e
x3 ≥ 2.
Scriviamo ora esplicitamente i due sottoproblemi:

Sottoproblema 1

max Z = 2x1 + 3x2 + 2x3


x1 +2x3 ≤ 3
2x1 +x2 ≤ 5
x3 ≤ 1
x1 , x2 , x3 ∈ N
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 160

e
Sottoproblema 2

max Z = 2x1 + 3x2 + 2x3


x1 +2x3 ≤ 3
2x1 +x2 ≤ 5
x1 , x2 , x3 ∈ N, x3 ≥ 2.
Risolviamo il sottoproblema 1 con il metodo del simplesso introducendo 3
variabili slack.

Iterazione 0
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 −2 −3 −2 0 0 0 0
x4 (1) 0 1 0 2 1 0 0 3
x5 (2) 0 2 1 0 0 1 0 5
x6 (3) 0 0 0 1 0 0 1 1

Iterazione 1
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 4 0 −2 0 3 0 15
x4 (1) 0 1 0 2 1 0 0 3
x2 (2) 0 2 1 0 0 1 0 5
x6 (3) 0 0 0 1 0 0 1 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 161

Iterazione 2
Var. x1 x2 x3 x4 x5 x6
base Eq. Z bi
Z (0) 1 4 0 0 0 3 2 17
x4 (1) 0 1 0 0 1 0 −2 1
x2 (2) 0 2 1 0 0 1 0 5
x3 (3) 0 0 0 1 0 0 1 1

La soluzione ottenuta (0, 5, 1) è intera, quindi applicando il terzo criterio di


fathoming il problema viene tagliato. Il valore della funzione obiettivo, cioè
Z = 17, diviene la nuova soluzione incombente.

Z ∗ = 17.

Per risolvere il sottoproblema 2 si deve effettuare il seguente cambio di


variabile
x′3 = x3 − 2 ⇒ x3 = x′3 + 2, x′3 ≥ 0,
cosicchè il sottoproblema può essere riscritto nel seguente modo:

max Z = 2x1 + 3x2 + 2(x′3 + 2)


x1 +2(x′3 + 2) ≤ 3
2x1 +x2 ≤ 5
x1 , x2 , x′3 ∈ N,
ovvero
max Z = 2x1 + 3x2 + 2x′3 + 4
x1 +2x′3 ≤ −1
2x1 +x2 ≤ 5
x1 , x2 , x3 ∈ N.

Appare evidente, osservando il primo vincolo, che il problema non ammette


soluzioni ammissibili, quindi il sottoproblema può essere tagliato. Possiamo
quindi scrivere l’albero dei sottoproblemi:
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 162

Completo Z = 18
(0, 5, 3/2)

∗ Soluzione
x3 ≤ 1 Z = 17 x3 ≥ 2
(0, 5, 1) Non Ammissibile

F(3) F(2)

Osservazione In modo simile si risolvono i problemi di programmazione


lineare intera mista in cui solo k < n variabili decisionali (convenzionalmente
le prime) sono intere:
n
X
max Z = cj xj
j=1
n
X
aij xj ≤ bi , i = 1, 2, . . . , m,
j=1
xj ≥ 0, j = 1, 2, . . . , n,
xj variabile intera, per j = 1, . . . , k, k < n.

4.4 L’algoritmo Branch-and-Cut per la Pro-


grammazione Binaria
Si tratta di un metodo, descritto per la prima volta intorno alla metà degli
anni Ottanta, per risolvere in modo efficiente problemi di programmazione
binaria di grandi dimensioni per i quali l’algoritmo di Branch-and-Bound
mostrava una complessità computazionale di ordine esponenziale. Il metodo
si può applicare comunque anche a problemi di programmazione binaria mista
e intera mista. Ambito ideale di applicazione sono i problemi in cui la matrice
A dei vincoli funzionali presenta una struttura sparsa, cioè il numero di
elementi diversi da zero non supera il 5%. Consideriamo solo il caso di
problemi di programmazione binaria pura. Il metodo utilizza una serie di
tecniche combinate insieme: il preprocessamento automatico del problema,
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 163

la generazione dei piani di taglio e le tecniche di branch-and-bound.


Le tecniche di preprocessamento del problema sono le seguenti:
1. Fissare il valore di alcune variabili: quando una variabile non può as-
sumere un determinato valore poichè sarebbe violato uno dei vincoli
indipendentemente dal valore assunto dalle altre variabili allora il suo
valore deve essere necessariamente l’altro valore. Per esempio il vincolo
5x1 + x2 − x3 ≤ 2
non può essere soddisfatto se x1 = 1 e quindi deve essere necessaria-
mente x1 = 0. Un criterio generale può essere il seguente: una volta
identificata la variabile con il più grande coefficiente positivo si verifica
se la somma tra tale coefficiente e tutti i coefficienti negativi del vinco-
lo eccede il termine noto, in caso affermativo tale variabile deve essere
posta uguale a zero.
2. Eliminare i vincoli ridondanti: se un vincolo funzionale viene soddisfat-
to dalla soluzione binaria più difficile allora è ridondante e può essere
eliminato. Per un vincolo di tipo ≤ la soluzione binaria più difficile ha
variabili uguali a 1 per quelle che hanno coefficienti nonnegativi e le
altre sono uguali a 0. Tali valori si invertono se il vincolo è di tipo ≥ .
Per esempio i vincoli
3x1 + 3x2 ≤ 8, 3x1 − 2x2 ≥ −3
sono ridondanti perchè
3(1) + 3(1) = 6 ≤ 8, 3(0) − 2(1) = −2 ≥ −3.

3. Rendere i vincoli più stringenti: in questo caso si cerca di ridurre


la regione ammissibile senza tuttavia eliminare soluzioni ammissibili.
Consideriamo il seguente semplice problema:
max Z = 2x1 + 3x2
2x1 + 2x2 ≤ 3
x1 , x2 variabili binarie.
Le soluzioni ammissibili sono (0, 0), (1, 0) e (0, 1). Soluzione ottima del
rilassamento lineare è (1/2, 1) mentre la soluzione ottima del problema
binario è (0, 1). Se al vincolo assegnato si sostituisce il seguente
x1 + x2 ≤ 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 164

si ottiene una regione ammissibile ridotta pur senza eliminare alcuna


soluzione ammissibile ma con l’effetto che sia il rilassamento lineare che
il problema binario hanno la stessa soluzione ottima. Nella seguente
figura sono riportate le due regioni di ammissibilità.

• • •

La sostituzione di un vincolo con un altro che riduce la regione di ammissi-


bilità è detta generazione di un piano di taglio. Un piano di taglio (o taglio)
è appunto un nuovo vincolo funzionale che riduce la regione di ammissibilità
senza eliminare alcuna soluzione ammissibile.
I piani di taglio possono essere generati in molti modi, la seguente è una delle
possibili procedure.
1. Considerare solo i vincoli funzionali nella forma ≤ che hanno coefficienti
nonnegativi.
2. Determinare un gruppo di variabili (detto copertura minima del vinco-
lo) tali che:
(a) il vincolo è violato se ogni variabile del gruppo è uguale a 1 e tutte
le altre sono uguali a 0.
(b) il vincolo è soddisfatto se il valore di ciascuna di queste variabili
viene cambiato da 1 a 0.
3. Se N denota il numero delle variabili del gruppo il piano di taglio
risultante ha la forma

somma delle variabili del gruppo ≤ N − 1.


CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 165

Per esempio considerando il vincolo

5x1 + 4x2 + 7x3 + 5x4 ≤ 13

l’insieme {x1 , x2 , x3 } è una copertura minima perchè ponendo il loro valore


uguale a 1 (e x4 = 0) risulta

5 + 4 + 7 + 0 ≥ 13.

Tuttavia cambiando il valore di ogni variabile (a turno) da 0 a 1 il vincolo è


soddisfatto:

5 + 4 + 0 + 0 ≤ 13, 5 + 0 + 7 + 0 ≤ 13, 0 + 4 + 7 + 0 ≤ 13.

Per comprendere meglio il significato di copertura minima consideriamo il


seguente vincolo:
8x1 + 3x2 + 2x3 ≤ 9. (4.2)
La situazione dei vertici è la seguente:

vertici ammissibili vertici non ammissibili


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

Osserviamo che l’insieme {x1 , x2 } rappresenta una copertura minima del


vincolo, quindi
x1 + x2 ≤ 1 (4.3)
rappresenta un vincolo da affiancare a (4.2). Inoltre anche l’insieme {x1 , x3 }
rappresenta una copertura minima del vincolo, quindi un altro vincolo è

x1 + x3 ≤ 1. (4.4)

I due vincoli (4.3) e (4.4) sono più stringenti rispetto a (4.2) poichè i ver-
tici ammissibili appartengono alla frontiera di almeno uno dei due, mentre
nessuno appartiene alla frontiera del vincolo originario (fa eccezione l’origine
che appartiene comunque alla frontiera di tutti i vincoli di nonnegatività),
come si evince dalla presente tabella:
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 166

Vertici ammissibili Appartenenza ai Vincoli


x1 + x2 ≤ 1 x1 + x3 ≤ 1
(0, 0, 0) no no
(0, 0, 1) no si
(0, 1, 0) si no
(1, 0, 0) si si
(0, 1, 1) si si
Per illustrare meglio l’efficacia di tale tecnica consideriamo il seguente esem-
pio di programmazione lineare binaria:
max Z = 6x1 + 5x2 + 4x3
2x1 +3x2 +4x3 ≤ 6
3x1 +x2 +6x3 ≤ 9
xj variabile binaria per j = 1, 2, 3.
Risolviamo il rilassamento lineare del problema completo:
max Z = 6x1 + 5x2 + 4x3
(1) 2x1 +3x2 +4x3 ≤ 6
(2) 3x1 +x2 +6x3 ≤ 9
(3) x1 ≤ 1
(4) x2 ≤ 1
(5) x3 ≤ 1
x1 , x2 , x3 ≥ 0.
Applichiamo il metodo del simplesso introducendo 5 variabili slack.

Iterazione 0
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 −6 −5 −4 0 0 0 0 0 0
x4 (1) 0 2 3 4 1 0 0 0 0 6
x5 (2) 0 3 1 6 0 1 0 0 0 9
x6 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 167

Iterazione 1
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 −5 −4 0 0 6 0 0 6
x4 (1) 0 0 3 4 1 0 −2 0 0 4
x5 (2) 0 0 1 6 0 1 −3 0 0 6
x1 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1

Iterazione 2
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 0 −4 0 0 6 5 0 11
x4 (1) 0 0 0 4 1 0 −2 −3 0 1
x5 (2) 0 0 0 6 0 1 −3 −1 0 5
x1 (3) 0 1 0 0 0 0 1 0 0 1
x2 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 168

Iterazione 3
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 0 0 1 0 4 2 0 12
1
x3 (1) 0 0 0 1 4 0 − 21 − 43 0 1
4

x5 (2) 0 0 0 0 − 32 1 0 7
2 0 7
2

x1 (3) 0 1 0 0 0 0 1 0 0 1
x2 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 3
0 0 0 0 0 0 0 0 1 4

Soluzione del problema rilassato è dunque il vettore (1, 1, 1/4), con valore
della funzione obiettivo Z = 12. È ovvio che non potendo tagliare il proble-
ma completo poichè tale soluzione non soddisfa alcun criterio di fathoming,
è necessario scegliere la variabile di branching (x1 seguendo l’ordine naturale
oppure x3 in modo più oculato), definire due sottoproblemi e risolverli. Con-
sideriamo invece la possibilità di risolvere il problema completo sostituendo
ai due vincoli quelli definiti dalle rispettive coperture minime. È facile os-
servare che il primo vincolo ammette come unica copertura minima l’insieme
{x2 , x3 }, che definisce il vincolo

x2 + x3 ≤ 1

mentre il secondo vincolo ammette come unica copertura minima l’insieme


{x1 , x2 , x3 }, che definisce il vincolo

x1 + x2 + x3 ≤ 2.

Consideriamo quindi il seguente problema

max Z = 6x1 + 5x2 + 4x3


x2 +x3 ≤ 1
x1 +x2 +x3 ≤ 2
xj variabile binaria per j = 1, 2, 3.
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 169

Risolviamo il rilassamento lineare del problema completo:

max Z = 6x1 + 5x2 + 4x3


(1) x2 +x3 ≤ 1
(2) x1 +x2 +x3 ≤ 2
(3) x1 ≤ 1
(4) x2 ≤ 1
(5) x3 ≤ 1
x1 , x2 , x3 ≥ 0.

Applichiamo il metodo del simplesso introducendo 5 variabili slack.

Iterazione 0
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 −6 −5 −4 0 0 0 0 0 0
x4 (1) 0 0 1 1 1 0 0 0 0 1
x5 (2) 0 1 1 1 0 1 0 0 0 2
x6 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 170

Iterazione 1
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 −5 −4 0 0 6 0 0 6
x4 (1) 0 0 1 1 1 0 0 0 0 1
x5 (2) 0 0 1 1 0 1 −1 0 0 1
x1 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 1 0 0 0 0 1 0 1
x8 (5) 0 0 0 1 0 0 0 0 1 1

Iterazione 2
Var. x1 x2 x3 x4 x5 x6 x7 x8
base Eq. Z bi
Z (0) 1 0 0 1 5 0 6 0 0 11
x2 (1) 0 0 1 1 1 0 0 0 0 1
x5 (2) 0 0 0 0 −1 1 −1 0 0 0
x1 (3) 0 1 0 0 0 0 1 0 0 1
x7 (4) 0 0 0 −1 −1 0 0 1 0 0
x8 (5) 0 0 0 1 0 0 0 0 1 1

Soluzione ottima del problema rilassato è dunque (1, 1, 0), con Z = 11, che
risulta essere soluzione ottima anche del problema binario iniziale. L’uso dei
vincoli definiti dalle coperture minime consente di ridurre la regione ammissi-
bile eliminando quei vertici che sono ammissibili per il problema rilassato ma
non per quello binario. In tal modo aumenta la probabilità che la soluzione
del rilassamento lineare coincida con quella del problema binario.
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 171

4.5 Esercizi
Esercizio 4.5.1 Applicare il metodo del simplesso per risolvere il rilassa-
mento lineare del seguente problema di programmazione lineare binaria de-
terminando un limite per Z:
max Z = 3x1 + 2x2
2x1 +3x2 ≤ 5
2x1 +x2 ≤ 2
x1 , x2 ∈ {0, 1}.
(Soluzione Z = 3).
Esercizio 4.5.2 Applicare il metodo del simplesso per risolvere il rilassa-
mento lineare del seguente problema di programmazione lineare binaria de-
terminando un limite per Z:
max Z = 4x1 + 2x2
3x1 −x2 ≤ 6
2x1 +x2 ≤ 2
x1 , x2 ∈ {0, 1}.
(Soluzione Z = 4).
Esercizio 4.5.3 Applicare il metodo del simplesso per risolvere il rilassa-
mento lineare del seguente problema di programmazione lineare binaria de-
terminando un limite per Z:
max Z = 5x1 + 3x2
−x1 +4x2 ≤ 5
3x1 +6x2 ≤ 5
x1 , x2 ∈ {0, 1}.
(Soluzione Z = 6).
Esercizio 4.5.4 Applicare il metodo del simplesso per risolvere il rilassa-
mento lineare del seguente problema di programmazione lineare binaria de-
terminando un limite per Z:
max Z = 6x1 + 3x2
4x1 +5x2 ≤ 5
2x1 +3x2 ≤ 4
x1 , x2 ∈ {0, 1}.
(Soluzione Z = 6).
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 172

Esercizio 4.5.5 Sia assegnato il seguente problema di programmazione li-


neare intera:
max Z = 3x1 + 2x2 + 4x3
−x1 +3x2 +4x3 ≤ 6
3x1 +4x2 ≤ 8
x1 , x2 , x3 ∈ N.
Determinare un limite per Z applicando il metodo del simplesso per risolvere
il relativo rilassamento lineare ed individuare la prima variabile di branching.
(Soluzione Z = 16 e x1 prima variabile di branching).
Esercizio 4.5.6 Sia assegnato il seguente problema di programmazione li-
neare intera:
max Z = 5x1 + 3x2 + 3x3
−x1 +2x2 −x3 ≤ 3
2x1 +x2 +4x3 ≤ 7
x1 , x2 , x3 ∈ N.
Determinare un limite per Z applicando il metodo del simplesso per risolvere
il relativo rilassamento lineare ed individuare la prima variabile di branching.
(Soluzione Z = 18 e x1 prima variabile di branching).
Esercizio 4.5.7 Sia assegnato il seguente problema di programmazione li-
neare intera:
max Z = 4x1 + 2x2 + 5x3
5x1 +x2 +5x3 ≤ 6
4x1 +2x2 +3x3 ≤ 8
x1 , x2 , x3 ∈ N.
Determinare un limite per Z applicando il metodo del simplesso per risolvere
il relativo rilassamento lineare ed individuare la prima variabile di branching.
(Soluzione Z = 9 e x2 prima variabile di branching).
Esercizio 4.5.8 Sia assegnato il seguente problema di programmazione li-
neare intera:
max Z = 3x1 + 4x2 + 3x3
x1 +3x2 +2x3 ≤ 10
2x1 −x2 +5x3 ≤ 12
x1 , x2 , x3 ∈ N.
Determinare un limite per Z applicando il metodo del simplesso per risolvere
il relativo rilassamento lineare ed individuare la prima variabile di branching.
(Soluzione Z = 24 e x1 prima variabile di branching).
CAPITOLO 4. PROGRAMMAZIONE LINEARE INTERA 173

Esercizio 4.5.9 Siano xi , i = 1, . . . , 5, cinque variabili binarie. Si consideri


il seguente vincolo

3x1 + 6x2 + 7x3 + 7x4 + 2x5 ≤ 15

e si identifichino quali, tra i seguenti insiemi, costituiscono una copertura


minima:
{x1 , x2 , x3 }, {x3 , x4 }, {x3 , x4 , x5 }, {x1 , x3 , x4 }.

Esercizio 4.5.10 Siano xi , i = 1, . . . , 5, tutte variabili binarie. Si consideri


il seguente vincolo

2x1 + 5x2 + 7x3 + 2x4 + 6x5 ≤ 8

e si identifichino quali, tra i seguenti insiemi, costituiscono una copertura


minima:
{x1 , x2 , x3 }, {x3 , x4 , x5 }, {x1 , x2 , x3 , x4 }, {x1 , x3 , x5 },
{x2 , x3 }, {x2 , x4 }, {x1 , x3 }, {x3 , x5 }.

Esercizio 4.5.11 Si consideri il seguente vincolo in cui tutte le variabili


decisionali sono binarie:

3x1 + 5x2 + 7x3 + 4x4 + 6x5 ≤ 10.

Determinare tutte le coperture minime di tale vincolo.

Esercizio 4.5.12 Siano xi , i = 1, . . . , 3, tre variabili binarie. Si consideri il


seguente vincolo
3x1 + 4x2 + 6x3 ≤ 8.
Si identifichino tutte le coperture minime ed i vincoli che queste definiscono.

Esercizio 4.5.13 Si consideri il seguente vincolo in cui tutte le variabili


decisionali sono binarie:

4x1 + 7x2 + 4x3 + 5x4 ≤ 10.

Scrivere i vincoli definiti dalle coperture minime di tale vincolo.


Capitolo 5

Teoria della dualità

5.1 Introduzione
La teoria della dualità consente di stabilire un legame tra un problema as-
segnato, che prende il nome di primale ed un altro, detto appunto duale. Il
vantaggio di tale aspetto risiede innanzitutto nella possibilità di approfondire
gli aspetti legati all’interpretazione economica della soluzione di un proble-
ma di programmazione lineare e, in subordine, può risultare vantaggioso,
dal punto di vista algoritmico, risolvere il problema duale al posto di quello
primale, ottenendo comunque la soluzione ottima del problema assegnato.
Vediamo innanzitutto un esempio di problema duale.

Esempio 5.1.1 Consideriamo il seguente esempio di problema della dieta.


In un allevamento si usano due tipologie di mangimi, A e B, con costi (per
etto) pari a 10 centesimi per il primo e 12 centesimi per il secondo. Cento
grammi di mangime devono contenere almeno 10 grammi di carboidrati, 18
grammi di proteine e 8 grammi di grassi. Nella seguente tabella sono ripor-
tati i contenuti (misurati in grammi per un etto di mangime) di carboidrati,
proteine e grassi per le due tipologie di mangime:
Mangime A Mangime B
Carboidrati 2 2
Proteine 4 2
Grassi 1 3
Obiettivo è quello di determinare la dieta di costo minimo che soddisfi i re-
quisiti minimi in relazione ai contenuti di carboidrati, proteine e grassi.

174
CAPITOLO 5. TEORIA DELLA DUALITÀ 175

Una volta definite le seguenti variabili

x1 = quantità (in etti) di mangime A da somministrare quotidianamente


x2 = quantità (in etti) di mangime B da somministrare quotidianamente

si ottiene il seguente modello:

min Z = 10x1 + 12x2


2x1 +2x2 ≥ 10
4x1 +2x2 ≥ 18
x1 +3x2 ≥ 8
x1 , x2 ≥ 0.

A questo problema è possibile associarne un altro che possiamo indicare co-


me il problema del venditore di integratori alimentari per animali. In questo
caso si vuole stabilire il prezzo di vendita degli integratori contenenti carboi-
drati, proteine e grassi. Ciascuna pillola di integratore fornisce un apporto
pari ad un grammo di carboidrati, proteine e grassi. L’obiettivo del venditore
di tali pillole è quello di massimizzare il ricavato della vendita fissando op-
portunamente i prezzi. Tali prezzi devono ovviamente essere competitivi con
quelli dei mangimi utilizzati dall’allevamento. Indichiamo con y1 , y2 e y3 le
seguenti variabili

y1 = prezzo di vendita di una pillola di carboidrati


y2 = prezzo di vendita di una pillola di proteine
y3 = prezzo di vendita di una pillola di grassi.

I prezzi di vendita devono essere ovviamente non negativi.


L’allevatore deve percepire che la dieta a base di pillole di integratori sia
conveniente rispetto a quella a base di mangimi, ossia dovrà risultare

2y1 + 4y2 + y3 ≤ 10

cioè il costo dell’equivalente (dal punto di vista nutrizionale) in pillole del


mangime di tipo A non deve essere superiore al suo costo. Analogamente per
il mangime B:
2y1 + 2y2 + 3y3 ≤ 12.
La funzione obiettivo indica il ricavo atteso dalla vendita, che in questo caso

W = 10y1 + 18y2 + 8y3
CAPITOLO 5. TEORIA DELLA DUALITÀ 176

considerando quelli che sono i fabbisogni giornalieri di carboidrati, proteine


e grassi.
In definitiva il problema viene definito dal seguente modello:
max W = 10y1 + 18y2 + 8y3
2y1 +4y2 +y3 ≤ 10
2y1 +2y2 +3y3 ≤ 12
y1 , y2 , y3 ≥ 0.
Nell’esempio appena visto è immediato rendersi conto del fatto che, asse-
gnato un problema di programmazione lineare è possibile associare un nuovo
problema, avente una relazione con quello iniziale.

5.2 Dualità per problemi di programmazione


lineare
Si consideri il seguente problema di programmazione lineare:
max Z = cT x
(P ) Ax = b
x ≥ 0.
dove A ∈ Rm×n , b ∈ Rm e c ∈ Rn sono, come abbiamo visto, i dati del
problema, ed x ∈ Rn è il vettore delle variabili e Z indica il valore della
funzione obiettivo. Supponiamo di voler trovare una maggiorazione per il
valore ottimo Z ∗ (supponendo che esista), cioè un valore U tale che
Z ∗ < U.
Osserviamo che, dato un qualunque vettore y ∈ Rm , ciascun vettore x che
sia soluzione ammissibile del problema assegnato (P) soddisfa l’equazione
y T (Ax) = y T b. (5.1)
Inoltre, assumendo che valga la relazione
AT y ≥ c,
poichè x è non negativo vale la disuguaglianza
cT x ≤ (AT y)T x = (y T A)x.
CAPITOLO 5. TEORIA DELLA DUALITÀ 177

Dunque, usando l’uguaglianza (5.1), si trova

cT x ≤ (y T A)x = y T (Ax) = y T b = bT y. (5.2)

Ricapitolando, dato un qualunque vettore y ∈ Rm tale che

AT y ≥ c,

ogni vettore x ammissibile per (P) soddisfa

cT x ≤ bT y.

Ne segue che
Z ∗ ≤ bT y,
dunque il valore bT y è una maggiorazione per il valore ottimo Z ∗ . Se sia-
mo alla ricerca della migliore maggiorazione (cioè quella minima) che può
essere ricavata in questo modo, bisogna determinare il valore ottimo W ∗ del
seguente problema di programmazione lineare

min W = bT y
(D)
AT y ≥ c.

Quest’ultimo problema è detto il problema duale di (P), che è invece chiamato


problema primale.

Teorema 5.2.1 (Teorema della dualità debole) Per ogni x soluzione am-
missibile di (P) e per ogni y soluzione ammissibile di (D) risulta

cT x ≤ bT y.

Dimostrazione. Poichè x ≥ 0 ed y è ammissibile per (D) risulta

cT x ≤ (AT y)T x = y T Ax,

ricordando che x è ammissibile per (P) abbiamo

cT x ≤ y T Ax ≤ y T b = bT y. ✷

Dal Teorema della dualità debole segue il seguente criterio di ottimalità.


CAPITOLO 5. TEORIA DELLA DUALITÀ 178

Corollario 5.2.1 Siano x∗ una soluzione ammissibile per (P) e y ∗ una


soluzione ammissibile per (D). Se

cT x∗ = bT y ∗ ,

allora x∗ e y ∗ sono soluzioni ottime dei rispettivi problemi.

Dimostrazione. Applicando il Teorema della dualità debole e considerato


che x∗ e y ∗ sono ammissibili, allora per ogni x ammissibile per (P), risulta

cT x ≤ bT y ∗ = cT x∗

da cui segue che x∗ è soluzione ottima per (P).


In modo analogo, cosiderando una soluzione y ammissibile per (D), risulta

bT y ≥ cT x∗ = bT y ∗ ,

da cui segue che y è soluzione ottima per (D). ✷

Corollario 5.2.2 Se uno dei due problemi (P) e (D) è illimitato allora l’altro
è inammissibile.

Dimostrazione. Supponiamo che (P) sia illimitato. Se, per assurdo, (D)
ammettesse una soluzione ammissibile y allora per il Teorema della dualità
debole
cT x ≤ bT y
per ogni x soluzione ammissibile per (P), e quindi (P) non sarebbe illimitato.

Un risultato fondamentale è il seguente.

Teorema 5.2.2 (Teorema della dualità forte) Se (P) ha una soluzione


ottima x∗ allora (D) ha una soluzione ottima y ∗ e risulta

cT x∗ = bT y ∗ .

In base ai risultati fin qui presentati se un problema di programmazione


lineare ha una soluzione ottima, la migliore maggiorazione che è possibile
ottenere con la tecnica del duale è il valore ottimo stesso.
CAPITOLO 5. TEORIA DELLA DUALITÀ 179

5.3 Dualità, basi ottime e metodo del sim-


plesso
Consideriamo il problema primale (P) ed il suo duale (D). Per questioni
di notazione indichiamo con B una base (non necessariamente ammissibile)
per il problema (P) e consideriamo la matrice dei vincoli suddivisa in AB ,
composta dalle colonne della matrice dei vincoli relative alle base B, e AN ,
le restanti colonne relative alle variabili non in base (che non appartengono
alla base B). La soluzione di base di (P) associata a B è il vettore x definito
da
xN = 0, xB = A−1B b.

Definiamo
y = A−T
B cB ,

dove A−T
B è
−1 T T −1
A−T
B = (AB ) = (AB ) .

Notiamo che
T
cT x = cTB xB = cTB A−1 −T
B b = AB cB b = y T b = bT y.

Pertanto, se x è ammissibile per (P) e y è ammissibile per (D), allora, per il


Corollario 5.2.1, x e y sono soluzioni ottime per i rispettivi problemi.
Cerchiamo dunque di capire quando x e y sono soluzioni ammissibili per i
problemi (P) e (D) rispettivamente. Il vettore x è ammissibile per il problema
primale se e solo se
b = A−1
B b ≥ 0.

Osserviamo che questa condizione è sempre verificata durante l’esecuzione


del metodo del simplesso. Il vettore y, invece, è ammissibile per il duale se
e solo se
AT y ≥ c,
cioè se e solo se
ATB y ≥ cB (5.3)
e
ATN y ≥ cN . (5.4)
Poichè
ATB y = ATB A−T
B cB = cB ,
CAPITOLO 5. TEORIA DELLA DUALITÀ 180

la condizione (5.3) è sempre verificata. Dunque y è ammissibile se e solo se


ATN A−T
B cB ≥ cN ,

cioè se e solo se
cN − ATN A−1
B cB ≤ 0.

Si può notare che il primo membro di quest’ultima disequazione è precisa-


mente il vettore dei cosiddetti costi ridotti (cioè i coefficienti delle variabili
non in base nella funzione obiettivo) delle variabili non in base relativo alla
base B. Pertanto possiamo affermare che y è ammissibile se e solo se
cN ≤ 0.
Si noti che questa è esattamente la condizione che si verifica quando il metodo
del simplesso termina con una soluzione ottima.
Ricapitolando, x e y sono ammissibili per i rispettivi problemi se e solo se b ≥
0 e cN ≤ 0. Inoltre, come osservato sopra, se x e y sono ammissibili allora
sono soluzioni ottime dei rispettivi problemi. Possiamo dunque affermare
che, quando il metodo del simplesso termina con una soluzione ottima di
base x ed una base B che determina tale soluzione, il vettore
y = A−T
B cB

è una soluzione ottima del problema duale.


Data una base B per il problema (P), B è detta una base ammissibile nel
primale se
b = A−1
B b ≥ 0,
cioè se x è una soluzione ammissibile per il problema primale (P). La base
B è detta una base ammissibile nel duale se
cN = cN − ATN A−T
B cB ≤ 0,

cioè se y è ammissibile per il problema duale (D). Quanto visto sopra mostra
che se B è una base ammissibile sia nel primale che nel duale, allora i cor-
rispondenti vettori x e y sono soluzioni ottime dei rispettivi problemi. Per
questo motivo, B è detta una base ottima se è ammissibile sia nel primale
che nel duale.
Dunque, se (P) ha soluzione ottima, allora il metodo del simplesso mantiene
una base ammissibile nel primale ad ogni iterazione e termina quando rag-
giunge una base ammissibile anche nel duale, cioè quando arriva ad una base
ottima.
CAPITOLO 5. TEORIA DELLA DUALITÀ 181

5.4 Altre forme di dualità


Se consideriamo il problema in forma standard
max Z = cT x
(P ) Ax ≤ b
x ≥ 0.
Cerchiamo anche in questo caso una maggiorazione per il valore ottimo Z ∗ .
Dato un qualunque vettore y ∈ Rm , tale che y ≥ 0, ogni vettore x che sia
soluzione ammissibile del problema assegnato (P) soddisfa la disequazione
y T (Ax) ≤ y T b.
Inoltre, se vale la relazione
AT y ≥ c,
poichè x è non negativo vale la disuguaglianza
cT x ≤ (AT y)T x = (y T A)x.
Dunque si ottiene
cT x ≤ (y T A)x = y T (Ax) ≤ y T b = bT y.
Ricapitolando, dato un qualunque vettore y ∈ Rm tale che
AT y ≥ c, y≥0
ogni vettore x ammissibile per (P) soddisfa
cT x ≤ bT y.
Ne segue che
Z ∗ ≤ bT y,
dunque il valore bT y è una maggiorazione per il valore ottimo Z ∗ . La migliore
maggiorazione che è possibile trovare è il valore ottimo W ∗ del seguente
problema di programmazione lineare
min W = bT y
(D) AT y ≥ c
y≥0
che è detto problema duale di (P).
Il seguente risultato consente di stabilire una relazione di tipo ciclico, tra
problema primale e duale.
CAPITOLO 5. TEORIA DELLA DUALITÀ 182

Teorema 5.4.1 Il duale del problema duale è il problema primale.


Dimostrazione. Il problema (D) possiamo scriverlo nel seguente modo
equivalente
max −W = −bT y
−AT y ≤ −c
y ≥ 0.
il cui problema duale è
min −Z = −cT x
−Ax ≥ −b
x ≥ 0.
che è equivalente al problema (P). ✷
In quest’ultima parte del paragrafo ricapitoliamo le relazioni tra problema
duale e primale che si possono presentare e che sono riassunte nella seguente
tabella.

Primale/Duale (D) Ottimo finito (D) Illimitato (D) Inammissibile


(P) Ottimo finito SI NO NO
(P) Illimitato NO NO SI
(P) Inammissibile NO SI SI
La prima riga e la prima colonna della tabella sono una conseguenza del
Teorema della dualità debole. Applicando i relativi corollari si ottengono i
due casi in cui uno dei problemi è illimitato e l’altro risulta inammissibile e
viene esclusa la possibilità che entrambi siano illimitati.
Rinunciando a voler esaminare in modo dettagliato tutti i casi che si presen-
tano nella trasformazione primale-duale, riassumiamo nella seguente tabella
le regole di trasformazione primale-duale. La tabella può essere letta sia da
sinistra a destra che viceversa.
Primale Duale
max Z = cT x min W = bT y
Vincolo i−esimo di tipo ≤ Variabile yi ≥ 0
Vincolo i−esimo di tipo = Variabile yi libera
Vincolo i−esimo di tipo ≥ Variabile yi ≤ 0
Variabile xi ≥ 0 Vincolo i−esimo di tipo ≥ 0
Variabile xi libera Vincolo i−esimo di tipo =
Variabile xi ≤ 0 Vincolo i−esimo di tipo ≤ 0
CAPITOLO 5. TEORIA DELLA DUALITÀ 183

Esempio 5.4.1 Determinare il duale del seguente problema primale:


max Z = 4x1 + 3x2 + 2x3
x1 +2x2 +3x3 ≤ 8
2x1 −x3 ≤ 7
3x1 +4x2 −x3 ≤ 5
x2 +x3 ≤ 6
x2 ≥ 0, x1 , x3 ∈ R.
Il problema duale è un problema di minimo, ha 4 variabili decisionali, 3
vincoli dei quali il primo e il terzo sono di uguaglianza (le variabili x1 e
x3 sono libere), mentre il secondo è di tipo ≥. Sulle 4 variabili decisionali
abbiamo vincoli di non negatività.
min W = 8y1 + 7y2 + 5y3 + 6y4
y1 +2y2 +3y3 = 4
2y1 +4y3 +y4 ≥ 3
3y1 −y2 −y3 +y4 = 2
y1 , y2, y3 , y4 ≥ 0.
Esempio 5.4.2 ((P) e (D) inammissibili) Consideriamo il seguente pro-
blema primale
max Z = x1 + x2
−x1 +x2 = 1
−x1 +x2 = 0
x1 , x2 ≥ 0.
In base alla tabella vista il problema duale è il seguente
min W = y1
−y1 −y2 ≥ 1
y1 +y2 ≥ 1
y1 , y2 libere.
Entrambi i problemi risultano chiaramente inammissibili.
Esempio 5.4.3 ((P) illimitato e (D) inammissibile) Consideriamo il se-
guente problema primale
min Z = −x1 + x2 + 2x3
x2 −2x3 ≥ 1
−x1 −x2 +x3 ≥ 1
x1 , x2 , x3 ≥ 0.
CAPITOLO 5. TEORIA DELLA DUALITÀ 184

In base alla tabella vista il problema duale è il seguente

max W = y1 + y2
−y2 ≤ −1
y1 −y2 ≤ 1
−2y1 +y2 ≤ 2
y1 , y2 ≥ 0.

Il problema duale risulta illimitato (si può verificarlo graficamente) e quindi


il primale è inammissibile.

5.4.1 Il metodo del simplesso duale


Come visto in precedenza il metodo del simplesso mantiene, ad ogni iterazio-
ne, una base ammissibile nel primale, che però non è ammissibile nel duale
(con l’eccezione dell’ultima iterazione, in cui, se il problema ha soluzione ot-
tima, la soluzione primale e quella duale associate alla base corrente sono
entrambe ammissibili per i rispettivi problemi). Ad ogni iterazione viene
determinata una nuova base ammissibile nel primale tale che il valore della
funzione obiettivo della soluzione associata sia maggiore o uguale al valore
della soluzione precedente. Si ricordi anche che il metodo del simplesso può
essere avviato solo quando è nota una base ammissibile primale, che può es-
sere eventualmente determinata tramite la Fase I se il problema da risolvere
si presenta in forma non standard. In certe situazioni è immediatamente
disponibile una base ammissibile del duale piuttosto che del primale. In tal
caso, invece di applicare la Fase I e poi la Fase II, è possibile utilizzare diret-
tamente il metodo del simplesso duale: tale procedura, partendo da una base
ammissibile nel duale (ovvero una base per la quale i costi ridotti siano non
positivi), ad ogni iterazione cerca una nuova base ammissibile nel duale la
cui soluzione di base associata abbia costo minore o uguale della precedente.
L’algoritmo termina quando viene trovata una base che sia ammissibile anche
nel primale: per quanto osservato in precedenza, sappiamo infatti che una
tale base è ottima. Al termine della procedura avremo dunque una soluzione
ottima per il primale e una per il duale.
Ad ogni iterazione del metodo del simplesso il tableau presenta la seguente
struttura (in realtà semplificata poichè le colonne della matrice identità pos-
sono trovarsi in una qualsiasi posizione della tabella e non necessariamente
CAPITOLO 5. TEORIA DELLA DUALITÀ 185

nelle ultime colonne tranne in quello iniziale):

(0) ±1 c1 c2 . . . . . . cn 0 0 ... 0 Z
(1) 0 b1
.. .. ..
. . .
.. ..
. . Matrice A Matrice I bi
.. .. ..
. . .
(m) 0 bm

Considerate le relazioni che sussistono tra i problemi primale e duale, lo stesso


tableau può essere associato ad entrambi i problemi invertendo l’interpreta-
zione delle righe e delle colonne.
Questo significa che gli elementi della colonna dei termini noti sono:
• sia i valori assunti dalle variabili in base nel problema primale
• che i coefficienti della funzione obiettivo del problema duale (ovvero gli
elementi dell’equazione (0).
Inoltre i coefficienti dell’equazione (0) del suddetto tableau sono:
• i coefficienti della funzione obiettivo del problema primale;
• i valori assunti dalle variabili in base nel problema duale.
Quando sia i termini noti bi che i coefficienti ci risultino tutti non negativi al-
lora si è in presenza di una soluzione che è contemporaneamente ammissibile
sia per il problema primale che per il problema duale e quindi la soluzione è
ottima per entrambi.
Se invece, una volta reso il problema in forma canonica, si osserva che è nota
una soluzione ammissibile per il duale ma non per il primale (ovvero tutti
i coefficienti dell’equazione (0) sono non negativi e invece qualche termine
noto non lo è), allora si può pensare di risolvere il problema applicando il
metodo del simplesso ma invertendo le operazioni tra righe e colonne.
Tale metodo prende appunto il nome di Metodo del simplesso duale.
Consideriamo ora un problema di programmazione lineare con le seguenti
caratteristiche:
1. Non sono presenti vincoli di uguaglianza ma solo di tipo ≥ o ≤;
2. Il problema viene reso in forma canonica aumentata variabili slack o sur-
plus;
3. Nell’equazione (0) tutti i coefficienti sono non negativi.
Dati una matrice A ∈ Rm×n di rango m e vettori b ∈ Rm , c ∈ Rn , si consideri
CAPITOLO 5. TEORIA DELLA DUALITÀ 186

il problema
max Z = cT x
Ax = b
x ≥ 0.
il cui duale è
min W = bT y
AT y ≥ c.
Sia B = {k1 , k2 , . . . , km } una base ammissibile nel duale. Il problema in
forma tableau rispetto a tale base è il seguente:

Z −cN xN = Z

xB +AN xN = b

x ≥ 0.

Poichè B è ammissibile per il duale, cj ≤ 0 per ogni j ∈ N, dove N è l’insieme


degli indici relativi alle variabili non in base. Ricordiamo che la soluzione
duale associata alla base B è

y = A−T
B cB

e che il valore di tale soluzione è

W = cTB A−1
B b.

La soluzione primale associata alla base B è invece il vettore x definito da

x ki = bi , i = 1, . . . , m

xN = 0.

Se bi ≥ 0 per ogni i = 1, . . . , m, allora x è ammissibile e quindi B è una base


ammissibile anche per il primale e dunque è ottima e anche x è una soluzione
ottima ed il problema è risolto.
Supponiamo dunque che esista h ∈ {1, . . . , m} tale che bh < 0.
Vogliamo far uscire di base la variabile xkh e dobbiamo selezionare la variabile
entrante in modo da ottenere una nuova base ammissibile nel duale. Abbiamo
due casi.
CAPITOLO 5. TEORIA DELLA DUALITÀ 187

Caso 1: ahj ≥ 0 per ogni j ∈ N.


Ogni soluzione ammissibile x per il primale soddisfa l’h-esimo vincolo del
primale, cioè X
xih + ahj xj = bh .
j∈N

Poichè x ≥ 0 e ahj ≥ 0 per ogni j ∈ N, avremo


X
xih + ahj xj ≥ 0
j∈N

e dunque bh ≥ 0, che contraddice la scelta bh < 0.


In tal caso il problema primale non ha soluzioni ammissibili e abbiamo ter-
minato.

Caso 2: Esiste un indice j ∈ N tale che ahj < 0.


Vogliamo determinare un indice k ∈ N tale che la base

B ′ = B ∪ {k} \ {ih }

rimanga ammissibile nel duale. È possibile verificare che, scegliendo k ∈ N


tale che
ahk < 0
e  
ck cj
= max : j ∈ N, ahj < 0 ,
ahk ahj
si ottiene che B ′ è una base ammissibile per il duale (i calcoli e la verifica di
tale proprietà non sono un risultato immediato e quindi qui sono omessi).
Ricapitoliamo di seguito quali sono i passi richiesti dal metodo del simplesso
duale.

Passo 1 Verifica di ottimalità:


Se
bi ≥ 0, i = 1, . . . , n
allora la BFS corrente è ottima, quindi STOP altrimenti si va al Passo
2.
CAPITOLO 5. TEORIA DELLA DUALITÀ 188

Passo 2 Scelta della riga pivot.


Si sceglie la riga h tale che
bh = min {bi } < 0.
i

Per la scelta di h si può applicare la regola di Bland (ovvero la prima


riga dall’alto se il minimo è raggiunto su più righe).
Passo 3 Verifica di illimitatezza del duale.
Se
ahj ≥ 0 j = 1, . . . , n
allora il duale è illimitato (e di conseguenza il primale è inammissibile)
quindi STOP altrimenti si va al Passo 4.
Passo 4 Scelta della colonna pivot.
Si sceglie la colonna k tale che
 
ck cj
= max : j ∈ N, ahj < 0 .
ahk ahj
Poichè i quozienti sono negativi, si determina il più piccolo in valore
assoluto.
Nel caso il minimo sia raggiunto in più colonne si sceglie, per conven-
zione, quella con l’indice più piccolo (sempre applicando la regola di
Bland).
Passo 5 Operazione di pivot.
Si esegua l’operazione di pivot su akh e si torna al Passo 1.
Osservazione. I coefficienti ci sono quelli che sono memorizzati nella prima
riga del tableau e che sono tutti positivi in quanto sono l’opposto dei coeffi-
cienti delle variabili non in base nella funzione obiettivo (e che sono negativi
in virtù dell’ammissibilità della BFS corrente).
Esempio 5.4.4 Applicare il metodo del simplesso duale per risolvere il se-
guente problema di programmazione lineare in forma non standard:
min Z = x1 + x2

x1 ≥ 2
−x1 +2x2 ≥ 3
x1 , x2 ≥ 0.
CAPITOLO 5. TEORIA DELLA DUALITÀ 189

Innanzitutto riscriviamo la funzione obiettivo come problema di massimo e


introduciamo le variabili surplus:

max −Z = −x1 − x2

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

Dobbiamo porre il problema in forma canonica moltiplicando per −1 le


equazioni vincolari, pertanto il sistema da risolvere è

(0) −Z +x1 +x2 = 0


(1) −x1 +x3 = −2
(2) x1 −2x2 +x4 = −3

Scriviamo il tableau iniziale:

Iterazione 0
Var. x1 x2 x3 x4
base Eq. Z bi
Z (0) −1 1 1 0 0 0
x3 (1) 0 −1 0 1 0 −2
x4 (2) 0 1 −2 0 1 −3

È uscita dalla base x4 che aveva il valore negativo più piccolo, mentre è
entrata in base x2 che presentava l’unico coefficiente negativo nell’equazione
(2). Si esegue un’operazione di pivoting sull’elemento −2 e si procede in
modo analogo con la successiva iterazione.

Iterazione 1
Var. x1 x2 x3 x4
base Eq. Z bi
3 1
Z (0) −1 2 0 0 2
− 32
x3 (1) 0 −1 0 1 0 −2
x2 (2) 0 − 21 1 0 − 12 3
2
CAPITOLO 5. TEORIA DELLA DUALITÀ 190

Iterazione 2
Var. x1 x2 x3 x4
base Eq. Z bi
3 1
Z (0) −1 0 0 2 2
− 92
x1 (1) 0 1 0 −1 0 2
x2 (2) 0 0 1 − 12 − 12 5
2

Non ci sono coefficienti negativi nella colonna dei termini noti quindi abbiamo
trovato la soluzione ottima (2, 5/2, 0, 0) in cui

Z = 9/2.

Rappresentiamo graficamente le BFS trovate nelle successive iterazioni dal


metodo del simplesso duale.

x2

x1

La regione color ciano rappresenta la regione ammissibile del problema as-


segnato, quindi si nota che il metodo del simplesso duale trova la soluzione
ottima partendo da un vertice non ammissibile e spostandosi su altri vertici
non ammissibili e si ferma, trovando la soluzione ottima solo quando arriva
in un vertice ammissibile.
CAPITOLO 5. TEORIA DELLA DUALITÀ 191

Esempio 5.4.5 Applicare il metodo del simplesso duale per risolvere il se-
guente problema di programmazione lineare in forma non standard:
max Z = −3x1 − 4x2 − 6x3

2x1 +4x2 −x3 ≥ 2


x1 +5x2 +4x3 ≥ 3
x1 , x2 , x3 ≥ 0.
Innanzitutto riscriviamo il problema in forma aumentata introducendo le
variabili surplus:
max Z = −3x1 − 4x2 − 6x3

2x1 +4x2 −x3 −x4 = 2


x1 +5x2 +4x3 −x5 = 3
x1 , x2 , x3 , x4 , x5 ≥ 0.
Dobbiamo porre il problema in forma canonica moltiplicando per −1 le
equazioni vincolari, pertanto il sistema da risolvere è
(0) Z +3x1 +4x2 +6x3 = 0
(1) −2x1 −4x2 +x3 +x4 = −2
(2) −x1 −5x2 −4x3 +x5 = −3
Scriviamo il tableau iniziale:

Iterazione 0
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 3 4 6 0 0 0
x4 (1) 0 −2 −4 1 1 0 −2
x5 (2) 0 −1 −5 −4 0 1 −3

È uscita dalla base x5 che aveva il valore negativo più piccolo, mentre per
determinare la variabile entrante si è calcolato il
 
3 4 6 4
max , , =−
−1 −5 −4 5
quindi è entrata la variabile x2 .
CAPITOLO 5. TEORIA DELLA DUALITÀ 192

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
11 14 4
Z (0) 1 5 0 5 0 5
− 12
5

x4 (1) 0 − 65 0 21
5 1 − 45 2
5

x2 (2) 0 − 15 1 4
5 0 − 15 3
5

Non ci sono coefficienti negativi nella colonna dei termini noti quindi abbiamo
trovato la soluzione ottima (0, 3/5, 0, 2/5, 0) in cui
12
Z=− .
5
Esempio 5.4.6 Applicare il metodo del simplesso duale per risolvere il se-
guente problema di programmazione lineare in forma non standard:

min Z = x1 + x2

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

Innanzitutto riscriviamo la funzione obiettivo come problema di massimo e


introduciamo due variabile slack:
max −Z = −x1 − x2

−x1 +x2 +x3 = −2


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

Il sistema da risolvere è
(0) −Z +x1 +x2 = 0
(1) −x1 +x2 +x3 = −2
(2) 2x1 −x2 +x4 = 1

Scriviamo il tableau iniziale:


CAPITOLO 5. TEORIA DELLA DUALITÀ 193

Iterazione 0
Var. x1 x2 x3 x4
base Eq. Z bi
Z (0) −1 1 1 0 0 0
x3 (1) 0 −1 1 1 0 −2
x4 (2) 0 2 −1 0 1 1

Iterazione 1
Var. x1 x2 x3 x4
base Eq. Z bi
Z (0) −1 0 2 1 0 −2
x1 (1) 0 1 −1 −1 0 2
x4 (2) 0 0 1 2 1 −3

Il problema è inammissibile poichè nell’ultima colonna è presente un coeffi-


ciente negativo ma nella corrispondente riga non c’è alcun elemento negativo.
Esempio 5.4.7 Applicare il metodo del simplesso duale per risolvere il se-
guente problema di programmazione lineare in forma non standard:
1
min Z = x1 + x2
2

x1 −x2 ≥ 2
x1 +x2 ≥ 2
x2 ≤ 2
x1 , x2 ≥ 0.
Innanzitutto riscriviamo la funzione obiettivo come problema di massimo e
introduciamo due variabili surplus ed una slack:
1
max −Z = − x1 − x2
2

x1 −x2 −x3 = 2
x1 +x2 −x4 = 2
x2 +x5 = 2
x1 , x2 , x3 , x4 , x5 ≥ 0.
CAPITOLO 5. TEORIA DELLA DUALITÀ 194

Moltiplichiamo per −1 le prime due equazioni vincolari, cosicchè il sistema


da risolvere è
1
(0) −Z + x1 +x2 = 0
2
(1) −x1 +x2 +x3 = −2
(2) −x1 −x2 +x4 = −2
(3) x2 +x5 = 2

Il tableau iniziale del metodo del simplesso duale è il seguente

Tableau iniziale
Var. x1 x2 x3 x4 x5
base Eq. Z bi
1
Z (0) −1 2 1 0 0 0 0
x3 (1) 0 −1 1 1 0 0 −2
x4 (2) 0 −1 −1 0 1 0 −2
x5 (3) 0 0 1 0 0 1 2

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
3 1
Z (0) −1 0 2 2 0 0 −1
x1 (1) 0 1 −1 −1 0 0 2
x4 (2) 0 0 −2 −1 1 0 0
x5 (3) 0 0 1 0 0 1 2

Non ci sono coefficienti negativi nella colonna dei termini noti quindi abbiamo
trovato la soluzione ottima (2, 0, 0, 0, 2) in cui

Z = 1.
CAPITOLO 5. TEORIA DELLA DUALITÀ 195

Esempio 5.4.8 Applicare il metodo del simplesso duale per risolvere il se-
guente problema di programmazione lineare in forma non standard:
min Z = 3x1 + 4x2 + 5x3

2x1 +2x2 +x3 ≥ 6


x1 +2x2 +3x3 ≥ 5
x1 , x2 , x3 ≥ 0.
Innanzitutto riscriviamo la funzione obiettivo come problema di massimo e
introduciamo le variabili surplus:
max −Z = −3x1 − 4x2 − 5x3

2x1 +2x2 +x3 −x4 = 6


x1 +2x2 +3x3 −x5 = 5
x1 , x2 , x3 , x4 , x5 ≥ 0.
Dobbiamo porre il problema in forma canonica moltiplicando per −1 le
equazioni vincolari, pertanto il sistema da risolvere è
(0) −Z +3x1 +4x2 +5x3 = 0
(1) −2x1 −2x2 −x3 +x4 = −6
(2) −x1 −2x2 −3x3 +x5 = −5
Scriviamo il tableau iniziale:
Iterazione 0
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) −1 3 4 5 0 0 0
x4 (1) 0 −2 −2 −1 1 0 −6
x5 (2) 0 −1 −2 −3 0 1 −5

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
7 3
Z (0) −1 0 1 2 2 0 −9
1
x1 (1) 0 1 1 2
− 12 0 3
x5 (2) 0 0 −1 − 52 − 12 1 −2
CAPITOLO 5. TEORIA DELLA DUALITÀ 196

Iterazione 2
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) −1 0 0 1 1 1 −11
x1 (1) 0 1 0 −2 −1 1 1
x2 5 1
(2) 0 0 1 2 2 −1 2

La soluzione ottima è (1, 2, 0, 0, 0) con valore Z = 11.

Osservazione. Come detto in precedenza il metodo del simplesso duale può


essere applicato in alternativa al metodo del simplesso a due fasi in alcuni
casi specifici, soprattutto quando il problema da risolvere è la minimizzazione
di una funzione obiettivo e sono presenti vincoli di tipo ≥. L’applicazione
sembrerebbe preclusa nel caso fosse presente un vincolo di uguaglianza. In
realtà in questo caso si potrebbe sostituire il vincolo di uguaglianza

ai1 x1 + ai2 x2 + · · · + ai,n−1xn−1 + ain xn = bi

con i seguenti due vincoli

ai1 x1 + ai2 x2 + · · · + ai,n−1 xn−1 + ain xn ≥ bi

ai1 x1 + ai2 x2 + · · · + ai,n−1 xn−1 + ain xn ≤ bi

equivalenti a quello assegnato ed applicare il metodo del simplesso duale.


Appare chiaro però che in questo caso aumenterebbe il numero di variabili
del problema e quindi la sua complessità.

Esempio 5.4.9 Applicare il metodo del simplesso duale per risolvere il se-
guente problema di programmazione lineare in forma non standard:

max Z = −x1 − x2

x1 +3x2 = 5
3x1 +2x2 ≥ 1
x1 , x2 ≥ 0.
CAPITOLO 5. TEORIA DELLA DUALITÀ 197

Innanzitutto riscriviamo il vincolo di uguaglianza sotto forma di disugua-


glianze:
max Z = −x1 − x2

x1 +3x2 ≥ 5
x1 +3x2 ≤ 5
3x1 +2x2 ≥ 1
x1 , x2 ≥ 0.
Scriviamo il problema in forma aumentata inserendo due variabili surplus
(nel primo e terzo vincolo) ed una variabile slack nel secondo:

max Z = −x1 − x2

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

Per porre il problema in forma canonica moltiplichiamo per −1 la prima e


terza equazione, pertanto il sistema da risolvere è

(0) Z +x1 +x2 = 0


(1) −x1 −3x2 +x3 = −5
(2) x1 +3x2 +x4 = 5
(3) −3x1 −2x2 −4x3 +x5 = −1

Scriviamo il tableau iniziale:

Iterazione 0
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 1 1 0 0 0 0
x3 (1) 0 −1 −3 1 0 0 −5
x4 (2) 0 1 3 0 1 0 5
x5 (3) 0 −3 −2 0 0 1 −1
CAPITOLO 5. TEORIA DELLA DUALITÀ 198

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
2 1
Z (0) 1 3 0 3 0 0 − 35
1
x2 (1) 0 3 1 − 13 0 0 5
3

x4 (2) 0 0 0 1 1 0 0
x5 (3) 0 − 37 0 − 13 0 1 7
3

5.5 Analisi di sensitività e postottimale


I problemi di programmazione lineare sono la formulazione matematica di
problemi che si presentano nella vita reale e richiedono un’opportuna spe-
rimentazione per poter definire un modello finale del problema che tenga
conto correttamente di tutti i parametri e che fornisca, una volta risolto, la
soluzione ottima del caso reale. Durante tale sperimentazione sarà necessa-
rio risolvere un problema, valutare i risultati, verificare l’aderenza di questi
alla realtà, modificare opportunamente il modello e ripetere lo stesso proce-
dimento finchè i risultati sono quelli attesi. Appare chiaro che tale processo
richiede la risoluzione di una serie di problemi matematici che spesso hanno
dimensioni molto elevate e sono molto simili tra loro. Pertanto risulta molto
conveniente valutare, spesso a posteriori, come varia la soluzione di un pro-
blema di programmazione lineare al variare di qualche parametro. Le cause
che richiedono tale analisi a posteriori possono essere, tra le altre, le seguenti:

1. Debugging del modello (cioè trovare eventuali debolezze o errori nel


modello);

2. Validazione del modello (cioè verificare se i risultati sono aderenti alla


realtà);

3. Decisioni del management sull’allocazione delle risorse (prezzi ombra);

4. Valutazione delle stime dei parametri del modello.

Un approccio molto utilizzato per affrontare questi problemi è quello della


cosiddetta Riottimizzazione, che consiste nel dedurre come le variazioni nella
CAPITOLO 5. TEORIA DELLA DUALITÀ 199

definizione del modello influenzano il risultato ottenuto. Se si risolve il pro-


blema di programmazione lineare utilizzando il metodo del simplesso allora
si può cercare di dedurre la variazione nella soluzione ottima studiando il
tablaeu finale oppure utilizzando la soluzione ottima del modello precedente
come BFS iniziale per quello modificato (purchè risulti ancora ammissibile).
Un classico problema di programmazione lineare prevede la risoluzione del
problema di massimo
max Z = c1 x1 + c2 x2 + · · · + cn xn
che può essere interpretato come la volontà di rendere massimo il profitto Z,
in funzione delle quantità xi (n è il numero di merci che vengono prodotte
ed xi è la quantità prodotta, mentre ci è il profitto della singola unità di
merce prodotta). Ovviamente le quantità prodotte devono essere vincolate
alle risorse disponibili. Le risorse sono m e, per ognuna di queste, vale il
seguente vincolo
ai1 x1 + ai2 x2 + · · · + ain xn ≤ bi
in cui bi rappresenta la disponibilità della i−esima risorsa: per esempio se tale
risorsa è una fabbrica oppure il reparto di un’azienda allora bi può essere il
tempo che il management aziendale destina affinchè questa risorsa produca ed
i valori aij sono il tempo che tale risorsa usa per produrre la j−esima merce.
I valori dei parametri appena indicati potrebbero essere soggetti a variazioni
poichè potrebbe essere scopo dell’azienda quello di valutare l’opportunità
di modificare il loro valore e valutare il conseguente tasso di variazione del
profitto.

5.5.1 Analisi di sensitività


Supponiamo assegnato il seguente problema di programmazione lineare
max Z = cT x
Ax ≤ b
x≥0
e che ammetta soluzione ottima x∗ tale che
Z ∗ = cT x∗ = cTB x∗B
dove, al solito, xB rappresenta il vettore delle variabili in base e cB il vettore
dei costi associati alle variabili in base. Ci poniamo due quesiti:
CAPITOLO 5. TEORIA DELLA DUALITÀ 200

1. Di quanto varia la funzione obiettivo se cj varia della quantità ∆cj , sup-


ponendo che tale variazione lasci invariati gli indici delle variabili in base?

Indichiamo con ej il j−esimo versore fondamentale di Rn e indichiamo con


Z ∗ (c + ∆cj ej ) il valore della funzione obiettivo in corrispondenza dei nuovi
costi. Allora risulta
Z ∗ (c + ∆cj ej ) = (c + ∆cj ej )T x∗B

T T Z∗ se xj non è in base
=c x∗B + (∆cj ej ) x∗B =
Z + ∆cj xj se xj è in base.

Quindi se indichiamo con ∆Z la variazione della funzione obiettivo è data da



∗ ∗ ∗ 0 se xj non è in base
∆Z = Z (c + ∆cj ej ) − Z =
∆cj xj se xj è in base.

Considerando il problema dal punto di vista economico l’interpretazione è


ovvia: se un bene non viene prodotto allora il valore della funzione obiettivo
non è influenzata dal suo prezzo.

2. Di quanto varia la funzione obiettivo se bi varia della quantità ∆bi , sup-


ponendo che tale variazione lasci invariati gli indici delle variabili in base?

Affrontiamo questa questione nella prossima sezione, con un esempio.

5.5.2 Prezzi ombra


A questo scopo consideriamo ora il seguente problema di programmazione
lineare:
max Z = x1 + 2x2
20x1 +3x2 ≤ 50
10x1 +3x2 ≤ 30
x2 ≤ 4
x1 ≥ 0, x2 ≥ 0.
CAPITOLO 5. TEORIA DELLA DUALITÀ 201

Risolviamo ora il problema applicando il metodo del simplesso. Introduciamo


tre variabili slack (una per ogni vincolo) e risolviamo il problema aumentato:

max Z = x1 + 2x2
20x1 +3x2 +x3 = 50
10x1 +3x2 +x4 = 30
x2 +x5 = 4
xi ≥ 0, i = 1, 2, 3, 4, 5.

Iterazione 0
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 −2 0 0 0 0
x3 (1) 0 20 3 1 0 0 50
x4 (2) 0 10 3 0 1 0 30
x5 (3) 0 0 1 0 0 1 4

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 0 0 0 2 8
x3 (1) 0 20 0 1 0 −3 38
x4 (2) 0 10 0 0 1 −3 18
x2 (3) 0 0 1 0 0 1 4
CAPITOLO 5. TEORIA DELLA DUALITÀ 202

Iterazione 2
Var. x1 x2 x3 x4 x5
base Eq. Z bi
1 17 49
Z (0) 1 0 0 0 10 10 5

x3 (1) 0 0 0 1 −2 3 2
x1 1 3 9
(2) 0 1 0 0 10
− 10 5

x2 (3) 0 0 1 0 0 1 4

Soluzione ottima, come atteso, in forma aumentata, è:


 
9
, 4, 2, 0, 0
5
mentre il valore della funzione obiettivo è Z = 49/5. Poniamo attenzione
ai coefficienti delle variabili slack del tableau finale (evidenziati in rosso) e
poniamo
1 17
y1∗ = 0, y2∗ = , y3∗ = ,
10 10
e ricordiamo che ogni variabile slack viene associata ad un determinato vin-
colo.
Risolviamo ora lo stesso problema, cambiando però il termine noto dell’ulti-
mo vincolo, che diventa 5:
max Z = x1 + x2
20x1 +3x2 ≤ 50
10x1 +3x2 ≤ 30
x2 ≤ 5
x1 ≥ 0, x2 ≥ 0.
Il nuovo problema aumentato è il seguente:
max Z = x1 + x2
20x1 +3x2 +x3 = 50
10x1 +3x2 +x4 = 30
x2 +x5 = 5
xi ≥ 0, i = 1, 2, 3, 4, 5.
Applichiamo ora il metodo del simplesso, evidenziando in blu le parti di
tableau che sono cambiate rispetto al problema precedente.
CAPITOLO 5. TEORIA DELLA DUALITÀ 203

Iterazione 0
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 −2 0 0 0 0
x3 (1) 0 20 3 1 0 0 50
x4 (2) 0 10 3 0 1 0 30
x5 (3) 0 0 1 0 0 1 5

Iterazione 1
Var. x1 x2 x3 x4 x5
base Eq. Z bi
Z (0) 1 −1 0 0 0 2 10
x3 (1) 0 20 0 1 0 −3 35
x4 (2) 0 10 0 0 1 −3 15
x2 (3) 0 0 1 0 0 1 5

Iterazione 2
Var. x1 x2 x3 x4 x5
base Eq. Z bi
1 17 23
Z (0) 1 0 0 0 10 10 2

x3 (1) 0 0 0 1 −2 3 5
x1 1 3 3
(2) 0 1 0 0 10
− 10 2

x2 (3) 0 0 1 0 0 1 5

Soluzione ottima, come atteso, in forma aumentata, è:


 
3
, 5, 5, 0, 0
2
mentre il valore della funzione obiettivo è Z1 = 23/2. Calcoliamo ora la
differenza tra i valori delle funzioni obiettivo ottenute nei due problemi:
23 49 17
∆Z = Z1 − Z = − = = y3∗ .
2 5 10
CAPITOLO 5. TEORIA DELLA DUALITÀ 204

Il valore yi∗ definito in precedenza viene detto prezzo ombra per la risorsa
i e misura il valore marginale della risorsa, cioè il tasso di incremento di
Z ottenuto aumentando la disponibilità della i−esima risorsa. Il metodo
del simplesso identifica il prezzo ombra come il valore del coefficiente della
i−esima variabile slack nell’equazione (0) del tableau finale.
L’analisi dei prezzi ombra può essere fatta anche graficamente quando il
problema ha solo due variabili decisionali. Dall’analisi del prezzo ombra y1∗ =
0 si deduce che un incremento della prima risorsa non cambia la soluzione
ottima (infatti questa non soddisfa il primo vincolo in forma di uguaglianza).

5.6 Esercizi
Esercizio 5.6.1 Scrivere il problema duale dei seguenti problemi di program-
mazione lineare:
max Z = 3x1 + 2x2 − 5x3
4x1 −2x2 +2x3 ≤ 4
2x1 +x2 +x3 ≤ 1
x1 , x2 , x3 ≥ 0
min Z = 3x1 + x2 − 2x3 − x4
2x1 +x2 −x3 +3x4 ≤ 8
−x1 +2x2 −2x3 +2x4 ≤ 4
x1 +x2 ≤ 10
x1 , x2 , x3 , x4 ≥ 0
max Z = 4x1 + x2 + 5x3
−x1 +x2 ≤ 1
2x2 −x3 ≤ 2
x1 +x3 ≤ 1
x1 , x2 , x3 ≥ 0

Esercizio 5.6.2 Applicare il metodo del simplesso duale per risolvere il se-
guente problema
min Z = 3x1 + x2 + 3x3
x1 +x2 ≥ 4
x1 +x2 −x3 ≥ 8
x1 , x2 , x3 ≥ 0
(Soluzione: Z = 8).
CAPITOLO 5. TEORIA DELLA DUALITÀ 205

Esercizio 5.6.3 Applicare il metodo del simplesso duale per risolvere il se-
guente problema
min Z = 2x1 + 3x2 + x3
x1 +x2 −x3 ≥ 6
2x1 +x3 ≥ 4
x1 +x2 −2x3 ≤ 2
x1 , x2 , x3 ≥ 0
(Soluzione: Z = 24).
Esercizio 5.6.4 Considerato il seguente problema di programmazione linea-
re:
max Z = 8x1 + 7x2
2x1 +x2 ≤ 2
3x1 +x2 ≤ 4
−x1 +2x2 ≤ 2
x1 , x2 ≥ 0
determinare di quale delle risorse associate a ciascun vincolo conviene incre-
mentare la disponibilità per aumentare maggiormente il valore della funzione
obiettivo nella soluzione ottima.
(Soluzione: la prima risorsa).
Esercizio 5.6.5 Considerato il seguente problema di programmazione linea-
re:
max Z = 4x1 + x2
3x1 −x2 ≤ 4
2x1 +2x2 ≤ 3
−x1 +2x2 ≤ 4
x1 , x2 ≥ 0
determinare di quale delle risorse associate a ciascun vincolo conviene incre-
mentare la disponibilità per aumentare maggiormente il valore della funzione
obiettivo nella soluzione ottima.
(Soluzione: la seconda risorsa).
Esercizio 5.6.6 Considerato il seguente problema di programmazione linea-
re:
max Z = 3x1 + 4x2
2x1 −x2 ≤ 4
4x1 +3x2 ≤ 3
x1 +2x2 ≤ 1
x1 , x2 ≥ 0
CAPITOLO 5. TEORIA DELLA DUALITÀ 206

determinare di quale delle risorse associate a ciascun vincolo conviene incre-


mentare la disponibilità per aumentare maggiormente il valore della funzione
obiettivo nella soluzione ottima.
(Soluzione: la terza risorsa).

Esercizio 5.6.7 Considerato il seguente problema di programmazione linea-


re:
max Z = 5x1 + 2x2
3x1 −x2 ≤ 2
2x1 +3x2 ≤ 3
x1 +3x2 ≤ 1
x1 , x2 ≥ 0
determinare di quale delle risorse associate a ciascun vincolo conviene incre-
mentare la disponibilità per aumentare maggiormente il valore della funzione
obiettivo nella soluzione ottima.
(Soluzione: la prima risorsa).

Potrebbero piacerti anche