Sei sulla pagina 1di 94

Indice generale

Capitolo 1
OTTIMIZZAZIONE CONTINUA................................................................................6
1.1) Ottimizzazione monodimensionale...............................................................6
1.1.1) Metodi a riduzione dell'intervallo di incertezza.......................................6
1.1.2) Algoritmo della ricerca dicotomica.........................................................9
1.1.3) Algoritmo della sezione aurea................................................................9
1.1.4) Metodi di generazione di una successione di punti..............................10
1.1.5) Confronto tra gli algoritmi.....................................................................10
1.2) Ottimizzazione multidimensionale...............................................................11
1.2.1) Ottimizzazione multidimensionale non vincolata..................................11
1.2.2) Ottimizzazione multidimensionale vincolata........................................14
1.2.3) Algoritmo di Zoutendijk........................................................................14
Capitolo 2
OTTIMIZZAZIONE LINEARE.................................................................................15
2.1) Modello di programmazione lineare............................................................15
2.1.1) Generazione di un modello...................................................................15
2.2) Algoritmo del simplesso..............................................................................15
2.2.1) Simplesso standard..............................................................................16
2.2.2) Metodo del Big M.................................................................................20
2.2.3) Metodo delle due fasi..........................................................................25
2.3) Individuazione di B e B­1............................................................................27
2.3.1) Esercizio...............................................................................................27
2.4) Analisi post­ottimale....................................................................................27
2.4.1) Analisi di stabilità.................................................................................28
2.4.2) Analisi parametrica..............................................................................29
Capitolo 3
OTTIMIZZAZIONE INTERA...................................................................................30
3.1) Problemi di programmazione intera............................................................30
3.1.1) Metodo del cutting plane......................................................................30
3.1.2) Metodo del branch and bound.............................................................32
3.2) Problema dello zaino..................................................................................33
3.2.1) Esercizio..............................................................................................33
3.3) Complessità computazionale......................................................................35
Capitolo 4
OTTIMIZZAZIONE SU RETE.................................................................................36
4.1) Teoria dei grafi.............................................................................................36
4.1.1) Strutture di un grafo..............................................................................38
4.1.2) Strutture dati di un grafo.......................................................................38
4.2) Visita di un grafo.........................................................................................38
4.2.1) Esercizio..............................................................................................39
4.3) Problemi di percorso...................................................................................40
4.3.1) Minimo percorso per una coppia o/d...................................................40
4.3.2) Algoritmo di Dantzig............................................................................42
4.3.3) Algoritmo di Dijkstra.............................................................................42
4.3.4) Il problema del massimo percorso......................................................43
4.4) Problemi di flusso........................................................................................43
4.4.1) Modello di flusso single­commodity.....................................................43
4.4.2) Modello di flusso multi­commodity......................................................44
4.4.3) Modello di massimo flusso..................................................................45
4.4.4) Algoritmo di Ford e Fulkerson.............................................................45
4.5) Problemi di progetto....................................................................................46
4.5.2) Il problema dell'albero minimo.............................................................48
4.5.3) Algoritmo di Kruskal.............................................................................48
4.5.4) Algoritmo di Sollin................................................................................50
4.6) Problemi di circuito......................................................................................51
4.6.1) Problema del commesso viaggiatore...................................................51
4.6.2) Problema del postino...........................................................................52
4.7) Problemi di localizzazione..........................................................................52
4.7.1) Misure di centralità della rete...............................................................52
4.7.2) Modello di localizzazione.....................................................................53
4.7.3) Modello di simple­plant location...........................................................54
4.8) Problemi di copertura..................................................................................54
4.8.1) Esercizio..............................................................................................55
Capitolo 5
PROVE D'ESAME..................................................................................................56
5.1) Prova del 08­03­2011..................................................................................56
5.1.1) Esercizio 1............................................................................................56
5.1.2) Esercizio 3............................................................................................56
5.1.3) Esercizio 9............................................................................................58
5.1.4) Esercizio 10..........................................................................................59
5.2) Prova del 22/06/2011..................................................................................61
5.2.1) Esercizio 1............................................................................................61
5.2.2) Esercizio 2...........................................................................................63
5.2.3) Esercizio 8...........................................................................................64
5.2.4) Esercizio 10.........................................................................................64
5.3) Prova del 30/06/2011..................................................................................66
5.3.1) Esercizio 1...........................................................................................66
5.3.2) Esercizio 2...........................................................................................67
5.3.3) Esercizio 3...........................................................................................69
5.3.4) Esercizio 4...........................................................................................71
5.3.5) Esercizio 5...........................................................................................71
5.3.6) Esercizio 6...........................................................................................72
5.3.7) Esercizio 7...........................................................................................74
5.3.8) Esercizio 8...........................................................................................77
5.3.9) Esercizio 9...........................................................................................78
5.3.10) Esercizio 10 .......................................................................................78
5.4) Prova del 10/07/2010...................................................................................80
5.4.1) Esercizio 2...........................................................................................80
5.4.2) Esercizio 4...........................................................................................83
5.4.3) Esercizio 5...........................................................................................84
5.5) Prova del 19/06/2009..................................................................................85
5.5.1) Esercizio 1...........................................................................................85
5.5.2) Esercizio 2...........................................................................................85
5.5.3) Esercizio 3...........................................................................................86
5.5.4) Esercizio 4...........................................................................................90
5.5.5) Esercizio 5...........................................................................................90
5.5.6) Esercizio 7...........................................................................................91
5.5.7) Esercizio 8...........................................................................................93
5.5.8) Esercizio 10.........................................................................................94
Note Legali
Quest'opera è stata rilasciata con licenza
Creative Commons Attribuzione - Non
commerciale - Non opere derivate 3.0 Un-
ported. Per leggere una copia della licenza
visita il sito web http://creativecom-
mons.org/licenses/by-nc-nd/3.0/ o spedisci
una lettera a Creative Commons, 171 Se-
cond Street, Suite 300, San Francisco, Ca-
lifornia, 94105, USA.
ATTENZIONE!!!:
essendo appunti del corso scritti da uno studente, leggete con il beneficio del dubbio.

Si ringraziano tutti coloro che hanno contribuito alla realizzazione del documento.

Per qualsiasi errore, dubbio o segnalazione, non esitate a contattarmi:

Luca Esposito anvil-horus@hotmail.it

Attribuzione — Devi attribuire la paternità dell'opera nei modi indicati


dall'autore o da chi ti ha dato l'opera in licenza e in modo tale da non
suggerire che essi avallino te o il modo in cui tu usi l'opera.

Non commerciale — Non puoi usare quest'opera per fini commerciali.

Non opere derivate — Non puoi alterare o trasformare quest'opera, ne'


usarla per crearne un'altra.

Digitally signed by
Luca Esposito
Date: 2012.02.29
13:28:46 CET
Location: Italy
Capitolo 1

OTTIMIZZAZIONE CONTINUA
CAPITOLO 1 

1.1 Ottimizzazione monodimensionale
Indicata con f  x  la funzione obiettivo da ottimizzare, se la dimensione del vettore x delle
componenti è n=1 allora si parla di funzione monodimensionale, altrimenti di funzione mul-
tidimensionale. L'ottimizzazione monodimensionale si pone il problema di individuare il mas-
simo o il minimo di una funzione monodimensionale. Nei problemi di ottimizzazione mono-
dimensionale è presente quindi una sola variabile di decisione. Se la funzione obiettivo è illi-
mitata potrebbe non avere alcun punto di ottimo.
1.1.1 Metodi a riduzione dell'intervallo di incertezza
Tali algoritmi cercano di ottimizzare una funzione riducendo l'intervallo di incertezza utiliz-
zando o meno la derivata. Nel caso si usasse la derivata allora, alla generica iterazione k , se
c k ∈[ak , b k ] e si ricerca il punto di minimo x ∗ :
• se f ' c k 0 ⇒ x ∈[a k ,c k ] e a k1=ak e b k1=c k

• se f ' c k 0 ⇒ x ∈[c k , bk ] e a k1=c k e b k1=bk



• se f ' c k =0 ⇒ x =c k .

Se non si utilizza la derivata allora, dati due punti c k , d k ∈[a k , bk ] con c k d k :


• se f c k  f  d k ⇒ x ∈[a k , d k ] e a k1=ak e b k1=d k

• se f c k  f  d k ⇒ x ∈[c k , bk ] e a k1=c k e b k1=bk


• se f c k = f  d k  si ricade in uno dei due casi precedenti.


1.1.1.1 Algoritmo di bisezione
Tale algoritmo si utilizza per trovare il punto di ottimo (massimo o minimo) di una funzione
riducendo progressivamente il dominio di ammissibilità e procedendo per punti medi. L'algo-
ritmo fa uso della derivata e la funzione deve godere della proprietà di convessità.
1. Viene dato il dominio di ammissibilità [a k , b k ] ;
2. si trova il punto medio dell'intervallo c k = bk a k /2 ;
3. si calcola la derivata prima della funzione nel punto medio f ' c k  ;
1. se la derivata è nulla allora il punto c k è di ottimo;

Luca Esposito
8 Capitolo 1 - Ottimizzazione continua

2. se la derivata è positiva la funzione sta crescendo e quindi si lavora nell'intervallo


[a k , c k ]
3. se la derivata è negativa la funzione sta decrescendo e quindi si lavora nell'inter-
vallo [c k , b k ]
4. se la derivata è nulla o con un valore minore ad una prefissata soglia l'algoritmo
termina, altrimenti
4. si ritorna al punto 2. con il nuovo intervallo determinato.

Dopo un numero n di iterazioni dell'algoritmo si ottiene una precisione pari a b=1/ 2n dovu-
to ad una riduzione dell'intervallo pari proprio alla sua metà.
1.1.1.2 Esercizio
Sia data la funzione f  x =0,7 x 2−9,8 x40 con x ∈[3, 14] . Si deve calcolare il punto di
ottimo della funzione.

Figura 1.1: Si trova il punto di ottimo della funzione (in questo


esempio è il punto di minimo) attraverso l'algoritmo della bisezione

Innanzitutto si disegna la funzione. Come si nota dalla Figura 1.1 la funzione è una parabola
con vertice

[
V −
b
2a
;f − ]
b
2a
=7 ; 5.7

e che interseca l'asse delle ascisse nel punto y=40 . Si trova il punto medio dell'intervallo
[3,14]

Luca Esposito
Capitolo 1 - Ottimizzazione continua 9

14−3
c= =8.5
2

Si calcola la derivata prima nel punto medio e, se la derivata è nulla allora il punto medio è il
punto di ottimo:

f ' c=1.4 · 8.5−9.8=2.10

Dato che la derivata è positiva e la funzione è convessa allora tutti i punti a destra del punto
medio hanno un valore di funzione maggiore del punto medio e quindi si cancella l'intervallo
[8.5, 14] . Si procede nell'intervallo [3,8.5] e si trova il punto medio

8.5−3
c= =5.75
2

Si calcola la derivata nel punto medio

f ' c=1.4⋅5.75−9.8=−1.750

e dato che la derivata è negativa si cancella l'intervallo [3,5.75] perché tutti i punti a sinistra
del punto medio restituiscono un valore di funzione maggiore del punto medio. Il nuovo inter-
vallo di definizione sarà [5.75, 8.5] . Si procede analogamente per altri 2 passi: o si è trovato
il punto di ottimo o ci si ferma e si prende il punto medio trovato come punto di ottimo.
1.1.2 Algoritmo della ricerca dicotomica
Tale algoritmo a riduzione dell'intervallo di incertezza non fa uso della derivata e termina
quando si è raggiunti un certo grado di precisione  . Dato l'intervallo [a k , b k ] , l'algoritmo è
il seguente:
b a b a
1. si scelgono due punti c k = 2 − e d k = 2  prossimi al centro dell'intervallo
k k k k

[a k , b k ] ;
1. se b k −a k ≤ l'algoritmo termina ed il punto di ottimo si trova a metà intervallo;
2. si calcola la funzione in questi due punti f c k  e f d k 
1. se f c k  f  d k ⇒ x∗ ∈[a k , d k ] e a k1=ak e b k1=d k
2. se f c k  f  d k ⇒ x∗ ∈[c k , bk ] e a k1=c k e b k1=bk
3. se ∣bk −a k∣≤ l'algoritmo termina, altrimenti
3. si ritorna al 1. con il nuovo intervallo;
n

Dopo n iterazioni si raggiunge la precisione d =1 /2 =0,707n perché il dominio di am-
2

missibilità si riduce più della metà ad ogni iterazione.


1.1.3 Algoritmo della sezione aurea
L'algoritmo della sezione aurea, allo stesso modo dell'algoritmo di bisezione, applica una sud-
divisione del dominio di ammissibilità, ma stavolta si scelgono dei punti che possono servire
nell'iterazione successiva aumentando così l'efficienza computazionale. L'algoritmo non fa
uso della derivata ed è il seguente:

Luca Esposito
10 Capitolo 1 - Ottimizzazione continua

1. assegnato il dominio di ammissibilità [ak , b k ] si calcolano i due punti dell'intervallo


come c k =b k −0,618b k −ak  e d k =b k ak −c k ;
2. si calcola il valore della funzione in questi due punti f c k  e f d k  ;
1. se f c k  f  d k ⇒ x∗ ∈[a k , d k ] e a k1=ak e b k1=d k e d k 1 =c k ;
2. se f c k  f  d k ⇒ x∗ ∈[c k , bk ] e a k1=c k e b k1=bk e c k 1 =d k ;
3. si ritorna al passo 1. con il nuovo intervallo;
4. l'algoritmo termina se b k1−c k1≤ ;

Dopo n iterazioni si raggiungerà la precisione a=0,618n−1 perché ad ogni iterazione si


deve valutare il valore della funzione obiettivo in un solo punto, tranne nella prima iterazione.
1.1.4 Metodi di generazione di una successione di punti
I metodi di generazione di una successione di punti, cercano per tentativi il punto di ottimo di
una funzione, generando, ad ogni iterazione, un punto prossimo al punto di ottimo.
1.1.4.1 Algoritmo della tangente (o di Newton)
L'algoritmo, dato un punto iniziale, determina il punto di ottimo di una funzione obiettivo
convessa come il limite di una successione di punti generati in ogni iterazione approssimando
la derivata con la sua tangente. L'algoritmo richiede che la funzione sia convessa e due volte
derivabile. L'algoritmo è il seguente:
1. inizialmente x k = x 0 ;
2. si calcola la derivata prima e la derivata seconda della funzione nel punto indicato
f '  xk  e f ' '  xk 
3. si ottiene il punto all'iterazione successiva come x k 1=x k − f '  x k / f ' '  x k 
1. se ∣x k1−x k∣ l'algoritmo termina;
2. altrimenti si riprende dal punto 2. con x k =x k 1 .
1.1.5 Confronto tra gli algoritmi
Il confronto tra gli algoritmi viene fatto tenuto conto dei seguenti parametri:
• Efficienza computazionale: il tempo di calcolo e l'occupazione di memoria richiesti
dall'algoritmo;
• Applicabilità: classe di problemi sulla quale è possibile applicare l'algoritmo;
• Robustezza: capacità di risolvere efficacemente i problemi a cui l'algoritmo è sottopo-
sto;
• Sensibilità: capacità di individuazione delle variazioni dei parametri del problema;
• Codifica e preparazione dei dati d'ingresso.

Tra gli algoritmi a riduzione dell'intervallo di incertezza, l'algoritmo della sezione aurea risul-
ta più efficiente di quello della ricerca dicotomica, mentre, a parità di precisione richiesta  ,
l'algoritmo della sezione aurea richiede un numero di valutazioni della funzione obiettivo pari
ad una volta e mezzo il numero richiesto dall'algoritmo di bisezione. Tutto dipende, quindi dal
tempo richiesto per valutare la funzione obiettivo e la derivata.
I metodi con uso della derivata presentano un'applicabilità più limitata di quelli che non ne
fanno uso a causa delle limitazioni sulla differenziabilità che deve possedere la funzione
obiettivo.
Per quanto riguarda gli altri parametri di prestazione gli algoritmi presentano valori di poco
differenti.

Luca Esposito
Capitolo 1 - Ottimizzazione continua 11

1.2 Ottimizzazione multidimensionale
Nel caso in cui la funzione obiettivo presenti più di una variabile decisionale, allora si ricorre
a modelli di ottimizzazione multidimensionale. Ci limiteremo, per la trattazione, a funzioni di
due variabili.
1.2.1 Ottimizzazione multidimensionale non vincolata
Nel caso di funzioni obiettivo convesse, la ricerca di un punto di ottimo può determinarsi an-
nullando il gradiente, cioè la condizione di stazionarietà della funzione obiettivo è sufficiente
affinché il punto sia ottimo. Il problema si risolve efficacemente utilizzando dei metodi che,
dato un punto iniziale x 0 , individuano delle direzioni di spostamento, all'interno del dominio
delle soluzioni, lungo le quali la funzione migliora. Si genera, così, una sequenza di punti in
cui la funzione presenta dei valori sempre migliori, tendenti all'ottimo locale non vincolato.
1.2.1.1 Algoritmi di scalata diretta
Dato un punto iniziale x 0 , l'algoritmo di scalata diretta genera una successione di punti dati
dall'espressione ricorsiva

x k 1=x k  k d k (1.1)

con d k direzione di spostamento e  k lunghezza dello spostamento. La direzione di sposta-


mento può essere valutata attraverso il calcolo della derivata oppure attraverso il calcolo della
funzione in un intorno di x k . I valori trovati devono essere tali che la funzione nel punto suc-
cessivo x k 1 migliori. L'algoritmo termina quando non è possibile individuare una direzione
di miglioramento, ovvero quando d k =0 oppure ∥d k∥ . In particolare se nel punto x f
• d f =0 , allora tale punto è un punto di stazionarietà;
• d f =0 e  f =∞ , allora tale punto rappresenta una illimitata del problema;

1.2.1.2 Algoritmo della discesa/salita ripida
L'algoritmo della discesa/salita ripida è un metodo di gradiente e pertanto è applicabili soltan-
to a funzioni differenziabili. Tale algoritmo è utilizzato per la risoluzione di problemi di mini-
mizzazione/massimizzazione di una funzione bidimensionale utilizzando il gradiente. Dato un
punto iniziale, genera una sequenza di punti attraverso un'espressione ricorsiva. Ricordando
che una generica componente del gradiente esprime il tasso di variazione della funzione ri-
spetto da una determinata direzione, e che −∇ f  x k  punta nella direzione di massima di-
scesa della funzione mentre ∇ f  x k  nella direzione di massima salita, l'algoritmo si muove
su una direzione d k di miglioramento. Lungo tale direzione l'algoritmo cerca, ad ogni itera-
zione, il minimo/massimo della funzione attraverso un metodo di ottimizzazione monodimen-
sionale. In questo modo si determina la lunghezza dello spostamento k . I passi da seguire,
dato un punto iniziale x k =x 0 , sono i seguenti:
1. si calcola il gradiente nel punto dato ∇ f  x k  ;
2. si effettua il test di ottimalità, ovvero si deve verificare che ∥∇ f  x k ∥ oppure
che ∣x k1−x k∣ ;
3. se il punto non è ottimo allora si deve generare un nuovo punto in funzione di  k tra-
mite l'espressione x k 1=x k ±k ∇ f  x k  ;
4. si calcola la direzione di spostamento

Luca Esposito
12 Capitolo 1 - Ottimizzazione continua

a) se si deve minimizzare si sceglie la direzione negativa −∇ f  x k  ;


b) se si deve massimizzare si sceglie la direzione positiva ∇ f  x k  ;
5. si costruisce la funzione monodimensionale g k = f  x k1  ;
6. si massimizza/minimizza la funzione con gli algoritmi di ottimizzazione monodimen-
sionale oppure ponendo la derivata nulla e si ricava la distanza ottima ∗k ;
a) se ∗k =∞ allora la soluzione è illimitata;
7. si aggiorna il punto x k 1 e si ricomincia dal punto 1. con x k =x k 1 .

1.2.1.3 Esercizio
Si vuole minimizzare la funzione f  x 1 , x 2=3 x 21 4 x 22 3 x 1 x 2x 110 con punto iniziale
x 0= [ 3 5 ] .
T

Figura 1.2: Grafico della funzione proposta.

La prima operazione da effettuare è quella di calcolare l'espressione del gradiente

[
∇ f  x 1 , x 2 =
6 x 13 x 21
8 x 23 x 1 ]
Adesso si deve calcolare il gradiente nel punto x 0 :

∇ f  x 0 = 34
49[ ]
Il gradiente non è nullo e quindi il punto x 0 non è di ottimo. Si deve procedere calcolando il
punto x 1 dato dall'espressione x 1= x 0 −0 ∇ f  x 0  . Quindi:

Luca Esposito
Capitolo 1 - Ottimizzazione continua 13

5 [] [ ]
x 1= 3 −0 34
49

Queste sono le coordinate del punto x 1 espresse in funzione di 0 . Scriviamo adesso le


coordinate di x 1 in  0

x 1=
[ 3−34 0
5−49 0 ]

Figura 1.3: Curve di livello della funzione. Il punto trovato x1 si avvi-


cina di molto al punto di ottimo

All'aumentare di 0 cambiano le coordinate di x 1 . Ora si sostituisce nell'espressione della


funzione le coordinate del punto x 1

2 2
f  x 1 =33−34 0  45−49  0 33−34  0 5−490 3−34 010=

2 2 2
=3 91156 0−204 0 4252401  0−490 0 −441045−510  04998 0 −

−34 013=

=273468 20−612  01009604 20−1960 04998 20−985058=

2
=18070 0−3557 0185=g  0 

Luca Esposito
14 Capitolo 1 - Ottimizzazione continua

Tale funzione viene poi inviata ad un algoritmo per funzioni monodimensionale e si ottiene la
direzione ottima


0 =0.098

Con tale valore di ottimo si genera il punto x 1

x 1= [ ][
3−34 · 0,098 −0,332
5−49 · 0,098
=
0,198 ]
ed è un punto che si trova nel 4° quadrante. Con queste coordinate si calcola il gradiente nel
punto x 1 e se è nullo ci si ferma altrimenti si continua come appena visto.
1.2.1.4 Metodo del tetraedro rotolante
Si considera una funzione in uno spazio a n-1 dimensioni. Si comin-
cia con n punti equidistanti tra loro e bisogna generare una direzione.
Per una funzione bidimensionale si devono utilizzare tre punti equi-
distanti. I passi dell'algoritmo sono i seguenti:
1. si individua il punto peggiore tra i tre;
2. si rispecchia il punto peggiore rispetto all'asse individuato
dalla congiungente i due punti migliori;
3. si riparte dal punto 1.

