Scarica Esercizi di Ottimizzazione Lineare: Metodo del Simplesso e più Dispense in PDF di Matematica Generale solo su Docsity!
IL METODO DEL SIMPLESSO
Il metodo del simplesso si utilizza nella soluzione dei problemi di Programmazione Lineare, in
particolare per quelli che abbiano più di due variabili e che non possano essere ricondotti a problemi
di Programmazione Lineare in due variabili, perché se le variabili sono due o sono riconducibili a
due, si preferisce sempre il metodo grafico o quello algebrico.
Problemi di massimo :
si schematizza il problema riconoscendo qual è la funzione da massimizzare e scrivendo le
equazioni e le disequazioni che rappresentano i vincoli
se il sistema dei vincoli è espresso nella forma
x 0 x 0 x 0
a x a x b
a x a x b
a x a x b
1 2 k
k 1 1 kn n k
21 1 2 n n 2
11 1 1 n n 1
si procede così:
- si inseriscono le cosiddette variabili di scarto ( s 1 , s 2 ed s 3 ) in modo da far diventare il
sistema un sistema di equazioni:
x 0 x 0 x 0
x 20
4 x 2 x 3 x 120
x x x 40
vincoli
funzionedamassimizzare z 300 x 200 x 350 x
1 2 3
3
1 2 3
1 2 3
1 2 3
diventa
x 0 x 0 x 0 s 0 s 0 s 0
x s 20
4 x 2 x 3 x s 120
x x x s 40
vincoli
funzionedamassimizzare z 300 x 200 x 350 x 0 s 0 s 0 s
1 2 3 1 2 3
3 3
1 2 3 2
1 2 3 1
1 2 3 1 2 3
- si costruisce una tabella :
coefficienti z base X 1 X 2 X 3 S 1 S 2 S 3 soluzioni rapporti
0 S 1 1 1 1 1 0 0 40 40/1= 0 S 2 4 2 3 0 1 0 120 120/3=
0 S 3 0 0 1 0 0 1 20 20/1= 20
coef. z 300 200 350 0 0 0 z 0 0 0 0 0 0 0 ∆∆∆∆=z-coef. z -300^ -200^ -350^0 0
nella quale evidenziamo di rosso le colonne che rappresentano (con la matrice identità) la
prima soluzione ammissibile (o di base) e che corrispondono alla soluzione del sistema
scritto nella forma
3 3
2 1 2 3
1 1 2 3
s 20 x
s 120 4 x 2 x 3 x
s 40 x x x
z 0
s 1 40 s 2 120 s 3 20 x 1 x 2 x 3 0
La riga z si calcola facendo: [ 0 ⋅ 1 + 0 ⋅ 4 + 0 ⋅ 0 ] [ 0 ⋅ 1 + 0 ⋅ 2 + 0 ⋅ 0 ] [ 0 ⋅ 1 + 0 ⋅ 3 + 0 ⋅ 1 ]
ecc.
- si attiva una delle variabili non di scarto per migliorare la soluzione, cioè si fa entrare
una nuova colonna della matrice identità al posto di un’altra; si sceglie di attivare la
variabile x 3 perché nella riga ∆∆∆∆=z-coef. Z è quella che ha il valore più basso (-350) e, nel
disattivare una delle variabili attive, occorre fare attenzione che non diventi negativa
nessuna delle soluzioni: per questo e si disattiva la variabile s 3 che ha il rapporto più basso
e garantisce in tal modo la non negatività delle soluzioni.
Si procede così:
- si individua come posizione “pivot” la posizione a 33 dove c’è già 1
- si sottrae alla seconda riga la terza riga moltiplicata per 3 e alla prima riga la
terza riga in modo da ottenere 0 in tutta la colonna del “pivot”
coefficienti z base X 1 X 2 X 3 S 1 S 2 S 3 soluzioni
0 S 1 1-0 1-0 1-1 1-0 0-0 0-1 40- 0 S 2 4-0⋅ 3 2-0⋅ 3 3-1⋅ 3 0- 0 ⋅ 3 1- 0 ⋅ 3 0- 1 ⋅ 3 120-20⋅ 3 0 S 3 0 0 1 0 0 1 20 coef. z 300 200 350 0 0 0 z 0 0 0 0 0 0 0 ∆∆∆∆=z-coef. z -300 -200 -350 0 0 0
coefficienti z base X 1 X 2 X 3 S 1 S 2 S 3 soluzioni rapporti
0 S 1 1 1 0 1 0 -1 20 20/1=
0 S 2 4 2 0 0 1 -3 60 60/4= 15
350 X 3 0 0 1 0 0 1 20 (20/0=∞!)
coef. z 300 200 350 0 0 0 z 0 0 350 0 0 350 7000 ∆∆∆∆=z-coef. z -300 -200 0 0 0 350
la soluzione si può ancora migliorare, perché ci si ferma soltanto quando nella riga “ ∆∆∆∆=z-
coef. z” ci sono solo valori positivi o nulli. Attiviamo, quindi la variabile x 1 (che ha il
valore più basso -300) e disattiviamo la variabile s 2 che presenta il rapporto più basso:
- si evidenzia la posizione a 21 del “pivot” e si divide tutta la seconda riga per 4 in
modo da ottenere 1 nella posizione “pivot”
- si sottrae alla prima riga la seconda riga (si può lasciare invariata la riga 3 che ha
già lo 0 al posto a 31 ) in modo da ottenere 0 in tutta la colonna del “pivot”
coefficienti z base X 1 X 2 X 3 S 1 S 2 S 3 soluzioni
0 S 1 1-1 1-0,5 0-0 1-0 0-0,25 -1+0,75 20- 0 S 2 4/4=1 2/4=0,5 0/4=0 0/4=0 ¼=0,25 (^) -3/4=-0,75 60/4= 15 350 X 3 0 0 1 0 0 1 20 coef. z 300 200 350 0 0 0 z 0 0 350 0 0 350 7000 ∆∆∆∆=z-coef. z -300 -200 0 0 0 350
coefficienti z base X 1 X 2 X 3 S 1 S 2 S 3 soluzioni rapporti
0 S 1 0 0,5^0 1 -0,25 -0,25 5 5/0,5= 10
300 X 1 1 0,5 0 0 0,25 -0,75 15 15/0,5=
350 X 3 0 0 1 0 0 1 20 (20/0=∞!)
coef. z 300 200 350 0 0 0 z 300 150 350 0 75 125 11500 ∆∆∆∆=z-coef. z 0 -50 0 0 75 125
la soluzione si può ancora migliorare: attiviamo la variabile x 2 (che ha ancora il valore
negativo) e disattiviamo la variabile s 1 che presenta il rapporto più basso:
- si evidenzia la posizione a 12 del “pivot” e si divide tutta la seconda riga per 0,5 in
modo da ottenere 1 nella posizione “pivot”
- si sottrae alla seconda riga la prima riga ( si può lasciare invariata la riga 3 che
ha già lo 0 al posto a 32 ) in modo da ottenere 0 in tutta la colonna del “pivot”
coefficienti z base X 1 X 2 S 1 S 2 S 3 soluzioni rapporti 0 S 1 0 0 1 0,666 -1,333 6 2 x 1 1 0 0 0,444 0,444 10 1 x 2 0 1 0 -0,111 0,888 8 coef. z 2 1 0 0 0 - z 2 1 0 0,777 1,777 28 ∆∆ ∆∆=z-coef. z 0 0 0 0,777 1,777 33
il massimo della funzione z è z ( 10 ; 8 )= 33
N.B. Da ora in poi metteremo sempre anche lo zero nella cella destinata all’eventuale termine noto
Se il sistema dei vincoli ha disequazioni con il ≥ a volte si può moltiplicare a destra e
sinistra del segno ≥ per -1 e la disequazione diventa come le altre con il ≤; a volte questo
non si può fare perché nella colonna delle soluzioni verrebbe un valore negativo. In
questo caso per far diventare la disequazione col ≥ una equazione, non si aggiunge una
variabile di scarto positiva, bensì si toglie! Rimane, allora, da costruire la colonna
mancante della matrice identità:
z = 200 x 1 + 150 x 2 soggetta ai vincoli
1 2
1 2
1 2
1 2
x i
x x
x x
x x
x x
coefficienti z base X 1 X 2 S 1 S 2 S 3 S 4 soluzioni rapporti
0 S 1 3 2 1 0 0 0 180 0 S 2 1 2 0 1 0 0 100 0 S 3 1 -2 0 0 1 0 20 1 1 0 0 0 -1 10
coef. z 200 150 0 0 0 0 0 z ∆∆∆∆=z-coef. z
per costruire la colonna mancante della matrice identità (quella con 1 nella quarta riga) scegliamo la
colonna di x 1 (ma sarebbe indifferente scegliere la colonna x 2 che ha lo stesso rapporto)
coefficienti z base X 1 X 2 S 1 S 2 S 3 S 4 soluzioni rapporti 0 S 1 0 -1 1 0 0 3 150 50 0 S 2 0 1 0 1 0 1 90 90 0 S 3 0 -3 0 0 1 1 10 10 200 X 1 1 1 0 0 0 -1 10 - coef. z 200 150 0 0 0 0 0 z 200 200 0 0 0 -200 2000 ∆∆∆∆=z-coef. z 0 50 0 0 0 -200 2000
la prima soluzione ammissibile è allora ( 10 ; 0 )dove z = 2000 ; è una soluzione migliorabile;
scegliamo la colonna con il il ∆<0 inferiore agli altri… e continuiamo come sempre:
coefficienti z base X 1 X 2 S 1 S 2 S 3 S 4 soluzioni rapporti
0 S 1 0 8 1 0 -3 0 120 15 0 S 2 0 4 0 1 -1 0 80 20 0 S 4 0 -3 0 0 1 1 10 -3, 200 X 1 1 -2 0 0 1 0 20 - coef. z 200 150 0 0 0 0 0 z 200 -400 0 0 200 0 4000 ∆∆∆∆=z-coef. z 0 -550 0 0 200 0 4000
coefficienti z base X 1 X 2 S 1 S 2 S 3 S 4 soluzioni rapporti
150 X 2 0 1 0,125 0 -0,375 0 15 - 0 S 2 0 0 -0,5 1 0,5 0 20 40 0 S 4 0 0 0,375 0 -0,125 1 55 - 200 X 1 1 0 0,25 0 0,25 0 50 200 coef. z 200 150 0 0 0 0 0 z 200 150 68,75 0 -6,25 0 12250 ∆∆∆∆=z-coef. z 0 0 68,75 0 -6,25 0 12250
coefficienti z base X 1 X 2 S 1 S 2 S 3 S 4 soluzioni rapporti
150 X 2 0 1 -0,25 0,75 0 0 30 0 S 3 0 0 -1 2 1 0 40 0 S 4 0 0 0,25 0,25 0 1 60 200 X 1 1 0 0,5 -0,5 0 0 40 coef. z 200 150 0 0 0 0 0 z 200 150 62,5 12,5 0 0 12500 ∆∆∆∆=z-coef. z 0 0 62,5 12,5 0 0 12500
la soluzione ottimale si raggiunge in ( 40 ; 30 )dove la funzione raggiunge il suo massimo valore:
z = 12250
Se il sistema dei vincoli ha delle equazioni, si può diminuire il numero delle variabili
oppure procedere direttamente con il metodo del simplesso; se la funzione da
massimizzare è
z = 6 x 1 + 8 x 2 + 5 x 3 + 2 x 4 e i vincoli sono espressi dal sistema
x 0
x 2 x 6 x 15
2 x x x 6
2 x 2 x x 12
i
2 3 4
1 3 4
1 2 3
Si può porre x 4 = 2 x 1 + x 3 − 6 e riscrivere l’intero problema in tre variabili anziché in quattro:
z = 6 x 1 + 8 x 2 + 5 x 3 + 2 ( 2 x 1 + x 3 − 6 ) = 10 x 1 + 8 x 2 + 7 x 3 − 12 con i vincoli
( )
1 2 3
1 3
1 2 3
1 2 3
1 2 3
1 3
2 3 1 3
1 2 3
x x x
x x
x x x
x x x
x x x
x x
x x x x
x x x
Oppure si costruisce la tabella del simplesso nel solito modo:
coef z base x 1 x 2 x 3 x 4 s 1 s 2
sol. base rapporti 8 x 2 0 1 -1 0,5 0,5 0 3 - 6 x 1 1 0 0,5 -0,5 0 0 3 6 0 s 2 0 0 3 5,5 -0,5 1 12 4 coef z 6 8 5 2 0 0 0 z 6 8 -5 1 4 0 42 ∆∆^ ∆∆=z-coef. z^0 0 -10^ -1^4 0
Nella nuova tabella abbiamo ancora un ∆∆∆∆ negativo, quindi entra un altro pivot al posto di 3 con i
conti seguenti
coef z base x 1 x 2 x 3 x 4 s 1 s 2
sol. base rapporti 8 x 2 0+0 1+0 -1+1 0,5+(5,5)/3 0,5-0,5/3 0+1/3 3+4 - 6 x 1 1-0 0-0 0,5-10,5 -0,5-(5,5)/30,5 0+0,5/3*0,5 0 3 6 0 s 2 0/3 0/3 3/3 (5,5)/3 -0,5/3 1/3 12/3 4 coef z 6 8 5 2 0 0 0 z 6 8 -5 1 4 0 42 ∆∆ ∆∆=z-coef. z 0 0 -10 -1 4 0 42
e la tabella diventa
coef z base x 1 x 2 x 3 x 4 s 1 s 2
sol. base rapporti 8 x 2 0 1 0 2,333 0,333 0,333 7 6 x 1 1 0 0 -1,416 0,083 -0,166 1 5 x 3 0 0 1 1,833 -0,166 0,333 4 coef z 6 8 5 2 0 0 0 z 6 8 5 19,33 2,333 3,333 82 ∆∆ ∆∆=z-coef. z 0 0 0 17,33 2,333 3,333 82
La soluzione finale, pertanto, sarà: il massimo della funzione è rappresentato da z ( 1 ; 7 ; 4 )= 82
Problemi di minimo :
Si schematizza il problema riconoscendo qual è la funzione da minimizzare e scrivendo le equazioni
e le disequazioni che rappresentano i vincoli, quindi si procede così:
se la funzione da minimizzare è z = 8 x 1 + 4 x 2 + 2 x 3 e il sistema di vincoli è
x 0 x 0 x 0
x x 10
x 3 x 6
x 2 x x 14
1 2 3
1 3
2 3
1 2 3
- posso risolvere il problema come ho fatto prima, facendo attenzione che, trattandosi di un
minimo, alla riga “∆∆∆∆=z-coef. z” devono rimanere tutti negativi e non tutti positivi come nei
problemi di massimo:
coef. z base x 1 x 2 x 3 s 1 s 2 soluzioni rapporti
coef. z 8 4 2 0 0
z
come si può vedere non c’è nessuna colonna della matrice identità, quindi dobbiamo costruirla del
tutto: cominciamo dal rapporto positivo minore che è certamente
6 ; costruisco come sempre la
prima colonna della matrice identità (divido tutta la seconda riga per 3, con la solita combinazione
lineare di righe faccio diventare 0 gli altri due termini della colonna identità…)
coef. z base x 1 x 2 x 3 s 1 s 2 soluzioni rapporti
coef. z 8 4 2 0 0
z
Adesso il rapporto positivo minore, sul quale puntare per la seconda colonna della matrice identità
(senza voler alterare la colonna già costruita) è 16 2 , 3 , quindi divido tutta la prima riga per 2 , 3 e
procedo come sempre per costruire la seconda colonna della matrice identità:
coef. z base x 1 x 2 x 3 s 1 s 2 soluzioni
coef. z 8 4 2 0 0
z
Notiamo che la soluzione NON è accettabile, perché il valore della x 3 verrebbe negativo (-0,286);
la cosa però, per il momento non è rilevante in quanto non è ancora costruita del tutto la matrice
identità. Si continua, allora con il rapporto positivo minore sulla terza riga (per non alterare le
colonne della matrice identità già costruite) che è
10 , 286 : dividiamo tutta la terza riga per
1,143 e annulliamo la prima e la seconda riga della colonna x 1
coef. z base x 1 x 2 x 3 s 1 s 1 soluzioni rapporti
4 x 2 0 1 0 -0,375 -0,25 3 -
2 x 3 0 0 1 0,125 -0,25 1 -
8 x 1 1 0 0 -0,125 0,25 9 36
coef. z 8 4 2 0 0
z 8 4 2 -2,25 0,5 86
∆ 0 0 0 -2,25^ 0,5^86
la prima soluzione di base è, quindi, (9;3;1) dove z=86. Questa è accettabile perché tutte le variabili
hanno valore positivo, ma può essere migliorata, perché c’è ancora un numero positivo nella riga
dei ∆: come abbiamo sempre fatto scegliamo il rapporto positivo minore (ce n’è uno solo positivo)
ed evidenziamo la posizione del pivot: costruiremo la colonna (0 0 1) della matrice identità,
facendo “uscire” la variabile x 1 :
S
S