duzione alla programmazione lineare) negli anni accademici dal 2008-2009 al ...
Per la comprensione completa di questi appunti, bisogna usare il file Excel.
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.