Figura 1.4: Algoritmo


del tetraedro rotolante
1.2.2 Ottimizzazione multidimensionale vincolata

1.2.3 Algoritmo di Zoutendijk
Tale algoritmo fa parte dei metodi a direzione ammissibile. Con tali metodi, ad ogni iterazio-
ne, a partire da un punto ammissibile, si sceglie una direzione di spostamento lungo la quale
la funzione obiettivo migliori. L'algoritmo termina quando si giunge in un punto nel quale
sono verificate le condizioni di ottimo vincolato. Data una regione ammissibile si devono tro-
vare dei valori ottimi presenti in tale regione. Si comincia da una soluzione ammissibile x 0 . I
passi sono i seguenti:
1. si determina una direzione di spostamento d k =∇ f  x k  di miglioramento e ammis-
sibile;
1. se non esiste tale direzione, per le condizioni di Kuhn-Tucker allora tale punto è di
ottimo e si termina;
2. si trova la curva di livello tangente a tale direzione, si costruisce la funzione e si calco-
la il punto di ottimo vincolato ∗ tramite un algoritmo monodimensionale;
3. si ritorna al punto 1.

Luca Esposito
Capitolo 2

OTTIMIZZAZIONE LINEARE
CAPITOLO 2 

2.1 Modello di programmazione lineare
Se la funzione obiettivo ed i vincoli sono lineari allora il modello di definisce di programma-
zione lineare. Si considera un piano relativo alle variabili del problema e si devono rappresen-
tare i vincoli su di esso. Dall'intersezione degli insiemi individuati dai vincoli, si genererà un
dominio di ammissibilità al quale apparterranno le soluzioni richieste. Il poliedro convesso,
frontiera del dominio di ammissibilità, viene definito simplesso. Se i vincoli hanno intersezio-
ne vuota il dominio si dive inconsistente.
2.1.1 Generazione di un modello
1. Individuazione delle variabili x k ;
2. individuazione dei vincoli;
3. individuazione della funzione obiettivo;
4. disegno del dominio nel caso di 2 variabili;
5. per verificare che il dominio sia esatto, si sceglie un punto all'interno del dominio
creato e si verifica che soddisfa tutti i vincoli.

2.2 Algoritmo del simplesso
E' l'algoritmo comunemente utilizzato per la risoluzione di problemi di programmazione li-
neare. Tale algoritmo è un algoritmo a direzione ammissibile e passa attraverso una successio-
ne di vertici fino al raggiungimento della soluzione ottima. Infatti, essendo il dominio conves-
so e la funzione obiettivo lineare, il punto di ottimo sarà certamente un vertice della frontiera.
L'algoritmo è il seguente:
1. si parte da una soluzione iniziale corrispondente ad un vertice del dominio;
2. ci si muove lungo una direzione di spostamento che corrisponde ad uno spigolo del
dominio;
a) per un problema a massimizzare si sceglie quella per cui il valore della derivata di-
rezionale della funzione obiettivo è maggiore;
b) per un problema a minimizzare si sceglie quella per cui il valore della derivata di-
rezionale della funzione obiettivo è minore;
3. si esegue il test di ottimalità osservando i valori delle derivate direzionali sul vertice:

Luca Esposito
16 Capitolo 2 - Ottimizzazione lineare

a) per un problema di massimizzazione, se i valori di tali derivate sono tutti non posi-
tivi allora non ci sono direzioni ammissibili di miglioramento;
b) per un problema di minimizzazione, se i valori di tali derivate sono tutti non nega-
tivi allora non ci sono direzioni ammissibili di miglioramento;
4. se non sono soddisfatte le condizioni precedenti si riparte dal punto 2, altrimenti l'al-
goritmo termina.
2.2.1 Simplesso standard
In tale algoritmo si presuppone che tutte le disuguaglianze siano col segno di ≤ .
1. Si convertono le disequazioni in equazioni;
a) si aggiunge ad ogni nuova equazione una variabile slack yi positiva, mentre non si
toccano le precedenti equazioni;
2. conviene, poi, disegnare una tabella dove per ogni vertice è indicato il segno delle va-
riabili, individuando così le n-m variabili non basiche ( =0 ) e le m variabili basiche (
≥0 );
a) se una o più delle m variabili basiche sono nulle, allora si tratta di una s.b.a. dege-
nere;
3. si costruisce la tabella del simplesso relativa ad un vertice del dominio di ammissibili-
tà:
a) ogni riga è un'equazione del sistema (l'intestazione di tale riga è la variabile la cui
colonna è espressa in forma canonica);
b) ogni colonna corrisponde ad una variabile del problema;
c) l'ultima riga è l'equazione della funzione obiettivo;
4. in tale vertice si pongono a zero tutte le variabili rispetto alle quali il sistema non è in
forma canonica determinando una soluzione basica ammissibile;
5. si esegue il test di ottimalità esaminando i coefficienti c j delle variabili non basiche
x j della funzione obiettivo;
a) per un problema a massimizzare essi devono essere tutti non positivi;
b) per un problema a minimizzare essi devono essere tutti non negativi;
6. se il test di ottimalità non è soddisfatto si trova una nuova s.b.a:
a) si determina la variabile entrante, corrispondente alla colonna pivot (il cui indice
nella tabella lo indichiamo con s) per cui è valida la seguente
1. se il problema è a massimizzare si prende la variabile non basica che presenta
il coefficiente maggiore;
2. se il problema è a minimizzare si prende la variabile non basica che presenta il
coefficiente minore;
b) si determina la variabile uscente corrispondente alla riga pivot (il cui indice nella
tabella lo indichiamo con r)
1. si divide la colonna dei termini noti con la colonna pivot precedentemente indi-
viduata;
2. si sceglie la riga che presenta il minor rapporto, considerando solo i coefficien-
ti della colonna s che presentano valori positivi;
c) si trasforma il sistema tramite pivoting
1. si individua l'elemento pivot ars>0 dall'intersezione della riga e della colonna
pivot;
2. si divide la riga pivot er per il pivot ars ottenendo e ' r =e r / ars ;
3. si sottrae ad ogni riga del sistema ei la riga pivot trasformata moltiplicata per
l'elemento ais ottenendo e ' i=e i −air e ' r

Luca Esposito
Capitolo 2 - Ottimizzazione lineare 17

7. si ritorna al punto 5.
2.2.1.1 Esercizio
Trovare la soluzione che massimizza la funzione z =4 x 15 x 2 con i seguenti vincoli:
3 x 17 x 2≤21 , 8 x 14 x 2≤32 e x 2 ≤3 .

Convertiamo le disequazioni in equazioni aggiungendo le variabili slack ed eliminando i vin-


coli ridondanti. Si ottiene così il sistema:

