Introduzione alla programmazione lineare

Transcript

Introduzione alla programmazione lineare
Introduzione alla programmazione lineare
Mauro Pagliacci
c Draft date 25 maggio 2010
Premessa
In questo fascicolo sono riportati gli appunti dalle lezioni del corso di Elaborazioni automatica dei dati per le applicazioni economiche e finanziarie tenute per il
corso di laurea in Economia e gestione dei servizi turistici (seconda parte: Introduzione alla programmazione lineare) negli anni accademici dal 2008-2009 al 20092010. Per la comprensione completa di questi appunti, bisogna usare il file Excel
ProgLin.xls, disponibile nel sito internet del corso. Le figure del capitolo 2 sono
ancora provvisorie.
i
ii
Indice
Preface
i
1 Introduzione alla programmazione lineare
1
1.1
Un problema di progettazione . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Le funzioni di due variabili reali . . . . . . . . . . . . . . . . . . . . .
3
1.3
Curve di livello . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
1.4
Disequazioni lineari in due variabili . . . . . . . . . . . . . . . . . . .
8
1.5
Risoluzioni grafica di un problema di PL . . . . . . . . . . . . . . . . 14
1.6
Esercizi proposti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2 Risoluzione di problemi di PL
17
2.1
Terminologia e notazioni . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2
Uso del risolutore di Excel nei problemi di PL . . . . . . . . . . . . . 19
2.3
2.2.1
L’esempio del paragrafo 1.1 . . . . . . . . . . . . . . . . . . . 19
2.2.2
Esempio con soluzioni multiple . . . . . . . . . . . . . . . . . 22
2.2.3
Esempio con regione ammissibile vuota . . . . . . . . . . . . . 24
2.2.4
Problemi di programmazione lineare intera . . . . . . . . . . . 24
2.2.5
Formalizzazione di un problema di PL . . . . . . . . . . . . . 26
2.2.6
Esempio con più di due variabili . . . . . . . . . . . . . . . . . 26
Esercizi proposti . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
i
Capitolo 1
Introduzione alla programmazione
lineare
1.1
Un problema di progettazione
Nella progettazione di una struttura turistica formata da due tipologie di alberghi,
A e B, bisogna tenere in considerazione i seguenti vincoli di natura urbanisticoprogettuale:
1. Il numero complessivo delle camere dei due alberghi non deve superare le 300
unità;
2. Il numero delle camere dell’albergo di tipo B (quello più costoso) non deve
superare un terzo del numero delle camere dell’albergo di tipo A (quello più
economico).
Ipotizzando che :
1. Il prezzo medio delle camere dell’albergo di tipo A sarà di 80e a notte;
2. Il prezzo medio delle camere dell’albergo di tipo B sarà di 160e a notte;
ci poniamo il problema di quale è effettivamente il numero di camere dell’albergo di
tipo A e quale è il numero di camere dell’albergo di tipo B da progettare affinchè
sia massimo l’incasso della struttura.
Il problema ora esposto è molto semplificato rispetto a tutte le variabili che possono
entrare in una situazione di questo tipo. Tuttavia è importante poterlo formalizzare
perchè questo fatto ci consentirà di interpretarlo anche dal punto di vista geometrico.
1
2
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
Dopo aver compreso il probelma geometrico, affronteremo problemi più generali e
complessi per la risoluzione dei quali useremo il risolutore di Excel.
Per formalizzare il problema, indichiamo con xA e con xB il numero di camere
nell’albergo di tipo A e di tipo B, rispettivamente. Vogliamo trovare il massimo
della funzione
f (xA , xB ) = 80 xA + 160 xB ,
che rappresenta l’incasso giornaliero della struttura, tenendo conto dei vincoli 1. e
2., che possono essere scritti, rispettivamente, come:
1. xA + xB ≤ 300;
2. xB ≤ 31 xA .
E’ ovvio che i numeri xA e xB devono essere entrambi non negativi, quindi dobbiamo
considerare anche la condizione:
3. xA ≥ 0,
xB ≥ 0.
Quello ora espresso è un tipico problema in cui bisogna massimizzare una funzione
f (xA , xB ) nelle due variabili xA e xB , espressa da un polinomio di primo grado in
xA e xB , soggetta ai vincoli 1., 2. e 3..
Quando abbiamo a che fare con un problema del tipo ora, detto che consiste nella massimizzazione di una funzione in più variabili espressa da un polinomio di
primo grado (quindi lineare), soggetta a vincoli anche essi espressi da relazioni di
primo grado rispetto alla variabili, diciamo che dobbiamo risolvere un problema di
programmazione lineare (PL).
Il nostro problema di programmazione lineare (PL) può essere scritto nel seguente
modo:
max (80 xA + 160 xB ),
con in vincoli:
1. xA + xB ≤ 300
2. xB ≤ 13 xA
3. xA ≥ 0,
xB ≥ 0.
Per comprendere, e quindi risolvere il problema, dobbiamo capire come è fatto il
grafico di una funzione in più variabili (geometricamente ci limiteremo al caso di
due variabili) e del significato geometrico dei vincoli.
1.2. LE FUNZIONI DI DUE VARIABILI REALI
1.2
3
Le funzioni di due variabili reali
Ricordiamo che se A e B sono due sottoinsiemi di R, l’insieme dei numeri reali, una
funzione (reale di una variabile reale)
f :A→B
è una legge di natura qualunque che ad ogni elemento di A associa uno ed un solo
elemento di B. La notazione che si può usare è la seguente:
f: A → B
x 7→ f (x)
Sappiamo anche che il grafico di una funzione si definisce come l’insieme Gr f ,
sottoinsieme del piano cartesiano,
Gr f = {(x, f (x)) | x ∈ A}.
Geometricamente il grafico di una funzione è pertanto individuato, come sappiamo,
dalle coppie di punti del piano cartesiano, la cui prima componente è x e la seconda
il valore f (x) che la funzione f assume in x.
y
30
25
20
15
10
f(x)
5
2
1
0
1
x
2
3
x
Figura 1.1: Grafico di una funzione di una variabile
Supponiamo di avere ora una funzione definita in un sottoinsieme del piano cartesiano A, cioè A ⊆ R × R.
Questo significa che un elemento di A è una coppia ordinata di numeri reali.
In modo concettualmente identico a quello usato per definire le funzioni di una
variabile reale, diciamo che una funzione f , definita nell’insieme A ⊆ R × R è una
4
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
legge di natura qualunque che ad un elemento (x, y) dell’insieme A associa uno ed
un solo numero reale f (x, y). In simboli:
f:
A
→
R
(x, y) 7→ f (x, y)
Il numero f (x, y) è il valore che la funzione f assume nel punto di A di coordinate
(x, y). A si chiama dominio di f .
Esempio –
f1 (x, y) = 2x + 3y + 1 ,
f2 (x, y) = x2 − y 2
,
f3 (x, y) = x2 + y 2 .
f1 è una funzione espressa da un polinomio di primo grado in x e y, f2 e f3 sono
espresse da polinomi di secondo grado in x e y.
Possiamo calcolare il valore che una funzione di due variabili assume in qualche
punto del suo dominio, analogamente al caso delle funzioni di una variabile.
f1 (0, 0) = 1,
f1 (1, 1) = 6,
f1 (1, 2) = 6;
f2 (0, 0) = 0,
f2 (1, 1) = 0,
f2 (2, 1) = 3;
f3 (0, 0) = 0,
f3 (1, 1) = 2,
f3 (1, 2) = 5.
Il grafico di una funzione di due variabili si definisce, analogamente al caso delle
funzioni di una variabile come :
Gr f = {(x, y, f (x, y)) |(x, y) ∈ A}.
Pertanto il grafico di una funzione in due variabili è un sottoinsieme di R × R × R =
R3 , lo spazio cartesiano tridimensionale ed è rappresentabile geometricamente come
una superficie di R3 .
Disegnare il grafico di una funzione di due variabili è sicuramente più complicato
del caso di funzioni di una variabile. Esiste tutta una teoria che studia il comportamento delle funzioni di più variabili (limiti, continuità, derivate, massimizzazione)
che differisce notevolmente dalla analoga teoria per le funzioni di una variabile, già
nota dal corso di Matematica generale.
Non è nostro obiettivo trattare, in generale, le funzioni di due variabili; ci occuperemo soltanto delle funzioni espresse da polinomi di primo grado in due variabili, cioè
delle funzioni del tipo:
(1) f (x, y) = a x + b y + c.
1.3. CURVE DI LIVELLO
5
z
z0= f(x0 , y0 )
y0
y
x0
A
x
Figura 1.2: Grafico di una funzione di due variabili
Analogamente al caso delle funzioni espresse da polinomi di primo grado in una
variabile:
g(x) = m x + b,
il cui grafico è una retta del piano, si dimostra che il grafico di una funzione di tipo
(1) è un piano dello spazio R3 .
Per disegnare il grafico di una funzione di due variabili possiamo utilizzare il foglio
elettronico. Per dettagli vedere il file ProgLin.xls, foglio grafico di funzioni, in
cui si trovano i grafici delle funzioni f1 , f2 ,f3 e quello della funzione f del paragrafo
1.
Osservazione – Si possono definire anche le funzioni di n variabili reali come funzioni
definite in un sottoinsieme A di Rn ed a valori reali. Si ottengono funzioni del tipo:
f:
A
→
R
(x1 , x2 , . . . , xn ) 7→ f (x1 , x2 , . . . , xn )
Osserviamo che (x1 , x2 , . . . , , xn ) è un vettore di Rn . Nel caso n = 2 otteniamo
le funzioni di due variabili. L’analisi delle funzioni di più variabili non differisce
sostanzialmente rispetto a quella per funzioni di due variabili, però se n > 2 è
impossibile tracciarne il grafico.
1.3
Curve di livello
In cartografia le curve di livello rappresentano l’insieme di tutti i punti della superficie terrestre che si trovano ad una stessa quota. Per esempio, nella figura 1.3 sono
rappresentate le curve di livello di un’isola.
6
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
Figura 1.3: Curve di livello di un’isola, con la quota espressa in metri
Le curve di livello aiutano a capire come è fatta la superficie, grafico di una funzione
di due variabili. Sono le curve che si ottengono intersecando il grafico della funzione
con piani paralleli al piano x y.
Se P ≡ (x, y, z) ∈ R3 , x si chiama ascissa di P , y ordinata di P e z quota di P .
Un piano parallelo al piano x y, che si trova a quota k è caratterizzato dal fatto
che un suo generico punto P ha ascissa e ordinata qualunque, la quota deve essere
necessariamente k, cioè P ≡ (x, y, k); pertanto tale piano è l’insieme:
{(x, y, z) | z = k}.
Quindi, in R3 , l’equazione che caratterizza il piano a quota k, parallelo al piano x y,
è:
z = k.
Le curve di livello di una funzione
z = f (x, y)
si ottengono pertanto intersecando il grafico della funzione con il pianoz = k e di
conseguenza sono fornite dal sistema:
z = f (x, y)
z= k
cioè
f (x, y) = k.
Quindi l’insieme delle curve di livello è fornito dal grafico delle funzioni (in una
variabile), al variare del parametro k:
{f (x, y) = k | k ∈ R}
1.3. CURVE DI LIVELLO
7
Esempio – 1. Consideriamo la funzione
f (x, y) = 2x + 3y.
Per disegnare le curve di livello di f dobbiamo intersecare il grafico di f con piani
paralleli al piano x y. Dobbiamo pertanto studiare:
z = 2x + 3y
z= k
che fornisce:
2x + 3y = k.
Osserviamo che, al variare di k ∈ R , 2x + 3y = k è una famiglia di rette (tra loro
parallele). Infatti, ricavando y possiamo scrivere
2
k
y =− x+ .
3
3
Al variare di k ∈ R, otteniamo:
se k = 0, allora y = − 23 x,
se k = 1, allora y = − 23 x + 13 ,
se k = 2, allora y = − 23 x + 23 ,
...
se k = −1, allora y = − 32 x − 13 ,
se k = −2, allora y = − 23 x − 23 ,
...
y
x
k=4
k=3
k=2
k=0
k=1
Figura 1.4: Curve di livello della funzione f (x, y) = 2x + 3y
8
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
Le curve di livello della funzione f sono quindi la famiglia di rette il cui grafico è
riportato nella figura 1.4.
Le curve di livello ci fanno capire che il grafico della funzione è un piano e come tale
è disposto nello spazio cartesiano, analogamente a come le curve di livello ci fanno
capire l’andamento di una certa zona della superficie terrestre.
Dalle curve di livello capiamo che il piano, grafico della funzione f (x, y) = 2x + 3y,
interseca il piano x y secondo la retta y = − 32 x, (k = 0) poi cresce in direzione
Nord-Est.
Ovviamente la funzione f (x, y) non ha massimo o minimo in tutto R2 , ma può
averne se limitiamo il dominio di f .
Nella programmazione lineare, come visto nell’esempio introduttivo, si tratta di
massimizzare o minimizzare funzioni lineari, soggette a vincoli.
1.4
Disequazioni lineari in due variabili
Per comprendere il significato geometrico dei vincoli in un problema di programmazione lineare, bisogna capire come è fatto l’insieme delle soluzioni di una disequazione
del tipo
(1) a x + b y + c ≥ 0 (≤ 0).
Sappiamo che l’insieme di tutti e soli i punti che soddisfano l’equazione:
(2)
a x + b y + c = 0,
sono i punti di una retta del piano. L’equazione (2) può essere risolta nel seguente
modo,
b y = −a x − c,
ovvero, se b 6= 0
c
a
y =− x− .
b
b
Ponendo:
m=−
a
b
,
c
p=− ,
b
l’equazione (2) può essere scritta :
y = m x + p.
Quindi la disequazione (1) può essere scritta come
(4) y ≥ m x + p.
1.4. DISEQUAZIONI LINEARI IN DUE VARIABILI
9
y
0
-p/m
x
p
Figura 1.5: Grafico della retta y=mx+p
Poichè l’equazione (3) è rappresentata dalla retta nel piano
l’insieme
{(x, y) | y ≥ m x + p}
è l’insieme dei punti del piano che si trovano sopra la retta, compresa la retta.
Ovviamente se avessimo avuto la disuguaglianza in senso stretto, l’insieme:
{(x, y) | y > m x + p},
sarebbe stato l’insieme dei punti del piano che si trovano sopra la retta, esclusa la
retta.
Se ci fosse stata la disuguaglianza inversa, l’insieme:
{(x, y) | y ≤ m x + p},
sarebbe stato l’insieme dei punti al di sotto della retta, compresa la retta, mentre,
se la disuguaglainza fosse stata in senso stretto, la retta sarebbe stata esclusa.
Esempio – 1. Risolviamo la disequazione
x + y − 3 ≤ 0.
Ricavando y possiamo scrivere:
y ≤ −x + 3,
le cui soluzioni sono fornite da tutti i punti al di sotto della retta di equazione
y = −x + 3 , compresa la retta.
Indicando con A tale sottoinsieme di R2 , abbiamo che
A = {(x, y) | y ≤ −x + 3}.
10
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
y
3
A
3
0
x
Figura 1.6:
Nel disegno, per indicare A abbiamo escluso il suo complementare.
Ovviamente, se dobbiamo risolvere la disequazione di segno opposto:
x + y − 3 ≥ 0,
abbiamo
y ≥ −x + 3,
le cui soluzioni sono l’insieme
B = {(x, y) | y ≥ −x + 3},
l’insieme dei punti al di sopra della stessa retta del caso precedente (compresa la
retta).
y
3
B
3
0
Figura 1.7:
L’insieme delle soluzioni della disequazione:
y < −x + 3,
x
1.4. DISEQUAZIONI LINEARI IN DUE VARIABILI
11
è
C = {(x, y) | y < −x + 3},
l’insieme dei punti al di sotto della retta, esclusa la retta.
Nei problemi di PL si ha sempre più di un vincolo, quindi bisogna capire che cosa
significa risolvere due (o più) disequazioni lineari in due variabili.
Date due disequazioni lineari (cioè dato un sistema di disequazioni):
ax + by + c ≥ 0
a0 x + b 0 y + c 0 ≥ 0
risolverle contemporaneamente significa trovare i punti del piano cartesiano che le
soddisfano entrambe. Se indichiamo con A l’insieme delle soluzioni della prima e
con A0 l’insieme delle soluzioni della seconda, cioè:
A = {(x, y) | ax + by + c ≥ 0},
A0 = {(x, y) | a0 x + b0 y + c0 ≥ 0},
l’insieme dei punti del piano che le soddisfa entrambe è:
A ∩ A0 .
Lo stesso ragionamento si può fare se abbiamo più di due disequazioni.
Esempio – 2. Vogliamo risolvere il sistema di disequazioni:
y ≤ −x + 3
y ≥ − x2 − 1
La prima disequazione è verificata nell’insieme:
A = {(x, y) | y ≤ −x + 3},
(cioè nell’insieme dei punti del piano al di sotto della retta y = −x + 3, compresa la
retta), mentre la seconda nell’insieme:
x
B = {(x, y) | y ≥ − − 1},
2
(cioè nell’insieme dei punti del piano al di sopra della retta y = − x2 − 1, compresa
la retta). Per fare graficamente l’intersezione tra A e B in maniera più significativa,
escludiamo il complementare di A ed il complementare di B. Quello che resta è
A ∩ B (legge di De Morgan della teoria degli insiemi).
12
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
y
3
A B
U
2
P
x
3
-1
Figura 1.8:
Osservazione – 1. Per trovare le coordinate di P , punto di intersezione tra la retta
y = −x + 3 e la retta y = − x2 − 1, basta risolvere il sistema:
y = −x + 3
y = − x2 − 1
La soluzione è 83 , 13 , che sono quindi le coordinate di P .
Se alle condizioni espresse dal sistema:
y ≤ −x + 3
y ≥ − x2 − 1
aggiungiamo le condizioni che le variabili x e y devono essere non negative (cioè
maggiori o uguali a zero), dobbiamo aggiungere al sistema le condizioni:
x≥0 ,
y ≥ 0.
Queste relazioni in PL, si chiamano vincoli di non negatività.
Dal punto di vista geometrico questo significa escludere sia i punti in cui x è negativo
(II e III quadrante del piano cartesiano), sia i punti in cui y è negativo (III e IV
quadrante del piano cartesiano). Quindi, di fatto, il sistema
y ≤ −x + 3
y ≥ − x2 − 1
deve essere preso in considerazione soltanto nel I quadrante.
Quindi l’insieme delle soluzioni del sistema

