Un enigma in fabbrica

 

Nella fabbricazione di alcuni prodotti, certe fasi di montaggio possono essere liberamente eseguite in diverse sequenze.

Esaminiamo il caso di un prodotto che richiede 3 fasi di montaggio A, B, C, supponendo che le sequenze di montaggio possibili siano ABC, ACB, BAC. Supponiamo di dover produrre 150 pezzi di questo prodotto in una giornata di lavoro, corrispondente a 3 turni di 8 ore.

Per motivi organizzativi, il trasporto dei semilavorati da un reparto di montaggio a un altro avviene solo a fine turno: ne segue che su ogni pezzo viene eseguita esattamente una fase di montaggio in ogni turno.

Inoltre, in dipendenza dalle necessità di reparti estranei a questa produzione, la disponibilità di operai specializzati nelle varie fasi di montaggio varia turno per turno, e con essa varia in conseguenza il numero di pezzi che è possibile lavorare. La dipendenza tra fasi di montaggio e turni è riportata nella tabella seguente:

 

Fase

I turno

II turno

III turno

A

100

70

20

B

60

40

100

C

20

60

100

Numero di pezzi eseguibili nei vari turni per ogni fase.

 

Il costo di una fase di montaggio dipende dalla fase e dal turno secondo la tabella seguente:

 

Fase

I turno

II turno

III turno

A

3

2

1

B

2

4

1

C

1

2

2

Costo dell’esecuzione su un pezzo di una fase di montaggio nei vari turni.

 

Formulare in termini di programmazione lineare il problema di produrre tutti i 150 pezzi richiesti

1.       assegnando il carico di lavoro delle varie fasi nei vari turni nel rispetto delle disponibilità di manodopera;

  1. minimizzando il costo sostenuto per la produzione.

Risolvere il problema impiegando il metodo del simplesso.

 

 

Soluzione

Sia xij una variabile reale non negativa indicante il numero di pezzi su cui è stata effettuata la fase di montaggio i nel turno j. Il numero di pezzi lavorati nel turno j + 1 dipende

·         dalla manodopera disponibile

·         dal numero di pezzi lavorati nel turno j

·         dalle sequenze di montaggio ammissibili.

Poiché queste ultime sono solo ABC, ACB, BAC, dovrà aversi

xC2 + xB2  =  xA1           xB3  =  xC2

xA2  =  xB1                    xC3  =  xB2 + xA2

La scarsità di manodopera comporta i vincoli

xA1 < 100       xB1 <  60          xA2 <  70        xB2 <  40          xC2 <  60        xB3 <  100         xC3 <  100

D’altra parte, dovendo produrre 150 pezzi, si dovrà imporre

xB3 + xC3  =  150.

La funzione costo da minimizzare si scrive

c(x)  =  3xA1 + 2xB1 + 2xA2 + 4xB2 + 2xC2 + xB3 + 2xC3

Eliminate le variabili xA2 e xB3, il problema diventa

min       3xA1 + 4xB1 + 4xB2 + 3xC2 + 2xC3

xij  >  0             xA1 < 100          xB1 <  60

xB2 <  40          xC2 <  60          xC3 <  100

xC2 + xB2    xA1 = 0

xC3xB1xB2  =  0

xC2 + xC3  =  150.

Questo problema può essere ulteriormente ridotto osservando che

xA1 =  xB2 + xC2                                                                                              (1)

xC3 =  xB1 + xB2                                                                                   (2)

e che

§         siccome xB2 <  40, xC2 <  60 Þ  xB2 + xC2  < 100, il vincolo xA1 < 100 può essere rimosso,

§         siccome xB1 <  60, xB2 <  40 Þ  xB1 + xB2  < 100 anche il vincolo xC3 < 100 può essere rimosso,

Si ricava dunque

min       6xB1 + 9xB2 + 6xC2

xij  >  0             xB1 <  60

xB2 <  40          xC2 <  60 

xC2 + xB1 + xB2 =  150

e la tabella del simplesso si può scrivere

 

B1

B2

C2

 

 

 

 