{3 x 17 x 2  y1 =21
8 x14 x 2  y 2=32

Disegniamo il dominio di ammissibilità e l'andamento della funzione obiettivo individuando il


vertice ottimo:

Figura 2.1: Dominio di ammissibilità ed andamento della funzione obiettivo

Convertiamo le disequazioni in equazioni aggiungendo le variabili slack ed eliminando i vin-


coli ridondanti. Si ottiene così il sistema:

{3 x 17 x 2  y1 =21
8 x14 x 2  y 2=32

Luca Esposito
18 Capitolo 2 - Ottimizzazione lineare

La tabella dei vertici è la seguente

x1 x2 y1 y2
Vertice O 0 0 >0 >0
Vertice A >0 0 >0 0
Vertice B >0 >0 0 0
Vertice C 0 >0 0 >0
Tabella 2.1: S.b.a. associate ai vertici

Costruiamoci la tabella corrispondente al primo vertice, ricordando che ogni colonna rappre-
senta una variabile ed ogni riga un'equazione, la cui intestazione è la variabile che si trova in
base:

x1 x2 y1 y2 -z b
y1 3 7 1 0 0 21
y2 8 4 0 1 0 32
-z 4 5 0 0 1 0
Tabella 2.2: Vertice O; è messa in evidenza la matrice identità e le variabili basiche

Determiniamo una soluzione basica ammissibile ponendo a zero tutte le variabile rispetto alle
quali il sistema non è in forma canonica, ovvero x1 ed x2. Si ottiene:

x 1=0 ; x 2=0 ; y 1=21 ; y 2=32 ; z =0

Effettuiamo il test di ottimalità. I coefficienti delle variabili non basiche della funzione obietti-
vo sono positivi ( c 1=4 ; c 2=5 ) e quindi, essendo il problema a massimizzare, tale soluzione
non è ottima. Procediamo al calcolo di una nuova soluzione basica ammissibile.
Consideriamo la variabile non basica che presenta il coefficiente maggiore nella funzione
obiettivo (dato che il problema è a massimizzare): tale coefficiente è c 2=5 e la variabile è
x 2 (colonna s=2 ) ed è la variabile entrante in base. Adesso dividiamo la colonna dei termi-
ni noti (b) per la colonna 2 e prendiamo il rapporto minimo:

min { 21/7=3 ; 32 /4=8 }=3

La riga corrispondete al rapporto minimo è r =1 corrispondente ad y 1 , variabile uscente


dalla base. L'elemento pivot è quindi a 12=7 . Effettuiamo il pivoting dividendo la riga pivot
per l'elemento pivot

e ' 1=[3 7 1 0 0 21] /7=


[ 3
7
1
1
7
0 0 3
]
Luca Esposito
Capitolo 2 - Ottimizzazione lineare 19

Sottraiamo ad ogni riga la riga trasformata moltiplicata per l'elemento corrispondente

e ' 2=e 2 −a 22 e ' 1=[8 4 0 1 0 32]−4


[ 3
7
1
1
7
0 0 3=
][
44
7
4
0 − 1 0 20
7 ]
e ' 3=e 3−a23 e ' 1=[4 5 0 0 1 0]−5 [ 3
7
1
1
7
0 0 3= ][
13
7
5
0 − 0 1 −15
7 ]
La tabella del nuovo vertice sarà

x1 x2 y1 y2 -z b
x2 3/7 1 1/7 0 0 3
y2 44/7 0 -4/7 1 0 20
-z 13/7 0 -5/7 0 1 -15
Tabella 2.3: x1=0; x2=3; y1=0; y2=20; z=15 [Vertice C]

Effettuiamo il test di ottimalità sui coefficienti della variabili non basiche ottenendo che
c 1=13/7 e c 3=−5/7 . Poiché il problema è a massimizzare e non sono entrambi negativi, la
soluzione trovata per il vertice C non è ottima e si deve procedere nuovamente alla ricerca di
una nuova s.b.a. Il coefficiente associato alla variabile non basica di maggior valore è
c 1=13/7 e quindi x1 sarà la variabile entrante. Il rapporto minimo sarà

min {3/3/7=7 ; 20/44 /7=35/11 }=35 /11

che corrisponde alla riga della variabile y2, che sarà quindi la nostra variabile uscente. L'ele-
mento pivot sarà allora a 21=44 /7 . Dividiamo la seconda riga per l'elemento pivot

e ' 2=e 2 /a21= [


7 44
44 7
4
0 − 1 0 20 = 1 0 −
7
1 7
11 44][
0
35
11 ]
Sottraiamo le restanti riga per la nuova riga moltiplicata per il corrispettivo elemento

e ' 1=e 1−a 11 e ' 2=


[ 3
7
1
1
7
3
] [
0 0 3− 1 0 −
7
1 7
11 44
0
35
11
=0 1
2
11

3
44
0
][
18
11 ]
e ' 3=e 3−a22 e ' 2= [ 13
7
5
0 − 0 1 −15 −
7
13
7
1 0 − ] [
1 7
11 44
0
35
11
= ]
[
= 0 0 −
42 7
77 44
1 −
230
11 ]
Luca Esposito
20 Capitolo 2 - Ottimizzazione lineare

La tabella del vertice B è

x1 x2 y1 y2 -z b
x2 0 1 2/11 -3/44 0 18/11
x1 1 0 -1/11 7/44 0 35/11
-z 0 0 -42/77 -13/44 1 -230/11
Tabella 2.4: x1=35/11; x2=18/11; y1=0; y2=0; z=230/11

Effettuiamo il test di ottimalità sulle variabili non basiche: si trova che i coefficienti
c 3=−42 /77 e c 4=−13/ 44 sono entrambi negativi e quindi si è trovata una soluzione basica
ammissibile ottima.
2.2.2 Metodo del Big M
Tale algoritmo si applica nel caso siano presenti anche dei vincoli di ≥ . Il metodo si basa
sulla modifica della funzione obiettivo introducendo variabili artificiali con coefficienti eleva-
ti in modulo e segno opportuno:
1. si trasformano tutte le disequazioni in equazioni:
1. se la disequazione è del tipo ≤ si aggiunge la variabile slack yi positiva;
2. se la disequazione è del tipo ≥ si aggiunge la variabile slack yi negativa e la va-
riabile artificiale hi positiva;
3. se è un'equazione di aggiunge solo la variabile artificiale hi positiva;
2. si modifica la funzione obiettivo
1. se il problema è a massimizzare si aggiungono tante variabili −M h i quante sono
le disequazioni ≥ ;
2. se il problema è a minimizzare si aggiungono tante variabili M h i quante sono
le disequazioni ≥ ;
3. si deve ripristinare la forma canonica effettuando il pivoting rispetto alle variabili arti-
ficiali
1. se s è la colonna della variabile artificiale da far entrare in base ed r ne è la riga, al-
lora l'elemento pivot è a rs ;
2. si effettua il pivot sull'elemento a rs ;
4. si continua dal passo 5. dell'algoritmo del simplesso standard
2.2.2.1 Esercizio
Si vuole massimizzare la funzione z =x 12 x 2 con i seguenti vincoli: 2 x 15 x 2 ≤100 ,
5 x 12 x 2 ≤100 e x 1 x 2≥10 .

Disegnando il dominio ci si rende conto che sono presenti 5 vertici. Trasformiamo, innanzitut-
to, le disequazioni in equazioni:

{
2 x 15 x 2  y 1=100
5 x1 2 x 2 y 2=100
x1 x 2− y 3h1=10

Luca Esposito
Capitolo 2 - Ottimizzazione lineare 21

Figura 2.2: Dominio di ammissibilità e andamento della funzione obiettivo

Modifichiamo anche la funzione obiettivo, ricordando che il problema è a massimizzare:

Max z =x 12 x 2−M h1

Disegniamo la tabella relativa al primo vertice

x1 x2 y1 y2 y3 h1 -z b
y1 2 5 1 0 0 0 0 100
y2 5 2 0 1 0 0 0 100
h1 1 1 0 0 -1 1 0 10
-z 1 2 0 0 0 -M 1 0
Tabella 2.5: Tabella corrispondente ad un vertice del dominio esteso

Come si può notare non è presente la forma canonica a causa del coefficiente -M nella colon-
na di h1. Facciamo dunque perno sull'elemento a 36 =1 effettuando il pivoting, per far entrare
in base h1. Le nuova righe saranno:

Luca Esposito
22 Capitolo 2 - Ottimizzazione lineare

e ' 3=e 3 /a 36 =[ 1 1 0 0 −1 1 0 10 ]

e ' 1=e 1−a 16 e ' 3=[ 2 5 1 0 0 0 0 100 ]

e ' 2=e 2 −a 26 e ' 3=[ 5 2 0 1 0 0 0 100 ]

e ' 4=e 4−a 46 e ' 3= [ 1 2 0 0 0 −M 1 0 ]−−M  [ 1 1 0 0 −1 1 0 10 ] =

=[ 1 M 2M 0 0 −M 0 1 10 M ]

Si ottiene la nuova tabella in cui h1 entra in base:

x1 x2 y1 y2 y3 h1 -z b
y1 2 5 1 0 0 0 0 100
y2 5 2 0 1 0 0 0 100
h1 1 1 0 0 -1 1 0 10
-z 1+M 2+M 0 0 -M 0 1 10M
Tabella 2.6: Tabella corrispondente ad un vertice del dominio esteso

A questo punto procediamo come nel simplesso standard ed effettuiamo il test di ottimalità.
Con i valori y 1=100 ; y 2 =100 ; h1 =10 ; x 1= x 2=0 ; z=−10 M si ha che c 1=1 M e
c 2=2 M sono entrambi positivi (dato che M è positivo) e quindi il test di ottimalità non è
verificato. Il coefficiente maggiore è quello di x 2 , variabile entrante, e dato che il minimo

min {100 /5=20 ; 100 /2=50 ; 10 }=10

si ottiene in corrispondenza di h1, essa sarà la variabile uscente e l'elemento pivot sarà a 32=1 .
Calcoliamo le nuove righe

e ' 3=e 3 /a 32=[ 1 1 0 0 −1 1 0 10 ]

e ' 1=e 1−a 12 e ' 3=[ 2 5 1 0 0 0 0 100 ] −5 [ 1 1 0 0 −1 1 0 10 ] =

=[ −3 0 1 0 5 −5 0 50 ]

e ' 2=e 2 −a 22 e ' 3=[ 5 2 0 1 0 0 0 100 ] −2 [ 1 1 0 0 −1 1 0 10 ] =

=[ 3 0 0 1 2 −2 0 80 ]

Luca Esposito
Capitolo 2 - Ottimizzazione lineare 23

e ' 4=e 4−a 42 e ' 3= [ 1M 2M 0 0 − M 0 1 10 M ] 

−2M  [ 1 1 0 0 −1 1 0 10 ] =[ −1 0 0 0 2 −2−M 1 −20 ]

La nuova tabella per il vertice E sarà:

x1 x2 y1 y2 y3 h1 -z b
y1 -3 0 1 0 5 -5 0 50
y2 3 0 0 1 2 -2 0 80
x2 1 1 0 0 -1 1 0 10
-z -1 0 0 0 2 -2-M 1 -20
Tabella 2.7: x1=0; x2=10; y1=50; y2=80; z=20 [Vertice E]

Effettuiamo il test di ottimalità. Per y 1=50 ; y 2 =80 ; x 2 =10 ; x 1=h2=0 ; z =20 si ha c 1=−1
e c 5=2 e quindi non è la soluzione ottima. Troviamo una nuova s.b.a.
Il coefficiente massimo è c 5=2 corrispondente ad y3, variabile entrante. Il minimo è

min {100 /5=20 ;100 /2=50 ; 10 }=10

e si ottiene sulla riga di y1 che sarà quindi la nostra variabile uscente. Calcoliamo le nuove ri-
ghe

e ' 1=e 1 /a15=[ −3/5 0 1/5 0 1 −1 0 10 ]

e ' 2=e 2 −a 25 e ' 1=[ 3 0 0 1 2 −2 0 80 ]−2 [ −3 /5 0 1/5 0 1 −1 0 10 ] =

=[ 21/5 0 −2 /5 1 0 0 0 60 ]

e ' 3=e 3−a35 e ' 1=[ 1 1 0 0 −1 1 0 10 ] [−3/5 0 1/5 0 1 −1 0 10 ]=

=[ 2/ 5 1 1/ 5 0 0 0 0 20 ]

e ' 4=e 4−a 45 e ' 1=[ −1 0 0 0 2 −2−M 1 −20 ] −2 [ −3/5 0 1/5 0 1 −1 0 10 ] =

=[ 1/5 0 −2/5 0 0 −M 1 −40 ]

La tabella relativa al vertice D è

x1 x2 y1 y2 y3 h1 -z b

Luca Esposito
24 Capitolo 2 - Ottimizzazione lineare

y3 -3/5 0 1/5 0 1 -1 0 10
y2 21/5 0 -2/5 1 0 0 0 60
x2 2/5 1 1/5 0 0 0 0 20
-z 1/5 0 -2/5 0 0 -M 1 -40
Tabella 2.8: x1=0; x2=20; y1=0; y2=60; y3=10; z=40 [Vertice D]

Il test di ottimalità ancora non è soddisfatto e ci riproponiamo a trovare una nuova soluzione
basica ammissibile. Il coefficiente maggiore è c 1=1/5 e quindi x1 sarà la variabile entrante,
mentre dato che il minimo tra i rapporti è 60/ 21/5=100/7 allora la variabile uscente sarà y2
e l'elemento pivot è a 21=21/5 . Ricalcolando le righe si ottiene

e ' 2=e 2 /a21=5 [ 21/5 0 −2/5 1 0 0 0 60 ] /21= [ 1 0 −2/21 5/21 0 0 0 100/7 ]

3
e ' 1=e 1−a 11 e 2= [−3/5 0 1 /5 0 1 −1 0 10 ]  [ 1 0 −2/21 5/21 0 0 0 100/7 ] =
5

=[ 0 0 1/7 1/ 7 1 −1 0 130/7 ]

2
e ' 3=e 3−a31 e ' 2 =[ 2/5 1 1/ 5 0 0 0 0 20 ]− [ 1 0 −2 /21 5/21 0 0 0 100/7 ] =
5

=[ 0 1 5/21 −2/21 0 0 0 100/7 ]

e ' 4=e 4−a 41 e ' 2 =[ 1 /5 0 −2/ 5 0 0 −M 1 −40 ] 

1
− [ 1 0 −2/21 5/21 0 0 0 100/ 7 ]= [ 0 0 −8/21 −1/21 0 − M 1 −300 / 7 ]
5

La tabella per il vertice C è

x1 x2 y1 y2 y3 h1 -z b
y3 0 0 1/7 1/7 1 -1 0 130/7
x1 1 0 -2/21 5/21 0 0 0 100/7
x2 0 1 5/21 -2/21 0 0 0 100/7
-z 0 0 -8/21 -1/21 0 -M 1 -300/7
Tabella 2.9: x1=100/7; x2=100/7; y1=0; y2=0; y3=130/7; z=300/7 [Vertice C]

Dato che i coefficienti c 3=−8/21 e c 4=−1/21 sono entrambi negativi ed il problema è a


massimizzare, allora la soluzione trovata è ottima.

Luca Esposito
Capitolo 2 - Ottimizzazione lineare 25

2.2.3 Metodo delle due fasi
Tale metodo costruisce una nuova funzione w, somma delle variabili ausiliari hi. Lo scopo è
minimizzare tale funzione ed il minimo corrisponderà proprio a 0, dato che le variabili ausilia-
rie sono definite positive:
1. si trasformano tutte le disequazioni in equazioni:
1. se la disequazione è del tipo ≤ si aggiunge la variabile slack yi positiva;
2. se la disequazione è del tipo ≥ si aggiunge la variabile slack yi negativa e la va-
riabile artificiale hi positiva;
3. se è un'equazione di aggiunge solo la variabile artificiale hi positiva;
2. si crea la funzione ausiliaria w data dalla somma delle variabili artificiali hi
1. si esprimono le variabili artificiali della funzione ausiliaria in funzione delle varia-
bili originarie;
3. si costruisce la tabella come nel simplesso standard aggiungendo come ultima riga l'e-
quazione di -w, scritta in funzione delle variabili del problema, e come penultima co-
lonna -w in forma canonica;
4. si minimizza la funzione w tramite il simplesso standard, trovando come s.b.a ottima
w*:
1. se w∗0 allora non è stato possibile eliminare tutte le hi e quindi il problema ori-
ginario è inconsistente; l'algoritmo termina;
2. se w ∗=0 allora si sono annullate tutte le variabili artificiali e si è trovata una
s.b.a.;
1. se tutte le h i=0 variabili sono non basiche allora si elimina dalla tabella la
funzione ausiliaria e le colonne delle variabili artificiali;
2. se h k è in base allora la soluzione è degenere rispetto a questa variabile;
1. se nella riga di h k esistono solo coefficienti nulli allora si eliminano le co-
lonne delle variabili artificiali;
2. se nella riga di h k esiste una coefficiente non nullo in corrispondenza del
quale x j non è in base allora si effettua il pivoting su tale coefficiente;
5. si procede come nel simplesso standard.
2.2.3.1 Esercizio
Rifacciamoci all'esercizio precedente. Scriviamo la variabile artificiale h 1 in funzione delle
variabili originarie:

h 1=10− x1 −x 2 y 3

Costruiamo la funzione ausiliaria

w=h1=10−x 1−x 2  y 3 ⇒−10=−w−x 1−x 2  y 3

Modifichiamo la tabella Tabella 2.5 aggiungendo la funzione ausiliaria

Luca Esposito
26 Capitolo 2 - Ottimizzazione lineare

x1 x2 y1 y2 y3 h1 -z -w b
y1 2 5 1 0 0 0 0 0 100
y2 5 2 0 1 0 0 0 0 100
h1 1 1 0 0 -1 1 0 0 10
-z 1 2 0 0 0 0 1 0 0
-w -1 -1 0 0 1 0 0 1 -10
Tabella 2.10: Tabella modificata aggiungendo la funzione ausiliaria

Adesso bisogna minimizzare w: la variabile entrante è riferita al coefficiente della w più bassa
(in questo caso sono uguali e quindi lo prendiamo a caso) ed è x1. Dato che il minimo tra i
rapporti

min {100/2=50 ; 100/5=20 ; 10}=10

si ottiene dalla riga di h1, essa sarà la variabile uscente. L'elemento pivot è a 31=1 . La tabella
derivante dalla trasformazione delle righe è la seguente:

x1 x2 y1 y2 y3 h1 -z -w b
y1 0 3 1 0 2 -2 0 0 80
y2 0 -3 0 1 5 -5 0 0 50
x1 1 1 0 0 -1 1 0 0 10
-z 0 1 0 0 1 1 1 0 -10
-w 0 0 0 0 0 1 0 1 0
Tabella 2.11: Tabella per la minimizzazione della funzione w

Il test di ottimalità risulta soddisfatto (infatti w∗=h1=0 si è ottenuto per y 1=80 , y 2=50 ,
x 1=10 e z =10 ) e poiché tutte le variabili artificiali sono nulle e non basiche allora è possi-
bile eliminare la riga di w e la colonna di h1. Si ricava la tabella:

x1 x2 y1 y2 y3 -z -w b
y1 0 3 1 0 2 0 0 80
y2 0 -3 0 1 5 0 0 50
x1 1 1 0 0 -1 0 0 10
-z 0 1 0 0 1 1 0 -10
Tabella 2.12: Da questa tabella si deve massimizzare z

Si procede, ora, come nel simplesso standard.

Luca Esposito
Capitolo 2 - Ottimizzazione lineare 27

2.3 Individuazione di B e B­1
La matrice di base B è costituita dalle colonne di A relative alle variabili che saranno in forma
canonica. Si individua quindi nella prima tabella del simplesso in corrispondenza delle colon-
ne che nella tabella della generica iterazione k formano la matrice identità. La sua inversa
B −1 si trova nella tabella corrispondente alla k-esima iterazione ed è posizionata nelle colon-
ne che nel sistema iniziale formano la matrice identità.
2.3.1 Esercizio
Consideriamo l'esercizio del §2.2.1.1 e riportiamo la tabella iniziale

x1 x2 y1 y2 -z b
y1 3 7 1 0 0 21
y2 8 4 0 1 0 32
-z 4 5 0 0 1 0
Tabella 2.13: x1=0; x2=0; y1=21; y2=32; z=0 [Vertice O]

mettendo in evidenza le righe e le colonne che compongono la matrice di base B, e finale

x1 x2 y1 y2 -z b
x2 0 1 2/11 -3/44 0 18/11
x1 1 0 -1/11 7/44 0 35/11
-z 0 0 -42/77 -13/44 1 -230/11
Tabella 2.14: x1=35/11; x2=18/11; y1=0; y2=0; z=230/11 [Vertice B]

dove si evidenzia la matrice di base inversa B −1 . Verifichiamo che le matrici trovate siano
effettivamente la matrice di base e la sua inversa. Il prodotto delle due matrici deve risultare
esse la matrice identità:

[ ][
14 3 −21 21
− 
BB = 7 3
−1
[ ][
2/11 −3 /44
4 8 −1 /11 7 /44
= 11
8

11
8 ] 44 44 = 1 0
−12 56

0 1 ]
11 11 44 44

2.4 Analisi post­ottimale
Poiché nella realtà i dati del problema non sono proprio deterministici, ma presentano un certo
grado di aleatorietà, è necessario effettuare un'analisi supplementare delle soluzioni ottime ri-
cavate. Tale analisi si preoccupa di identificare gli effetti che eventuali variazioni dei parame-
tri producono sul sistema.

Luca Esposito
28 Capitolo 2 - Ottimizzazione lineare

2.4.1 Analisi di stabilità
L'analisi di stabilità determina i campi di variazione dei parametri entro i quali la configura-
zione della soluzione ottima della funzione resta inalterata. Tale campo, per il generico vinco-
lo i, è dato dall'intervallo [bi − b−i ; bi  bi] . Per determinare le variazioni si utilizza la
condizione di ammissibilità diretta; all'ottimo vale infatti la condizione x ∗b = B ∗−1 b0 e da
essa è possibile trovare un'espressione delle variazioni in funzione dei parametri noti della ta-
bella finale del simplesso. Si deve quindi trovare il valore delle variazioni in corrispondenza
del quale non vale più la condizione di ammissibilità diretta:
1.  b −i =min {x ∗bk / ki } ∀  ki0
1. si considerano i coefficienti della colonna corrispondenti al vincolo i ,  i , positivi
presi nella tabella della soluzione ottima;
1. se il vincolo è di ≤ si considera la colonna della variabile slack associata;
2. se il vincolo è di ≥ o = allora è la colonna della variabile artificiale associata;
3. se non esistono coefficienti positivi allora  b −i =∞ ;
2. si esegue il rapporto, termine a termine, tra la colonna dei termini noti x ∗b (presi
dalla tabella della soluzione ottima) e tali coefficienti e si prende il minimo;
2.  b i =min {x ∗bk /−ki } ∀ ki 0
1. si considerano i coefficienti della colonna corrispondenti al vincolo i,  i , negativi
presi nella tabella della soluzione ottima;
1. se il vincolo è di ≤ si considera la colonna della variabile slack associata;
2. se il vincolo è di ≥ o = allora è la colonna della variabile artificiale associata;
3. se non esistono coefficienti negativi allora  b i =∞ ;
2. si esegue il rapporto, termine a termine, tra la colonna dei termini noti x ∗b (presi
dalla tabella della soluzione ottima) e tali coefficienti e si prende il minimo.

Il termine bi è il termine noto dell'i-esimo vincolo del sistema originario.


2.4.1.1 Esercizio
Si vuole effettuare l'analisi di stabilità dell'esercizio §2.3.1. Si considera la tabella Tabella
2.14 e calcoliamo il campo di variazione dei due parametri. Rispettivamente al primo vincolo

3 x 17 x 2≤21

abbiamo che

{
18 11
 b −1 =
· =9
11 2 ⇒[21−9 ; 2135]=[12 ; 56]
 35
 b1 = ·11=35
11

Per il secondo vincolo 8 x 14 x 2≤32 si ha

Luca Esposito
Capitolo 2 - Ottimizzazione lineare 29

{
35 44
 b−2 = ⋅ =20
11 7 ⇒ [32−20 ; 3224]=[12 ; 56]
 18 44
 b 2 = ⋅ =24
11 3

2.4.2 Analisi parametrica
Tale analisi studia l'andamento della soluzione, quindi delle variabili e della funzione obietti-
vo, al variare dei coefficienti della funzione obiettivo. Si deve individuare il campo di varia-
zione dei coefficienti della funzione obiettivo c j entro il quale si conserva la configurazione
della s.b.a. ottima. Il campo di variazione è [c j− c −j ; c j  c j ] dove gli incrementi si tro-
vano come:
1. se c j è relativo ad una variabile non basica
1. per un problema di massimizzazione allora  c j =−c ∗j e  c −j =−∞ ;
2. per un problema di minimizzazione allora  c −j =c∗j e  c j =∞ ;
2. se c j è relativo ad una variabile basica

 −c
1. per un problema di massimizzazione allora  c j =min {−a } se a∗jk 0 e
j

jk
−c∗j
 c −j =min { a } se a∗jk 0 ;

jk

2.4.2.1 Esercizio
Effettuiamo l'analisi parametrica dell'esercizio §2.2.1.1. Consideriamo la Tabella 2.4 ed effet-
tuiamo l'analisi prima su c 1=4 e poi su c 2=5 . Dato che x 1 è in base ed il problema è a
massimizzare, l'incremento relativo è


 c 1 =min j
{ }
−c j
−a ∗
2j
∗ 
∀ a 2j0⇒  c 1 =
42
7
=6

 c −1 =min j
{ }
−c j
a∗2j
∀ a∗2j0⇒  c −1 =
13
7

Relativamente al secondo coefficiente abbiamo che

 c 2 =min j
{ }
−c j

−a 1j
∀ a∗1j 0 ⇒  c 2 =
13
3

 c −2 =min j
{ }
−c j
a∗1j
∀ a∗1j 0 ⇒  c −2 =3

Quindi risulta che i due campi di variazione sono rispettivamente [−2 ; 4 7 ] e [ 5− 3 ;8 ] .


13 13

Luca Esposito
Capitolo 3

OTTIMIZZAZIONE INTERA
CAPITOLO 3 

3.1 Problemi di programmazione intera
Se la matrice dei vincoli A è totalmente unimodulare, ed il vettore dei termini noto b è inte-
ro, allora la soluzione del problema lineare è intera senza aggiunta di alcun vincolo di interez-
za. Se ciò non accade bisogna imporre il vincolo di interezza su alcune o tutte le variabili de-
cisionali. Tali vincoli definiscono un reticolo di punti all'interno del dominio di ammissibilità
costituendo le soluzioni ammissibili del problema intero. Se il numero di soluzioni è piccolo
si può anche procedere ad una enumerazione totale (o esplicita) di esse.
Se indichiamo con S l'insieme dei punti interi interni al dominio di ammissibilità, il nocciolo
convesso è il più piccolo insieme convesso che contiene S.
3.1.1 Metodo del cutting plane
Il metodo del cutting plane opera un restringimento del dominio delle soluzioni fino alla de-
terminazione di una soluzione ottima che rispetti i vincoli di interezza. Con tale metodo è pos-
sibile trovare una formulazione del nocciolo convesso:
1. si risolve l'algoritmo del simplesso rilassando i vincoli di interezza;
2. se la soluzione ottenuta non rispetta i vincoli di interezza
a) si introduce un nuovo vincolo che riduce la regione ammissibile;
b) si ritorna al punto 1;
3. se la soluzione ottenuta rispetta i vincoli di interezza si termina.

Il piano di taglio non deve escludere dalla regione ammissibile il vertice corrispondente alla
soluzione ottima continua x ∗ e non deve escludere le soluzioni ammissibili intere del proble-
ma originario. Devono essere quindi valide le disuguaglianze

{ T x ∗b0
 T x≤b0 ∀ x ∈ S
(3.1)

L'individuazione del piano di taglio prende il nome di separazione di x ∗ da S. La convergen-


za dell'algoritmo dipende dal tipo di tagli generati.

Luca Esposito
32 Capitolo 3 - Ottimizzazione intera

3.1.2 Metodo del branch and bound
Quando un'enumerazione totale non è praticabile, si può procedere utilizzando approcci che
praticano un'enumerazione parziale, o implicita. Con tale metodo si suddivide lo spazio delle
soluzioni ammissibili in due o più sottoinsiemi, mutuamente esclusivi la cui unione dia l'insie-
me di partenza, ciascuno dei quali può contenere la soluzione ottima del problema originario.
Per ogni sottoinsieme si trova un valore limite della funzione obiettivo in relazione al quale si
decide se partizionare nuovamente l'insieme oppure eliminarlo. L'algoritmo è il seguente:
1. si individua la soluzione ottima del problema rilassato dei vincoli di interezza;
2. si definisce un criterio per individuare il limite del valore della funzione obiettivo (un
limite superiore, LS, se il problema è a massimizzare altrimenti un limite inferiore,
LI):
a) rilassamento continuo: si elimina il vincolo di interezza e si risolve il problema
continuo. Il valore ottimo trovato corrisponde ad un LS;
b) rilassamento dei vincoli del modello: si rilassano i vincoli difficili e si trova la so-
luzione ottima che corrisponde ad un LS;
c) rilassamento lagrangiano: si crea una funzione composta dalla differenza tra la
funzione obiettivo e la somma dei prodotti dei vincoli difficili rilassati per un vet-
tore di moltiplicatori non negativo. La soluzione trovata costituisce un LS;
3. si sceglie la variabile di branching (solitamente quella con il valore frazionario più vi-
cino ad un valore intero);
4. si partiziona l'insieme;
a) se la variabile k  x jk 1 è continua, si generano due sottoinsiemi che presenta
rispettivamente i vincoli aggiuntivi x j ≤k e x j ≥k 1 ;
b) se la variabile x b è binaria, si generano due sottoinsiemi che presentano rispetti-
vamente i vincoli aggiuntivi x b =1 e x b =0 ;
5. si costruisce l'albero delle soluzioni;
a) ogni insieme comprende il LI, LS e l'insieme dei vincoli che lo compongono;
6. si eliminano gli insiemi che non conducono alla soluzione ottima;
a) test di inammissibilità: si verifica che il sottoinsieme non presenti soluzioni inam-
missibili;
b) test di ammissibilità: se la soluzione corrispondente a LS soddisfa tutti i vincoli del
problema originario, allora essa è la soluzione ottima del sottoinsieme ed il valore
di z determinato diventa LI;
c) test di limite: dato che per un sottoinsieme k si ha che z k ≤LS k , se z k ≤LS k ≤LI
allora la migliore soluzione ammissibile z k non sarà migliore di quella corrente;
d) test di dominanza: se S j domina S k e S j è già stato eliminato, allora S k può es-
sere eliminato;
7. si determina il sottoinsieme da esplorare
a) best-first: si esplorano prima i sottoinsiemi che presentano un LS più grande che
vengono ulteriormente partizionati;
b) depth-first: si esplora il sottoinsieme generato per ultimo; se tale insieme non deve
essere eliminato eventualmente si partiziona altrimenti si risale la lista;
8. si termina quando non esistono altri sottoinsiemi da esplorare e la soluzione ottima tro-
vata soddisfa i vincoli del problema.
3.1.2.1 Considerazioni sul Branch and Bound
Tale metodo converge alla soluzione ottima del problema intero in un numero finito di passi.
Se si indica con N il numero di sottoproblemi generati e con t il tempo medio di calcolo ri-

Luca Esposito
Capitolo 3 - Ottimizzazione intera 33

chiesto per l'analisi di un singolo problema, il tempo medio totale è T = N t . N cresce espo-
nenzialmente con il numero di variabili del problema e quindi il Branch and Bound richiede
uno sforzo computazionale di tipo esponenziale. La strategia depth-first richiede un'occupa-
zione di memoria più contenuta rispetto alla strategia best-bound a discapito di tempi di calco-
lo leggermente più alti.

3.2 Problema dello zaino
Si dispone di uno zaino che può sopportare un peso massimo pari a b e si dispone di un certo
numero n di elementi ognuno dei quali con un proprio peso ed un valore. Si vuole determinare
il numero (intero) di prodotti da portare in modo da massimizzare il valore dello zaino. Il mo-
dello di zaino è il seguente:

n
Max z =∑ v j x j
j=1
n

∑ p j x j ≤b (3.2)
j=1
x j ≤m j j=1,... , n
x j ≥0 intero j=1,... , n

dove
• p= p 1 , ... , p n  è il vettore dei pesi;
• v=v 1 ,... , v n  è il vettore dei valori unitari;
• m=m1 , ... , mn è il vettore delle disponibilità;
• b≥ p j ∀ j è il peso massimo sopportabile;
• x = x1 ,... , x n  è un vettore di variabili intere che indica la quantità di prodotto da
portare; se le variabili sono binarie indica se il prodotto si deve caricare o meno.

L'algoritmo è:
1. si individuano gli elementi in gioco:
2. si calcolano i rapporti tra i valori ed i pesi di ogni prodotto d j=v j / p j ;
3. si ordinano tali rapporti in una tabella in maniera decrescente;
4. si trovano i prodotti sfruttando e k , somma dei pesi primi k elementi della tabella;
a) se e k be k 1 allora la soluzione è data dai primi k prodotti e dalla frazione
b−e k / p k1 del k+1-esimo prodotto;
1. si effettua l'algoritmo di branch and bound utilizzando la variabile x k 1 come
variabile di branching binaria
b) se b=e k la soluzione è data dai primi k prodotti;

3.2.1 Esercizio
Si consideri uno zaino di capienza massima 7. Si hanno a disposizione 4 prodotti i cui valori
e pesi unitari sono riportati in Tabella 3.1

Prodotto Valore Peso


A 4 2

Luca Esposito
34 Capitolo 3 - Ottimizzazione intera

B 5 5
C 8 4
D 7 2
Tabella 3.1: Tabella dei prodotti con valori e pesi unitari

Individuiamo le variabili del problema x ={x A , x B , x C , x D } che indica quale elemento si può
da portare e scriviamo il modello del sistema:

