Esercitazione in Laboratorio: risoluzione di problemi di programmazione lineare tramite Excel – il mix di produzione 8 Febbraio 2005 Raffaele Pesenti 1
Contenuto e scopo esercitazione esempi di problema di programmazione lineare risolto tramite Excel problema del mix di produzione di piccole dimensioni Scopo presentare i passi che portano alla risoluzione di problemi di programmazione lineare tramite Excel
File necessari Per svolgere l’esercitazione sono necessari i seguenti file Excel: ProduzionePiccolo.xls ProduzioneCommentato.xls Il problema produzione commentato contiene delle macro.
Mix di Produzione Si vuole risolvere tramite excel il problema del mix di produzione descritto nei seguenti lucidi.
Esempio: mix di produzione n prodotti ognuno dei quali necessita di una data quantità di materie prime m materie prime in disponibilità limitata ci profitto per ogni unità prodotta 22
Esempio: mix di produzione Descrizione del problema. obiettivo: massimizzare i profitti vincoli: non consumare più materie prime di quelle disponibili leve decisionali: quantità prodotte di beni dati tecnologici: ci profitto unitario del bene i-mo aji consumo unitario di materia prima j-ma per produrre il bene i-mo bj disponibilità materia prima j-ma 23
Esempio: mix di produzione Formulazione del problema. Le variabili: le quantità prodotte di ogni bene xi , per i = 1,..., n tali variabili sono continue La funzione obiettivo: il profitto complessivo Si=1..n ci xi
Esempio: mix di produzione I vincoli: per ciascuna risorsa la quantità totale di risorsa utilizzata per eseguire le produzioni non può superare la disponibilità massima della risorsa stessa Si=1..n aji xi bj , per j = 1,..., m per ciascun bene la quantità prodotta è sempre non negativa xi 0 , per i = 1,..., n
Esempio: mix di produzione Formulazione generale: per n prodotti e m risorse max Si=1..n ci xi Si=1..n aji xi bj, per j=1,..,m xi 0 per i=1,..,n Estensioni: vincoli sulla capacità minima/massima di assorbimento del mercato
Esempio: mix di produzione Formulazione istanza specifica (profit) max 30 x1 + 45 x2 + 24 x3 + 26 x4 + 24 x5 + 30 x6 (steel) x1 + 4 x2 + 4 x4 + 2 x5 1200 (wood) 4 x1 + 5 x2 + 3 x3 + x5 1160 (plastic) 3 x2 + 8 x3 + x5 1780 (rubber) 2 x1 + x3 + 2 x4 + x5 + 5 x6 1050 (glass) 2 x1 + 4 x2 + 2 x3 + 2 x4 + 2 x5 + 4 x6 1360 x1, x2, x3, x4, x5, x6 0 24
Struttura file ProduzionePiccolo.xls note celle con i dati celle con commenti foglio coi dati iniziali foglio con il problema pronto per la soluzione
Struttura file ProduzionePiccolo.xls Lavorare sul foglio ProduzioneIniziale!! L’altro foglio serve solo per verificare di avere svolto l’esercitazione in maniera corretta Celle in cui scrivere il valore delle variabili, ovvero il numero di prodotti realizzati.
Struttura file ProduzionePiccolo.xls esempio di commento che si visualizza passando col mouse sul triangolino rosso
Inserimento formula Inserire nelle celle gialle delle formule che permettano di valutare il valore della funzione obiettivo e del primo termine dei vincoli al variare dei valori presenti nelle celle verdi delle variabili. Il primo termine dei vincoli è detto anche left hand side (lhs)
Esempio di inserimento formula Selezionare la cella H6 e scrivere la formula, preceduta dal segno =, che descrive la funzione facendo riferimento alle celle che contengono i valori dei profitti unitari e delle variabili tramite le loro coordinate. Ad esempio, B6*B5 indica il prodotto tra il profitto unitario di ogni P1 per il numero di unità P1 prodotte.
Esempio di inserimento formula In alternativa, selezionare la cella H6 e scrivere la formula, preceduta dal segno =, all’interno del campo disponibile nella barra della formula invece che direttamente nella cella
Esempio di inserimento formula In alternativa, selezionare la cella H6 e scrivere la funzione obiettivo utilizzando le formule messe a disposizione da Excel. A tal fine, dopo avere selezionato H6, cliccare il segno uguale sulla barra della formula. Apparirà quanto segue
Esempio di inserimento formula Selezionare quindi la tendina delle formule sull’estrema sinistra. Scegliere Altre funzioni...
Esempio di inserimento formula Selezionando Altre funzioni ... compare una maschera in cui selezionare nell’elenco Categoria: Matematiche e trig., nell’elenco Nome funzione: Matr.Somma.Prodotto. Cliccare OK
Esempio di inserimento formula La funzione Matr.Somma.Prodotto, quando utilizzata con solo due argomenti, esegue il prodotto scalare tra i due argomenti. Scrivere nei campi le celle estreme dei vettori di cui si vuole il prodotto scalare
Esempio di inserimento formula vettori selezionati risultato formula Cliccare OK
Verifica inserimento corretto Si è finito di inserire la formula della funzione obiettivo. Verificare di avere operato correttamente assegnando dei valori arbitrari alle celle delle variabili e controllando che il valore ottenuto nella cella che contiene la funzione obiettivo corrisponda a quello atteso. Nell’esempio, avendo imposto x1= 1, x2 = 3, x3=3, x4 = 4, x5=2, x6=1, si deve verificare che il valore della funzione obiettivo 30*1+45*3+24*3+26*4+24*2+30*1 sia effettivamente 419
Inserimento delle formule esprimenti il lhs dei vincoli Ripetere le operazioni precedentemente viste per i lhs di ogni vincolo. Nell’esempio la formula inserita calcola 1x1+4x2+0x3+4x4+2x5+0x6 il cui valore poi si dovrà imporre essere inferiore a 1160 Verificare per ogni vincolo la correttezza di quanto inserito
Inserimento delle formule esprimenti il lhs dei vincoli In alternativa, si possono inserire le formule del lhs dei vincoli eseguendo delle operazioni di copia e incolla della formula della funzione obiettivo. Selezionare inizialmente la cella H6 che contiene la formula della funzione obiettivo, cliccando due volte su di essa. Aggiungere dei $ prima delle coordinate riga delle celle che identificano il vettore delle variabili. B5:G5 diventi B$5:G$5 Per accettare la modifica cliccare su v o pigiare invio
Inserimento delle formule esprimenti il lhs dei vincoli Copiare la cella H6 utilizzando la tendina Modifica come in figura o ctrl + C. Il bordo della cella inizierà a lampeggiare.
Inserimento delle formule esprimenti il lhs dei vincoli Spostarsi sulla cella H11 e incollare la formula copiata utilizzando la tendina Modifica come in figura o ctrl + V. Ripetere l’operazione per le celle H12, H13, H14, H15.
Verifica inserimento corretto Cliccare due volte su H11 e controllare la formula che e’ stata inserita. Osservare che i riferimenti preceduti da $ (detti assoluti) non sono stai modificati dall’operazione di copiatura. Gli altri riferimenti (detti relativi) sono cambiati. Nella cella H6, il vettore B6:G6 era immediatamente sulla sinistra della cella. L’operazione di copiatura ha fatto si che nella cella H11, il corrispondente vettore B11:G11 si riferisca alle celle sulla destra di H11 e non di H6.
Verifica inserimento corretto Inserire dei valori arbitrari nelle celle delle variabili e controllare a mano che i valori indicati nelle celle che contengono le formule della funzione obiettivo e dei lhs dei vincoli corrispondano ai valori attesi. Ad esempio dovrebbero venire i valori indicati nella figura. Il foglio ProduzioneIniziale dovrebbe contenere ora le stesse formule del foglio ProduzioneCompleto.
Esercizio Cercare di determinare il valore ottimo del problema di programmazione lineare per tentativi. Assegnare dei valori arbitrari positivi o nulli alle celle variabili in modo da massimizzare il valore della funzione obiettivo e rispettare i vincoli. Provare a fare meglio che nell’esempio. Si può fare molto meglio.
Esercizio Prima di andare avanti. Provare a risolvere l’esercizio proposto per almeno 5 minuti per rendersi conto della difficoltà di risolvere ad occhio anche un problema estremamente piccolo di programmazione lineare. Confrontare i valori ottenuti con quelli dei colleghi e ricordarsi che nel mercato reale solo l’azienda che fa maggiori profitti ha speranza di sopravvivere.
La procedura Risolutore (Solver) Per determinare la soluzione ottima del problema si utilizza la procedura Risolutore che implementa il simplesso. Selezionare Risolutore (oppure Solver se si ha la versione inglese) dalla tendina Strumenti.
La procedura Risolutore (Solver) Compare una maschera da compilare in cui bisogna... inserire coordinate della funzione obiettivo (cella H6) indicare che si affronta un problema di massimizzazione inserire coordinate del vettore delle variabili (B5:G5)
La procedura Risolutore (Solver) Cliccare su Aggiungi per inserire i vincoli. Compare un’ulteriore maschera.
La procedura Risolutore (Solver) Inserire cella termine noto del vincolo (per il primo vincolo J11) Inserire un vincolo alla volta. Inserire cella lhs del vincolo (per il primo vincolo H11) Cliccare Aggiungi per inserire un alto vincolo.
La procedura Risolutore (Solver) Ripetere l’operazione per tutti i vincoli. Cliccare OK per quando si sono inseriti tutti i vincoli
La procedura Risolutore (Solver) Si è inserito il modello di programmazione lineare. obiettivo variabili vincoli Cliccare su Opzioni NON su Risolvi. Compare una nuova maschera
La procedura Risolutore (Solver) Alla fine cliccare OK Inserire quanto segue. Tolleranza 0 (si vuole la soluzione esatta, in realtà questa condizione viene considerata dal calcolatore solo in presenza di variabili intere, altrimenti è ritenuta sempre 0). Modello lineare. Modello (in realtà variabili) non negativo. parametri per modelli non lineari, non interessano
La procedura Risolutore (Solver) Si è ora pronti per risolvere il problema. Cliccare Risolvi.
La procedura Risolutore (Solver) In una frazione di secondo compare che la soluzione ottima è stata determinata. Selezionare i primi due Report e cliccare OK.
La soluzione ottima Soluzione ottima. Notare l’errore di troncamento: 7.11E-15 vale 0 Si deve produrre 160 prodotti P1 e 520 prodotti P5 per avere il massimo profitto. Report prodotti.
Analisi dei report Cliccare sul foglio Report Risposte per visualizzare ulteriori dettagli sulle soluzioni
Report soluzioni tabella della funzione obiettivo tabella delle variabili tabella dei vincoli
Tabella delle soluzioni valore ottimo della funzione obiettivo nome della cella funzione obiettivo, costruito automaticamente cercando le stringe che si trovano nelle prime celle sopra e a sinistra della cella della funzione obiettivo valore assunto dalla funzione obiettivo, prima della fase di ottimizzazione. coordinate della cella che contiene la funzione obiettivo Confrontare la differenza di valore tra l’ottimo e quanto ottenuto per tentativi. Nell’esempio risulta essere (17280-13980)/17280 =19%.
Tabella delle variabili valori assunti dalle variabili, prima della fase di ottimizzazione. valore ottimo delle variabili nome delle celle delle variabili coordinate delle celle delle variabili vale 0, dovuto ad errori di troncamento
Tabella dei vincoli stato del vincolo: stringente o attivo se soddisfatto all’uguaglianza non stringente o non attivo se non soddisfatto all’uguaglianza formula del vincolo differenza tra valore del termine noto e il valore assunto dal lhs valori assunti dal lhs dei vincoli dati i valori ottimi delle variabili nome delle celle dei lhs dei vincoli coordinate delle celle che contengono i lhs dei vincoli
Commenti Nei vincoli stringenti, ovviamente, lo slack (indicato come tolleranza) è ovviamente zero. Lo slack indica quante risorse rimangono inutilizzate, e.g., 210 unità di gomma. I vincoli stringenti sono quelli che definiscono la soluzione ottima Cambiando i valori del termine noto e/o dei coefficienti che caratterizzano i vincoli stringenti cambia il valore della funzione obiettivo e delle soluzioni, viceversa... Cambiando (entro certi limiti) del termine noto e/o dei coefficienti che caratterizzano i vincoli non stringenti non cambia il valore della funzione obiettivo e delle soluzioni.
Report sensibilità tabella variabili tabella vincoli
Tabella delle variabili costo ridotto: indica di quanto deve diminuire il coefficiente della funzione obiettivo affinché convenga valutare se la variabile considerata, a parità di altre condizioni, non debba essere diversa da zero all’ottimo (vedi commenti successivi) ampiezza intervalli in cui può variare un coefficiente della funzione ottima, a parità di altre condizioni, senza che la soluzione cambi (vedi commenti successivi) coefficiente associato alla variabile nella funzione obiettivo valore ottimo delle variabili nome delle celle delle variabili coordinate delle celle delle variabili equivale a zero equivale a infinito
Commenti Si consideri la variabile x2 dato il valore (45) del suo coefficiente nella funzione obiettivo vale 0. Se il valore di tale coefficiente diminuisce del costo ridotto (-12) ovvero aumenta di almeno 12, a parità di tutti gli altri coefficienti, la soluzione ottima potrebbe cambiare e x2 potrebbe assumere valore diverso da zero. Il valore del coefficiente della x2 può aumentare fino a 57 (=45+12) e diminuire fino a - (=45 – 1E+30) senza che il valore della soluzione ottima, e quindi di x2, cambi. Si potrebbe decidere di produrre P2 solo se il suo profitto unitario passasse da 42 ad un valore maggiore di 57 (=45+12).
Tabella dei vincoli prezzo ombra: indica di quanto varia il valore ottimo della funzione obiettivo per variazioni unitarie del termine noto di un vincolo, a parità di altre condizioni, e all’interno di un intervallo sufficientemente piccolo (vedi commenti successivi) ampiezza destra e sinistra dell’intervallo in cui può variare il termine noto e all’interno dei quali valgono i prezzi ombra (vedi commenti successivi) valori dei termini noti dei vincoli, right hand side (rhs) valori assunti dal lhs dei vincoli dati i valori ottimi delle variabili nome delle celle dei lhs dei vincoli coordinate delle celle che contengono i lhs dei vincoli equivale a infinito equivale a zero
Commenti Si consideri il primo vincolo (steel). E’ un vincolo stringente, se si avesse più acciaio di quanto si ha attualmente (1200 unità) si produrrebbe di più e si avrebbe un maggior profitto (il ragionamento si inverte se si avesse a disposizione meno acciaio). Il prezzo ombra indica che si avrebbe un aumento dei profitti di 3 per ogni unità di acciaio in più o una diminuzione dei profitti di 3 per ogni unità di acciaio in meno. Questo vale per variazioni di disponibilità di acciaio comprese tra 932.72 (=1200-267.27) e 1200 (=1200+3.3E-14). Al di sopra dell’intervallo di sensibilità indicato i profitti cresceranno meno, al di sotto diminuiranno maggiormente. Il prezzo ombra è un valore esatto all’interno dell’intervallo di sensibilità indicato, è un bound (un maggiorante o un minorante) al di fuori di esso.
Commenti Si consideri il terzo vincolo (plastic). Non è un vincolo stringente, se si avesse più plastica di quanto si ha attualmente (1780 unità) non si produrrebbe di più e non si avrebbe un maggior profitto. Per ogni unità di plastica in più o in meno, il prezzo ombra (0) indica che non si avrebbe né un aumento dei profitti né una diminuzione degli stessi. Questo vale per variazioni di disponibilità di plastica comprese tra 520 (= 1780 -1260) e + (=1780 +1E+30). Al di sopra (impossibile) dell’intervallo di sensibilità indicato i profitti cresceranno, al di sotto diminuiranno.
Esercizi Dire come cambiano le analisi proposte per il Report Sensibilità se il problema fosse stato di minimizzazione invece che di massimizzazione. Navigare dentro il file ProduzioneCommentato.xls per un’analisi dettagliata dei risultati di un altro problema del mix di produzione.