cerca
Ricerca Operativa - PL - Fonderie - 22.07.02
modifica cronologia stampa login logout

Wiki

UniCrema


Materie per semestre

Materie per anno

Materie per laurea


Help

Ricerca Operativa - PL - Fonderie - 22.07.02

 :: 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