|
PREVIOUS:
Considerazioni sulla Soluzione Ottima
|
|
UP: Il Metodo del
Simplesso
|
![]()
Consideriamo l'esempio:
| max 6x1 + 8x2 | funzione obiettivo |
| 5x1 + 10x2 ³ 60 | primo vincolo |
| 4x1 + 4x2 £ 40 | secondo vincolo |
| x1 £ 10 | terzo vincolo |
| x1 , x2 ³ 0 |
Semplificando si ha:
| max 6x1 + 8x2 | funzione obiettivo |
| 5x1 + 2x2 ³ 12 | primo vincolo |
| x1 + x2 £ 10 | secondo vincolo |
| x1 £ 10 | terzo vincolo |
| x1 , x2 ³ 0 |
Il terzo vincolo e' ridondante, infatti, ponendo x2 = 0, il secondo vincolo e' identico al terzo; vediamo cosa succede se si continua con il metodo del simplesso:
| x1 | x2 | x3 | x4 | x5 | -Z | b | |
| 1 | 2 | 1 | 0 | 0 | 0 | 12 | 12/1 = 12 |
| 1 | 1 | 0 | 1 | 0 | 0 | 10 | 10/1 = 10 |
| 1 | 1 | 0 | 0 | 1 | 0 | 10 | 10/1 = 10 |
| 6 | 8 | 0 | 0 | 0 | 1 | 0 | Ü COSTI RIDOTTI |
Per il pivot, si puo' sciegliere indifferentemente la seconda o la terza riga; consideriamo la terza:
| x1 | x2 | x3 | x4 | x5 | -Z | b | |
| 0 | 2 | 1 | 0 | -1 | 0 | 2 | 2/2 = 1 |
| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0/1 = 0 |
| 1 | 0 | 0 | 0 | 1 | 0 | 10 | 10/1 = 10 |
| 0 | 8 | 0 | 0 | -6 | 1 | -60 | Ü COSTI RIDOTTI |
La soluzione di base relativa alla matrice trovata sara':
|
x1 |
10 |
Variabile IN BASE |
| x2 | 0 |
Variabile IN BASE |
| x3 | 2 |
Variabile IN BASE |
| x4 | 0 |
Variabile FUORI BASE |
| x5 | 0 |
Variabile FUORI BASE |
| Z | 60 | Funzione obiettivo |
La variabile x2 ha per termine noto uno zero, pur essendo in base: e' uno zero inatteso; siamo di frone ad un caso degenere
| x1 | x2 | x3 | x4 | x5 | -Z | b | |
| 0 | 0 | 1 | -2 | 1 | 0 | 2 | 2/2 = 1 |
| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0/-1 = 0 |
| 1 | 0 | 0 | 0 | 1 | 0 | 10 | 10/1 = 10 |
| 0 | 0 | 0 | -8 | 2 | 1 | -60 | Ü COSTI RIDOTTI |
La soluzione di base e' identica alla precedente, a causa dello zero inatteso: x2 entra in base e prende come termine noto proprio lo zero inatteso; lo zero inatteso fa sì che venga scelta sempre la riga dove e' comparso come riga del pivot, in questo modo lo zero riappare dopo ogni iterazione
L'apparizione di uno zero inatteso tra i termini noti mette in discussione la convergenza del metodo del simplesso:
|
|
in casi normali, quando cioe' non si e' in presenza di zeri inattesi, il simplesso e' tale da fer migliorare il valore della funzione obiettivo dopo ogni iterazione: si esplorano tutte le soluzioni di base possibili (che possono essere moltepoici ma in numero finito) e non si ripresenta mai una soluzione trovata in precedenza Þ il simplesso converge |
|
|
in casi degeneri, quando cioe' si hanno zeri inattesi, una forma canonica trovata precedentemente si ripresenta dopo varie iterazioni e, quando cio' avviene, l'algoritmo inizia a ciclare attormo ad essa proponendo sempre il medesimo valore per la funzione obiettivo; in questo modo la funzione obiettivo mantiene costante il suo valore e non e' piu' possibile arrivare alla soluzione ottima in un numero finito di passi Þ il simplesso non converge |
Il presupposto per il verificarsi del caso degenere e' la comparsa di due valori uguali, nella colonna dei termini noti, per la scelta del pivot; questa situazione si verifica frequentemente quando si lavora con problemi che hanno dimensione elevata
Graficamente si ha:
Le soluzioni di base coincidono con i vertici dell'area ammissibile, che sono il risultato dell'intersezione dei vincoli; nel vertice C, convergono ben te vincoli ed e' proprio questa particolarita' a rendere il simplesso ciclico: C puo' essere espresso attraverso una qualunque coppia dei tre vincoli, percio' puo capitare che il simplesso rimanga a ciclare sullo stesso punto, descritto in tre modi diversi
Quando si inizia a ciclare, il caso e' sicuramente degenere, ma si possono verificare dei casi in cui, anche se degeneri, il ciclo non si manifesta; ritornando all'esempio, si ha:
| x1 | x2 | x3 | x4 | x5 | -Z | b | |
| 0 | 0 | 1 | -2 | 1 | 0 | 2 | 2/2 = 1 |
| 0 | 1 | 0 | 1 | -1 | 0 | 0 | 0/-1 = 0 |
| 1 | 0 | 0 | 0 | 1 | 0 | 10 | 10/1 = 10 |
| 0 | 0 | 0 | -8 | 2 | 1 | -60 | Ü COSTI RIDOTTI |
Si fa entrare x5 in base e si sceglie come pivot la prima riga (la seconda avrebbe pivot negativo e non e' ammissibile); si ottiene:
| x1 | x2 | x3 | x4 | x5 | -Z | b | |
| 0 | 0 | 1 | -2 | 1 | 0 | 2 | |
| 0 | 1 | 1 | -1 | 0 | 0 | 2 | |
| 1 | 0 | 1 | 2 | 0 | 0 | 8 | |
| 0 | 0 | -2 | -4 | 0 | 1 | -64 | Ü COSTI RIDOTTI |
Ora la soluzione di base e' diversa dalla precedente e non si e' manifestato lo zero inatteso; inoltre quella trovata e' la soluzione ottima (tutti costi ridotti nulli o negativi):
|
x1 |
8 |
Variabile IN BASE |
| x2 | 2 |
Variabile IN BASE |
| x3 | 2 |
Variabile FUORI BASE |
| x4 | 0 |
Variabile FUORI BASE |
| x5 | 2 |
Variabile IN BASE |
| Z | -64 | Funzione obiettivo |
In questo caso il caso degenere si e' risolto da solo ed e' cio' che accade nella maggior parte dei casi; i problemi di programmazione lineare che ciclano non si verificano praticamente mai
Esistono due metodi per evitare che il sistema inizi a ciclare attorno ad una forma canonica:
|
|
Primo metodo:Si perturbano lievemente tutti i termini noti con valori diversi tra loro: in questo miodo la tripla intersezione non e' piu' tale e si trasforma in tre combinazioni diverse di due vincoli ciascuna; non si aggiunge la stessa quantita' ai vincoli per evitare che l'intersezione tripla si verifichi in un altro punto del piano; il problema diventa: |
| max 6x1 + 8x2 | funzione obiettivo |
| 5x1 + 10x2 £ 60 + e | primo vincolo |
| 4x1 + 4x2 £ 40 + e² | secondo vincolo |
| x1 £ 10 + e³ | terzo vincolo |
| x1 , x2 ³ 0 , e > 0 |
|
|
Secondo metodo: Regola di BladeQuando ci si trova di fronte ad una incertezza, non si sa cioe' quale riga (due termini noti sono uguali) o quale colonna (due costi ridotti sono uguali) scegliere per il pivot, basta scegliere la riga o la colonna con l'indice piu' basso; si puo' dimostrare che questo e' sufficiente ad evitare il ciclo |
![]()