6

9

6

0

0

0

0

1

0

0

1

0

0

60

0

1

0

0

1

0

40

0

0

1

0

0

1

60

1

1

1

0

0

0

150

 

La tabella non è in forma canonica. Per portarla in forma canonica si può applicare il metodo delle variabili artificiali. E' evidentemente sufficiente introdurre una sola variabile artificiale, e modificare di conseguenza la funzione obiettivo

 

B1

B2

C2

 

 

 

 

 

0

0

0

0

0

0

1

0

1

0

0

1

0

0

0

60

0

1

0

0

1

0

0

40

0

0

1

0

0

1

0

60

1

1

1

0

0

0

1

150

 

La tabella può essere facilmente portata in forma canonica sottraendo l'ultima riga alla riga 0:

 

B1

B2

C2

 

 

 

 

 

–1

–1

–1

0

0

0

0

–150

1

0

0

1

0

0

0

60

0

1

0

0

1

0

0

40

0

0

1

0

0

1

0

60

1

1

1

0

0

0

1

150

 

La soluzione può essere migliorata eseguendo successive operazioni di pivot sugli elementi evidenziati in rosso:

 

B1

B2

C2

 

 

 

 

 

0

–1

–1

1

0

0

0

–90

1

0

0

1

0

0

0

60

0

1

0

0

1

0

0

40

0

0

1

0

0

1

0

60

0

1

1

–1

0

0

1

90

 

B1

B2

C2

 

 

 

 

 

0

–1

0

1

0

1

0

–30

1

0

0

1

0

0

0

60

0

1

0

0

1

0

0

40

0

0

1

0

0

1

0

60

0

1

0

–1

0

–1

1

30

 

B1

B2

C2

 

 

 

 

 

0

0

0

0

0

0

1

0

1

0

0

1

0

0

0

60

0

0

0

1

1

1

0

10

0

0

1

0

0

1

0

60

0

1

0

–1

0

–1

1

30

 

Disponiamo quindi di una soluzione ammissibile di base. Reintegrando la funzione obiettivo originale si ottiene la tabella

 

B1

B2

C2

 

 

 

 

6

9

6

0

0

0

0

1

0

0

1

0

0

60

0

0

0

1

1

1

10

0

0

1

0

0

1

60

0

1

0

–1

0

–1

30

che può essere posta in forma canonica sottraendo alla riga 0 la prima riga moltiplicata per 6, la quarta moltiplicata per 9 e la terza moltiplicata per 6.

 

B1

B2

C2

 

 

 

 

0

0

0

3

0

3

–990

1

0

0

1

0

0

60

0

0

0

1

1

1

10

0

0

1

0

0

1

60

0

1

0

–1

0

–1

30

 

Questa soluzione è ottima in quanto i costi ridotti sono tutti > 0 e il problema è di minimizzazione. In conclusione, le lavorazioni di montaggio dovranno essere eseguite come riportato nella seguente tabella

 

 

I turno

II turno

III turno

Totale lavorazioni

A

90

60

0

150

B

60

30

60

150

C

0

60

90

150

Totale nei turni

150

150

150

 

 

Ora, tanto per perdere altro tempo, risolviamo anche il problema di trovare una soluzione pessima. In questo caso i costi ridotti indicano che si può tentare di aumentare il valore della funzione obiettivo eseguendo un’operazione di pivot sull’elemento evidenziato. Si ottiene

 

B1

B2

C2

 

 

 

 

0

0

0

0

–3

0

–1020

1

0

0

0

–1

–1

50

0

0

0

1

1

1

10

0

0

1

0

0

1

60

0

1

0

0

1

0

40

 

La soluzione di base ottenuta è xB1 = 50, xB2 = 40, xC2 = 60. Ricordando che xB3 = xC2, xA2 = xB1, si ricava xB3 = 60, xA2 = 50. Le trasformazioni (1)-(2) forniscono inoltre xA1 = 100, xC3 = 90. Poiché i coefficienti di costo ridotto risultano non positivi, la soluzione individuata è pessima.