Torna alla pagina di Ricerca Operativa
:: Ricerca Operativa - PL - Macchine - 12.06.02 ::
Testo del problema
Un’azienda meccanica produce macchine utensili di precisione di diversi tipi. Essa deve produrre una quantità minima di tali macchine perché è vincolata in questo da contratti di fornitura stipulati in precedenza.
Per la costruzione delle macchine l’azienda si rifornisce di parti componenti elettroniche, acquistandole in quantità variabili a prezzi noti e costanti. Anche il prezzo di vendita delle macchine è noto e costante. Ogni tipo di macchina richiede un numero variabile di componenti elettronici.
Prima dell’installazione sulle macchine ogni componente elettronico deve essere collaudato da operai specializzati che sono impiegati a tempo pieno in tale compito. Il tempo di collaudo è diverso a seconda del tipo di componente.
Formulare il problema, classificarlo e risolverlo con i dati del file MACCHINE.TXT
Dati
Tabella 1: Prezzi di vendita delle macchine
Prodotto Prezzo (Euro/macchina)
A 2050
B 3500
C 2550
D 1250
========================================================
Tabella 2: Costi dei componenti
Componente Costo (Euro/componente)
1 30
2 40
3 35
4 10
5 15
========================================================
Tabella 3: Produzione minima (numero macchine)
Prodotto Minimo
A 25
B 15
C 35
D 30
========================================================
Tabella 4: Quantità di componenti per ogni macchina
Componenti 1 2 3 4 5
Macchina
A 3 2 2 0 3
B 4 2 5 4 4
C 1 3 3 3 2
D 1 2 0 1 1
========================================================
Tabella 5: Tempi di lavorazione
Componente Tempo (minuti)
1 10
2 15
3 10
4 20
5 25
========================================================
Numero di operai disponibili: 9 per 40 ore/settimanali ciascuno
Formulazione del problema
Dati
- macchine = 4 (tipi di macchine da produrre)
- ricMi (ricavo della vendita della macchina i=1..4) [€]
- componente = 5 (tipi di componenti con cui si costruiscono le macchine)
- costCj (costo del componente j=1..5) [€]
- prodMini (produzione minima settimanale di macchine di tipo i=1..4)
- composMij (quantità di componente j=1..5 per macchina i=1..4)
- tempi (tempo di lavorazione per macchina i=1..4) [minuti]
- operai = 9 (numero di operai)
- oreSett = 40 (numero di ore settimanali)
Variabili
- xi (numero di macchine da produrre ogni settimana)
- yj (numero di componenti da acquistare ogni settimana)
Funzione obiettivo
Vogliamo massimizzare il guadagno, quindi:
max (somma)i ricMi – (somma)j costCj [€]
Vincoli
- vincolo di produzione minima:
xi >= prodMini (per ogni i)
- vincolo che limita l'utilizzo di componenti in funzione della loro disponibilità:
(somma)i xi * composMij – yj <= 0 (per ogni j)
- vincolo per evitare che la somma dei tempi di collaudo necessari per ogni componente superi la somma di ore settimanali di tutti gli operai. Nota: il dato tempi è espresso in minuti, quindi o convertiamo in ore lui o convertiamo in minuti il resto; per evitare di avere virgole tra i piedi, convertiamo tutto in minuti:
(somma)j yj * tempi <= operai * oreSett * 60 [minuti]
Lindizzazione del problema
! esercizio - Macchine
! variabili: x(i) = numero di macchine da produrre ogni settimana
! y(j) = numero di componenti da acquistare ogni settimana
! le variabili sono continue e non negative
! funzione obiettivo
max 2050 x1 + 3500 x2 + 2550 x3 + 1250 x4 - 30 y1 - 40 y2 - 35 y3 - 10 y4 - 15 y5
st
! vincoli di produzione minima
prMin1) x1 >= 25
prMin2) x2 >= 15
prMin3) x3 >= 35
prMin4) x4 >= 30
! vincoli sulla disponibilità dei componenti
disp1) 3 x1 + 4 x2 + 1 x3 + 1 x4 - y1 <= 0
disp2) 2 x1 + 2 x2 + 3 x3 + 2 x4 - y2 <= 0
disp3) 2 x1 + 5 x2 + 3 x3 + 0 x4 - y3 <= 0
disp4) 0 x1 + 4 x2 + 3 x3 + 1 x4 - y4 <= 0
disp5) 3 x1 + 4 x2 + 2 x3 + 1 x4 - y5 <= 0
! vincoli sui tempi di collaudo
temp) 10 y1 + 15 y2 + 10 y3 + 20 y4 + 25 y5 <= 21600
end
Linghizzazione del problema
MODEL:
SETS:
macchine /1..4/: pv, pmin, x;
componenti /1..5/: c, t, y;
composizione(macchine,componenti): com;
ENDSETS
DATA:
pv = 2050 3500 2550 1250;
c = 30 40 35 10 15;
pmin = 25 15 35 30;
com = 3 2 2 0 3
4 2 5 4 4
1 3 3 3 2
1 2 0 1 1;
t = 10 15 10 20 25;
dispH = 21600;
ENDDATA
!Funzione obiettivo è quella di massimizzare i ricavi meno i costi;
max = @sum(macchine(i): pv(i) * x(i)) - @sum(componenti(j): c(j)* y(j));
!Il primo vincolo fa riferimento alla quantità minima da produrre;
@for(macchine(i): x(i) >= pmin(i));
!Il secondo vincolo fa riferimento alla quantità massima di componenti utilizzabili;
@for(componenti(j): @sum(macchine(i): com(i,j) * x(i)) <= y(j));
!Il terzo vincolo fa riferimento al tempo di lavorazione di ogni componente, il quale
non deve essere maggiore del tempo totale a disposizione;
@for(macchine(i): @sum(componenti(j): t(j) * y(j)) <= dispH);
END
Altre domande
L’ufficio personale, incaricato di assumere nuovi operai, vuol sapere di quanto aumenterebbe il profitto dell’azienda per ogni operaio specializzato in più e fino a che limite massimo.
Il motivo per cui dovremmo assumere nuovi operai è quello di aumentare il numero di componenti che riusciamo a collaudare in una settimana. Dall'analisi di sensitività osserviamo alla colonna “allowable increase” che il vincolo sul tempo di collaudo può aumentare all'infinito senza che la soluzione ottima cambi. Questo ovviamente non significa che non possa migliorare il valore ottimo, e per calcolarlo basta osservare il prezzo-ombra del vincolo tempo, che è pari a 13,117647. Dal momento che questo valore fa riferimento a un minuto di lavoro, e che ogni operaio lavora per 40*60 = 2400 minuti a settimana, per ogni nuovo operaio assunto l'azienda aumenterebbe i profitti di 13,117647 * 2400 = 31482,3528 €.
L’ufficio vendite vuole sapere se preparare per l’anno prossimo contratti analoghi a quelli vigenti o se modificarli, aumentando o diminuendo il numero minimo di macchine da produrre per ogni tipo.
Osservando i risultati del problema, a quanto pare l'unica macchina che conviene produrre più dei limiti minimi richiesti è la 4:
ROW SLACK OR SURPLUS DUAL PRICES
PRMIN1) 0.000000 -268.235291
PRMIN2) 0.000000 -910.294128
PRMIN3) 0.000000 -322.941162
PRMIN4) 45.294117 0.000000
L'azienda dovrebbe quindi abbassare i limiti minimi di produzione per le prime tre macchine, mentre potrebbe lasciare inalterato quello sulla quarta dato che non si tratta comunque di un vincolo attivo.
Torna alla pagina di Ricerca Operativa