{
Max z=4 x A5 x B8 x C 7 x D
2 x A5 x B4 x C 2 x D ≤7
x A≤4
x B ≤3
x C ≤5
x D≤5

Figura 3.1: Risoluzione ad albero del problema dello zaino proposto

Costruiamo la tabella dei rapporti ed ordiniamola in maniera decrescente:

Luca Esposito
Capitolo 3 - Ottimizzazione intera 35

Prodotto Valore Peso Valore/Peso


D 7 2 3.5
A 4 2 2
C 8 4 2
D 5 5 1
Tabella 3.2: Tabella dei rapporti
Per riempire lo zaino è necessario portare quindi una quantità pari a x D=1 x A=1 e
x C =3/4 . Con tali valori delle variabili si ottiene che la soluzione ottima è z ∗=17 . Dato che
x C è una quantità frazionaria, scegliamo tale variabile come variabile di branching binaria ed
applichiamo il branch and bound. Per x C =0 la soluzione ottima è z ∗=14 , ma con x B fra-
zionario, mentre per x C =1 la soluzione è z ∗=17 ma stavolta con x A frazionario. Usando
una strategia best-first, si sceglie di esaminare il secondo insieme dato che il LS coincide con
quello del caso originario. Si pone quindi x A=0 che conduce a z ∗=16 mentre per x A=1 si
ha z ∗=15.5 . Esaminiamo il primo sottoinsieme usando x B come variabile di branching. Il
primo sottoinsieme ottenuto fornisce la soluzione z ∗=15 mentre il secondo si chiude per
inammissibilità. La soluzione ottima con valori interi è quindi data portando i prodotti C e D.

3.3 Complessità computazionale
Tutti gli algoritmi richiedono un tempo di calcolo per la loro esecuzione proporzionale al nu-
mero di operazioni necessarie. Tale numero si può esprimere in funzione di un parametro del
problema che ne definisce la dimensione; tipicamente si utilizza il numero di vincoli e/o di va-
riabili.
Se il numero di operazioni cresce attraverso una funzione polinomiale O nk  con la di-
mensione del problema, allora il problema può considerarsi facile ed indichiamo con P la clas-
se di problemi risolvibili in tempi polinomiali. Altrimenti, se cresce in maniera esponenziale
allora il problema si considera difficile e non può risolversi in tempi ragionevoli per dimen-
sioni del problema elevato; indichiamo con NP la classe di tali problemi.
La valutazione della complessità dell'algoritmo si opera nel caso peggiore anche se è possi-
bile definire un caso medio come il caso che si verifica più frequentemente. Il simplesso, ad
esempio nel caso peggiore è di tipo NP, ma nel caso medio è molto efficiente.

Luca Esposito
Capitolo 4

OTTIMIZZAZIONE SU RETE
CAPITOLO 4 

4.1 Teoria dei grafi
Un grafo G=V , S  è l'insieme dei vertici e degli spigoli. Ciascuno spigolo corrisponde ad
una coppia di vertici v i , v j  . Se gli spigoli sono orientati allora prendono il nome di archi e
∣V∣
l'arco v i , v j  e differente da v j , v i  . La densità di un grafo è il rapporto d = ∣A∣ dove A è
l'insieme degli archi. Due vertici sono adiacenti se esiste un arco che li congiunge, mentre due
archi sono adiacenti se hanno due vertici in comune.
Un grafo orientato si dice simmetrico se per ogni arco v i , v j  ne esiste il suo simmetrico
v j , v i  , altrimenti si dice non simmetrico; antisimmetrico, invece, se per ogni arco v i , v j 
non esiste il suo simmetrico.
Un grafo orientato è completo se per ogni coppia di vertici v i , v j  esiste almeno un arco
che li connette. Un grafo orientato è pieno se per ogni coppia ordinata di vertici, v i , v j  e
v j , v i  , esiste un arco che li connette. Il complementare di un grafo orientato è composto da
tutti i vertici e dagli archi che appartengono al grafo pieno associato, ma non al grafo stesso.
Su un grafo orientato si definisce un grafo parziale quello composto da tutti i vertici del
grafo e da un sottoinsiemi degli archi del grafo. Un sottografo è invece costituito da un sot-
toinsieme di vertici del grafo orientato e dagli archi ad essi relativi.
Due grafi sono isomorfi se presentano le stesse connessioni tra i vertici. Un grafo è planare
se gli archi si incontrano solo nei vertici.
Su un grafo orientato si definisce percorso o cammino una successione finita di archi tale
che il vertice destinazione di un arco sia l'origine di un altro arco. Per un grafo non orientato
si parla di catena. Su un grafo orientato si definisce il circuito come un percorso tale che il
vertice origine coincida con il vertice destinazione. Per un grafo non orientato si parla di ciclo.
Un grafo si dice connesso se per ogni coppia di vertici esiste sempre un percorso che li
connette. Un grafo si dice fortemente connesso se per ogni coppia ordinata di vertici esiste un
percorso che li connette. Si definisce ordine di un percorso il numero di archi che lo compon-
gono. Se gli archi sono tutti distinti tra loro il percorso è semplice altrimenti è composto.
Un percorso è hamiltoniano se passa per tutti i vertici del grafo una sola volta; si dice eule-
riano se passa per tutti gli archi del grafo una sola volta.

Luca Esposito
38 Capitolo 4 - Ottimizzazione su rete

4.1.1 Strutture di un grafo
Un grafo a livelli è un grafo orientato senza circuiti in cui è possibile individuare alcuni verti-
ci che sono solo destinazione di archi ed altri vertici che sono solo origine di archi.
Un grafo bipartito è un grafo a due livelli in cui esistono vertici che sono solo origine di
archi e vertici che sono solo destinazione di archi.
Un'arborescenza è un grafo orientato senza circuiti in cui è presente un solo vertice desti-
nazione di archi e tutti gli altri vertici sono destinazione di un solo arco, ma possono originare
uno, nessuno o più archi. I vertici che sono solo destinazione di archi si chiamano foglie. Su
un grafo non orientato di definisce albero un grafo connesso e senza cicli con v vertici e v-1
spigoli.
Una rete è un grafo per il quale sono definite delle funzioni numeriche sugli archi e/o sui
vertici. Quindi una rete è un'insieme R=V , A , W , C  dove W è l'insieme dei pesi sui vertici
e C è l'insieme dei costi sugli archi.
4.1.2 Strutture dati di un grafo
Quando il grafo è di grandi dimensioni è necessario mantenere le informazioni relative agli
archi ed ai vertici in una struttura dati adeguata, matriciale o vettoriale.
La matrice di adiacenza vertice-vertice presenta sulle righe e sulle colonne i vertici che
compongono il grafo e l'elemento generico vale

a i j= {01 se l ' arco i− j non esiste


se l ' arco i− j esiste
(4.1)

La somma degli elementi su ogni riga fornisce il numero di archi che hanno origine nel verti-
ce corrispondente. La somma degli elementi sulla colonna fornisce il numero di archi che
sono destinazione del vertice corrispondente. L'occupazione di memoria richiesta è v ×v .
La matrice di incidenza vertice-arco presenta sulle colonne gli archi e sulle righe i vertici
che compongono il grafo. Il generico elemento vale

{
0 se il vertice v i non è estremo dell ' arco
a i j= 1 se il vertice v i è origine dell ' arco i− j (4.2)
−1 se il vertice v i è destinazione dell ' arco i− j

La somma su ogni colonna è nulla e l'occupazione di memoria è v ×a .

4.2 Visita di un grafo
Con tale nomenclatura si intende il raggiungimento di tutti i vertici del grafo a partire da un
vertice origine:
1. si parte da un vertice origine;
2. se si effettua la visita in larghezza:
a) si visitano tutti i vertici direttamente collegati al vertice;
b) ad ogni iterazione si segnano i vertici visitati;
c) si segnano i vertici predecessori nella lista dei precedessori;
d) si ricomincia con il vertice visitato per primo, scartando i vertici già visitati;
3. se si effettua la visita in profondità;

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 39

a) si visita solo il primo vertice collegato direttamente;


b) ad ogni iterazione si segnano i vertici visitati;
c) si segnano i vertici predecessori nella lista dei predecessori;
d) se non si può visitare un vertice nuovo, si ritorna al vertice predecessore;
4.2.1 Esercizio

Figura 4.1: Effettuiamo la visita del grafo mostrato in figura

Consideriamo il grafo in Errore: sorgente del riferimento non trovata ed effettuiamone la visi-
ta prima in larghezza che in profondità. Scegliamo il vertice 1 come vertice origine. I vertici
direttamente raggiungibili sono 2 e 3. Segniamo tali vertici tra quelli visitati e si segna il verti-
ce predecessore. Partiamo dal vertice 2 e raggiungiamo direttamente i vertici 4 e 6. Da 6 è
possibile raggiungere solo 2 che è già visitato e quindi si ricomincia da 3 che è direttamente
collegato a 4 e 5. Dato che 4 è già visitato si passa al vertice 5 e si termina.

Nodi visitati Nodi precedenti


Passo 1 1 0
Passo 2 1 2 3 0 1 1
Passo 3 1 2 3 4 6 0 1 1 2 4
Passo 4 1 2 3 4 5 6 0 1 1 2 3 4
Tabella 4.1: Tabella dei nodi visitati e dei nodi precedenti per una visita in larghezza

Operiamo la visita in profondità. Partiamo sempre dal vertice 1 e possiamo raggiungere i ver-
tici 2 e 3. Raggiungiamo il vertice 2 e successivamente il vertice 4. Dal vertice 4 raggiungia-

Luca Esposito
40 Capitolo 4 - Ottimizzazione su rete

mo il vertice 6. Poiché non è possibile raggiungere altri vertici ripartiamo dal vertice 3 e da
qui raggiungiamo il vertice 5.

Nodi visitati Nodi precedenti


Passo 1 1 0
Passo 2 1 2 0 1
Passo 3 1 2 4 0 1 2
Passo 4 1 2 4 6 0 1 2 4
Passo 5 1 2 3 4 6 0 1 1 2 4
Passo 6 1 2 3 4 5 6 0 1 1 2 3 4
Tabella 4.2: Tabella dei nodi visitati e dei nodi precedenti per una visita in larghezza

4.3 Problemi di percorso
Per problemi di percorso su una rete si intende la determinazione di un percorso ottimo da un
vertice origine ed un vertice destinazione.
4.3.1 Minimo percorso per una coppia o/d
Con tale modello si trova un percorso a costo minimo tra una generica coppia origine/destina-
zione:
1. si sceglie un nodo origine o ed un nodo destinazione d;
2. si elencano tutti i percorsi possibili;
3. si costruisce la matrice di incidenza arco-percorso per o/d;
a) ogni riga contiene un arco, il costo dell'arco ed i percorsi che lo attraversano;
b) si sceglie il percorso a costo minimo;
E' possibile, così, formulare un modello di programmazione intera binaria per l'individuazione
del minimo percorso o/d che rispetti i seguenti canoni
1. la funzione da minimizzare è la somma del prodotto tra il costo dell'arco c ij e la varia-
bile associata alla presenza dell'arco nel percorso minimo x ij ;
2. ci deve essere un solo arco appartenente al percorso minimo che parte dall'origine (pri-
mo vincolo);
3. ci deve essere un solo arco appartenente al percorso minimo che raggiunge la destina-
zione (secondo vincolo);
4. per ogni nodo intermedio appartenente al percorso minimo la somma tra archi uscenti
ed archi entranti nel nodo deve essere nulla (terzo vincolo).

Min z =∑ c ij x ij
ij∈ A

∑ x ok =1 :ok ∈A
k ∈V

∑ x id=1 :id ∈ A (4.3)


i ∈V

∑ x jk −∑ x ij=0 ∀ j≠o , d ∈V : jk ∈ A ,ij ∈ A


k ∈V i ∈V
x ij ∈{0, 1} ∀ ij ∈ A

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 41

La matrice dei vincoli corrisponde alla matrice di incidenza vertice-arco ed ha quindi dimen-
sione v ×a .
4.3.1.1 Esercizio
Consideriamo la rete di Figura 4.2 a cui
sono stati inseriti dei costi. Calcoliamo il
minimo percorso tra la coppia di nodi 1-
6.
Enumeriamo tutti i percorsi possibili:
p1) 1-2-6
p2) 1-2-4-6
p3) 1-3-4-6
p4)1-3-5-6

Costruiamo la matrice di incidenza relati-


va alla coppia 1-6 Figura 4.2: Calcolare il minimo percorso tra la cop-
pia di nodi 1-6

i-j costo p1 p2 p3 p4
1-2 2 1 1 0 0
1-3 3 0 0 1 1
2-1 1 0 0 0 0
2-4 4 0 1 0 0
2-6 5 1 0 0 0
3-4 2 0 0 1 0
3-5 5 0 0 0 1
4-6 1 0 1 1 0
5-6 4 0 0 0 1
6-2 6 0 0 0 0
Costo del percorso 7 7 6 12
Tabella 4.3: Matrice di incidenza arco-percorso per 1-6

Costruiamo il modello di programmazione intera binaria:

Max z=2 x123 x 13...6 x 62


dal nodo 1 x12 x 13=1
verso il nodo 6 x 26x 46 x 56=1
per 2 x 21x 24 x 26−x 12−x 62=0 (4.4)
per 3 x 34x 35−x 13=0
per 4 x 46−x 24− x 34=0
per 5 x56 −x 35=0

Luca Esposito
42 Capitolo 4 - Ottimizzazione su rete

4.3.2 Algoritmo di Dantzig
Tale algoritmo consente di trovare il minimo percorso da un nodo origine ad uno o più nodi
destinazione. Essendo un algoritmo arborescente di tipo label setting, ad ogni iterazione si fis-
sa il valore del minimo percorso tra l'origine ed un vertice della rete. L'algoritmo è il seguen-
te:
1. si crea una lista degli archi uscenti dal nodo origine ordinati per costo crescente;
2. al nodo origine si associa il costo 0;
1. si cancellano tutti gli archi con destinazione l'origine;
3. si crea l'insieme dei nodi conosciuti S (inizialmente solo il nodo origine);
4. si crea la lista dei nodi predecessori (inizialmente solo 0);
5. si sceglie l'arco uscente da S a minimo costo;
1. il nodo corrispondente si inserisce in S;
2. si cancellano tutti gli archi con destinazione il nuovo nodo;
3. si inserisce nella lista dei precedessori il nodo predecessore a tale nodo;
4. si segna costo del cammino minimo;
6. se l'insieme S contiene tutti i nodi l'algoritmo termina altrimenti si ricomincia dal pun-
to 4.

Tale algoritmo richiede v 2 addizioni e v 2 confronti per determinare i valori da assegnare ad


ogni vertice. Per l'ordinamento iniziale richiede inoltre v 2 log v confronti e quindi la sua com-
plessità è dell'ordine di O v 2 log v  .
4.3.3 Algoritmo di Dijkstra
Tale algoritmo arborescente di tipo label setting-correcting, assegna ad ogni vertice un valore
di tentativo che rappresenta il limite superiore al valore del minimo percorso. Dopo un nume-
ro di tentativi pari al massimo al numero di vertici, l'algoritmo etichetta tutti i nodi definitiva-
mente. L'algoritmo è il seguente:
1. si assegna al nodo origine un'etichetta iniziale definitiva pari a 0;
a) si imposta come nodo predecessore 0;
b) si assegna a tutti i nodi un valore di tentativo pari a ∞ ;
2. si calcolano le nuove etichette dei nodi;
a) si somma al costo dell'arco il valore dell'etichetta;
b) se l'arco non esiste si assegna un costo infinito;
3. si confrontano tutte le nuove etichette con le precedenti di ciascun nodo;
a) per ogni vertice si sceglie il valore di tentativo migliore;
b) l'etichetta minima diventa definitiva;
c) si imposta il predecessore del nodo a cui corrisponde la nuova etichetta minima;
4. se si sono etichettati definitivamente tutti i nodi l'algoritmo termina, altrimenti si ripar-
te dal punto 2 con il nodo etichettato per ultimo.
v v−1
Per il calcolo dei valori di tentativo l'algoritmo opera 2 confronti e addizioni. Inoltre ad
v v−1
ogni iterazione sono necessari altri 2 confronti per la determinazione del minimo e que-
sto significa che nel caso peggiore di v −1 iterazioni l'algoritmo opera v  v−1 confronti. In
totale la complessità di tale algoritmo è dell'ordine O v 2  .

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 43

4.3.4 Il problema del massimo percorso
Si vuole determinare il percorso massimo da una prefissata origine a tutti i nodi della rete. Il
modello è simile a quello del minimo percorso soltanto che la funzione obiettivo è a massi-
mizzare. L'algoritmo utilizzato è del tipo label setting basato su una particolare regola di visi-
ta:
1. si fissa il nodo origine e lo si etichetta con 0;
2. si etichetta, in sequenza, il nodo destinazione di archi i cui nodi origine siano stati tutti
già etichettati;
a) si confronta confrontano le etichette possibili e si sceglie quella con valore di costo
massimo;
3. se sono stati etichettati tutti i nodi si termina, altrimenti si procede dal punto 2 parten-
do dall'ultimo nodo etichettato.

4.4 Problemi di flusso
Oltre ai problemi di percorso, esistono anche problemi di flusso legati alla determinazione
dello spostamento del flusso tra i nodi di una rete. Si distinguono, quindi, nodi che generano il
flusso e nodi che lo attraggono; tra essi si instaura una domanda di spostamento che rappre-
senta l'esigenza di stabilire una comunicazione tra due nodi della rete. Dato che l'origine e la
destinazione sono collegati da più percorsi, il flusso si distribuisce su più rami generando una
configurazione di flussi.
4.4.1 Modello di flusso single­commodity
Nel caso si voglia determinare la configurazione dei flussi (supposti tutti uguali e quindi rap-
presentabili da un'unica variabile f ij per ogni arco ij ) sugli archi della rete che soddisfano i
vincoli di attrazione e generazione a costo minimo, si utilizza il seguente modello:

Min z= ∑ cij f ij
i j∈ A

{ }
gj ∀ j∈O
∑ f jk −∑ f ij = −a j ∀ j∈F : jk ∈ A ,ij ∈ A (4.5)
k ∈V i ∈V
0 altrimenti
0≤ f ij ≤mij ∀ ij ∈ A

Con tale modello si sceglie la configurazione dei flussi a costo minimo che soddisfa i vincoli
di attrazione e generazione. Il bilancio di flusso per ciascun nodo j, è pari alla quantità genera-
ta g j se si tratta di un nodo generatore, alla quantità attratta a j se è un nodo attrattore altri-
menti è nullo. Se ogni arco presenta anche dei vincoli di capacità, allora il flusso che lo attra-
versa deve risultare inferiore a tale valore. Nel caso in cui i costi siano variabili allora
c ij =c ij  f ij  .
Tale modello presenta la stessa struttura del modello del minimo percorso e quindi la di-
mensione del problema è la stessa.
4.4.1.1 Problema del trasporto
Con tale espressione si indica un problema di flusso single-commodity a costi costanti c ij su
ciascun arco in cui ogni nodo origine è un generatore di flusso g i e ogni nodo destinazione è
un attrattore di flusso a j . Si deve determinare la combinazione dei flussi sugli archi che sod-

Luca Esposito
44 Capitolo 4 - Ottimizzazione su rete

disfi le richieste al minimo costo. Con tali ipotesi il modello di flusso single-commodity di-
venta:

Min z= ∑ cij f ij
i j∈ A

∑ f ij=g i i ∈O
j∈F (4.6)
∑ f ij=a j j∈F
i ∈O
f ij ≥0

Se il problema presenta m origini ( ∣O∣=m ) ed n destinazioni ( ∣F∣=n ) allora il modello pos-


siede m+n vincoli ed m×n variabili.
4.4.1.2 Il problema dell'assegnamento
Tale problema prevede l'assegnazione di n mansioni ad n impiegati con il vincolo che ogni
mansione può essere assegnata ad un solo impiegato ed ogni impiegato può svolgere una sola
mansione. L'impiegato svolge una mansione con uno specifico costo: si vuole determinare
l'accoppiamento impiegato-mansione che minimizzi i costi. Il modello è il seguente:

Min z = ∑ c ij x ij
i j∈ A

∑ x ij =1 ∀ i∈V :ij ∈A
j ∈V (4.7)
∑ x ij=1 ∀ j∈V : ij∈ A
i ∈V
x ij ={0,1}

Il modello presenta n×n variabili e 2 n vincoli.


4.4.2 Modello di flusso multi­commodity
Il modello multi-commodity prevede la presenza di più flussi differenti tra loro. Su ogni arco
della rete circolano flussi differenti provenienti da diverse origini e rappresentati dalle variabi-
li f ij . Il flusso su ogni arco f ij è quindi la somma dei flussi provenienti dalle diverse origi-
o

ni. E' necessario, poi, imporre i vincoli di bilancio nei nodi intermedi relativamente alla do-
manda di ciascun origine. Se il nodo è destinazione allora il bilancio di flusso è proprio pari
alla domanda di una specificata origine (se tale domanda esiste). Se il nodo è invece origine,
allora il bilancio è pari alla somma di tutte le domande uscenti. Supposto i costi variabili, il
modello è il seguente:

Min z= ∑ cij  f ij  f ij
i j∈ A

{
−D oj j :∃ D oj
∑ f jk o −∑ f ij = ∑ D jd
o
j≡o ∀ j∈V , ∀ o∈O (4.8)
k ∈V i ∈V d ∈F
0 altrimenti
f ij = ∑ f ij o
∀ ij∈ A
o ∈O

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 45

Se a=∣A∣ , v =∣V∣ e m=∣O∣ allora il numero di variabili è a×oa mentre il numero di


vincoli è v×oa .
4.4.3 Modello di massimo flusso
In tale modello si suppone la presenza di un solo nodo origine o ed un solo nodo destinazione
d; inoltre, la capacità degli archi è limitata. Si vuole determinare il massimo flusso tra origine
e destinazione tenendo presente la capacità limitata degli archi. Il modello è il seguente:

Max z = ∑ f oj : oj ∈ A
j∈V

∑ f jk −∑ f ij =0 ∀ j ≠o , d : jk∈ A , ij∈ A (4.9)


k ∈V i ∈V
0≤ f ij ≤m ij ∀ ij∈ A

La funzione obiettivo esprime la massimizzazione dei flussi uscenti dall'origine, il primo vin-
colo esprime la condizione di equilibrio tra i nodi intermedi, mentre il secondo vincolo limita
superiormente il flusso alla capacità dell'arco. Se non consideriamo i vincoli di capacità, il
modello presenta v −2 vincoli e a variabili.
4.4.3.1 Taglio di una rete
Si definisce taglio di una rete l'insieme degli archi ij con origine in N 1 : o∈ N 1 e destinazio-
ne in N 2 : d ∈ N 2 . La capacità del taglio è la somma delle capacità di ogni arco che costituisce
il taglio. Il taglio minimo è l'insieme degli archi che forniscono la capacità minima.
4.4.4 Algoritmo di Ford e Fulkerson
Tale algoritmo, attraverso una generazione sequenziale di percorsi aumentati flusso, determi-
na il massimo flusso sulla rete. L'algoritmo è il seguente:
1. si modifica il nodo origine:
a) si assegna un valore di flusso disponibile infinito;
b) si pone il predecessore pari a 0;
2. si assegnano agli archi flussi nulli e capacità residue pari alla capacità iniziale del sin-
golo arco;
3. si opera una visita della rete;
a) si etichettano i nodi partendo dall'origine fino alla destinazione;
1. se il collegamento avviene attraverso l'arco jk uscente da j e con capacità resi-
dua r jk 0 allora la quantità di flusso che è possibile trasportare dall'origine al
nodo k è e ' k =min {∣e ' j∣, r jk } ed il predecessore è e ' ' k = j ;
2. se il collegamento avviene attraverso l'arco jk entrante in j e con flusso asse-
gnato f kj 0 allora la quantità di flusso che è possibile trasportare dall'origine
al nodo k è e ' k =−min{∣e ' j∣ , f kj } ed il predecessore è e ' ' k = j ;
3. se il collegamento avviene attraverso l'arco j s uscente da j con m js =0 oppu-
re attraverso l'arco t j entrante in j con f tj =0 , allora l'arco non può essere
etichettato e l'algoritmo termina;
b) si individua nella destinazione la quantità di flusso  in grado di trasportare;
4. si aggiornano i valori di capacità residua e flusso disponibile su ogni arco;
a) partendo dalla destinazione fino all'origine seguendo i predecessori:

Luca Esposito
46 Capitolo 4 - Ottimizzazione su rete

1. se nel nodo k e ' k 0 tramite l'arco da k ad l, il flusso assegnato sarà


f kl = f kl  ed il flusso residuo sarà r kl =r kl − ;
2. se nel nodo k e ' k 0 tramite l'arco da k ad l, il flusso assegnato sarà
f kl = f kl− ed il flusso residuo sarà r kl =r kl  ;
5. si individua il percorso aumentante flusso;
6. si ritorna al punto 3;
a) se non è più possibile raggiungere la destinazione l'algoritmo termina ed il flusso
massimo è pari alla somma delle quantità  individuate.

4.5 Problemi di progetto
Per progetto di una rete si intende quella classe di problemi nei quali, data una domanda di
spostamento, si deve determinare la configurazione della rete in modo da ottimizzare una fun-
zione obiettivo legata ai costi di costruzione e/o di utenza.
Per poter costruire un modello, si introduce l'insieme dei costi di costruzione H e le variabili
discrete y ij associate alle decisioni di progetto. Se y ij ∈{0, 1} allora tale variabile è legata
alla costruzione o meno dell'arco ij, mentre se y ij ∈N allora la variabile si associa alla capaci-
tà dell'arco. Detti c ij e h ij rispettivamente il costo di spostamento e il costo di costruzione
dell'arco ij, in base al tipo di progetto si utilizza una funzione obiettivo differente. In particola-
re si è interessati alla funzione di costo totale di utenza

z =∑ c ij f ij (4.10)
ij∈ A