−x + 3
 y≤
y≥
− x2 − 1

x≥0
, y≥0
1.4. DISEQUAZIONI LINEARI IN DUE VARIABILI
13
y
3
P
C
2
x
3
-1
Figura 1.9:
è fornito dall’insieme C della figura 1.9.
2. Siamo passati dalla (1) alla (3) supponendo, nella (1), b 6= 0. Se b = 0 , la (1)
diventa
c
ax + c ≥ 0 ⇒ x ≥ − .
a
c
Indicando con k = − a , di tratta di individuare l’insieme:
A = {(x, y) | x ≥ k}.
Tale insieme è l’insieme dei punti che si trovano a destra della retta parallela all’asse
y, che interseca l’asse x nel punto a distanza k dall’origine.
Se ci fosse stata la disuguaglianza opposta, avremmo considerato i punti a sinistra
della retta.
y
A
0
k
Figura 1.10:
x
14
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
1.5
Risoluzioni grafica di un problema di PL
Utilizzando le curve di livello possiamo visualizzare il grafico di una funzione lineare
di due variabili e risolvendo delle disequazioni in R2 , possiamo visualizzare un certo
sottoinsieme del piano cartesiano in cui ci interessa massimizzare (o minimizzare) la
funzione.
Questo è l’approccio geometrico alla risoluzione di un problema di programmazione
lineare.
Esempio – 1. Vogliamo massimizzare la funzione
f (x, y) = 2 x + 3 y
tenendo conto dei vincoli

 x≤
