:: Ricerca Operativa - PL - Fonderia - 29.07.02 ::
Una fonderia deve pianificare la produzione di lingotti di diverse leghe,ottenute miscelando metalli in percentuali differenti e conosciute. Il reparto rifornimenti conosce le quantità di materie prime che saranno disponibili nel periodo di riferimento. Ciò che non si conosce è quale sarà il prezzo a cui i prodotti potranno essere venduti, a causa della situazione incerta del mercato. Gli esperti ipotizzano che si possano verificare due scenari e indicano quali potrebbero essere i prezzi nei due casi.
Non disponendo di altre informazioni, il consiglio di amministrazione decide di seguire una strategia volta ad ottimizzare i ricavi dell’azienda nel caso peggiore.
* Formulare il problema, classificarlo e risolverlo con i dati del file FONDERIA.TXT.
========================================================= I prodotti sono 3. Le materie prime sono di 4 tipi. ************************************************** Tabella 1: Disponibilità delle materie prime Mat. prima Quantità [Kg/g] M1 2900 M2 2200 M3 4000 M4 1550 ************************************************** Tabella 2: Assemblaggio: percentuale di materia prima per ogni prodotto Prodotto P1 P2 P3 Mat.pr. M1 58 22 30 M2 12 15 60 M3 20 53 14 M4 10 15 23 ************************************************** Tabella 3: Prezzi - primo scenario Prodotto Prezzo [Euro/Kg] P1 6 P2 10 P3 12 ************************************************** Tabella 4: Prezzi - secondo scenario Prodotto Prezzo [Euro/Kg] P1 12 P2 10 P3 6 ************************************************** Tabella 5: Prezzi di rifornimento ulteriore Materia prima Prezzo [Euro/Kg] M1 16 M2 10.5 M3 4.5 M4 2 **************************************************
I dati visti qui sopra sono piuttosto semplici. Ecco quello che ho in mano:
Leggendo il problema, pare proprio che quello che voglio sapere è quanti kg al giorno produrre di prodotto 1, prodotto 2 e prodotto 3. Si tratta di una variabile continua non-negativa, visto che posso produrre anche quantità frazionarie di kg. L'unità di misura è il [kg/g], cioè il kilogrammo al giorno, per uniformarmi alla tabella qui sopra, che mi dà la quantità giornaliera di materie prime in [kg/g].
Se ho capito bene il problema, qui voglio avere il mix produttivo che rende il massimo, nel caso in cui tutto va storto. Cioè, quando tutto sarà contro di me, qual'è il mix produttivo che mi renderà di più?
La funzione obiettivo dovrebbe essere una max min, perché voglio avere il massimo rendimento nel caso del peggiore (minimo) scenario.
Ma a Lindo non piace il max min, perché si tratterebbe di una funzione non-lineare. Adotto allora un'escamotage: tiro fuori una funzione ausiliaria, che chiamo z, e stabilisco che z debba sempre essere il minimo tra il primo scenario ed il secondo scenario, e dico a Lindo che, tra tutti i minimi, voglio quello più ciccione:
scenario1 - z >= 0 scenario2 - z >= 0 max z
L'unico vincolo che ho riguarda la disponibilità di materia prima giornaliera. Mi vengono dati gli assorbimenti di materia prima, in percentuale, per ogni prodotto:
Somma Aij * Xi <= Dj, i=1..N, j=1..M [kg/g]
Le Xi mi dicono i kg al giorno che produco di prodotto i-esimo. Di ogni prodotto so la percentuale di materia 1, 2, 3 e 4 che consuma, e voglio che la somma di tutto ciò che consumo sia inferiore alla disponibilità giornaliera di quella materia.
! Esercizio fonderia ! Variabili: x(i) = quantità di prodotto i-esimo da produrre al giorno [kg/g] ! È continua, non-negativa ! Funzione obiettivo: massimizzare il guadagno nello scenario 1, e poi nel 2; ! Scenario 1 ! max 6 x1 + 10 x2 + 12 x3 ! Scenario 2 ! max 12 x1 + 10 x2 + 6 x3 max z s.t. !Vincoli sulla quantità di materia utilizzabile in un giorno !Prodotto P1 P2 P3 !Mat.pr. ! M1 58 22 30 ! M2 12 15 60 ! M3 20 53 14 ! M4 10 15 23 !Mat. prima Quantità [Kg/g] ! M1 2900 ! M2 2200 ! M3 4000 ! M4 1550 mat1) 0.58 x1 + 0.22 x2 + 0.30 x3 <= 2900 mat2) 0.12 x1 + 0.15 x2 + 0.6 x3 <= 2200 mat3) 0.2 x1 + 0.53 x2 + 0.14 x3 <= 4000 mat4) 0.1 x1 + 0.15 x2 + 0.23 x3 <= 1550 z1) 6 x1 + 10 x2 + 12 x3 - z >= 0 z2) 12 x1 + 10 x2 + 6 x3 -z >= 0 end
Non sto qui a spiegarlo tutto perché mi sembra piuttosto simile alla formulazione matematica del problema.
Questa domanda vuol dire che devo calcolare il massimo dello scenario 1, il massimo dello scenario 2, e confrontarli con il massimo del peggio che ho calcolato qui sopra. Nel codice sono già presenti, commentate, le righe che rappresentano i due scenari. Quindi, prima faccio girare Lindo con una, poi con l'altra, vedo la differenza e la scrivo al professore.
Quando si sente parlare di convenienza etc. bisogna fare un salto alla teoria. La teoria mi dice che il simplesso, quando termina, mi dice per ogni vincolo qual'è il suo prezzo ombra, chiamato dual price in Lindo. Il prezzo ombra mi dice:
Qui, i nostri vincoli sono esattamente questo: vincoli sulla disponibilità di materiale. Se il prezzo ombra è 0, vuol dire che di quella materia lì ce n'è anche per i cavalli, cioè avanza. Infatti, la corrispondente variabile di slack sarà diversa da 0. Lo slack è lo scarto, appunto ciò che avanza.
Se invece il prezzo ombra non è 0, quello è esattamente quanto sarei disposto a spendere per quella materia.
Il ragionamento sottostante è: se mi avanza del materiale, non sarei disposto a pagare per averne altro, visto appunto che mi avanza! Se invece lo sto usando tutto, sono disposto a pagare, entro un certo limite, per averne altro, e oltre quel limite non sarebbe più conveniente.
Compilando il modello, Lindo dice:
ROW SLACK OR SURPLUS DUAL PRICES MAT1) 0.000000 15.679265 MAT2) 21.399387 0.000000 MAT3) 0.000000 12.359550 MAT4) 25.715015 0.000000
Possiamo interpretarlo così:
A mio avviso, il problema terminerebbe qui. MA nella soluzione ufficiale, si va avanti, e mi si dice che devo anche scoprire fino a che punto mi conviene comprare MAT3.
Questo è compito dell'analisi parametrica: vedo quanto varia la soluzione variando un solo parametro. Il parametro qui è la quantità di MAT3 che ho disponibile. Se vario la quantità di MAT3 disponibile, vuol dire che cambierà il mio profitto massimo, e cambierà l'assorbimento di MAT3, e cambierà anche il prezzo ombra di MAT3.
Devo quindi scoprire fino a che punto mi conviene comprare, a quel prezzo, della MAT3 aggiuntiva, e quel punto è il punto in cui il prezzo ombra di MAT3 diventa inferiore ai 4.5 euro/kg segnalati tra i dati.
Per fare ciò, faccio fare l'analisi parametrica a Lindo. Mi chiederà un vincolo su cui parametrizzare, e scelgo appunto MAT3. Gli dico di andare a "snasellare" fino a 8000 (valore tirato a botto, che sarebbe il doppio della disponibilità iniziale) come incremento massimo di MAT3, e vedo un po' quello che esce:
VAR VAR PIVOT RHS DUAL PRICE OBJ OUT IN ROW VAL BEFORE PIVOT VAL 4000.00 12.3596 0.000000E+00 SLK 5 SLK 7 5 4169.53 12.3596 97003.4 X3 SLK 2 3 5254.92 4.94370 102369. X1 SLK 4 6 5476.67 4.34783 103333. 8000.00 0.355271E-14 103333.
Guardiamo la colonna DUAL PRICE BEFORE PIVOT: essa mi dice, alla penultima riga, che il prezzo ombra è di 4.34783. Vuol dire che, in quel punto, non è più conveniente acquistare altra MAT3, perché il suo prezzo ombra diventerebbe inferiore al prezzo di acquisto che mi viene proposto.
Quindi, l'ideale è di comprare fino a 5254.92 kg di MAT3, che sarebbe la quantità di MAT3 dell riga precedente.