oppure alla funzione di costo totale di costruzione

z =∑ hij y ij (4.11)
ij∈ A

Si hanno poi, vincoli di rete; per un problema di progetto con flusso multi-commodity allora
si avranno i vincoli

f ij = ∑ f ij o
∀ ij ∈ A
o ∈O

{
−Doj j :∃ D oj
(4.12)
∑ f jk − ∑
o
f ij = ∑ D jd
o
j≡o ∀ o∈O , ∀ j∈V
k ∈V i ∈V d ∈F
0 altrimenti

e vincoli di budget (con B il budget massimo):

∑ hij y ij≤ B (4.13)


ij∈ A

Ci saranno, infine, vincoli di capacità:

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 47

f ij ≤mij y ij ∀ ij ∈A
(4.14)
f ij ≥0 ∀ ij ∈A

Il modello presenta v ×o3 a1 vincoli e a×o2 a variabili.


4.5.1.1 Esercizio
Creare un modello di una rete multi-commodity in cui per ogni ramo sono presenti k flussi.
Indichiamo con s k l'origine, con t k la destinazione e con d k la domanda. La capacità per
ogni canale è costante e pari ad m. Indichiamo con h ij il costo di costruzione dell'arco ij. Si
vuole minimizzare il costo del progetto.

Dato che per ogni arco possono essere presenti più canali, allora indichiamo con y ij ∈ N una
variabile discreta che indica il numero di canali presenti sull'arco ij. Indichiamo, poi, con f ij k

il flusso k-esimo sull'arco ij. Poiché si vuole usare un solo percorso allora si deve far in modo
che il flusso non si divida su più archi. Per tale motivo f ij ∈{0, 1} . Così facendo si ottiene
che

{
1 j=s k
∑ f jl −∑
k
f ij = −1
k
j=t k
l i
0 j≠s k , j≠t k

La funzione da minimizzare è

Min z=∑ hij y ij


ij

La domanda inviata sull'arco ij è

∑ d k f ij k
k

Dato che tale domanda non deve superare la capacità totale dell'arco allora si impone il vinco-
lo:

∑ d k f ij ≤m yij k
k

Se introduciamo anche una capacità massima mij relativa all'arco ed indichiamo con
x ij ∈{0 , 1} una variabile che indica se l'arco esiste o meno, allora si inserisce il seguente vin-
colo

m y ij ≤m ' ij x ij

Luca Esposito
48 Capitolo 4 - Ottimizzazione su rete

4.5.2 Il problema dell'albero minimo
Il problema dell'albero minimo è un problema in cui si vincola la rete ad essere costruita come
un albero e, con tale topologia, si deve determinare una funzione che minimizza il costo di
produzione della rete. Il modello è il seguente:

Min z= ∑ hij y ij
ij∈S

∑ y ij=∣V ∣−1
ij∈ S (4.15)
∑ ∑ y ij≤∣N∣−1 ∀ N :2≤∣N∣≤∣V∣
i ∈N j ∈ N
y ij ={0,1}

dove S è l'insieme degli archi dell'albero ed N è un sottoinsieme di G=(V,S). Il primo vincolo


impone che ci siano esattamente v −1 archi mentre il secondo vincolo impone l'assenza di ci-
cli per qualsiasi sottoinsieme di nodi che compongono la rete.
4.5.3 Algoritmo di Kruskal
L'algoritmo di Kruskal è un algoritmo per la ricerca di un albero minimo a selezione di spigo-
li. Si ordinano tutti gli archi in maniera crescente di peso; il valore della somma dei primi v-1
archi costituisce un lower bound per il costo dell'albero minimo. I passi dell'algoritmo sono i
seguenti:
1. si crea una lista degli archi in ordine crescente di costo;
2. si crea una tabella in cui ad ogni colonna corrisponde un nodo;
3. si selezionano dalla prima lista v-1 archi;
a) se tali archi formano un ciclo allora non si tratta dell'albero minimo;
b) il costo totale dei primi v-1 archi è il lower bound del costo dell'albero minimo;
4. se non si è trovato l'albero allora dalla prima lista si seleziona il primo arco ij;
a) nelle colonne i e j della tabella si inserisce un identificativo (ad esempio 1);
5. si prosegue percorrendo la lista e selezionando l'arco kl:
a) se k ≠i e l≠ j allora si inserisce inserisce nelle colonne k e l un identificativo di-
verso da quelli già usati;
b) se k = j e l≠i allora nella colonna di l si inserisce lo stesso identificativo presen-
te nella colonna di k;
c) se k ≠ j e l=i allora nella colonna di l si inserisce lo stesso identificativo presen-
te nella colonna di i;
6. se tutte le colonne della tabella presentano lo stesso identificativo allora l'algoritmo
termina, altrimenti si riprende dal punto 5.
4.5.3.1 Esercizio
Determiniamo l'albero minimo per la rete in Figura 4.3 utilizzando l'algoritmo di Kruskal.

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 49

Figura 4.3: Rete su cui trovare l'albero minimo

Innanzitutto, ordiniamo gli archi per costo crescente:

H-G G-F I-C A-B C-F I-G C-D H-I A-H B-C D-E F-E B-H D-F
1 2 2 4 4 6 7 7 8 8 9 10 11 14
Tabella 4.4: Lista degli archi in ordine crescente di costo

La rete presenta 9 nodi; selezionando i primi 8 archi di costo minimo si ottiene un percorso
chiuso. Questo vuol dire che i primi 8 archi della lista non formano un albero minimo, ma for-
niscono un lower bound per il costo dell'albero: esso è pari a 33. Costruiamo quindi la tabella
dei nodi. Selezioniamo dalla Tabella 4.4 il primo arco a costo minimo H-G a cui diamo l'iden-
tificativo 1.
Il secondo arco è G-F che, avendo il nodo G in comune con l'arco precedente, viene inserito
nello stesso insieme.
Il terzo arco è I-C che, non avendo alcun nodo in comune con l'insieme precedente, si inseri-
sce in un secondo insieme con identificativo 2.
L'arco A-B è sconnesso dagli insiemi creati e quindi assegniamo l'identificativo 3.
L'arco C-F rientra nell'insieme dei nodi con identificativo 1, ma anche in quelli con identifica-
tivo 2: questo vuol dire che tale arco unisce i due insiemi che possono essere considerati,
adesso, come un unico insieme.
L'arco I-G collega due nodi dello stesso insieme e quindi viene scartato.
L'arco C-D passa nell'insieme dei nodi con identificativo 1, mentre l'arco H-I viene scartato.
L'arco A-H collega due insiemi diversi: questo fa si che è possibile fondere i due insiemi in un
unico insieme.
Eliminato l'arco B-C si include, infine, il nodo E tramite l'arco D-E e l'algoritmo termina.

Luca Esposito
50 Capitolo 4 - Ottimizzazione su rete

A B C D E F G H I
Passo 1 1 1
Passo 2 1 1 1
Passo 3 2 1 1 1 2
Passo 4 3 3 2 1 1 1 2
Passo 5 3 3 1 1 1 1 1
Passo 6 3 3 1 1 1 1 1 1
Passo 7 1 1 1 1 1 1 1 1
Passo 8 1 1 1 1 1 1 1 1 1
Tabella 4.5: Passi dell'algoritmo di Kruskal
Gli archi che compongono l'albero minimo sono H-G, G-F, I-C, A-B, C-F, C-D, A-H, D-E con
costo totale pari a 37.
4.5.4 Algoritmo di Sollin
L'algoritmo di Sollin è un algoritmo per la ricerca dell'albero minimo a selezione di vertici. In
tale algoritmo si crea una lista di nodi a cui si associa l'arco a minimo costo in base al quale si
determina l'albero minimo. La sequenza dell'algoritmo è:
1. si crea una lista dei nodi;
a) per ogni nodo si considera l'arco a costo minimo;
2. si crea una tabella in cui ogni colonna rappresenta un nodo;
3. partendo dal primo nodo della lista:
a) si prende l'arco i-j;
b) si inserisce nella colonna i e j un identificativo;
c) si cancella dalla lista dei nodi il nodo j;
d) se la tabella non è completa si riprende dal nodo successivo della lista non elimina-
to;
4. se la tabella è completa, ma gli identificativi non sono tutti uguali allora significa che
si sono formati dei macro-nodi sconnessi;
a) ogni macro-nodo si considera come un nodo singolo;
b) ci si muove come nel punto 3, ma considerando i macro-nodi;
5. l'algoritmo termina quando tutti gli identificativi sono uguali.
4.5.4.1 Esercizio
Riprendiamo la rete dell'esercizio precedente e calcoliamo l'albero minimo applicando l'algo-
ritmo di Sollin. Creiamo la lista dei nodi a cui associa l'arco uscente a minor costo.

A B C D E F G H I
A-B=4 B-A=4 C-I=2 D-C=7 E-D=9 F-G=2 G-H=1 H-G=1 I-C=2
Tabella 4.6:Lista dei nodi con l'arco uscente a minimo costo associato

Creiamo la tabella dei nodi. Partendo dall'arco A-B, inseriamo nella Tabella 4.7 alla colonna
di A e di B, l'identificativo 1 e cancelliamo dalla Tabella 4.6 la colonna relativa a B. Passiamo
quindi alla colonna di C e quindi all'arco C-1. Inseriamo l'identificativo 2 alle colonne corri-

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 51

spondenti e cancelliamo la colonna di I. La colonna successiva è quella di D a cui corrisponde


l'arco D-C. Questo vuol dire che il nodo D deve essere incluso nell'insieme con identificativo
1. L'arco successivo è E-D ed il nodo E passa nell'insieme con identificativo 1. L'arco succes-
sivo è F-G: questi due nodi formano un insieme a parte con identificativo 3. Si cancella, poi,
la colonna relativa al nodo G. L'ultimo arco è H-G che inserisce il nodo H nell'insieme con
identificativo 3.

A B C D E F G H I
Passo 1 1 1
Passo 2 1 1 2 2
Passo 3 1 1 2 1 2
Passo 4 1 1 2 1 1 2
Passo 5 1 1 2 1 1 3 3 2
Passo 6 1 1 2 1 1 3 3 3 2
Tabella 4.7: Tabella dei nodi
Si sono creati quindi tre macro-nodi: quello con identificativo 1 composto dai nodo A, B, D
ed E, quello con identificativo 2 composto dai nodi C e I e quello con identificativo 3 compo-
sto dai nodi F, G ed H. A questo punto consideriamo questi macro-nodi come dei singoli nodi
e applichiamo nuovamente l'algoritmo di Sollin scegliendo il percorso minimo che li collega.
Otteniamo che

Macro-nodo 1 Macro-nodo 2 Macro-nodo 3


B-C=8 C-F=4 F-C=4
Tabella 4.8:Tabella dei macro-nodi

Banalmente si parte dal macro-nodo 1 il cui arco minimo è B-C, si cancella la colonna del
macro-nodo 2 e si considera l'arco F-C del macro-nodo 3. L'albero minimo è composto dagli
archi A-B, B-C, C-I, C-D, D-E, F-C, F-G e C-H.

4.6 Problemi di circuito
Per problemi di circuito si intende quella classe di problemi nel quale si vuole determinare un
circuito (cioè una successione ordinata di archi formanti un percorso chiuso e che l'origine
coincida con la destinazione) ottimo passante per un prefissato insieme di nodi o archi.
4.6.1 Problema del commesso viaggiatore
Data una rete connessa si vuole trovare il circuito hamiltoniano a costo minimo, nell'ipotesi
che la rete sia piena, orientata, senza cappi e che sia soddisfatta la disuguaglianza triangolare (
c ij ≤c ik c kj ).
Indicando con x ij una variabile che vale 1 se l'arco ij appartiene al circuito e con N ⊂V , al-
lora il modello è:

Luca Esposito
52 Capitolo 4 - Ottimizzazione su rete

Min z = ∑ c ij x ij
ij∈ A
v

∑ xij =1 ∀ j=1, v
i=1
v (4.16)
∑ x ij=1 ∀ i=1, v
j =1

∑ ∑ x ij≤∣N∣−1 ∀ N : 2≤∣N∣≤v −1
i ∈N j∈ N

Il primo vincolo impone che ogni vertice sia destinazione di un solo arco, mentre il secondo
vincolo impone che ogni vertice sia origine di un solo arco. La terza condizione esprime l'as-
senza di circuiti interni. Il problema del commesso viaggiatore si risolve con metodi esatti
come il Branch & Bound o mediante algoritmi approssimati
4.6.2 Problema del postino
Per tale problema, data una rete connessa e senza cappi, si vuole trovare il circuito a costo mi-
nimo che passa per tutti gli archi della rete almeno una volta. E' necessario che un grafo sia
euleriano cioè che soddisfi le seguenti condizioni:
1. se il grafo non è orientato, per ogni vertice il numero di archi che vi incidono deve es-
sere pari (vertice di grado pari);
2. se il grafo è orientato, in ogni vertice il numero di archi entrati deve essere uguale al
numero di archi uscenti.
Se tali condizioni non sono soddisfatte, si devono aggiungere degli archi a costo minimo che
rendano il grafo euleriano. Successivamente si determina il circuito euleriano di percorrenza.

4.7 Problemi di localizzazione
Per problemi di localizzazione si intende quella classe di problemi in cui si vuole individuare
in una rete, la posizione ottima di uno o più impianti per la distribuzione di beni o servizi.
4.7.1 Misure di centralità della rete
La distanza tra due nodi della rete, i e k, è il costo minimo C i , k  tra i due vertici; se i verti-
ci sono pesati allora si parla di minima distanza pesata C w i , k  .
La distanza tra un insieme di p vertici V p ed un vertice k, è la minima tra tutte le distanze tra
il vertice k ed ogni vertice dell'insieme C V p , k =mini ∈V C i , k  ∀ k ∈V .
p

L'eccentricità e i di un vertice i della rete, è la massima distanza tra il vertice i ed ogni altro
vertice della rete e i=maxk ∈V C i , k  .
L'eccentricità e V p  di un sottoinsieme V p è la massima distanza tra il sottoinsieme e gli al-
tri vertici della rete e V p =max k ∈V C V p , k  .
La distanza di un vertice i è la somma delle distanze tra i e gli altri vertici della rete
C i=∑ k∈ V C i , k  .
La distanza di un sottoinsieme Vp è la somma delle distanze tra Vp e gli altri nodi della rete
C V p =∑k∈V C V p , k  .
Il centro della rete è il vertice ad eccentricità minima.
Il raggio di un grafo è pari all'eccentricità minima mentre il diametro di un grafo è pari all'ec-
centricità massima.
Il p-centro della rete è il sottoinsieme di vertici ad eccentricità minima.

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 53

La mediana delle rete è il vertice a distanza minima.


La p-mediana è il sottoinsieme di vertici a distanza minima.
4.7.2 Modello di localizzazione
Indichiamo con y i una variabile che vale 1 se il vertice i è mediana e con x ij una variabile
che vale 1 se il nodo j afferisce al nodo i. Indichiamo con c ij il costo del percorso ij. Si vo-
gliono determinare le p mediane della rete. Il modello proposto è il seguente:

Min z =∑ ∑ c ij x ij
i∈V j ∈V , j≠i

∑ x ij  y i=1 ∀ j ∈V
i ∈V ,i≠ j
x ij ≤ y i ∀ j ∈V , ∀ i≠ j∈V (4.17)
∑ yi = p
i ∈V
y i ∈{0,1} ∀ i∈V
x ij ={0, 1} ∀ j≠i∈V

In particolare il vertice i o è mediana oppure deve afferire a qualche altro vertice (primo vin-
colo). Inoltre il vertice i può afferire al vertice j solo se quest'ultimo è mediana (secondo vin-
colo). Infine ci devono essere esattamente p mediane (terzo vincolo). Il secondo vincolo può
anche essere scritto con riferimento alla matrice delle soluzioni dei minimi percorsi, imponen-
do che ogni colonna della matrice abbia un solo elemento non nullo e pari ad 1,
∑i x ij =1 ∀ j .
Per il p-centro, invece, il problema è di tipo min-max

z ≥∑ c ij xij
ij
Min z

4.7.2.1 Esercizio
Determinare il centro e la mediana della rete in Figura 4.4.

Figura 4.4: Rete da analizzare

Costruiamo, innanzitutto, la tabella dei minimi percorsi.

Luca Esposito
54 Capitolo 4 - Ottimizzazione su rete

1 2 3 4 5 6 7 ej dj
1 0 2 5 4 4 7 11 11 33
2 3 0 8 2 2 5 9 9 29
3 2 4 0 5 6 6 7 7 30
4 6 3 11 0 2 3 7 11 32
5 4 1 9 3 0 5 9 9 31
6 7 5 13 7 4 0 5 13 41
7 10 10 8 12 9 5 0 12 54
Tabella 4.9: Tabella dei minimi percorsi

Per determinare il centro della rete calcoliamo per ogni riga l'eccentricità e i e si prende il
nodo con eccentricità minima, in questo caso il nodo 3 (problema di min-max).
Per calcolare la mediana calcoliamo per ogni riga la somma delle distanze e prendiamo il
nodo che presenta la distanza minima, in questo caso il nodo 2 (problema di min-sum).
4.7.3 Modello di simple­plant location
Tale modello prevede l'individuazione del numero e della posizione nella rete di impianti che
minimizzino i costi di afferenza e di localizzazione. Si aggiungono, quindi, al modello di loca-
lizzazione i costi di costruzione h i e si elimina il vincolo sul numero di impianti dato che vie-
ne determinato dal modello:

Min z=∑ ∑ c ij x ij ∑ hi y i
i∈V j ∈V , j≠i i ∈V

∑ x ij  y i=1 ∀ j∈V
(4.18)
i ∈V ,i≠ j
x ij ≤ y j ∀ j∈V , ∀ i≠ j
y i ∈{0,1} ∀ i∈V

4.8 Problemi di copertura
I problemi di copertura si possono ricondurre ai problemi di localizzazione in quanto prevedo-
no la determinazione di alcune aree in cui è possibile posizionare impianti in grado di servire
altre zone in un determinato raggio o confine. L'obiettivo è posizionare gli impianti in modo
da poter massimizzare l'area da servire con il minor numero di impianti. Un possibile modello
di covering è

min z =∑ hi y i
i ∈V

∑ y i x ij≥1 ∀ j∈V :ij∈ A


(4.19)
i ∈V
x ij ={0, 1} ∀ ij∈ A
y ij ={0,1} ∀ ij∈ A

Luca Esposito
Capitolo 4 - Ottimizzazione su rete 55

Il modello impone la minimizzazione dei costi di installazione degli impianti mentre il primo
vincolo impone il covering delle aree.
4.8.1 Esercizio
Sia A l'insieme dei possibili siti nei quali è possibile posizionare delle antenne; si associa ad
ogni sito un costo di costruzione h i . Sia dato poi un insieme di test-point T . Per ogni anten-
na i e per ogni test-point j è data una distanza d ij . Un'antenna ed un test-point possono co-
municare soltanto se la distanza d ij ≤R . Ad ogni test-point deve essere assegnata un'anten-
na. Se al test-point j è assegnata un'antenna i, allora esse devono irradiare una potenza p ij .
Ad ogni antenna possono essere assegnati al massimo P test-point. Si vogliono istallare k an-
tenne con l'obiettivo di minimizzare la potenza massima.

Si individuano tre matrici per la descrizione di tale modello: la matrice delle distanze, delle
potenze e delle coperture. Indichiamo con y i ∈{0,1} una variabile che vale 1 se l'antenna i è
presente nel sito ∀ i∈S . Indichiamo, poi con x ij la variabile di afferenza ∀ i∈S ∀ j∈T .
Imponiamo il vincolo sul numero massimo di antenne

∑ y i =k
i

Inoltre è possibile afferire soltanto da un sito in cui è presente l'antenna

x ij ≤ y i ∀ i∈S , ∀ j∈T

Per ogni antenna possono essere assegnati al massimo P test-point

∑ x ij=P ∀ i ∈S
j ∈T

Indichiamo con r ij ∈{0,1} il generico elemento della matrice di copertura. Con tale elemento
filtriamo le afferenze possibili. In particolare, ad ogni test-point si assegna una sola antenna

∑ r ij x ij=1 ∀ j∈T
i∈ S

Infine si vuole minimizzare la massima potenza, quindi è un problema di min-max

Luca Esposito
Capitolo 5

PROVE D'ESAME
CAPITOLO 5 

5.1 Prova del 08­03­2011
5.1.1 Esercizio 1
a) Si descriva e si illustri il metodo di salita ripida per la determinazione del punto di
massimo di una funzione bidimensionale.
b) Si effettui uno step dell'algoritmo di salita ripida per la massimizzazione della funzio-
ne f  x , y =2 xy −x 2−2 y 2 partendo dal punto di coordinate (0,0).

Per la descrizione dell'algorit-


mo si veda §1.2.1.2.
Il primo passo è calcolare il
gradiente

[
∇ f  x , y = 2 y−2 x
2 x−4 y ]
Nel punto di coordinate (0,0) il
gradiente si annulla e quindi è
un punto di ottimo. Per verifi-
care che sia un punto di massi-
mo deriviamo ulteriormente:

2
∇ f  x , y = [ ]
−2
−4
0 Figura 5.1: Grafico della funzione

Essendo la derivata negativa, il punto trovato è un punto di massimo.


5.1.2 Esercizio 3
Un'azienda produce 4 componenti (A, B, C e D). Vincoli di magazzino impongono di produrre
al massimo 10 lotti a settimana in totale tra A, B, C e D. Vincoli tecnologici impongono inol-
tre di produrre i componenti A e B in quantità pari almeno al 50% in più della produzione di

Luca Esposito
58 Capitolo 5 - Prove d'esame

C e D. I profitti unitari di A e di D rispetto a B sono rispettivamente nel rapporto 3:2 e 5:2. Il


profitto unitario di C è il doppio di quello di B. Si vuol determinare il piano di produzione di
A, B, C e D che massimizzi il profitto totale. Con riferimento al problema descritto si formuli
il modello di programmazione lineare, descrivendo le variabili ed i parametri utilizzati, i vin-
coli e la funzione obiettivo.

Indichiamo con x A , x B , x C e x D rispettivamente la produzione settimanale di un lotto di A,


B, C e D. In tal modo il primo vincolo diventa:

x A x B x C  x D ≤10

In base al vincolo tecnologico scriveremo che

3 3
x A x B − x C − x D ≥0
2 2

