Laboratorio di Simulazione e Ottimizzazione AA 2003/04 Gruppo 4
Transcript
Laboratorio di Simulazione e Ottimizzazione AA 2003/04 Gruppo 4
Laboratorio di Simulazione e Ottimizzazione AA 2003/04 Gruppo 4 Rossi Matteo Lolli Luca Tema n° 25: Posizionamento impianti Una ditta che produce ceramiche deve decidere dove localizzare i suoi impianti produttivi, scegliendo tra una serie di possibili nuove sedi. Per ogni potenziale nuova sede si conosce la dimensione dell'impianto che vi si può realizzare e, di conseguenza, si conosce la massima capacità produttiva (intesa come numero di stock di piastrelle prodotte in un giorno) che si può ottenere dall'impianto e si può avere una stima attendibile del costo iniziale di costruzione dell'impianto e del costo di funzionamento dell'impianto (legato alla produzione di uno stock di piastrelle). Attualmente le possibili sedi per la costruzione di nuovi impianti sono 6 e hanno le caratteristiche evidenziate dalla tabella seguente. IMPIANTO MAX CAP COSTO INIT COSTO FUN 1 100 256 7 2 90 200 9 3 75 180 11 4 30 90 18 5 45 110 16 6 70 135 10 Si intende analizzare il costo presunto che la ditta deve sostenere nel caso in cui la sua capacità produttiva a regime debba essere di (almeno) 200 stock di piastrelle al giorno. Modello Parametri: n Æ impianti di produzione di possibile costruzione CI i Æ Costo di costruzione del i-esimo impianto (i= 1,...,n) CFi Æ Costo di produzione da parte del i-esimo impianto di uno stock di piastrelle (i= 1,...,n) MaxCi Æ Massima capacità di produzione(in numero di stock al giorno) del i-esimo impianto(i=1,...,n) Pr odMin Æ Minima produzione giornaliera globale(in numero di stock di piastrelle) richiesta all’insieme dei nuovi impianti costruiti Variabili decisionali: Nel problema abbiamo necessità di ricavare quali impianti attivare e in che misura far produrre a questi. Appare chiara, quindi, la necessità di rappresentare il numero di stock prodotti giornalmente da ciascun impianto: Pr od i Æ Numero di stock prodotti giornalmente dal i-esimo impianto (i= 1,...,n) Dal valore di Prod è facilmente possibile dedurre se un impianto è attivo o meno, rappresenteremo comunque questo con una variabile(binaria) dedotta direttamente da quella sopra: ⎧1 se Prod i > 0 ossia se l' impianto i − esimo è attivo (i = 1,..., n) Att i = ⎨ 0 se Prod i = 0 ⎩ Questa ci risulterà utile nella dichiarazione dei vincoli. Modello PLI: Ciò che si vuole è, come appare chiaro, minimizzare il costo complessivo dell’operazione di localizzazione degli impianti, la funzione obbiettivo sarà costituita quindi dalla somma dei costi di costruzione e dei costi di produzione (di ogni stock) per ognuno dei n impianti: n Min ∑ CI i =1 i * Att i + CFi * Pr od i Vincoli: Vincolo sulla produzione globale del sistema di impianti che deve essere n ∑ Pr od i >= Pr odMin maggiore o uguale al minimo imposto in ProdMin. i =1 Pr od i <= MaxCi Pr od i >= 0 i=1,…,n i=1,…,n Ogni impianto dove rispettare la propria capacità massima di produzione giornaliera espressa da MaxC Appare chiaro che la produzione debba essere maggiore di 0. Atti ∈ {0,1} i=1,…,n Modello MPL Riportiamo il codice MPL della versione con Input/Output in foglio EXCEL. Per l’esecuzione attraverso Optimax in EXCEL è necessario modificare nel codice VBA relativo al pulsante “Solve” le stringhe: MPL.WorkingDirectory = "…" MPL.Solvers.Add ("…") Inserendo nella prima la directory di lavoro contenente il file Excel e mpl, mentre nella seconda il riferimento al risolutore che di intende utilizzare per il calcolo della soluzione. In maniera analoga è necessario apportare le stesse modifiche al codice VBA per la versione ACCESS. TITLE Posizionamento_Impianti; INDEX !Indice degli impianti di produzione imp := EXCELRANGE("PosImpianti.xls","impianti"); DATA !Massima Capacità per impianto MaxC[imp] = EXCELRANGE("PosImpianti.xls","MaxCap"); !Costo di costruzione per ogni impianto InitCost[imp] = EXCELRANGE("PosImpianti.xls","CostoInit"); !Costo di produzione per uno stock per impianto FunCost[imp] = EXCELRANGE("PosImpianti.xls","CostoFun"); !Produzione totale minima richiesta dal sistema ProdMin = EXCELRANGE("PosImpianti.xls","Req"); DECISION VARIABLES !Stock prodotti giornalmante da ogni impianto Prod[imp] EXPORT TO EXCELRANGE("ProdRange"); !Attivazione o meno dell'impianto di indice "imp" Att[imp] EXPORT TO EXCELRANGE("AttRange"); MACRO !Calcolo del costo totale di produzione degli stock richiesti in ProdMin TotProdCost:= SUM(imp: Prod * FunCost) EXPORT TO EXCELRANGE("CostoProd"); !Calcolo del costo totale di costruzione degli impianti TotInitCost:= SUM(imp: Att * InitCost) EXPORT TO EXCELRANGE("CostoI"); MODEL !Funzione obbiettivo, somma dei costi parziali (sopra) MIN Costo=TotProdCost + TotInitCost ; SUBJECT TO !Vincolo sulla produzione totale degli impianti attivati ProdTot: SUM(imp: Prod) >= ProdMin; !Vincolo sulle capacità di produzione massima di ogni impianto !Se "Att" è 0 l'impianto non è attivato e quindi "Prod" deve essere a !sua volta 0 CapMax[imp]: Prod <= MaxC * Att; BINARY Att[imp]; END Nota: Il vincolo sulla capacità di produzione massima per impianto permette in realtà una eventuale soluzione con un impianto attivato ma a produzione nulla, questa chiaramente non potrà essere soluzione ottima, in quanto ve ne sarà sempre una “migliore” senza l’impianto a produzione nulla. Questo avviene in quanto nel modello MPL a differenza di quello PLI la variabile Att non deriva direttamente dal valore della variabile Prod, ma è indipendente da questa. Analisi della soluzione SOLUTION RESULT Optimal integer solution found MIN Costo = 2201.0000 MACROS Macro Name Values ----------------------------------------------TotProdCost 1610.0000 TotInitCost 591.0000 ----------------------------------------------DECISION VARIABLES VARIABLE Prod[imp] : imp Activity Reduced Cost ----------------------------------------1 100.0000 0.0000 2 90.0000 0.0000 3 0.0000 1.0000 4 0.0000 11.0000 5 0.0000 8.4444 6 10.0000 0.0000 ----------------------------------------VARIABLE Att[imp] : imp Activity Reduced Cost ----------------------------------------1 1.0000 -44.0000 2 1.0000 110.0000 3 0.0000 180.0000 4 0.0000 0.0000 5 0.0000 0.0000 6 1.0000 135.0000 ----------------------------------------CONSTRAINTS PLAIN CONSTRAINTS Constraint Name Slack Shadow Price -----------------------------------------------------ProdTot 0.0000 10.0000 -----------------------------------------------------CONSTRAINT CapMax[imp] : imp Slack Shadow Price ----------------------------------------1 0.0000 -3.0000 2 0.0000 -1.0000 3 0.0000 0.0000 4 0.0000 -3.0000 5 0.0000 -2.4444 6 60.0000 0.0000 ----------------------------------------END Dalla soluzione si nota che gli impianti attivati, con produzione minima giornaliera di 200, sono il numero1, 2 e 6, questa scelta viene fatta sulla combinazione dei costi di costruzione e produzione in base al numero totale di stock da produrre. Ciò che si nota è che i primi due impianti sono quelli con costo di costruzione maggiore, ma in base al numero totale di stock prodotti risultano più convenienti considerando inoltre che questi impianti sono sfruttati per tutta la loro capacità produttiva(slack = 0).L’impianto numero 6 invece è attivato ma con produzione molto inferire alla massima(slack = 60). Abbiamo poi verificato il range di non variazione della base ottima al variare del valore minimo di produzione(default=200), questo risulta compreso tra 196 e 260 (dove l’impianto numero 6 satura la propria produzione e necessita quindi l’attivazione di un altro), quello che si è notato è che per valori compresi tra 191 e 195, la base ottima comprende invece dell’impianto 6 l’attivazione dell’impianto 4, questo infatti prevede un costo di costruzione molto inferiore ma maggiore costo di produzione, presentando quindi convenienza unicamente per bassi reggimi di produzione. L’analisi del costo ombra relativo al vincolo sulla produzione totale rivela, banalmente, che il costo di un eventuale 201-esimo stock sarebbe di 10 ossia il costo di produzione da parte dell’impianto 6 già attivo. Dopo alcune prove si è riscontrato che il costo ombra presenta valori “semplici”(come sopra il costo di prod.) fino al valore di produzione richiesta di 190, qui il costo ombra assume il valore di 11.9286, apparentemente incomprensibile, la ragione crediamo risieda nel fatto che il costo ombra è relativo al rilassamento continuo del problema che, nel nostro caso è intero, questo valore rappresenta quindi il costo di uno stock di piastrelle nel caso in cui fosse possibile attivare solamente parzialmente un impianto e in particolare il 6, in questo caso oltre al costo di prod. di 10 si avrebbe anche il parziale costo di attivazione ossia 135 / 70 = 1.9286. Per quanto riguarda invece i costi ombra relativi ai vincoli sulla capacità massima, questi rivelano che nel caso fosse possibile ampliamento questo sarebbe più conveniente se effettuato sull’impianto 1(costo ombra -3), dove evidentemente la produzione risulta meno costosa.