y≤

x≥0 ,
12
10
y≥0
Nel paragrafo 3 abbiamo disegnato le curve di livello della funzione f (x, y). Sappiamo che sono
{f (x, y) = k | k ∈ R},
cioè l’insieme di tutte le rette
{2 x + 3 y = k |k ∈ R}.
I vincoli ci inviduano il seguente sottoinsieme A del piano cartesiano
L’andamento delle curve di livello fa capire che il piano, che tocca l’origine nel punto
(0, 0), ha un minimo in (0, 0) e raggiunge il massimo nel punto (12, 10).
1.6
Esercizi proposti
1. – Disegnare, utilizzando Excel, il grafico delle funzioni di due variabili:
1. f (x, y) = 5x − 7y + 2, con x ∈ [−5, 5] e y ∈ [−5, 5].
2. f (x, y) = −4x + 2y, con x ∈ [−4, 4] e y ∈ [−5, 5].
3. f (x, y) = 2x3 − 3y 3 , con x ∈ [−5, 5] e y ∈ [−5, 5].
4. f (x, y) = 2x3 − 3y 3 , con x ∈ [−5, 5] e y ∈ [−5, 5].
5. f (x, y) = 2x2 − 3y 2 + y, con x ∈ [−5, 5] e y ∈ [−5, 5].
1.6. ESERCIZI PROPOSTI
15
y
10
A
k=2
k=4
0
12
x
Figura 1.11:
2. – Disegnare le curve di livello delle seguenti funzioni lineari di due variabili:
1. f (x, y) = 5x − 7y + 2.
2. f (x, y) = −4x + 2y.
3. f (x, y) = x + 2y.
4. f (x, y) = 2000x + 1000y.
5. f (x, y) =
x
4
− y.
3. – Risolvere graficamente le seguenti disequazioni lineari di due variabili:
1. x − y ≤ 200.
2. x + 2y ≤ 400.
3. x − 2y ≥ 80.
4. x − y ≤ 160.
5. −120x + 60y ≥ 30.
4. – Risolvere graficamente i seguenti sistemi di disequazioni lineari di due variabili:
16
CAPITOLO 1. INTRODUZIONE ALLA PROGRAMMAZIONE LINEARE
1. x − y < 200, x + 2y ≤ 400, x > 0, y ≥ 0.
2. x − 2y ≥ 80, x − y ≤ 160.
3. x − 2y ≥ 80, x − y ≤ 160, x ≥ 0, y ≥ 0.
4. y ≤ 50, x + y ≤ 70, x ≥ 0, y ≥ 0.
Capitolo 2
Risoluzione di problemi di PL
2.1
Terminologia e notazioni
Nel capitolo precedente abbiamo introdotto e risolto geometricamente un problema
di programmazione lineare (PL) per funzioni in due variabili.
Abbiamo visto che un problema di PL consiste nel trovare il massimo (o il minimo)
per una funzione lineare:
z = f (x, y) = ax + by,
soggetta a vincoli espressi da disequazioni lineari nelle variabili x e y,
Nella terminologia usuale della PL, la funzione f (x, y) si chiama funzione obiettivo
e il sottoinsieme del piano cartesiano individuato dai vincoli si chiama insieme
poliedrale. Si può facilmente provare che tale insieme è convesso. Ricordiamo
che un insieme è convesso se due qualunque punti dell’insieme possono essere uniti
da un segmento che appartiene interamente all’insieme.
Un qualunque punto nell’insieme poliedrale convesso individuato dai vincoli è chiamato una soluzione ammissibile. Se un tale punto non esiste, si dice che il
problema di PL non ha soluzione.
In un problema di PL dobbiamo trovare la soluzione ammissibile che massimizza (o
minimizza) la funzione obiettivo. Se nessuno dei suoi punti soddisfa questa condizione, si dice che il problema di PL non ha soluzioni. Una soluzione di un problema
di PL è un punto che massimizza (o minimizza) la funzione obiettivo.
Si dimostra che se un problema di PL ha soluzione, questa si trova in un vertice
della regione poliedrale convessa individuata dai vincoli e che, se un problema di
programmazione lineare ha soluzioni multiple, almeno una di esse si trova in un
17
18
CAPITOLO 2. RISOLUZIONE DI PROBLEMI DI PL
Figura 2.1: Insiemi convessi e non convessi
vertice della regione poliedrale convessa delle soluzioni ammissibili. In entrambi i
casi il valore corrispondente della funzione obiettivo è unico.
In una situazione più generale la funzione obiettivo è una funzione lineare di n
variabili:
n
X
f (x1 , x2 , . . . , xn ) = c1 x1 + c2 x2 + · · · + cn xn =
ci x i ,
i=1
ed i vincoli sono espressi da diseguaglianze lineari del tipo:
n
X
aij xj R bi ,
per i = 1, . . . , m.
i=1
Osserviamo che, indicando con:
x = (x1 , x2 , . . . , xn ),
c = (c1 , c2 , . . . , cn ),
ai = (ai1 , ai2 , . . . , ain ),
il problema di PL può essere scritto molto semplicemente utilizzando il prodotto
scalare tra vettori nel seguente modo:
max c · x,
(oppure min c · x),
a i · x R bi ,
per i = 1, 2, . . . , m.
con i vincoli:
Trascurando il teorema di esistenza per le soluzioni di un problema di PL, nel paragrafo successivo vedremo come risolvere problemi concreti in due o più variabili
utilizzando il Risolutore di Excel.
2.2. USO DEL RISOLUTORE DI EXCEL NEI PROBLEMI DI PL
2.2
19
Uso del risolutore di Excel nei problemi di PL
Il Risolutore di Excel è disponibile nel menù Strumenti, (dopo eventuale attivazione, che si può fare, sempre nel menù Strumenti, Componenti aggiuntive,Componente
aggiuntiva Risolutore) ed è strutturato per risolvere in maniera semplice e rapida un problema di PL. Illustreremo il funzionamento del Risolutore attraverso
alcuni esempi.
2.2.1
L’esempio del paragrafo 1.1
Risolveremo, prima geometricamente e poi con il Risolutore di Excel, il problema
introduttivo di cui abbiamo parlato nel paragrafo 1.1.
Ricordiamo che dobbiamo risolvere il problema (qui useremo la notazione x = xA ,
y = xB ):
max (80 x + 160 y),
con in vincoli:
1. x + y ≤ 300
2. y ≤ 31 x
3. x ≥ 0,
y≥0
I vincoli ci forniscono la regione ammissibile
A = {(x, y)|y ≤ −x + 300}
\
\
1 \
{(x, y)|y ≤ x} {(x, y)|x ≥ 0} {(x, y)|y ≥ 0},
3
che è riportata nella figura 2.2.
Le linee di livello della funzione obiettivo:
f (x, y) = 80x + 160y
si ottengono come l’insieme delle rette:
80x + 160y = k,
al variare di k ∈ R,
1
k
y =− x+
,
2
160
al variare di k ∈ R.
e quindi:
20
CAPITOLO 2. RISOLUZIONE DI PROBLEMI DI PL
Figura 2.2: Regione ammissibile per il problema di PL del paragrafo 1.1
Figura 2.3: Linee di livello e soluzione grafica
2.2. USO DEL RISOLUTORE DI EXCEL NEI PROBLEMI DI PL
21
Riportando le linee di livello nella regione ammissibile, risulta geometricamente che
la funzione f (x, y) assume il valore massimo nel punto P (225, 75), punto di intersezione delle rette che, nel primo quadrante, individuano la regione ammissibile.
(vedere la figura 2.3).
Vediamo ora come possiamo scrivere il nostro problema in un foglio elettronico.
Figura 2.4: Come scrivere un problema di PL
Riportiamo i dati come indicato nella figura 2.4. In particolare, nelle celle B5 e B6
scriviamo i valori delle variabili in cui, usando il risolutore, troveremo la soluzione
del problema. Quando impostiamo il problema possiamo scrivere valori arbitrari
(per esempio 1, 1, come nella figura 2.4) oppure lasciarle vuote. Nelle celle D5 e D6
scriviamo i corrispondenti coefficienti delle variabili nella funzione obiettivo. Nella
cella G5 scriviamo la funzione obiettivo come prodotto scalare tra i vettori (B5, B6)
e (D5, D6), utilizzando, come già abbiamo fatto molte volte nella parte di Calcolo
finanziario, la funzione di Excel MATRICE.SOMMA.PRODOTTO.
Scriviamo ora i vincoli, ricordando che anche essi possono essere espressi come un
prodotto scalare, come visto nel paragrafo precedente. Nelle celle B9 e B10 scriviamo
i coefficienti del vincolo 1. e nella cella B11 il primo membro del vincolo 1., come
prodotto scalare tra i vettori (B5, B6) e (B9, B10). Nella cella B13 scriviamo il
secondo membro del vincolo 1.. Ripetiamo la stessa operazione anche per il secondo
vincolo, scrivendo i coefficienti nelle celle E9 e E10 (osservando che il vincolo 2. può
essere scritto come x3 − y ≥ 0)), il primo membro nella cella E11 (come prodotto
scalare tra i vettori (B5, B6) e (E9, E10)) e il secondo membro nella cella E13.
Possiamo ora aprire, dal menù Strumenti il Risolutore e procedere, nella finestra
che si apre, nel seguente modo.
22
CAPITOLO 2. RISOLUZIONE DI PROBLEMI DI PL
1. Imposta cella obiettivo al valore → porre il cursore ed evidenziare la cella
G5.
2. Uguale a → scegliere Max.
3. Cambiando le celle → porre il cursore ed evidenziare le celle in cui sono i
valori delle variabili (B5:B6).
4. Dobbiamo ora aggiungere i vincoli. Premere il pulsante Aggiungi e nel menù
che compare (Aggiungi vincolo), selezionare, sotto Riferimento il primo
membro del vincolo, cioè la casella B11, poi, nel menù a tendina centrale la
disuguaglianza tra primo e secondo vincolo (nel nostro caso ≤) e infine, sotto
Vincolo, selezionare il secondo membro del vincolo (nel nostro caso la casella
B13). Dobbiamo poi ripetere la stessa procedura per gli altri vincoli, iniziando
con Aggiungi per ogni vincolo. I vincoli di non negatività (x ≥ 0, y ≥ 0) non è
necessario metterli in questa sezione, come vedremo al punto successivo. Dopo
aver introdotto tutti i vincoli, premere il pulsante OK.
5. Premere ora il pulsante Opzioni e nel menù che si apre (Opzioni del risolutore)
selezionare le opzioni: Presupponi modello lineare e Presupponi non negativo
e quindi premere OK.
6. Ritornando al menù principale del risolutore, premere il pulsante Risolvi e il
risolutore indicherà, nelle celle B5 e B6 del file la soluzione al nostro problema.
Premendo il pulsante OK del menù che compare, il problema è risolto. Se
selezioniamo di nuovo il Risolutore, sullo schermo troveremo qualche cosa di
simile alla figura 2.4.
Osserviamo che la soluzione che troviamo con il Risolutore di Excel è la stessa
che abbiamo trovato geometricamente.
2.2.2
Esempio con soluzioni multiple
Vogliamo risolvere il problema di PL:
max(3x + 2y),
con i vincoli: 3x + 2y ≤ 120, x + y ≤ 50, x ≥ 0, y ≥ 0.
La regione ammissibile è riportata nella figura 2.6.
Disegnando le linee di livello della funzione obiettivo f (x, y) = 3x + 2y risulta che
ogni punto del segmento P B massimizza la funzione.
Svolgendo l’esercizio con il risolutore di Excel viene fornita come soluzione il punto
B.
2.2. USO DEL RISOLUTORE DI EXCEL NEI PROBLEMI DI PL
Figura 2.5: Il risolutore di Excel
Figura 2.6: Regione ammissibile per il problema di PL del paragrafo 2.2.2
23
24
2.2.3
CAPITOLO 2. RISOLUZIONE DI PROBLEMI DI PL
Esempio con regione ammissibile vuota
Consideriamo il seguente problema di PL:
max(6x + 4y),
con i vincoli: −x − 2y ≤ 2, 2x + 2y ≤ 3, x ≥ 0, y ≥ 4.
Intersecando i quattro sottoinsiemi del piano cartesiano individuati dai vincoli si
ottiene l’insieme vuoto, quindi il problema di PL non ha soluzioni.
2.2.4
Problemi di programmazione lineare intera
Spesso un problema di programmazione lineare ha una soluzione razionale che non
può essere accettata perché intrinsecamente la soluzione del problema deve essere
fornita da numeri interi. Se, per esempio, il problema introduttivo, risolto in 2.2.1,
avesse fornito soluzioni espresse da numeri non interi, non avremmo potuto accettarle, perché il numero di camere da costruire in una struttura alberghiera non può
essere che intero. Vediamo ora con un esempio quale è la procedura da seguire, sia
dal punto di vista geometrico che con il risolutore di Excel.
Risolviamo il problema di PL:
max(x + 2y),
con i vincoli: y ≤ 7, 2x + 2y ≤ 29, x ≥ 0, y ≥ 0.
Disegnando la regione ammissibile e le linee di livello della funzione obiettivo, come
nella figura 2.7, si vede subito che il punto P = (15/2, 7) è soluzione del nostro
problema di PL.
Osserviamo che la soluzione del nostro problema di PL non è fornita da numeri
interi. Se fossimo vincolati dal fatto che la soluzione fosse espressa da numeri interi,
dal punto di vista geometrico, dovremmo prendere in considerazione soltanto i punti
interi nella regione ammissibile, come riportato nella figura 2.8, e dovremmo cercare
quale è l’ultimo punto del reticolo raggiunto dalle linee di livello della funzione
obiettivo. Dal disegno è evidente che la soluzione ottimale intera è fornita dal punto
di coordinate (7,7).
Per risolvere con il risolutore di Excel il problema, basta aggiungere, nei vincoli
del risolutore, che ogni variabile sia intera, selezionando una variabile per volta e
scegliendo int tra le relazioni tra primo e secondo membro del vincolo.
Un ulteriore interessante esempio di programmazione lineare intera, la cui soluzione
è consigliata al lettore, è il seguente:
min(3x + 4y),
2.2. USO DEL RISOLUTORE DI EXCEL NEI PROBLEMI DI PL
Figura 2.7: Regione ammissibile con soluzione non intera
Figura 2.8: Regione ammissibile con il reticolo degli interi
25
26
CAPITOLO 2. RISOLUZIONE DI PROBLEMI DI PL
con i vincoli: x + y ≤ 10, 2x + y ≥ 10, x + 2y ≥ 10, x ≥ 0, y ≥ 0.
Risolvendo il problema, sia graficamente che con il risolutore di Excel, si trova che il
punto P (10/3, 10/3) è soluzione del problema di PL non intera. Se aggiungiamo il
vincolo che le soluzioni devono essere intere, si ottiene come soluzione l’unico punto
Q(4, 3). Cambiando la funzione obiettivo con g(x, y) = 3x + 3y si trovano due
soluzioni intere equivalenti.
2.2.5
Formalizzazione di un problema di PL
Un’azienda produce due tipi di borse: un modello economico e uno di lusso. Il modello economico richiede due ore di lavoro a macchina e due ore di lavoro di finitura
a mano, mentre quello di lusso richiede lo stesso tempo di lavorazione a macchina,
ma quattro ore di finitura a mano. L’azienda ha due addetti alle macchine e tre addetti ala finitura. Ciascun addetto lavora 40 ore a settimana. Ogni borsa economica
fornisce un profitto di 3e e ogni borsa di lusso un profitto di 4e. Supponendo che
ogni oggetto sia venduto, quanto oggetti devono essere prodotti per massimizzare il
profitto?
Indicando con x e con y il numero di borse di tipo economico e di lusso, rispettivamente, la funzione obiettivo da massimizzare è
min(3x + 4y).
I vincoli sono espressi dal numero di ore lavorative complessive del dipendenti dell’azienda. Poiché ci sono 2 addetti alle macchine e 3 addetti alla finitura i vincoli sono:
2x + 2y ≤ 80, 2x + 4y ≤ 120, x ≥ 0, y ≥ 0 e ovviamente le soluzioni devono essere
intere. Risolvendo il problema si trova che x = 20 e y = 20. In corrispondenza di
questo livello di produzione il profitto è 140e.
2.2.6
Esempio con più di due variabili
La procedura introdotta nell’esempio precedente ci consente di risolvere problemi
di PL con più di due variabili; ovviamente questi sono i casi che si presentano
normalmente e che è più interessante saper risolvere. Consideriamo il seguente
problema e vediamo come possiamo formalizzarlo e quindi risolverlo.
Un ristorante ha necessità di un numero diverso di addetti per ogni giorno della
settimana e precisamente: il lunedì, il martedì e il mercoledì devono essere presenti
10 addetti, il giovedì 12, il venerdì 14, il sabato 15 e la domenica 11. Gli accordi
sindacali prevedono che ogni addetto lavori 5 giorni consecutivi e riposi altri due.
2.2. USO DEL RISOLUTORE DI EXCEL NEI PROBLEMI DI PL
27
Una volta stabilito che si tratta di un problema di PL, vogliamo trovare il numero
minimo degli addetti necessari al funzionamento della struttura, avendo anche a
disposizione un criterio per stabilire le modalità di servizio.
Indichiamo con xi il numero degli addetti che inizia a lavorare l’i–esimo giorno della
settimana (con i = 1, 2, . . . , 7 e i = 1: lunedì).
La funzione da minimizzare è:
z=
7
X
xi ,
i=1
soggetta ai vincoli:
x1
x1
x1
x1
x1
+
+
+
+
x2
x2
x2
x2
x2
+
+
+
+
+
x3
x3
x3
x3
x3
+ x4 + x5 + x6
+ x5 + x6
+ x6
+ x4
+ x4 + x5
+ x4 + x5 + x6
+ x4 + x5 + x6
+
+
+
+
x7
x7
x7
x7
+ x7
≥
≥
≥
≥
≥
≥
≥
10
10
10
12
14
15
11
xi ≥ 0, i = 1, 2, . . . , 7.
Osserviamo che la prima riga della tabella precedente rappresenta il vincolo del
lunedì, la seconda riga quello del martedì e così via; inoltre la soluzione del nostro
problema deve essere fornita da numeri interi.
Per scrivere il problema nel foglio elettronico, possiamo procedere analogamente all’esempio 1., scrivendo un vettore per le variabili (B4:B10), uno per i coefficienti delle
incognite (E4:E10)(in questo caso tutti uguali a 1), la funzione obiettivo come prodotto scalare tra i due vettori sopra scritti (MATR.SOMMA.PRODOTTO(B4:B10;E4:E10)).
Bisogna poi scrivere i 7 vincoli, riportando il primo membro del primo vincolo nella casella B21 (come prodotto scalare MATR.SOMMA.PRODOTTO(B4:B10;B14:B20)), il
secondo membro nella casella B23 e ripetendo la stessa operazione per gli altri 6
vincoli. Si precede quindi con il Risolutore, avendo cura di procedere come nel
caso dell’esempio 1. specificando la cella da minimizzare e immettendo i 7 vincoli,
scegliendo le opzioni Presupponi modello lineare e Presupponi non negativo.
Il risultato che si ottiene è illustrato nella figura 2.9.
La soluzione ci dice che sono necessarie almeno 16 unità di personale per risolvere il nostro problema e ci fornisce anche indicazioni su come organizzare i turni
settimanali.Osserviamo che la soluzione che si ottiene è già in forma intera.
28
CAPITOLO 2. RISOLUZIONE DI PROBLEMI DI PL
Figura 2.9: Soluzione dell’esempio 2.
2.3
Esercizi proposti
1. – Risolvere geometricamente e con il risolutore di Excel i seguenti problemi
di PL. Nel caso in cui le eventuali soluzioni non siano intere, risolvere anche il
corrispondente problema di PL intera.
1. min(x + 2y) con i vincoli: x + y ≥ 1, 2x + 4y ≥ 3, x ≥ 0, y ≥ 0.
2. max(5x + 7y) con i vincoli: x + y ≥ 2, 2x + 3y ≥ 12, 3x + y ≤ 12, x ≥ 0, y ≥ 0.
3. min(2x + 3y) con i vincoli: x ≥ 0, y ≥ 0.
4. min(x + 2y) con i vincoli: x + y ≥ 2, x ≥ 0, y ≥ 0.
5. max(1000x + 2000y) con i vincoli: −x + 2y ≤ 160, 2x − y ≤ 80, x ≥ 0, y ≥ 0.
6. max(100x + 10y) con i vincoli: −y ≤ 50, x + y ≤ 70, x ≥ 0, y ≥ 0.
7. max(80x + 40y) con i vincoli: x − y ≥ −50, x ≤ 40, x ≥ 0, y ≥ 0.
2. – Massimizzare e minimizzare la funzione f (x, y) = 5y + 2y, soggetta ai vincoli:
x + y ≤ 10, 2x + y ≥ 10, x + 2y ≥ 10, x ≥ 0, y ≥ 0.
3. – Una dieta contiene almeno 400 unità di vitamine, 500 unità di minerali e 1400
calorie. Sono disponibili due cibi C1 e C2 che costano, rispettivamente, 0,05e e
0,03e per unità. Una unità di cibo C1 contiene 2 unità di vitamine, 1 unità di
2.3. ESERCIZI PROPOSTI
29
minerali e 4 calorie; una unità di cibo C2 contiene 1 unità di vitamine, 2 unità di
minerali e 4 calorie. Trovare la dieta a costo minimo che consiste nella miscela di
questi due cibi e che soddisfa alle richieste nutrizionali minime.
4. – Un villaggio turistico, che dispone di 100 camere doppie, vuole proporre dei
pacchetti per incoraggiare le visite in un periodo in cui non ci sono troppe presenze,
rivolti a due tipologie di clienti: quelli inviati da viaggi organizzati, d’ora in poi
chiamati “organizzati” e gli sposi in viaggio di nozze, d’ora in poi chiamati “sposi”.
I prezzi stabiliti sono a persona. Il prezzo del soggiorno in camera doppia è di 850e
a settimana, il supplemento per la doppia uso singola è di 300e a settimana, quello
per la settimana aggiuntiva è di 500e e per gli sposi è previsto uno sconto del 15%.
La direzione del villaggio prevede che:
1. una sola settimana sarà scelta dal 40% degli organizzati,
2. il 30% degli organizzati sceglierà la singola,
3. 12 organizzati soggiorneranno per due settimane in doppia,
4. 10 organizzati staranno per due settimane in singola,
5. il numero massimo degli organizzati accettati sarà 230,
6. il 40% degli sposi prolungherà il viaggio per due settimane,
7. gli sposi saranno tra 100 e 200.
Determinare il numero di soggiorni settimanali da vendere nelle due categorie per
massimizzare il ricavo totale della struttura.