Indichiamo, poi, con c 1 , c 2 , c 3 e c 4 i profitti unitari rispettivamente di A, B, C e D. Abbiamo


che
cA 3 3
= ⇒ c A= c B
cB 2 2

e che
cD 5 5
= ⇒c D= c B
cB 2 2

Inoltre, dato che c C =2 c B possiamo scrivere le equazioni precedenti in funzione di c C come


c A=3 c C e c D=5 c C . A questo punto la funzione obiettivo diventa:

1
Max z =3 x A  x B x C 5 x D
2

Il modello di programmazione lineare è quindi il seguente:

1
Max z =3 x A x B x C 5 x D
2
x A x B x C  x D ≤10
3 3
x A x B − x C − x D ≥0
2 2
x A , x B , xC , x D≥0

5.1.3 Esercizio 9
a) Si scriva il modello di flusso multi-commodity (m-c) con costi variabili con il flusso.

Luca Esposito
Capitolo 5 - Prove d'esame 59

b) Qual è la dimensione [numero di vincoli e numero di variabili] per un problema di


flusso m-c su una rete con 10 vertici, 40 archi e 4 nodi origine?

Per il modello di flusso si veda il §4.4.2.


Il numero di variabili è a×oa=40×4 40=200 mentre il numero di vincoli è
v×oa= 10×440=80 .
5.1.4 Esercizio 10
La rete riportata in Figura 5.2 è rappresentativa di un sistema di comunicazione nel quale i
nodi F1 ed F2 generano dati, M1 ed M2 richiedono dati e CS è un nodo di passaggio. La ge-
nerazione è di 50 unità/ora per
F2. I nodi attrattori M1 ed M2
richiedono rispettivamente 30
unità/ora e 60 unità/ora. I costi
di comunicazione (espressi in
€/unità) sono riportati in Tabel-
la 5.1. Gli archi F1-F2 e CS-
M2 hanno rispettivamente ca-
pacità pari a 10 unità/ora ed
80 unità/ora. Si scriva il mo-
dello di flusso per la determi-
nazione della configurazione
dei flussi sulla rete che mini- Figura 5.2: Rete di un sistema di comunicazione
mizzi i costi di comunicazione
con i vincoli di capacità asse-
gnati.

F1 F2 M1 M2 CS
F1 200 (10) 900 100
F2 300
M1 300
M2 200
CS 100 (80)
Tabella 5.1: Tabella dei costi di comunicazione (€/unità)

Essendo un problema in cui è presente un solo tipo di flusso si utilizzerà il modello single-
commodity. Ricordando tale modello e particolarizzandolo per il problema esposto abbiamo
che:

Luca Esposito
60 Capitolo 5 - Prove d'esame

Min z=200 f F F 100 f F C 900 f F 1 2 1 S 1


M1 300 f F 2
CS 100 f C S
M2 200 f M 2
M1 300 f M 1
M2
f F F  f F C  f F M =50
1 2 1 S 1 1

f F C − f F F =40
2 S 1 2

f C M − f F C − f F C =0
S 2 1 S 2 S

f M M − f C M − f M M =−60
2 1 S 2 1 2

f M M − f M M − f F M =−30
1 2 2 1 1 1

0≤ f F F ≤10 1 2

0≤ f C M ≤80 S 2

f F C , f F M , f F C , f M M , f M M ≥0
1 S 1 1 2 S 2 1 1 2

Luca Esposito
Capitolo 5 - Prove d'esame 61

5.2 Prova del 22/06/2011
5.2.1 Esercizio 1
Si effettui uno step dell'algoritmo di discesa ripida per la minimizzazione della funzione
f  x , y =x 2  y 2xy x partendo dal punto di coordinate (3,3).

Figura 5.3: Grafico della funzione

Calcoliamo il gradiente di tale funzione:

∇ f  x , y =[ 2 x y1
2 yx ]
che nel punto iniziale x 0=3,3 vale ∇ f  x 0 =[10 9] . Essendo non nullo, non ci trovia-
mo in un punto stazionario (di massimo o di minimo). Calcoliamo dunque il successivo punto
come

[
x 1= x 0 −0 ∇ f  x 0 =
3−10 0
3−9 0 ]

Luca Esposito
62 Capitolo 5 - Prove d'esame

dove si è scelto il verso opposto alla direzione del gradiente dato che il problema è a minimiz-
zare. Si deve determinare ora la lunghezza dello spostamento  0 . Inseriamo il punto x 1 ,
funzione di  0 , all'interno della funzione
2 2
f  x 1 =3−10 0  3−9  0  3−10  03−9 0 3−100=

2 2 2
=9100 0−60  0981 0−54 09−27 0−30 0 90 0 3−10 0=

2
=2710−181  030=g  0 

Per trovare la lunghezza dello spostamento deriviamo tale funzione e poniamo la derivata
uguale a zero:

181
g '  0=542 0−181=0 ⇒0= =0.33
542

Figura 5.4: Curve di livello della funzione e posizione dei punti calcolati

Il punto x 1 sarà quindi:

x 1= [ ]
−0.3
0.03

Luca Esposito
Capitolo 5 - Prove d'esame 63

La funzione in tale punto è


2 2
f  x 1 =−0.3 0.03 −0.30.03−0.3=−0.398

mentre il gradiente è ∇ f  x 1 =[0.43 −0.24 ] . Il punto trovato non è di minimo.


5.2.2 Esercizio 2
a) Si determini grafica-
mente il punto di ottimo
della funzione di Figura
5.5 indicando i percorsi
possibili dell'algoritmo
a partire dal punto O.
b) Si disegni il cono delle
direzioni ammissibili ed
il cono delle direzioni
di miglioramento nel
punto D.

Un possibile percorso è il se-


guente. Partendo dal punto O si Figura 5.5: Ottimizzazione vincolata non lineare
traccia la tangente alla curva di
livello passante per O trovando
così il cono delle direzioni ammissibili e di miglioramento. Infatti, il semispazio delle direzio-
ni di miglioramento ha come frontiera la tangente alla curva di livello passante per O. Le dire-
zioni ammissibili, invece, sono quelle che non fanno uscire la funzione dal dominio. La loro
intersezione individua il cono delle direzioni ammissibili di miglioramento. Si utilizza, come
possibile direzione, la direzione del gradiente per raggiungere il punto E sulla frontiera del do-
minio. Ancora una volta da tale
punto si trova il cono delle di-
rezioni ammissibili e di miglio-
ramento e si raggiunge il punto
F ottimo sulla frontiera del do-
minio che rispetta le condizioni
di Kuhn-Tucker ovvero l'inter-
sezione tra il cono delle dire-
zioni di miglioramento e le di-
rezioni ammissibili è l'insieme
vuoto.
Alternativamente ci si poteva
spostare lungo x2 e trovare in
Figura 5.6: Possibile percorso dell'algoritmo
successione A, B ed F, oppure
spostandosi lungo x1 e trovare
D, C ed F.

Luca Esposito
64 Capitolo 5 - Prove d'esame

5.2.3 Esercizio 8
Si determini il massimo flusso dal vertice 1 al vertice 7 della rete in Figura 1.2 utilizzando
una visita in profondità.

Utilizzando una visita in profondità l'etichettamento dei nodi è quello mostrato in Figura 5.7.
Al nodo 1 si assegna una capacità infinita e come predecessore 0. Si passa al nodo 2 al quale
si associa una capacità pari a 2 e come predecessore il nodo 1. Successivamente si etichettano
i nodi 5 e 6. Il massimo flusso trasportabile è 1=2 con il p.a.f. 1-2-5-6-7. Ripercorrendo a
ritroso il percorso si aggiornano i valori di flusso e capacità. Si ripete la visita del grafo pas-
sando per il nodo 3, dato che il nodo 2 non è direttamente raggiungibile dal nodo 1. Si trova il
p.a.f 1-3-4-5-7 con flusso 2 =1 . Si aggiornano valori di capacità e flusso.
Proseguendo con la visita in profondità si trova il p.a.f 1-3-4-6-7 con 3=3 . Dato che non è
possibile raggiungere la destinazione l'algoritmo termina ed il massimo flusso trasportabile è
6. L'insieme dei nodi etichettabili è {1,2,3,4,5,6} mentre restano esclusi {7}. Gli archi che co-
stituiranno il taglio minimo saranno 5-7 e 6-7 a cui corrisponde un valore di capacità pari a 6.

Figura 5.7: Passi dell'algoritmo di Ford-Fulkerson

5.2.4 Esercizio 10
Un'università deve connettere cinque terminali dislocati in differenti palazzine del campus. Le
distanze in metri tra i 5 terminali sono riportate in Tabella 5.2. Supponendo che i costi di co-
struzione delle connessioni siano proporzionali alle loro distanze, si vuole determinare la
struttura della rete che minimizza il costo totale di connessione.

Luca Esposito
Capitolo 5 - Prove d'esame 65

a) Si scriva il modello del problema posto.


b) Si determini la soluzione del problema con un algoritmo noto.

T1 T2 T3 T4 T5
T1 0 120 92 165 149
T2 0 141 170 300
T3 0 218 103
T4 0 110
T5 0
Tabella 5.2: Tabella delle distanze tra terminali

La struttura della rete che minimizza i costi di connessione è una struttura ad albero minimo il
cui modello è illustrato nel §4.5.2. Per il problema in esame, il modello è il seguente:

Min z= ∑ hij y ij
ij∈S

∑ y ij=4
ij∈ S

∑ ∑ y ij≤∣N∣−1 ∀ N : 2≤∣N∣≤5
i ∈N j ∈ N

Per trovare l'albero minimo utilizziamo l'algoritmo di Kruskal a selezione di archi. Elenchia-
mo in ordine crescente gli archi, come mostrato in Tabella 5.3

T1-T3 T3-T5 T4-T5 T1-T2 T2-T3 T1-T5 T2-T4 T3-T4 T1-T4 T2-T5
92 103 110 120 141 149 170 218 265 300
Tabella 5.3: Ordinamento crescente dei costi degli archi

Il primo passo è prendere il primo elemento della lista ed assegnare ai due nodi che compon-
gono l'arco un identificativo pari ad 1. Dato che il nodo T3 dell'arco successivo è già stato eti-
chettato, anche il nodo T5 rientrerà nello stesso insieme. Stesso discorso per l'arco T4-T5 e
l'arco T1-T2.

T1 T2 T3 T4 T5
Passo 1 1 1
Passo 2 1 1 1
Passo 3 1 1 1 1
Passo 4 1 1 1 1 1
Tabella 5.4: Iterazioni dell'algoritmo di Kruskal per la determinazione dell'albero minimo
L'albero minimo è formato dai primi quattro archi a minimo costo.

Luca Esposito
66 Capitolo 5 - Prove d'esame

5.3 Prova del 30/06/2011
5.3.1 Esercizio 1
Si descriva in termini analitici e grafici l'algoritmo di bisezione per la determinazione del
punto di minimo della seguente funzione monodimensionale y=0.25 x 2 −6 x40 x ∈[0, 20]
.

L'algoritmo di bisezione è
un algoritmo per la ricer-
ca di un punto di massi-
mo/minimo a riduzione
dell'intervallo di incertez-
za con uso della derivata.
Si comincia considerando
il punto medio dell'inter-
vallo di definizione della
variabile x ( c 0=10 ) e
successivamente si calco-
la la derivata prima della
funzione in tale punto

y ' =0.5 x−6⇒


y ' c 0=5−6=−10

e dato che è negativa ed il


problema è a minimizza-
re, allora vuol dire che il Figura 5.8: Prime tre iterazioni dell'algoritmo di bisezione
punto di minimo si trova
a destra del punto c 0 . Si considera dunque l'intervallo [c0 , b]=[10, 20] e se ne calcola il
punto medio c 1=15 . La derivata in tale punto è

y ' =0.5 x−6 ⇒ y ' c 1 =7.5−6=1.50

ed essendo positiva vuol dire che il punto di minimo si trova a sinistra del punto c 1 . Conside-
riamo, dunque, l'intervallo [c0 , c 1]=[10,15] e calcoliamone il punto medio c 2=12.5 . La de-
rivata in tale punto vale
25
y ' =0.5 x−6 ⇒ y ' c 2 = −6=0.250
4

Proseguendo in modo analogo troviamo che [c0 , c 2 ]=[10, 12.5] e c 3=11.25 da cui

y ' =0.5 x−6 ⇒ y ' c 3 =−0.370

Si prosegue fino a quando non si annulla la derivata.

Luca Esposito
Capitolo 5 - Prove d'esame 67

5.3.2 Esercizio 2
Un'azienda produce 2 profilati (A e B). Vincoli di magazzino impongono di produrre al massi-
mo 10 lotti a settimana in totale tra A e B. Vincoli tecnologici impongono inoltre di produrre
il profilato A in quantità pari al massimo al doppio della produzione del profilato B, che a
sua volta può essere prodotto al massimo in 4 lotti a settimana. I profitti unitari di A e B sono
nel rapporto 2:6. Si vuole determinare il piano di produzione di A e B che massimizzi il profit-
to totale. Con riferimento al problema descritto:
a) si formuli il modello di programmazione lineare, descrivendo parametri, variabili,
vincoli e funzione obiettivo;
b) si disegni il dominio di ammissibilità del problema e la funzione obiettivo;
c) si indichi, per ciascun vertice del dominio, la composizione della soluzione basica
ammissibile ad esso associata;
d) si risolva graficamente il problema, individuando il vertice ottimo e calcolando il va-
lore di variabili e funzione obiettivo.

Indichiamo con x A e x B la produzione settimanale rispettivamente del profilato A e B. A


causa del vincolo di magazzino ci ritroviamo che

x A x B ≤10

Inoltre, dai vincoli tecnologici si ottiene che

x A≤2 x B

x B≤4

Indichiamo, ora con c A e c B i profitti unitari di A e B. Essi si trovano nel rapporto


cA 2 2
= ⇒ c A= c B
cB 6 6

Dato che si vuole massimizzare il profitto totale, la funzione obiettivo sarà (scrivendo i costi
unitari in funzione di c B ):

Max z =x A3 x B

Il modello di programmazione lineare è quindi

Max z =x A3 x B
x A x B ≤10
x A−2 x B ≤0
x B≤4
x A , x B≥0

In Figura 5.9 è mostrato il dominio di ammissibilità e la funzione obiettivo.


Per disegnare la funzione se ne considera il gradiente

Luca Esposito
68 Capitolo 5 - Prove d'esame

[ ] []
∂z
∂ xA
∇ z= =1
∂z 3
∂ xB

Figura 5.9: Dominio di ammissibilità ed andamento della funzione obiettivo

La funzione obiettivo è costituita dall'insieme di rette ortogonali a tale vettore.


In Tabella 5.5 viene, invece, mostrata la composizione della soluzione basica ammissibile di
ogni vertice. Aggiungendo le variabili slack il problema si compone di n=5 variabili e
m=3 equazioni. Ci troveremo, quindi, n−m=2 valori nulli ed m valori non negativi per
ogni vertice.

xA xB y1 y2 y3
Vertice O 0 0 >0 0 >0
Vertice A >0 >0 0 0 >0
Vertice B >0 >0 0 >0 0

Luca Esposito
Capitolo 5 - Prove d'esame 69

Vertice C 0 >0 >0 >0 0


Tabella 5.5: Composizione delle soluzioni basiche ammissibili di ogni vertice
La soluzione per il vertice O rappresenta una soluzione basica ammissibile degenere in quanto
è presente un termine nullo tra quelli non negativi.
Il vertice ottimo è B a cui corrisponde un valore della funzione obiettivo pari a z ∗=18 ed il
valore delle variabili è x A=6 , x B=4 , y 1=0 , y 20 e y 3=0 .
5.3.3 Esercizio 3
Si risolva il problema analiticamente con l'algoritmo del simplesso standard.

Riscriviamo il modello dell'esercizio precedente modificando i vincoli:

Max z =x A3 x B
x A x B  y 1=10
x A−2 x B  y 2=0
x B y 3=4

Costruiamo la tabella del simplesso:

xA xB y1 y2 y3 -z b
y1 1 1 1 0 0 0 10
y2 1 -2 0 1 0 0 0
y3 0 1 0 0 1 0 4
-z 1 3 0 0 0 1 0
Tabella 5.6: y1=10, y2=0, y3=4, xA=0, xB=0, z=0 [Vertice O]

La funzione è a massimizzare mentre i valori dei coefficienti delle variabili della funzione
obiettivo sono entrambi positivi: quindi non ci troviamo nel vertice ottimo. Scegliamo la co-
lonna che corrisponde al valore del coefficiente maggiore delle variabili della funzione obiet-
tivo. In questo caso il valore del coefficiente massimo è 3 e si trova nella seconda colonna e
quindi la variabile entrante è xB. Effettuiamo i rapporti tra la colonna dei termini noti per de-
terminare la variabile uscente. Il minimo tra i rapporti non negativi è 4 che corrisponde alla
riga della variabile y3. L'elemento pivot è a 23=1 . La trasformazione della terza riga è uguale
alla riga stessa, pertanto trasformiamo le restanti righe:

[1 1 1 0 0 0 10]−
e ' 1=e 1−a 12 e 3 ' =[0 1 0 0 1 0 4]=
[1 0 1 0 −1 0 6]

[1 −2 0 1 0 0 0]2 ·
e ' 2=e 2−a22 e 3 '=[0 1 0 0 1 0 4]=
[1 0 0 1 2 0 8]

Luca Esposito
70 Capitolo 5 - Prove d'esame

[1 3 0 0 0 1 0 ]−3 ·
e ' 4=e 4 −a 42 e 3 ' =[0 1 0 0 1 0 4]=
[1 0 0 0 −3 1 −12 ]

La nuova tabella è

xA xB y1 y2 y3 -z b
y1 1 0 1 0 -1 0 6
y2 1 0 0 1 2 0 8
xB 0 2 0 -1 1 0 4
-z 1 0 0 0 -3 1 -12
Tabella 5.7: y1=6, xA=0, y3=0, y2=8, xB=4, z=12 [Vertice C]

Con questa iterazione ci siamo spostati nel vertice C. La variabile entrante è x A . Il minimo
dei rapporti non negativi corrisponde alla prima riga e quindi y1 è la variabile uscente e l'ele-
mento pivot è a 11=1 . Trasformiamo le righe:

e ' 1=e 1 /a11=[1 0 1 0 −1 0 6]

[1 0 0 1 2 0 8]−
e ' 2=e 2 −a 21 e 1 ' =[1 0 1 0 −1 0 6]=
[0 0 −1 1 3 0 2]

e ' 3 =e 3−a 31 e 1 '=e 3

[1 0 0 0 −3 −1 −12]−
e ' 4=e 4−a 41 e 1 ' =[1 0 1 0 −1 0 6]=
[0 0 −1 0 −2 −1 −18]

Alla terza iterazione si ottiene la tabella:

xA xB y1 y2 y3 -z b
xA 1 0 1 0 -1 0 6
y2 0 0 -1 1 3 0 2
xB 0 1 0 0 1 0 4
-z 0 0 -1 0 -2 -1 -18
Tabella 5.8: y1=0, xA=6, y3=0, y2=2, xB=4, z=18 [Vertice B]

Luca Esposito
Capitolo 5 - Prove d'esame 71

5.3.4 Esercizio 4
a) Data una soluzione basica ammissibile di un problema PL e la relativa tabella del
Simplesso, qual è la matrice di base B corrispondente?
b) Ad ogni iterazione dell'algoritmo del Simplesso è disponibile la matrice B −1 corren-
te; in quale posizione della tabella la leggiamo? Perché è possibile leggerla proprio
in quella posizione?
c) Quali sono le matrici B e B −1 relative alla soluzione ottima del modello dell'eserci-
zio 2?

Dato un sistema A x =b , la matrice di base B è costituita dalle colonne della matrice A relati-
ve alle variabili x b con x b il vettore delle variabili rispetto alle quali si vuole il sistema in
forma canonica. Il nome “matrice di base” deriva dal fatto che essa è formata dalle colonne
della matrice A che conterranno le variabili basiche. Essa si trova nella prima tabella del Sim-
plesso nelle colonne che nell'ultima tabella del Simplesso sono in forma canonica.
La matrice B −1 , invece, è l'inversa di base. Per la k-esima iterazione la matrice inversa di
base è disponibile nella k-esima tabella del Simplesso leggendo le colonne che nella prima ta-
bella del Simplesso costituivano la matrice identità. Ciò accade perché se il sistema è in forma
canonica allora è possibile scriverlo come

[C : I ] x =b

Premoltiplicando ambo i membri per B −1 si ottiene


−1 −1 −1 −1 −1
B [C : I ] x =B b⇒[ B C : B ] x =B b

La matrice di base e la sua inversa per la soluzione ottima del problema precedente sono:

[1 0 −1
B −1= −1 1 3
0 0 1 ] [
1 0 1
B= 1 1 −2
0 0 1 ]
Verifichiamo la correttezza delle matrici dimostrando che il loro prodotto restituisce la matri-
ce identità:

[ ][ ]
1 0 −1 1 0 1
B −1 B= −1 1 3 1 1 −2 =I
0 0 1 0 0 1

5.3.5 Esercizio 5
Con riferimento alla soluzione ottima del problema dell'esercizio 2 si risponda alla seguente
domanda: conviene investire per aumentare il limite massimo della produzione di B da 4 a 5,
oppure investire per aumentare il limite massimo della produzione totale di A e B da 10 a 11.

Il vertice ottimo è stato individuato in B e i vincoli che contribuiscono alla sua formazione
sono 1 e 3. Tali vincoli, inoltre, sono saturi perché soddisfatti da un'uguaglianza al''ottimo.
Questo vuol dire che le due risorse sono scarse. Se si aumentasse il limite di produzione del

Luca Esposito
72 Capitolo 5 - Prove d'esame

profilato B da 4 a 5 la soluzione ottima sarebbe z ∗ ' =20 mentre aumentando il limite di pro-
duzione di A e B da 10 a 11 si otterrebbe z ∗ ' '=19 . Conviene dunque incrementare il limite
di produzione del profilato B.
Un'analisi grafica di tali modifiche è mostrata in Figura 5.10.

Figura 5.10: Analisi grafica delle variazioni dei vincoli

5.3.6 Esercizio 6
a) Con riferimento alla soluzione ottima dell'esercizio 3 si effettui l'analisi di stabilità al
variare dei termini noti dei vincoli.
b) Si descriva la procedura per la determinazione delle espressioni algebriche di  b i e
 b −i .

