:: Ricerca Operativa - PL - Fonderia - 29.07.02 ::
Testo del problema
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.
- Valutare di quanto si discosta il ricavo ottenuto in tal modo dal ricavo ottenibile ottimizzando rispetto ad uno solo dei due scenari possibili.
- Il reparto rifornimenti comunica di essere in grado di rifornirsi di ulteriori quantitativi di materie prime, di tutti i tipi. Valutare le offerte per decidere se e di quanto sia conveniente rifornirsi ulteriormente.
Dati
=========================================================
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
**************************************************
Formulazione del problema
Dati
I dati visti qui sopra sono piuttosto semplici. Ecco quello che ho in mano:
- N = 3 : numero di prodotti
- M = 4 : numero di materie prime
- Di, i=1..M [kg/g] : disponibilità della materia i-esima
- Aij, i=1..N, j=1..M [%] : percentuale di materia prima per ogni unità di prodotto
- P1i, P2i, i =1..N [Euro/Kg] : prezzo al kilogrammo per ogni prodotto => ci sono due scenari, ecco perché ho P1 e P2
Variabili
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].
- xi [kg/g] i=1..N : quantità in kg al giorno di prodotto i
Funzione obiettivo
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
Vincoli
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.
Lindizzazione del problema
! 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.
Altre domande
Valutare di quanto si discosta il ricavo ottenuto in tal modo dal ricavo ottenibile ottimizzando rispetto ad uno solo dei due scenari possibili.
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.
Il reparto rifornimenti comunica di essere in grado di rifornirsi di ulteriori quantitativi di materie prime, di tutti i tipi. Valutare le offerte per decidere se e di quanto sia conveniente rifornirsi ulteriormente.
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:
- quanto sono disposto a pagare al massimo per avere un'unità di quel materiale;
- il minimo che chiederei per vendere un'unità di quel materiale.
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ì:
- MAT2 e MAT4 non mi conviene acquistarle: già mi avanzano
- Il prezzo propostomi per comprare MAT1 è di 16 euro/kg. Ma lindo mi dice che il massimo che posso spendere per avere un kg di MAT1 è 15.679265. Pertanto, non mi conviene
- Il prezzo propostomi per comprare MAT3 è di 4.5 euro/kg. Lindo mi dice che al max posso spendere 12.359550, e quindi in questo caso mi converrebbe prenderne!
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.
Torna alla pagina di Ricerca Operativa