Per effettuare l'analisi di stabilità dei termini noti dobbiamo considerare l'ultima tabella del
Simplesso Tabella 5.8. Essendo tutti i vincoli di ≤ si considerano le colonne delle variabili
slack associate. Per quanto riguarda il termine noto del primo vincolo b 1=10 , abbiamo che la
colonna relativa è  1=[1 −1 0 ]T . Prendendo solo i termini negativi, facendo il rapporto
con la colonna dei termini noti e prendendone il minimo:

 b1 =min {x ∗kb /−k1 }=min {2 /1}=2

Luca Esposito
Capitolo 5 - Prove d'esame 73

Prendendo ora i termini positivi si ottiene


− ∗
 b1 =min {x kb /k1 }=min {6 /1}=6

Si ottiene quindi l'intervallo di stabilità per il primo vincolo


− 
[b1− b1 , b1 b 1 ]=[4,12]

Per il secondo vincolo il termine noto è b 2=0 e la colonna relativa è  2 =[0 1 0 ]T . Non
essendo presenti coefficienti negativi abbiamo che  b 2 =∞ . Per il secondo incremento si ot-
tiene
− ∗
 b 2 =min {x kb /k2 }=min {2/1}=2

e quindi il campo di variazione del secondo vincolo è:


− 
[b2 − b2 , b2  b 2 ]=[−2,∞]

Per il terzo vincolo abbiamo che il termine noto è b 3=4 e la colonna relativa è
T
 3=[−1 3 1] . Considerando solo i coefficienti negativi
 ∗
 b 3 =min {x kb /−k3 }=min {6/1}=6

mentre considerando i termini positivi abbiamo


− ∗
 b 2 =min {x kb /k3 }=min {2/3, 4 /1}=2/3

L'intervallo di variazione per il terzo vincolo è


− 
[b3− b3 , b3 b 3 ]=[10/3,10]

Vediamo la procedura analitica che consente di arrivare alla descrizione delle formule di
 b i e  b −i . Consideriamo la condizione di ammissibilità diretta che all'ottimo vale
∗ ∗ −1 ∗
x b = B  b≥0 , dove x b è il vettore contenente le variabili basiche e quindi è non negati-
vo.
Cominciamo con il calcolo di  b i cioè si vuole determinare un incremento massimo positi-
vo del valore del termine noto b i entro il quale non cambia la composizione della base ottima
e quindi risulta ancora valida la condizione di ammissibilità. Indichiamo con

b i =[b1 b2 ... b i =b i bi ... b m ]T

il vettore dei termini noti che contiene alla posizione i-esima il termine noto incrementato, ed
indichiamo con x b il vettore delle soluzioni corrispondenti a tale incremento. Se introducia-
mo il vettore u i=[0 0 ... 1 ... 0 ]T che contiene 1 solo nella posizione i-esima, allora la
condizione di ammissibilità si scrive:

Luca Esposito
74 Capitolo 5 - Prove d'esame

 ∗ −1  ∗ −1  ∗ −1 ∗ −1 
x b = B  b i = B  [ b bi u i ]= B  b B   b i u i =

Dato che x ∗b = B ∗−1 b e che  B ∗ −1 u i restituisce la i-esima colonna di  B ∗ −1 (chiamia-
mola  i ), l'equazione diventa:

= x ∗b  i  b i ≥0

Passando al caso scalare la disuguaglianza diventa


 ∗ 
x bk =x bk  ik  bi ≥0 per k =1,2 ,... , m

Dato che  bi e x ∗bk sono positivi, se ik è non negativo allora non si pongono vincoli al-
l'incremento  bi . Se altrimenti ik 0 allora il valore limite è dato da

 b i =x ∗bk /− ik  per ik 0

Il valore limite globale è quindi

 b i =min {x ∗bk /− ik } per ik 0

Con analoghi procedimenti si trova l'espressione per  b −i .


5.3.7 Esercizio 7
a) Si completi con i valori di peso la seguente tabella al fine di definire un problema di
zaino con 5 prodotti ed un vincolo di peso pari a 32.

A B C D E
Vi 5 35 30 24 32
Pi 5 10 6 6 16
Tabella 5.9: Tabella dei valori e dei pesi

b) Si scriva il modello di zaino per il problema così definito.


c) Si risolva il problema con l'algoritmo Branch & Bound e strategia di ricerca Best
Bound, riportando la numerazione progressiva dei sottoproblemi generati.

Modifichiamo la Tabella 5.9 ordinandola per rapporto decrescente tra valore e peso:

C D B E A
Vi 30 24 35 32 5
Pi 6 6 10 16 5
Vi/Pi 5 4 3,5 2 1
Tabella 5.10: Tabella dei valori e dei pesi

Luca Esposito
Capitolo 5 - Prove d'esame 75

Scriviamo, quindi, il modello di zaino per questo problema

Max z =5 x A 35 x B 30 x C 24 x D32 x E


5 x A10 x B6 x C 6 x D16 x E ≤32
x A , x B , xC , x D , x E ∈{0,1}

Figura 5.11: Iterazioni dell'algoritmo di Ford-Fulkerson per la ricerca di p.a.f.

Luca Esposito
76 Capitolo 5 - Prove d'esame

Cominciamo dal sottoproblema S0 il quale comprende x C =1 , x D=1 , x B=1 e x E =10/16


che porta alla soluzione 109 . Poiché un valore frazionario non è possibile creiamo due sotto-
problemi imponendo due vincoli x E =0 e x E =1 ed assumendo LS=109.
Per il primo sottoproblema S1 si ottiene che x C =1 , x D=1 , x B=1 , x E =0 e x A=1 conduce
alla soluzione intera z =94 . Il secondo sottoproblema S2 con x C =1 , x D=1 , x B=4/10 ,
x E =1 e x A=0 ha come limite superiore LS=100.
Scegliendo la strategia best bound, partizioniamo quest'ultimo problema. Otteniamo altri due
sottoproblemi rispettivamente con x C =1 , x D=1 , x B=0 , x E =1 e x A=4/5 e limite supe-
riore LS =90 e x C =1 , x D=0 , x B=1 , x E =1 e x A=0 e soluzione intera z =97 . Dato che
i sottoproblemi fino a qui esplorati con conducono a soluzioni ammissibili migliore di questa,
il problema si chiude.

Figura 5.12: Problema dello zaino binario

5.3.8 Esercizio 8
a) Si descriva il modello
del massimo percorso
tra due nodi della rete,
illustrando il significato
dei parametri e delle
variabili.

Figura 5.13: Determinare il massimo percorso per tale rete

Luca Esposito
Capitolo 5 - Prove d'esame 77

b) Si determini l'albero dei massimi percorsi con origine nel nodo 1 della rete in Figura
5.13, utilizzando un algoritmo arborescente.

Per il modello del massimo percorso si veda il §4.3.4.


Utilizziamo un algoritmo di tipo label setting per la risoluzione del problema.
Individuiamo nel nodo 1 il nodo origine ed etichettiamolo con [0]. Ci si deve muovere verso
un nodo che sia destinazione di archi i cui nodi origine siano già etichettati. Le alternative di
percorso sono quindi due: l'arco 1-3, con costo 0+7=7, e l'arco 1-2 con costo 0+4=4. Dato che
il percorso è a massimizzare si sceglie l'arco 1-3 e si etichetta il nodo 3 con [7].
E' possibile, poi, raggiungere il nodo 4, unico nodo destinazione di archi le cui origini sono
tutte etichettate, tramite l'arco 3-4 con costo 7+2=9 oppure tramite l'arco 1-6 con costo 0+6=6.
Si sceglie l'arco 3-4 e si etichetta il nodo 4 con [9]. L'unico nodo che è possibile raggiungere
adesso è 2 attraverso l'arco 1-2
e costo 0+4=4. Etichettiamo,
dunque, tale nodo con [4].
Adesso è possibile raggiungere
il nodo 5 attraverso l'arco 4-5
con costo 9+3=12 oppure tra-
mite l'arco 2-5 con costo
4+2=6. Il costo massimo è dato
dall'arco 4-5 e pertanto si eti-
chetta il nodo 5 con [12]. L'ulti-
mo nodo da etichettare è 6 che
è possibile raggiungere tramite
l'arco 3-6 con costo 7+1=11,
l'arco 4-6 con costo 9+10=19 e
l'arco 5-6 con costo 12+12=24.
Figura 5.14: Arborescenza del percorso massimo
Si sceglie l'arco 5-6 e si etichet-
ta il nodo 6 con [24]. Dato che
non sono presenti altri nodi da etichettare l'algoritmo termina.

1 2 3 4 5 6
Passo 1 [0],(0)
Passo 2 [0],(0) [7],(1)
Passo 3 [0],(0) [4],(1) [7],(1) [9],(3) [12],(4) [24],(5)
Tabella 5.11: Etichettamenti progressivi dei nodi [etichetta dei costi],(predecessore)
L'albero dei massimi percorsi è mostrato in Figura 5.14.
5.3.9 Esercizio 9
a) Si scriva il modello di massimo flusso.
b) Si determini il massimo flusso da 1 a 6 per la rete dell'esercizio 8.

Per il modello di massimo flusso si veda il §4.4.3.


Cominciamo assegnando un valore di flusso infinito al nodo 1 ed indicando il suo predecesso-
re con 0. Poi su ogni arco assegniamo una quantità di flusso pari a [0]. Visitiamo la rete eti-
chettando ogni nodo nel seguente modo: assegneremo una quantità di flusso che è possibile

Luca Esposito
78 Capitolo 5 - Prove d'esame

trasportare nel nodo pari al minimo tra la quantità residua dell'arco e la quantità di flusso asse-
gnata al nodo precedessore.
Operando una visita in larghezza etichettiamo, partendo dal nodo 1, i nodi 2, 3 e 4, assegnan-
do dei valori di flusso pari rispettivamente a 4, 7 e 6. Partendo dal nodo 2 si etichetta il nodo 5
con un valore di flusso pari a 2; da quest'ultimo si etichetta il nodo 6 con valore di flusso pari
a 2. Si è trovato il p.a.f. 1-2-5-6 con il quale è possibile trasportare una quantità di flusso pari
a 1=2 .
Ripercorriamo il percorso a ritroso aggiornando i valori di flusso e capacità.
Effettuando ancora una visita in larghezza del grafo si individua il p.a.f. 1-3-4-5-6 con 2 =2
. Si ripercorre a ritroso il percorso e si aggiornano i valori di flusso e capacità.
Individuiamo il p.a.f 1-3-6 con 4 =4 . Ripercorriamo ed aggiorniamo.
Partendo dal nodo 1 si individua il p.a.f 1-4-5-6 e 3=1 . Aggiorniamo flussi e capacità.
L'ultimo p.a.f percorribile è 1-4-6 con 5=5 . Dato che non più possibile raggiungere la desti-
nazione l'algoritmo termina. I nodi etichettabili sono N1 = {1,2,3} mentre quelli non etichetta-
bili sono N2 = {4,5,6}. Il taglio minimo è costituito dagli archi con origine nei nodi etichettati
e destinazione nei nodi non etichettati. Esso sarà composto, quindi, dagli archi 1-4, 2-5, 3-4,
3-6 la cui somma delle capacità è 6+2+2+4=14. Il massimo flusso trasportabile è:

= 12 34 5=42233=14

5.3.10 Esercizio 10 
a) Si scriva il modello di albero minimo.
b) Si determini l'albero minimo per la rete dell'esercizio 8 assunta come non orientata
con un algoritmo a selezione di spigoli.

Il modello dell'albero minimo è descritto nel §4.5.2.


Si richiede inoltre di determinare l'albero minimo della rete dell'esercizio 8 utilizzando l'algo-
ritmo di Sollin, che è un algoritmo a selezione di spigoli.
Creiamo in Tabella 5.12 una lista dei nodi e, per ogni nodo, consideriamo l'arco a costo mini-
mo.

1 2 3 4 5 6
1-2=4 2-5=2 3-4=2 4-3=2 5-2=2 6-3=4
Tabella 5.12: Lista dei nodi e degli archi a costo minimo

Creiamo poi una tabella in cui ogni colonna rappresenta un nodo della rete. Consideriamo l'ar-
co 1-2 a costo minimo associato al nodo 1, associamo l'identificativo 1 al nodo 1 e 2 e cancel-
liamo dalla lista la colonna relativa al nodo 2.
Passiamo al nodo 3. L'arco a costo minimo è 3-4, associamo a tali nodi l'identificativo 2 e
cancelliamo il nodo 4 dalla lista. Il nodo 5 presenta come arco a costo minimo 5-2, ed essendo
il nodo 2 già etichettato, includeremo il nodo 5 nel primo insieme. L'ultimo nodo è 6, che
rientra nell'insieme con identificativo 2.

Luca Esposito
Capitolo 5 - Prove d'esame 79

1 2 3 4 5 6
Passo 1 1 1
Passo 2 1 1 2 2
Passo 3 1 1 2 2 1
Passo 4 1 1 2 2 1 2
Tabella 5.13: Insieme degli identificativi di nodi

Si sono creati così, due macro-nodi disgiunti. Consideriamo, allora, l'arco a costo minimo che
li collega; esso è 5-4 con costo 3. L'albero minimo è formato dagli archi 1-2, 3-4, 5-2, 5-4 e 6-
3 ed mostrato in Errore: sorgente del riferimento non trovata.

Figura 5.15: Albero minimo

Luca Esposito
80 Capitolo 5 - Prove d'esame

5.4 Prova del 10/07/2010
5.4.1 Esercizio 2
Un'azienda manifatturiera produce 2 prodotti, A e B, che impiegano una sola risorsa di cui
bisogna utilizzare almeno 8 unità. Per la produzione di una tonnellata di prodotto A e di pro-
dotto B sono necessarie rispettivamente 1 e 2 unità di risorse. La differenza tra le produzioni
di B e A deve essere al massimo pari a 4 tonnellate. Inoltre vincoli di mercato impongono che
la produzione di A sia pari al massimo alla produzione di B. Determinare il mix di produzione
di A e B che minimizzi il costo totale nel caso in cui i costi unitari di A e B siano nel rapporto
1:5. Con riferimento al problema descritto:
a) si formuli il modello di programmazione lineare, descrivendo parametri, variabili,
vincoli e funzione obiettivo;
b) si disegni il dominio di ammissibilità del problema e la direzione della funzione obiet-
tivo;
c) si risolva graficamente il problema, individuando il vertice corrispondente alla solu-
zione ottima ed indicando quali sono i vincoli saturi;
d) si indichi, per ciascuno dei vertice del dominio adiacenti al vertice ottimo, la compo-
sizione della soluzione basica ammissibile associata;
e) si risolva il modello analiticamente con l'algoritmo del Simplesso/metodo delle due
fasi.

Indichiamo con x 1 la quantità da produrre di A e con x 2 la quantità da produrre di B. Dato


che per produrre una tonnellata di A e B servono rispettivamente 1 e 2 unità di risorse che de-
vono essere utilizzate in una quantità almeno pari ad 8 allora x 12 x 2≥8 . La differenza di
produzione tra B ed A deve essere massimo pari a 4 e quindi x 2 −x 1≤4 . I vincoli di mercato
ci consentono di scrivere che x 1− x 2≤0 . Il rapporto tra i costi unitari ci fornisce infine
5 c1 =c 2 . Il modello risulta quindi il seguente:

Min z= x 15 x 2
x 12 x 2≥8
x 2 −x 1≤4
x 1− x 2≤0
x 1 , x 2 ≥0

Il vertice corrispondente alla soluzione ottima è il vertice B. I vincoli saturi sono il primo ed il
terzo in quanto sono soddisfatti con un'uguaglianza nel vertice ottimo. La s.b.a dei due vertici
è la seguente:

x1 x2 y1 y2 y3
A 0 >0 0 0 >0
B >0 >0 0 >0 0
Tabella 5.14: soluzioni basiche ammissibili dei due vertici del dominio

Luca Esposito
Capitolo 5 - Prove d'esame 81

Con l'aggiunta delle variabili slack e artificiali il sistema diventa:

Min z= x 15 x 2
x 12 x 2− y 1h1=8
x 2 −x 1 y 2=4
x 1− x 2 y 3=0

Figura 5.16: Dominio di ammissibilità ed andamento della funzione obiettivo

Per favorire l'uscita delle variabili artificiali, introduciamo la funzione ausiliaria w definita
come la somma delle variabili artificiali. Nel caso specifico, essendo h 1=8−x 1−2 x 2 y 1 , la
funzione ausiliaria sarà

w=h1=8− x1 −2 x 2 y1

La prima fase dell'algoritmo prevede la minimizzazione di tale funzione, in modo da elimina-


re le variabili artificiali ed ottenere una s.b.a. del problema originario. La prima tabella del
Simplesso sarà la seguente:

x1 x2 y1 y2 y3 h1 -z -w b
h1 1 2 -1 0 0 1 0 0 8
y2 -1 1 0 1 0 0 0 0 4

Luca Esposito
82 Capitolo 5 - Prove d'esame

y3 1 -1 0 0 1 0 0 0 0
-z 1 5 0 0 0 0 1 0 0
-w -1 -2 1 0 0 0 0 1 -8
Tabella 5.15: Prima fase: minimizzare la funzione ausiliaria (s.b.a. w=-8, z=0)

Poiché il problema è a minimizzare scegliamo il coefficiente minore delle variabili della fun-
zione w. Si trova quindi che la variabile entrante è x2 e, dato che il rapporto minore si ottiene
in corrispondenza della seconda riga, la variabile uscente è y2. Effettuando il pivoting rispetto
all'elemento a 22=1 si ottiene la seconda tabella del Simplesso:

x1 x2 y1 y2 y3 h1 -z -w b
h1 3 0 -1 -2 0 1 0 0 0
x2 -1 1 0 1 0 0 0 0 4
y3 0 0 0 1 1 0 0 0 4
-z 6 0 0 -5 0 0 1 0 -20
-w -3 0 1 2 0 0 0 1 0
Tabella 5.16: Prima fase: minimizzare la funzione ausiliaria (s.b.a. w=0, z=-20)

Il test di ottimalità non è ancora soddisfatto. Pertanto troviamo che la variabile entrante è x1 e
la variabile uscente è h1. Effettuando il pivoting intorno ad a 11=3 si ottiene:

x1 x2 y1 y2 y3 h1 -z -w b
x1 1 0 -1/3 -2/3 0 1/3 0 0 0
x2 0 1 -1/3 1/3 0 1/3 0 0 4
y3 0 0 0 1 1 0 0 0 4
-z 0 0 2 -1 0 -2 1 0 -20
-w 0 0 0 0 0 1 0 1 0
Tabella 5.17: Prima fase: minimizzare la funzione ausiliaria (s.b.a. w=0, z=-20)

Il test di ottimalità è soddisfatto e quindi si sono annullate tutte le variabili artificiali. E' possi-
bile eliminare dalla Tabella 5.17 le righe e le colonne corrispondenti a -w e la colonna di h1 ot-
tenendo la tabella seguente:

x1 x2 y1 y2 y3 -z b
x1 1 0 -1/3 -2/3 0 0 0
x2 0 1 -1/3 1/3 0 0 4
y3 0 0 0 1 1 0 4
-z 0 0 2 -1 0 1 -20

Luca Esposito
Capitolo 5 - Prove d'esame 83

Tabella 5.18: x1=0, x2=4, y3=4, y1=0, y2=0, z=20 [Vertice A]

Il test di ottimalità non è soddisfatto e pertanto operiamo il Simplesso standard, minimizzando


la funzione obiettivo. La variabile entrante è y2 mentre la variabile uscente è y3.L'elemento pi-
vot è a 34=1 , attraverso il quale si ottiene

x1 x2 y1 y2 y3 -z b
x1 1 0 -2/3 0 2/3 0 8/3
x2 0 1/3 -1/3 0 -1/3 0 8/3
y2 0 0 0 1 1 0 4
-z 0 0 2 0 1 1 -16
Tabella 5.19: x1=8/3, x2=8/3, y2=4, y1=0, y3=0, z=16 [Vertice B]

Il test di ottimalità è soddisfatto e si trova che il valore ottimo della funzione è z ∗=16 .
5.4.2 Esercizio 4
1. In quali casi si aggiungono, in un modello P.L., le variabili artificiali?
2. Come si definisce la funzione w nel metodo delle 2 fasi?
3. Quali sono i casi possibili per il valore di w alla fine della prima fase?
4. Come e perché si modifica la funzione obiettivo nel metodo del Big M quando ci sono
variabili artificiali?

Le variabili artificiali h i vengono introdotte nel caso in cui il modello presenti dei vincoli di
≥ o =. In particolare si introduce una variabile slack negativa ed una variabile artificiale po-
sitiva per ogni vincolo di ≥ , mentre si introduce solo una variabile artificiale positiva per
ogni vincolo di =.
Nel metodo delle due fasi non si trasforma la funzione obiettivo, ma si crea una seconda fun-
zione obiettivo ausiliaria w definita come la somma delle variabili artificiali del modello
w=∑ j h j . Scopo del metodo è quello di minimizzare tale funzione. Infatti, essendo le varia-
bili artificiali non negative, il minimo di tale somma sarà proprio 0, ottenuto quando tutte le
variabili artificiali si annullano.
Se il test di ottimalità è soddisfatto (tutti i coefficienti delle variabili della funzione ausiliaria
sono non negativi) allora, il valore ottimo della funzione ausiliaria si può presentare in due
casi:
1. w∗0 : non è stato possibile eliminare tutte le variabili artificiali e quindi non esiste
alcuna soluzione del problema ampliato con variabili artificiali tutte nulle. Il problema
originario è quindi inconsistente;
2. w ∗=0 : si è trovata una s.b.a. appartenente sia al dominio esteso che a quello origina-
rio. In questo caso se
1. tutte le variabili artificiali sono non basiche allora eliminando le colonne ad esse
relative, si ottiene la tabella del Simplesso del problema originario;
2. almeno una variabile artificiale è in base, a valore nullo, allora la soluzione è dege-
nere rispetto a tale variabile.

Luca Esposito
84 Capitolo 5 - Prove d'esame

Nel metodo Big M, invece, si modifica la funzione obiettivo sommando le variabili artificiali
moltiplicate per un coefficiente elevato M (positivo se il problema è a minimizzare, negativo
se è a massimizzare). In questo modo si favorisce l'annullamento delle variabili artificiali, ma
si perde la forma canonica del sistema. Si opera quindi, prima un pivoting per ogni colonna
delle variabili artificiali e successivamente si procede con il Simplesso standard.
5.4.3 Esercizio 5
a) Con riferimento all'esercizio 2 si indichino, se ce ne sono, le soluzioni basiche ammis-
sibili degeneri del dominio di ammissibilità.
b) Per quale motivo si verifica una s.b.a. degenere?
c) Quale condizione si verifica nella tabella dell'algoritmo del Simplesso prima di deter-
minare una s.b.a. degenere?
d) Che cosa si può verificare nello sviluppo dell'algoritmo dopo la determinazione di
una s.b.a. degenere?

Una s.b.a. è degenere per un sistema di m vincoli ed n variabili, se alcune delle m variabili
non negative presentano un valore nullo. Nell'esercizio 2 ciò accade nel vertice A, dove è pre-
sente una variabile basica nulla.
Può verificarsi una s.b.a. degenere se il sistema presenta vincoli ridondanti oppure se più vin-
coli si intersecano su uno degli assi. In quest'ultimo caso, il vertice formato soddisferà i vinco-
li con segno di uguaglianza.
Prima di determinare una s.b.a. degenere si vede che il minimo tra i rapporti si ottiene in cor-
rispondenza di più righe. Inoltre, nel caso di una degenerazione, uno o più termini noti sono
nulli e quindi il minimo tra i rapporti è proprio 0 e l'operazione di pivoting non sarà collegato
ad uno spostamento da un vertice ad un altro.
Durante il corso dell'algoritmo può verificarsi il fenomeno della circolazione. Cioè, dopo un
certo numero di iterazioni c'è la possibilità di trovare una s.b.a. degenere già generata in pre-
cedenza senza convergere alla soluzione ottima. Per risolvere tale problema si può modificare
leggermente il vettore dei termini noti oppure usare il metodo dell'anti-circolazione che preve-
de la scelta casuale della variabile entrante in base.

Luca Esposito
Capitolo 5 - Prove d'esame 85

5.5 Prova del 19/06/2009
5.5.1 Esercizio 1
a) Si descriva l'algoritmo di Stee-
pest Descent (o algoritmo della
discesa ripida) per la determina-
zione del punto di minimo di una
funzione multidimensionale non
vincolata.
b) In Figura 5.17 sono riportate al-
cune curve di livello di una fun-
zione bidimensionale. Partendo Figura 5.17: Curve di livello
dal punto x0, disegnare il percor-
so dell'algoritmo (direzioni di
spostamento, lunghezza dello spostamento, soluzioni intermedie e finale).

Per la descrizione dell'algoritmo si


veda §1.2.1.2.
Partendo dal punto x0 si traccia la
retta tangente alla curva di livello e
se ne trova la perpendicolare: questa
sarà la direzione del gradiente (sup-
ponendo che la funzione sia conves-
sa). Muovendosi nel verso opposto
alla direzione del gradiente si inter-
cetterà tangenzialmente una seconda
curva di livello nel punto x1 a distan- Figura 5.18: Percorso dell'algoritmo di discesa ripida
za q0 da x0. Si prosegue si tal modo
fino a quando non si trova il minimo
della funzione.
5.5.2 Esercizio 2
a) Che cos'è un insieme convesso?
b) Che cosa si intende per “soluzione di base (o basica)” di un sistema di equazioni li -
neari con n variabili ed m equazioni? Quando essa viene detta anche “ammissibile”?
c) A quali punti del dominio di ammissibilità di un problema PL corrispondono le solu-
zioni basiche ammissibili?
d) In quali circostanze “geometriche” in un problema PL si hanno infinite soluzioni otti-
me? Una volta risolto il problema di PL, come ci si rende conto, dall'esame della ta-
bella finale dell'algoritmo del Simplesso, del fatto che esso ammette infinite soluzioni
ottime?

Un insieme si dice convesso se è possibile congiungere due punti qualsiasi dell'insieme con
un segmento senza uscire da esso.
Una soluzione di un sistema di equazioni lineari si dice basica se il vettore soluzione n-dimen-
sionale presenta n-m valori nulli ed m valori qualsiasi. Se gli m valori sono non negativi allora
la soluzione si dice ammissibile e gli m elementi si dicono variabili basiche.

Luca Esposito
86 Capitolo 5 - Prove d'esame

Le soluzioni basiche ammissibili, inoltre, si trovano in un legame biunivoco con i vertici del
dominio; le composizioni delle s.b.a. corrispondenti ai vertici differiscono per una sola varia-
bile.
E' possibile che la funzione obiettivo coincida con un segmento della frontiera del dominio di
ammissibilità (se il dominio si trova in un piano altrimenti coincide con una superficie). In
questo caso tutti i punti del dominio che si trovano su tale segmento sono soluzioni basiche
ammissibili del problema e quindi sono presenti infinite soluzioni. Analizzando la tabella fi-
nale del Simplesso si troverà che uno o più coefficienti di costo modificati corrispondenti alle
variabili non basiche saranno nulli.
5.5.3 Esercizio 3
Un'azienda produce due tipi di pellicole di poliestere A e B. La produzione di un lotto di A ri-
chiede 30 quintali di materia prima mentre per un lotto di B sono necessari 60 quintali. Per
sfruttare le economie di scala è necessario utilizzare almeno 120 quintali di materia prima.
Problemi di tipo tecnologico impongono inoltre che la differenza tra le quantità prodotte di B
e A sia al massimo pari a 1,5 lotti e che si producano in totale tra A e B al massimo 4 lotti. I
profitti unitari di A e B sono nel rapporto 1/3. Si vuole conoscere il piano di produzione che
massimizzi il profitto totale. Con riferimento al problema descritto:
a) si formuli il modello in programmazione lineare, elencando i vincoli nell'ordine in cui
sono stati presentati;
b) si disegni il dominio di ammissibilità e la direzione della funzione obiettivo;
c) si risolva graficamente il modello, individuando il vertice corrispondente alla soluzio-
ne ottima;
d) si indichino le soluzioni basiche ammissibili del problema e la relativa composizione;
e) si risolva il modello analiticamente con il metodo del Big M.

Il modello di PL è il seguente:

Max z =x 13 x 2
30 x 160 x 2≥120
x 2 −x 1≤1,5
x 1 x 2≤4
x 1 , x 2 ≥0

Il dominio è mostrato in Figura 5.19. Il vertice ottimo è B. In Tabella 5.20 si elencano le com-
posizioni delle soluzioni basiche ammissibili di ogni vertice.

vertice x1 x2 y1 y2 y3
A >0 >0 0 0 >0
B >0 >0 >0 0 0
C >0 0 0 >0 0
Tabella 5.20: Composizione delle s.b.a. di ogni vertice

Notiamo che nel vertice C si annullano 3 variabili e quindi essendo questa una s.b.a degenere
potrebbe verificarsi una degenerazione dell'algoritmo del Simplesso.

Luca Esposito
Capitolo 5 - Prove d'esame 87

Per risolvere il problema tramite l'algoritmo del Simplesso trasformiamo le disequazioni in


opportune equazioni:

Max z =x 13 x 2− M h 1
30 x 160 x 2− y 1h 1=120
x 2 −x 1 y 2=1,5
x 1 x 2 y 3=4

Figura 5.19: Dominio di ammissibilità ed andamento della funzione obiettivo

La prima tabella del Simplesso è mostrata di seguito

x1 x2 y1 y2 y3 h1 -z b
h1 30 60 -1 0 0 1 0 120
y2 -1 1 0 1 0 0 0 1,5
y3 1 1 0 0 1 0 0 4
-z 1 3 0 0 0 -M 1 0
Tabella 5.21: h1=120, y2=1.5, y3=4, x1=0, x2=0 z=0

Luca Esposito
88 Capitolo 5 - Prove d'esame

Portiamo il sistema in forma canonica rispetto ad h1 facendo perno sull'elemento a 16=1 . Si


ottiene quindi:

e ' 1=e 1 /a16=e 1

e 2 '=e 2 −a 26 · e 1 '=e 2

e 3 '=e 3−a36 · e 1 ' =e 3

e 4 '=e 4 −a 46 · e 1 '=[1 3 0 0 0 −M 1 0]M [30 60 −1 0 0 1 0 120]=

=[130 M 360 M −M 0 0 0 −1 120 M ]

La nuova tabella sarà:

x1 x2 y1 y2 y3 h1 -z b
h1 30 60 -1 0 0 1 0 120
y2 -1 1 0 1 0 0 0 3/2
y3 1 1 0 0 1 0 0 4
-z 1+30M 3+60M -M 0 0 0 1 120M
Tabella 5.22: h1=120, y2=1.5, y3=4, x1=0, x2=0 z=120M

A questo punto si sceglie il coefficiente massimo delle variabili della funzione obiettivo: esso
è 360 M , corrispondente alla variabile x2 entrante in base. Il minimo tra i rapporti è 1.5 cor-
rispondente alla riga della variabile y2, uscente dalla base. Facendo perno sull'elemento
a 22 =1 si ottiene:

e ' 2=e 2 /a22=e 2

e 1 ' =e 1 −a12 · e 2 ' =[30 60 −1 0 0 1 0 120 ]−60 [−1 1 0 1 0 0 0 1.5]=

=[90 0 −1 −60 0 1 0 30]

e 3 ' =e 3−a 32 · e 2 '=[1 1 0 0 1 0 0 4]−[−1 1 0 1 0 0 0 1.5]=

=[2 0 0 −1 1 0 0 2.5]

e 4 '=e 4 −a 42 · e 2 ' =[130 M 360 M −M 0 0 0 1 120 M ]−360 M 

[−1 1 0 1 0 0 0 1.5]=[490 M 0 −M −3−60 M 0 0 1 30 M −9 /2]

Luca Esposito
Capitolo 5 - Prove d'esame 89

La nuova tabella è la seguente:

x1 x2 y1 y2 y3 h1 -z b
h1 90 0 -1 -60 0 1 0 30
x2 -1 1 0 1 0 0 0 1,5
y3 2 0 0 -1 1 0 0 2,5
-z 4+90M 0 -M -3-60M 0 0 1 30M-9/2
Tabella 5.23: h1=30, x2=1.5, y3=2.5, x1=0, y2=0, z=30M-9/2

Ancora non ci troviamo sul vertice ottimo e quindi continuiamo l'algoritmo. Il coefficiente
massimo è 4+90 M e quindi x1 è la variabile entrante. Il minimo tra i rapporti è 1/3, corrispon-
de alla riga di h1, variabile uscente. Trasformando rispetto a a 11=90 si ottiene:

e ' 1=e 1 /a11=[1 0 −1 /90 −2 /3 0 1/90 0 1/ 3]

e 2 '=e 2 −a 21 · e 1 '=[−1 1 0 1 0 0 0 1.5][1 0 −1/90 −2 /3 0 1/90 0 1/3]=

=[0 1 −1 /90 1/3 0 1/90 0 11/6 ]

e 3 ' =e 3−a 31 · e 1 ' =[2 0 0 −1 1 0 0 2.5]−[1 0 −1/90 −2/3 0 1/90 0 1/3]=

=[0 0 2/90 1/3 1 −2/90 0 11 /6]

e 4 '=e 4 −a 41 · e 1 ' =[4090 M 0 −M −3−60 M 0 0 1 30M−9/2 ]−490 M 

[1 0 −1 /90 −2 /3 0 1/90 0 1 /3]=[0 M 0 2 /45 −1/3 0 −4 /90− M 1 −35/6]

x1 x2 y1 y2 y3 h1 -z b
x1 1 0 -1/90 -2/3 0 1/90 0 1/3
x2 0 1 -1/90 1/3 0 1/90 0 11/6
y3 0 0 2/90 1/3 1 -2/90 0 11/6
-z 0 0 2/45 -1/3 0 -4/90-M 1 -35/6
Tabella 5.24: x1=1/3, x2=11/6, y3=11/6, h1=0, y2=0, y1=0, z=35/6 (vertice A)

Procediamo ancora e troviamo che la variabile entrante è y1 e la variabile uscente è y3: l'ele-
mento pivot è a 33 =2/90 . Con le opportune trasformazioni si arriva alla Tabella 5.25.

x1 x2 y1 y2 y3 h1 -z b
x1 1 0 0 -1/2 1/2 0 0 5/4
x2 0 1 0 1/2 1/2 0 0 11/4

Luca Esposito
90 Capitolo 5 - Prove d'esame

y1 0 0 1 15 45 -1 0 165/2
-z 0 0 0 -1 -2 -M 1 -15/2
Tabella 5.25: x1=5/4, x2=11/4, y1=165/2, h1=0, y2=0, y3=0, z=-15/2 (vertice B)

Essendo tutti negativi i coefficienti della funzione obiettivo, l'algoritmo termina.


5.5.4 Esercizio 4
a) Si effettui l'analisi di stabilità della soluzione ottima del modello dell'esercizio 3, al
variare (in incremento o decremento) del termine noto del vincolo 3. Si indichino gra-
ficamente le posizioni limite del vincolo.
b) Si indichi la successione delle soluzioni ottime all'aumentare del coefficiente di profit-
to del prodotto B.

Dobbiamo trovare il campo di variazione [b3− b−3 , b3 b 3 ] . Abbiamo, riferendosi all'ulti-
ma tabella del Simplesso e precisamente alla colonna di y 3 trattandosi di un vincolo di ≤ :

 b −3 =min {x ∗k / k3 } ∀  k30=min {5/2, 11/2, 33/18}=33/18

 ∗
 b 3 =min {x k /−k3 } ∀ k3 0=∞

Quindi il campo di variazione è [b3− b−3 , b3 b 3 ]=[4−33/18,∞ ] .


Dal momento che x 2 è basica ed il problema è a massimizzare, si ha che

 c 2 =min {−c j /−a 2j } ∀ a2j 0


5.5.5 Esercizio 5
a) Che cos'è il coefficiente di costo modificato c ' j ? Qual è il suo significato?
b) Quale criterio si segue nel determinare la variabile entrante nell'algoritmo del Sim-
plesso?
c) Con quale criterio si individua la variabile uscente nell'algoritmo del Simplesso?
d) Che cosa rappresenta il rapporto b i /ais ?
e) Perché per individuare la variabile uscente si sceglie la riga in corrispondenza della
quale si verifica il minimo dei rapporti b i /ais ?

Una volta individuata una nuova s.b.a., corrispondente ad un vertice del dominio di ammissi-
bilità, è necessario effettuare il test di ottimalità verificando i valori delle derivate direzionali
lungo gli spigoli ad esso incidenti. Dato che tali spigoli solitamente non sono paralleli agli
assi, non si dispone immediatamente di tali valori. Se, però, si pone la funzione obiettivo in
forma di vincolo cioè z =∑ j c j x j diventa ∑ j c j x j− z=0 , allora partecipando alla trasfor-
mazione del sistema, si modificano i coefficienti di costo. In particolare i coefficienti di costo
modificati relativi alle variabili non basiche vengono sottoposti al test di ottimalità in quanto
restituiscono i valori della derivata direzionale lungo lo spigolo che porta al vertice.
Per individuare la variabile entrante si analizzano i valori dei coefficienti della funzione obiet-
tivo relativi alle variabili non basiche. Se il problema è a massimizzare si considerano i valori
positivi altrimenti quelli negativi (solitamente si prende rispettivamente il malore maggiore tra

Luca Esposito
Capitolo 5 - Prove d'esame 91

i positivi e il minore tra i negativi. Determinare la variabile entrante significa determinare la


direzione di spostamento.
Se con s si indica la colonna relativa alla variabile entrante, la variabile uscente si trova in
corrispondenza del minimo tra i rapporti b i /ais , con b i elemento i-esimo della colonna dei
termini noti e con a is elemento i-esimo della colonna s. Con ciò si individua la lunghezza
dello spostamento tra un vertice e l'altro del dominio. Infatti, la variabile uscente è quella va-
riabile basica che, all'aumentare del valore della variabile entrante, si annulla per prima.
In virtù di quanto detto, la variazione della variabile basica y i dipende dal segno di a ij : se
a ij 0 allora y i diminuisce, se a ij 0 aumenta altrimenti non cambia. In particolare, dato
che siamo interessati al caso in cui y i diminuisce, consideriamo solo i coefficienti a ij 0 e,
per evitare che qualche altra variabile diventi negativa, tra questi coefficienti prendiamo il mi-
nimo (quindi la variabile che si annulla per prima). Tale rapporto è anche il valore che assu-
merà la nuova variabile basica.
5.5.6 Esercizio 7
Con l'ausilio dell'analisi grafica, si risolva il problema dell'esercizio 3 nel caso che le varia-
bili siano vincolate ad essere intere.

Riportiamo il modello dell'esercizio 3 imponendo l'interezza delle variabili:

Max z =x 13 x 2
30 x 160 x 2≥120
x 2 −x 1≤1,5
x 1 x 2≤4
x 1 , x 2 interi

Possiamo utilizzare un approccio di tipo branch & bound con strategia best first e come limite
superiore utilizzare il valore ottimo della funzione ottenuto rilassando i vincoli di interezza.
All'ottimo abbiamo che x 1=1.25 e x 2 =2.75 . Vincoliamo, quindi, x 1≥2 e x 1≤1 creando
così due sottoproblemi, S1 ed S2:
Max z =x 13 x 2 Max z =x 13 x 2
30 x 160 x 2≥120 30 x 160 x 2≥120
x 2 −x 1≤1,5 x 2 −x 1≤1,5
x 1 x 2≤4 x 1 x 2≤4
x 1≤1 x 1≥2
x 1 , x 2 interi x 1 , x 2 interi

Abbiamo rispettivamente, che x 1=1 e x 2 ≃2.5 quindi LS 1≃17/ 2 mentre x 1=2 , x 2=2
LS 2=8 . Abbiamo una prima soluzione intera per l'insieme S2. La soluzione che si troverà
esplorando l'insieme di S1, sarà al più pari a quella di S2:

Luca Esposito
92 Capitolo 5 - Prove d'esame

Max z =x 13 x 2 Max z =x 13 x 2


30 x 160 x 2≥120 30 x 160 x 2≥120
x 2 −x 1≤1,5 x 2 −x 1≤1,5
x 1 x 2≤4 x 1 x 2≤4
x 1≤1 x 1≤1
x 2 ≤2 x 2 ≥3
x 1 , x 2 interi x 1 , x 2 interi

Il sottoproblema S11 ammette come soluzione LS11=2, mentre il sottoproblema LS12 non am-
mette soluzioni ammissibili dato che il suo insieme di definizione è vuoto. La soluzione otti-
ma del problema con i vincoli di interezza è z ∗=8 .

Figura 5.20: Determinazione dei primi sottoproble-


mi

Figura 5.21: Suddivisione dei sottoproblemi ed indi-


viduazione della soluzione ottima intera

Luca Esposito
Capitolo 5 - Prove d'esame 93

5.5.7 Esercizio 8
a) Si scriva il modello del
minimo percorso per
una coppia origine/de-
stinazione.
b) Con riferimento alla
rete in Figura 5.22 si
determini l'arborescen-
za dei minimi percorsi
dal vertice 1 a tutti gli
altri, utilizzando l'algo-
ritmo di Dijkstra.
Figura 5.22: Rete da analizzare
Per il modello del minimo per-
corso vedere §4.3.1.
Inizialmente si assegna definitivamente al nodo 1 un costo C(1) = 0 ed il predecessore p(1)=0.
Verso tutti gli altri nodi si assegnano costi e predecessori infiniti.
Alla prima iterazione si raggiunge il nodo 2 con costo 0+3, il nodo 4 con costo 0+4 ed il nodo
5 con costo 0+10. L'etichetta minima è quella corrispondente al nodo 2 che diventa quindi de-
finitiva.
Si riparte dal nodo 2 da cui si etichetta il nodo 3 con costo 3+9, il nodo 6 con costo 3+8 ed il
nodo 5 con costo 3+2. L'etichetta minima si ottiene per il nodo 4 che diventa quindi definitiva.
Partendo dal nodo 4 si etichetta solo il nodo 5 con costo 4+3. Dato che la precedente etichetta
è migliore, si rende definitiva l'etichetta del nodo 5 con costo 3+2.
Dal nodo 5 è poi possibile raggiungere il nodo 3 con costo 5+8 ed il nodo 6 con costo 5+5. Il
nodo 6 viene quindi etichettato definitivamente.
L'ultima iterazione etichetta il nodo 3 definitivamente. Tutti i nodi sono stati etichettati defini-
tivamente e l'algoritmo termina.

Nodo/Iterazioni 1 2 3 4 5 6 Definitivo
Passo 0 [0] [∞] [∞] [∞] [∞] [∞] C(1) = 0
(0) (∞) (∞) (∞) (∞) (∞) p(1) = 0
Passo 1 [0+3] [∞] [0+4] [0+10] [∞] C(2) = 3
(1) (∞) (1) (1) (∞) p(2) = 1
Passo 2 [3+9] [0+4] [3+2] [3+8] C(4) = 4
(2) (1) (2) (2) p(4)=1
Passo 3 [3+9] [4+3] [3+8] C(5) = 5
(2) (4) (2) p(5) = 2
Passo 4 [5+8] [5+5] C(6) = 10
(5) (5) p(6) = 5
Passo 5 [3+9] C(3) = 12
(2) p(3) = 2
Tabella 5.26: Iterazioni dell'algoritmo di Dijkstra con [costo] e (predecessore)

Luca Esposito
94 Capitolo 5 - Prove d'esame

5.5.8 Esercizio 10
Si consideri la rete in Figura
5.23 sulla quale sono riportati
il costo di spostamento su cia-
scun arco, il flusso generato o
attratto da ciascun nodo. Si
scriva il modello di flusso sin-
gle-commodity senza vincoli di
capacità.

L'insieme dei nodi generatori è


O={1, 2} mentre i nodi attrat-
tori sono F ={3,4,5} . La fun- Figura 5.23: Calcolare il modello di flusso single-commodity
zione obiettivo è

Min z=7 f 125 f 13 f 244 f 25 f 323 f 34 7 f 45

Scriviamo i vincoli di bilancio

f 12 f 13=9
f 25 f 24− f 12− f 32=5
f 32 f 34− f 13=−6
f 45− f 24− f 34=−5
− f 25− f 45 =−3

Inoltre tutti i flussi devono essere non negativi.

Luca Esposito

Potrebbero piacerti anche