Capitolo 1 Modelli di programmazione lineare Molti problemi di interesse pratico si prestano ad essere descritti e risolti come modelli di programmazione matematica. Un modello (o programma) è la descrizione di un problema che richiede di massimizzare (o minimizzare) una funzione di costo o profitto su un certo dominio. La scrittura usuale è max z = f(x) (oppure: min z = f(x)) (1.1) b i g i (x) = b i i = 1,..., m, (1.2) b i x = (x 1,..., x n ) X R n. (1.3) In un modello sono presenti: una serie di variabili di controllo in funzione delle quali viene formulato ogni altro elemento del modello; queste variabili, almeno in parte, corrispondono alle quantità agendo sulle quali la soluzione verrà implementata; una funzione obiettivo f(x) che determina un costo o profitto legato alla soluzione; una o più serie di vincoli, che correlano tra loro i valori delle variabili, imponendo condizioni di fisica realizzabilità e/o requisiti particolari richiesti alla soluzione. Tra i modelli di programmazione matematica hanno particolare rilievo i modelli di programmazione lineare, nei quali la f(x) e le g i (x) sono espressioni lineari. Un modello di programmazione lineare è quindi esprimibile sempre come n max z = c j x j (1.4) j=1 1
2 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE n b i a ij x j = b i i = 1,..., m, (1.5) j=1 b i x = (x 1,..., x n ) X R n. (1.6) I campi di esistenza delle variabili x j sono di solito di tipo continuo (spesso non negativo) oppure intero non negativo (x j Z + ), oppure binario (x j {0, 1}) a seconda del tipo di decisione che tali variabili modellano. La particolarità dei modelli lineari è legata alla loro maggiore semplicità, che li rende più facilmente risolvibili rispetto ai modelli non lineari; in effetti sono ormai disponibili pacchetti software commerciali in grado di risolvere in modo efficiente programmi lineari di notevoli dimensioni (intese come quantità di variabili e di vincoli). Questo rende spesso preferibile, per la risoluzione di un problema, lo sviluppo di un modello lineare anche quando un modello non lineare potrebbe essere più compatto. Lo sviluppo di un modello di programmazione lineare parte dall analisi di una situazione reale (più o meno schematizzata) e, in modo simile a quanto accade nello sviluppo di una procedura software, richiede di identificare le variabili di controllo ed i rispettivi domini, i vincoli e la funzione obiettivo. Non ci sono regole rigide da seguire: il modello finale nasce spesso in particolare nela caso di situazioni complesse per raffinamenti successivi. ESERCIZIO 1.1. Un gruppo di amici dovendo fare una gita ha deciso di mettere cibi e bevande in un unico zaino da 10 Kg. Lo zaino può essere riempito con 1. Cioccolata (confezioni da 500 g.) 2. Succhi di frutta (bottiglie da 1 l.) 3. Lattine di birra (formato da 0.33 l.) 4. Panini imbottiti (da 100 g. l uno) 5. Acqua minerale (bottiglie da 1 l.) 6. Pacchi di biscotti (confezioni da 500 g.) Dopo un indagine tra i partecipanti alla gita (si poteva dare un voto da 1 a 100 ad ogni prodotto) sono stati determinati i seguenti punteggi. Prodotto Punti Cioccolata 10 Succhi di frutta 30 Lattine di birra 6 Prodotto Punti Panini imbottiti 20 Acqua minerale 20 Pacchi di biscotti 8 Per non scontentare nessuno si è deciso di portare almeno: 2 confezioni di cioccolata; 2 bottiglie di succo di frutta;
3 6 lattine di birra; 10 panini imbottiti; 2 conf. di biscotti. Formulare il modello di Programmazione Lineare che massimizzi il punteggio rispettando il vincolo di capacità dello zaino. ESERCIZIO 1.2. L acciaieria PLASTIK deve evadere un ordine di 1000 tonnellate di acciaio INOX. Per questa produzione servono manganese (almeno l 1% in peso), cromo (almeno il 18%) e molibdeno (almeno il 2%). I fornitori di metalli non ferrosi vendono per esigenze di mercato questi prodotti in tre tipi di confezioni differenti. La prima confezione contiene 2 Kg. di manganese, 2 Kg. di cromo e 1 Kg. di molibdeno e costa 10 euro. La seconda confezione contiene 2 Kg. di manganese, 3 Kg. di cromo e 1 Kg. di molibdeno e costa 15 euro. La terza confezione contiene 1 Kg. di manganese, 2 Kg. di cromo e 5 Kg. di molibdeno e costa 20 euro. Formulare il modello di Programmazione Lineare per minimizzare il costo di acquisto delle confezioni. ESERCIZIO 1.3. Un azienda produce tre modelli 1, 2 e 3 di un certo prodotto. Ciascun modello richiede due tipi di materiali grezzi (A e B) di cui sono disponibili rispettivamente 4000 e 6000 unità. In particolare, per produrre una unità del modello 1 sono necessarie 2 unità di A e 4 unità di B; per una unità del modello 2 sono necessarie 3 unità di A e 2 unità di B; per una unità del modello 3 sono necessarie 5 unità di A e 7 di B. Il modello 1 richiede, per ogni unità prodotta, il doppio di forza lavoro rispetto al modello 2 e il triplo rispetto al modello 3. La forza lavoro presente in azienda è in grado di produrre al massimo l equivalente di 700 unità/giorno del modello 1. Il settore marketing dell azienda ha reso noto che la domanda minima per ciascun modello è rispettivamente di 200, 200 e 150 unità. Il profitto unitario di ogni modello è di 30, 20 e 50 euro, rispettivamente. Formulare il programma lineare per pianificare la produzione giornaliera massimizzando il profitto. ESERCIZIO 1.4. La casa editrice ANALFABETA pubblica un quotidiano che viene distribuito da quattro centri di smistamento S 1, S 2, S 3, S 4 che richiedono rispettivamente almeno 100000, 150000, 50000 e 75000 copie. Il giornale viene stampato in tre tipografie T 1, T 2, T 3 che producono rispettivamente al massimo 125000, 180000 e 70000 copie I costi per la spedizione sono di 2 euro/km. per giornale e le distanze tra le tipografie ed i centri di smistamento sono rispettivamente di 20, 25, 15 e 5 Km. per la prima tipografia, di 12, 14, 18 e 30 Km per la seconda, e di 19, 11, 40 e 12 Km per la terza. (a) Formulare il modello di Programmazione Lineare per pianificare le spedizioni a costo totale minimo. (b) Si definisca il costo di approvvigionamento di un centro di smistamento come il costo totale delle spedizioni verso quel centro. Formulare il modello di Programmazione Lineare che minimizza il massimo costo di approvvigionamento.
4 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE ESERCIZIO 1.5. Un motel autostradale, dovendo garantire un servizio continuato 24 ore su 24, ha bisogno di un numero minimo di inservienti per ogni ora del giorno secondo la seguente tabella. Fascia oraria Numero min. 02-06 4 06-10 8 10-14 10 Fascia oraria Numero min. 14-18 7 18-22 12 22-02 4 Ciascun inserviente lavora 8 ore consecutive al giorno. Formulare il modello di Programmazione Lineare per garantire la presenza richiesta utilizzando il minor numero possibile di inservienti. ESERCIZIO 1.6. Scrivere il modello in programmazione lineare del seguente problema. Un caporeparto di un officina di un azienda meccanica deve pianificare l esecuzione di cinque lotti su di una macchina della durata rispettivamente di 5 minuti, 7 minuti, 4 minuti, 7 minuti e 10 minuti. La sequenza di esecuzione (1, 2, 3, 4, 5) è data e non ci può essere sovrapposizione temporale fra i lotti. Il primo lotto ha come ora di consegna desiderata le 10.32, il secondo le 10.38, il terzo le 10.42, il quarto le 10.52 ed il quinto le 10.57. Sia l errore di un lotto pari al valore assoluto della differenza tra il suo tempo di fine lavorazione e l ora di consegna. Si vuole minimizzare la somma degli errori dei lotti (ipotesi: il reperto comincia a lavorare alle 8.30). ESERCIZIO 1.7. Scrivere il modello in programmazione lineare del seguente problema. Un azienda alimentare deve pianificare la produzione di un prodotto per i prossimi 4 mesi. Non ci sono giacenze in magazzino all inizio del periodo e non ce ne devono essere alla fine dei 4 mesi. La domanda mensile prevista è di 120 ton, 160 ton, 300 ton e 200 ton rispettivamente (ipotesi: la produzione viene stoccata e rilasciata interamente a fine mese). La capacità produttiva mensile è 140 ton, 150 ton, 140 ton e 160 ton rispettivamente ad un costo di 10 euro/ton. In caso di necessità è possibile produrre in straordinario aumentando la capacità mensile di (al più) 50 ton, 75 ton, 70 ton e 80 ton rispettivamente. La produzione straordinaria ha un costo addizionale di 6 euro/ton. Inoltre, per garantire una produzione omogenea si vuole che la produzione ordinaria di ciascun mese sia almeno pari al 10% della produzione totale dei primi tre. Le eventuali giacenze a fine mese costano 5 euro/ton. L obiettivo è quello di pianificare la produzione di costo minimo. ESERCIZIO 1.8. Lo stato di Islandia ha quattro industrie esportatrici: acciaio, motori, elettronica e plastica. Il ministro dell economia di questo stato vuole massimizzare il saldo esportazioni-importazioni. La moneta di Islandia è il klutz. I prezzi in klutz sul mercato mondiale per unità di acciaio, motori, elettronica e plastica sono rispettivamente 500, 1500, 300 e 1200. La produzione di una unità di acciaio richiede 0.02 unità di motori, 0.01 unità di plastica, 250 klutz di materie prime acquistate sul mercato mondiale e mezzo anno-uomo di manodopera. La produzione di una unità di motori richiede 0.8 unità di acciaio, 0.15 unità di elettronica, 0.11 unità di plastica, 300 klutz di materie prime acquistate sul mercato mondiale e un anno-uomo di manodopera. La produzione di una unità di prodotti elettronici richiede 0.01 unità di acciaio, 0.01 unità di motori, 0.05 unità di plastica, 50 klutz di materie
5 prime acquistate sul mercato mondiale e mezzo anno-uomo di manodopera. La produzione di una unità di plastica richiede 0.03 unità di motori, 0.2 unità di acciaio, 0.05 unità di elettronica, 300 klutz di materie prime acquistate sul mercato mondiale e due anni-uomo di manodopera. La produzione di motori è limitata a 650000 unità, quella di plastica a 60000 unità. La manodopera totale disponibile in Islandia è di 830000 uomini per anno. Acciaio, motori, elettronica e plastica non possono essere importati, ma devono essere prodotti all interno. ESERCIZIO 1.9. Scrivere il modello in programmazione lineare del seguente problema. Si consideri un territorio sul quale siano localizzati 7 punti di domanda (ad es. 7 città) indicati in tabella con 1, 2, 3, 4, 5, 6, 7. Si considerino, inoltre, 5 punti di offerta indicati in tabella con A, B, C, D, E nei quali potrebbero essere aperti dei centri vendita di un impresa di distribuzione. Tale impresa è interessata a soddisfare la domanda sopramenzionata in modo tale che i clienti non percorrano più di 30 minuti di auto per raggiungere almeno uno dei centri vendita. In tabella, per ogni coppia di punti di domanda e di offerta, viene indicato il tempo auto necessario. L impresa ha inoltre fatto sapere che accetterà soluzioni che prevedano l attivazione del centro vendita B solo se è già attivo uno dei centri C o D. L apertura dei centri vendita costa rispettivamente (in miliardi di lire): A = 310, B = 250, C = 260, D = 330, E = 280. L obiettivo dell impresa è di minimizzare i costi di apertura dei centri vendita garantendo il fatto che che tutti i punti di domanda vengano serviti. A B C D E 1 41 33 24 29 58 2 25 12 22 58 41 3 21 43 34 54 18 4 21 42 39 26 18 5 11 23 24 29 53 6 47 23 19 16 31 7 37 47 51 26 19 ESERCIZIO 1.10. Una raffineria produce benzina verde e super a partire da due tipi di greggio A e B, usando tre impianti. Il primo impianto può produrre 2 barili di verde e 3 di super a partire da 4 barili di greggio tipo A e 3 barili di greggio tipo B. Il secondo impianto può produrre 4 barili di verde e 2 di super a partire da 3 barili di A e 4 barili di B. Il terzo può produrre 2 barili di verde e 2 barili di super a partire da 3 barili di A e 3 barili di B. Gli impianti lavorano sempre con le proporzioni specificate. La benzina verde viene venduta a 40$/barile, la super a 50$/barile. Sono disponibili per questo mese 5000 barili di greggio A e 6000 barili di greggio B. Per esigenze legate ad altre lavorazioni, almeno uno tra gli impianti deve produrre non più di 1000 barili. Formulare il programma lineare per massimizzare il profitto legato alla produzione mensile. ESERCIZIO 1.11. Un azienda agricola produce mais, soia e grano in tre tenute A, B, C. La tenuta A dispone di 600 ettari di terreno e di una riserva
6 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE di 8 10 6 m 3 di acqua. La tenuta B ha 700 ettari di terreno e 5 10 6 m 3 di acqua. La terza dispone di 450 ettari e di 6 10 6 m 3. Le produzioni di mais, soia e grano garantiscono rispettivamente profitti di 5, 7 e 6 Keuro/ettaro. I consumi di acqua sono di 20000 m 3 /ha per il mais,10000 m 3 /ha per la soia e 10000 m 3 /ha per il grano. Le direttive della comunità europea richiedono che: almeno una tenuta lasci 200 ettari di terreno incolto, e l estensione complessiva del terreno coltivato a soia dall azienda non superi il 40% del totale del suolo coltivato. Formulare il programma lineare per la massimizzazione del profitto. ESERCIZIO 1.12. Una ditta ha la possibilità di attivare, per l anno corrente, la produzione di quattro tipi di prodotti A, B, C e D. Per ogni tipo di produzione, se attivata, la ditta si impegna a produrre un quantitativo minimo pari rispettivamente a 1000, 1500, 3000 e 2000 unità. La produzione di A, B, C e D richiede un costo fisso per l attivazione delle rispettive linee di produzione ed una quantità di forza lavoro per ogni unità prodotta, ed ogni unità venduta fornisce un profitto, come specificato dalla seguente tabella (in euro). Prodotto Costo fisso Forza lavoro unit. Profitto unit. A 14500 10 50 B 10000 15 60 C 8000 5 55 D 9000 14 80 La ditta dispone per l anno in corso di 200000 unità complessive di forza lavoro. Inoltre i committenti per la quale essa lavora richiedono che nel caso venga attivata la produzione di A venga anche prodotto almeno uno tra C o D, almeno nei quantitativi minimi sopra indicati. Formulare il programma lineare per decidere le produzioni da attivare e pianificarne i quantitativi al fine di massimizzare il saldo costi-profitti. ESERCIZIO 1.13. Scrivere il modello in programmazione lineare del seguente problema. In una centrale elettrica sono a disposizione tre generatori ed ogni giorno si deve decidere quali usare solo di giorno e quali anche di notte per assicurare una produzione di almeno 4000 megawatts di giorno e di almeno 2800 megawatts di notte. L uso di un generatore comporta la presenza di personale tecnico che sorvegli il suo funzionamento; tale personale viene retribuito in maniera differente a seconda dei turni necessari (12h/24h) e del tipo di generatore. Tali costi di attivazione sono riportati nella tabella che segue (in migliaia di lire) insieme al costo per ogni megawatt prodotta. Costo attivazione Costo al giorno giorno/notte megawatt Generatore A 800 1200 4 Generatore B 700 1000 6 Generatore C 900 1400 7 Il generatore A ha una capacità produttiva di 2500 megawatts al giorno (o notte) ma questa capacità scende a 2000 megawatts se il generatore viene
7 utilizzato sia di giorno che di notte. Analogamente, il generatore B ha una capacità produttiva di 2000 megawatts al giorno ma questa capacità scende a 1500 megawatts se il generatore viene utilizzato sia di giorno che di notte. Infine, il generatore C ha una capacità produttiva di 3000 megawatts al giorno ma questa capacità scende a 2500 megawatts se il generatore viene utilizzato sia di giorno che di notte. Si vuole minimizzare il costo complessivo. ESERCIZIO 1.14. Scrivere il modello in programmazione lineare del seguente problema. Un caporeparto di un officina di un azienda meccanica deve pianificare l esecuzione di cinque lotti su di una macchina della durata rispettivamente di 5 minuti, 7 minuti, 4 minuti, 7 minuti e 10 minuti. Non ci può essere sovrapposizione temporale fra i lotti. Il primo lotto ha come ora di consegna desiderata le 10.32, il secondo le 10.38, il terzo le 10.42, il quarto le 10.52 ed il quinto le 10.57. Sia l errore di un lotto pari al valore assoluto della differenza tra il suo tempo di fine lavorazione e l ora di consegna. Si vuole minimizzare la somma degli errori dei lotti (ipotesi: il reperto comincia a lavorare alle 8.30). ESERCIZIO 1.15. Una ditta che si occupa di riparazioni deve pianificare le assunzioni per i prossimi 5 mesi. All inizio la ditta dispone di 20 operai esperti; ogni operaio esperto fornisce 150 ore di lavoro al mese e percepisce uno stipendio mensile di 1000 euro. Un operaio neoassunto, durante il primo mese di servizio percepisce uno stipendio di 500 euro e non fornisce in pratica lavoro utile; per questo primo mese gli viene invece affiancato un lavoratore esperto per insegnargli il mestiere. Ogni lavoratore esperto che svolge affiancamento rende per 70 ore di lavoro al mese (anziché 150). Dopo il mese di apprendistato i lavoratori neoassunti diventano esperti, con pari abilità lavorativa e stipendio. Le quantità di ore/lavoro da coprire per i prossimi 5 mesi sono rispettivamente di 2000, 4000, 7000, 3000, 3500 ore. Infine, se si assumono almeno 10 persone nel corso dei primi due mesi, l azienda puó incassare un contributo statale di 100000 euro. Formulare il programma lineare che consente di pianificare le assunzioni riducendo al minimo i costi del personale nei prossimi cinque mesi. ESERCIZIO 1.16. L azienda PC4All produce pc e deve acquistare le scorte di materie prime necessarie per la produzione dei case. Per produrre i case nel mese corrente sono necessari i seguenti materiali: viti: 15000 unità; plastica: 1300 kg.; acciaio: 2900 kg. Per effettuare gli acquisti l azienda si può appoggiare a quattro fornitori, i quali le forniscono le materie prime in lotti contenenti le seguenti quantità di materiale: viti plastica acciaio F1 50 3 5 F2 30 4 7 F3 25 1 3 F4 10 8 1
8 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE Nell ottica di gestire al meglio il proprio magazzino, la PC4All intende avere, alla fine del mese, la minor quantità di materiale non utilizzato possibile e, a tal fine, è disposta anche a comprare una quantità di materie prime inferiore alle proprie necessità. Il costo per lo stockaggio o per il mancato acquisto di una unità di materiale è il seguente: Viti Plastica Acciaio 0.2 euro/pezzo 1 euro/kg. 3 euro/kg. Per motivi commerciali l azienda, se acquista dei lotti di materiale dal fornitore F1, è impossibilitata a rifornirsi dai fornitori F2 ed F4. Formulare il modello di programmazione lineare che minimizzi i costi derivanti dallo scostamento tra le quantità di materiali acquistate e quelle necessarie, tenendo conto che non è possibile comprare porzioni di lotto di materiali.
Capitolo 1 Modelli di programmazione lineare 1.1. Le variabili di controllo determinano la struttura della soluzione di un problema, permettendone la realizzazione. Quindi in questo caso è naturale definire le variabili x 1, x 2, x 3, x 4, x 5, x 6, con il significato x i = unità di alimento (i) caricate nello zaino. Con questa scelta di variabili si può ottenere il seguente modello, nel quale compaiono due serie di vincoli: (1) un vincolo relativo alla capacità dello zaino, che non può essere superata, e (2) vincoli relativi ai quantitativi minimi di alimenti da caricare. max 10x 1 + 30x 2 + 6x 3 + 20x 4 + 20x 5 + 8x 6 1 2 x 1 + x 2 + 1 3 x 3 + 1 10 x 4 + x 5 + 1 2 x 6 10 (1.1.1) x 1 2, x 2 2, x 3 6, x 4 10, x 6 2, (1.1.2) x 1,..., x 6 Z +. 1.2. Le variabili più naturali sono x 1, x 2, x 3, dove x i = numero di confezioni di tipo i acquistato. A volte può non essere evidente quale sia la scelta di variabili più naturale. Una buona regola euristica è spesso la seguente: una definizione di variabili è soddisfacente quando essa permette di scrivere in modo semplice la funzione obiettivo (o comunque i vincoli più significativi) del modello. Ad esempio, in questo caso usare variabili che rappresentano le quantità di materiali (manganese, cromo, molibdeno) acquistate anzichè le confezioni non 29
30 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE sarebbe soddisfacente, in quanto la funzione obiettivo risulterebbe molto difficile da esprimere. Con la scelta di variabili indicata invece, si ottiene il modello min 10x 1 + 15x 2 + 20x 3 2x 1 + 2x 2 + x 3 10000 (1.2.1) 2x 1 + 3x 2 + 2x 3 180000 (1.2.2) x 1 + x 2 + 5x 3 20000 (1.2.3) x 1, x 2, x 3 Z +, dove i vincoli (1.2.1), (1.2.2) e (1.2.3) rappresentano i quantitativi minimi di manganese, cromo e molibdeno da garantire, rispettivamente. 1.3. Le variabili x 1, x 2, x 3 sono sufficienti a modellare il problema, con x i = numero di unità di tipo i prodotte. Quindi si ha max 30x 1 + 20x 2 + 50x 3 2x 1 + 3x 2 + 5x 3 4000 4x 1 + 2x 2 + 7x 3 6000 (1.3.1) x 1 + 1 2 x 2 + 1 3 x 3 700 (1.3.2) x 1 200,, x 2 200, x 3 150 (1.3.3) x 1, x 2, x 3 Z +, con i vinvoli (1.3.1), (1.3.2) e (1.3.3) che rappersentano i vincoli sulla disponibilità di materie prime, sulla forza lavoro disponibile e sui requisiti minimi di produzione stabiliti dal marketing, rispettivamente. 1.4. (a) Per come sono specificati i costi di spedizione, la scelta naturale per la definizione delle variabili di controllo è la seguente: x ij = numero di copie spedite da T i a S j. In questo modo il modello diventa max 3 4 c ij x ij i=1 j=1
31 x 11 + x 12 + x 13 + x 14 125000 x 21 + x 22 + x 23 + x 24 180000 x 31 + x 32 + x 33 + x 34 70000 x 11 + x 21 + x 31 100000 x 12 + x 22 + x 32 150000 x 13 + x 23 + x 33 50000 x 14 + x 24 + x 34 75000 (1.4.1) (1.4.2) x ij Z +, i, j. I vincoli (1.4.1) e (1.4.2) impongono che ogni tipografia spedisca non più giornali di quanti ne stampa (per la realizzabilità fisica della soluzione) e che ogni centro ne riceva una quantità pari almeno al proprio fabbisogno. I costi c ij sono ricavati dalla matrice delle distanze indicata dal testo: c ij = 2 (distanza T i -S j ). (b) L obiettivo specificato pone la necessità di scrivere un programma di minimo con una funzione obiettivo del tipo max j { 3 } c ij x ij. i=1 Tale espressione è però non lineare e quindi proibita nel tipo di modelli qui trattato. Per conservare la linearità del modello, occorre introdurre una variabile ausiliaria ed una serie di vincoli come segue. min y x 11 + x 12 + x 13 + x 14 125000 x 21 + x 22 + x 23 + x 24 180000 x 31 + x 32 + x 33 + x 34 70000 x 11 + x 21 + x 31 100000 x 12 + x 22 + x 32 150000 x 13 + x 23 + x 33 50000 x 14 + x 24 + x 34 75000 (1.4.1 ) (1.4.2 ) 3 c ij x ij y j = 1,..., 4 (1.4.3) i=1 x ij Z +, i, j, y 0 La variabile ausiliaria y ed i vincoli (1.4.3) permettono di gestire l obiettivo min / max conservando la linearità del modello: in ogni soluzione ottima di questo programma lineare, il valore assunto da y coincide esattamente con max j { n i=1 c ijx ij }. I vincoli (1.4.1 ) e (1.4.2 ) hanno il ruolo già noto.
32 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE 1.5. Questo problema richiede, per essere modellato in modo semplice, una definizione accorta di variabili. Occorre tener presente che: (1) esiste una soluzione ottima dove ogni inserviente comincia lavorare all inizio di una fascia oraria e ne copre esattamente due; (2) ogni inserviente ha (naturalmente) un unico orario di inizio turno. Quindi è possibile definire: x i = numero di inservienti che cominciano il turno nella fascia i (i = 1,..., 6). Con queste variabili si ottiene il modello min x 1 + x 2 + x 3 + x 4 + x 5 + x 6 x 1 + x 6 4 (1.5.1) x 1 + x 2 8 (1.5.2) x 2 + x 3 10 (1.5.3) x 3 + x 4 7 (1.5.4) x 4 + x 5 12 (1.5.5) x 5 + x 6 4 (1.5.6) x 1,..., x 6 Z +. Poiché ogni inserviente che comincia il turno nella fascia i copre le fasce i ed i+1 (modulo 6), i vincoli (1.5.1) (1.5.6) garantiscono la copertura richiesta in ogni fascia. La funzione obiettivo rappresenta esattamente il numero di inservienti necessari. 1.6. Il problema richiede di scrivere un modello in grado di determinare gli istanti di inizio lavirazione dei lotti in esame; si può assumere come zero del tempo l ora delle 8:30, per cui i lotti hanno date di scadenza (espresse in minuti) di 122, 128, 132, 142 e 147. Una serie di variabili è necessaria per rappresentare i tempi di inizio lavorazione: t i = istante di lavorazione (in minuti dalle 8:30) del lotto i. Inoltre l errore del lotto i è dato da i = t i + p i d i, dove p i e d i indicano rispettivamente il tempo di lavorazione e la scadenza del lotto. La funzione obiettivo è quindi del tipo 5 t i + p i d i. i=1 Questo genere di funzione è non lineare quindi occorre nuovamente ricorrere ad un espediente per rappresentare i valori assoluti in un modello lineare. Ricordando che x = max(x, x), si può pensare di utilizzare la stessa tecnica usata per obiettivi di tipo min / max. Si introducono quindi le variabili i = errore del lotto i. Il modello è il seguente. min 1 + 2 + 3 + 4 + 5
33 t 1 + 5 t 2 (1 2) t 2 + 7 t 3 (2 3) t 3 + 4 t 4 (3 4) t 4 + 7 t 5 (4 5) 1 t 1 + 5 122 1 (t 1 + 5 122) 2 t 2 + 7 128 2 (t 2 + 7 128) 3 t 3 + 4 132 3 (t 3 + 4 132) 4 t 4 + 7 142 4 (t 4 + 7 142) 1 t 5 + 10 147 1 (t 5 + 10 147) (1.6.1) (1.6.2) t i 0, i 0, i = 1,..., 5. I vincoli (1.6.1) garantiscono il rispetto della sequenza di lavorazione che, secondo il testo, è predeterminata, mentre i vincoli (1.6.2) vincolano i i ad assumere il valore assoluto di t i + p i d i. 1.7. Il problema richiede in più, rispetto ad altri problemi di produzione già risolti, la gestione di scorte di magazzino in un certo numero di periodi di tempo (mesi, in questo caso). Questi problemi, comuni nel settore della pianificazione della produzione, vengono detti multiperiodali. In questi casi è utile (anche se non sempre indispensabile) disporre di un insieme di variabili che rappresentano esplicitamente il livello delle giacenze da gestire alla fine (o all inizio) di ogni periodo. Il problema in esame può essere modellato utilizzando le seguenti variabili. x i = produzione ordinaria (in ton.) per il mese i = 1..., 4, s i = produzione straordinaria (in ton.) per il mese i = 1,..., 4, y i = giacenze in magazzino alla fine del mese i = 1,..., 3. Una y 4 non è stata definita, in quanto è esplicitamente richiesto che essa valga zero in ogni soluzione ammissibile. Occorre modellare l uso della produzione ordinaria e straordinaria, rispettarne i limiti e correlarle alla domanda mensile (che deve essere soddisfatta) ed alle giacenze in magazzino. In base alle variabili specificate, un modello possibile è min 10 4 x i + 16 i=1 4 s i + 5 i=1 3 i=1 y i
34 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE x 1 + s 1 = 120 + y 1 x 2 + s 2 + y 1 = 160 + y 2 (1.7.1) x 3 + s 3 + y 2 = 300 + y 3 x 4 + s 4 + y 3 = 200 3 x i 0.1 (x i + s i ) i = 1,..., 4 (1.7.2) i=1 x 1 140, x 2 150, x 3 140, x 4 160, (1.7.3) s 1 50, s 2 75, s 3 70, s 4 80, (1.7.4) x i, s i, y i 0, i = 1,..., 4. I vincoli (1.7.1) svolgono il compito fondamentale di correlare la produzione di ogni mese con livelli di giacenze e domanda, esprimendo il bilancio (produzione mensile)+(giacenze a mese precedente) = (domanda mese)+(giacenze a fine mese). Le serie successive di vincoli sono piuttosto semplici ed esprimono il requisito sui livelli di produzione ordinaria minimi mensili (10% del totale sui primi tre mesi) e sulle capacità produttive massime (ordinaria e straordinaria) per i quattro mesi. 1.8. Indicando i prodotti con A, M, E, P (Acciaio, Motori, Elettronica, Plastica) si possono riassumere i requisiti per la produzione nella seguente tabella. A M E P Anni uomo Mat. prime A 0.02 0.01 0.5 250 M 0.8 0.15 0.11 1.0 300 E 0.01 0.01 0.05 0.5 50 P 0.2 0.03 0.05 2.0 300 Poiché acciaio, motori, elettronica e plastica vanno prodotti internamente e non acquistati, è conveniente scorporare la produzione per uso interno da quella per esportazioni, definendo le variabili dove x A, x M, x E, x P, y A, y M, y E, y P, x i = unità di prodotto i realizzate per esportazione, i {A, M, E, P }, y i = unità di prodotto i realizzate per uso interno, i {A, M, E, P }. Dall analisi del testo, occorre garantire che: la produzione interna di ogni prodotto sia sufficiente a supportare la produzione totale; le quantità di motori e plastica prodotte non eccedano i limiti imposti;
35 il piano produttivo non ecceda il monte-ore diponibile. Con le variabili precedentemente definite, il modello risulta come segue. max 500x A + 1500x B + 300x E + 1200x P [250(x A + y A ) + 300(x M + y M ) + 50(x E + y E ) + 300(x P + y P )] y A 0.8(x M + y M ) + 0.01(x E + y E ) + 0.2(x P + y P ) y M 0.02(x A + y A ) + 0.01(x E + y E ) + 0.03(x P + y P ) y E 0.15(x M + y M ) + 0.05(x P + y P ) y P 0.01(x A + y A ) + 0.11(x M + y M ) + 0.05(x E + y E ) x M + y M 650000 x P + y P 600000 (1.8.1) (1.8.2) 0.5(x A + y A ) + (x M + y M ) + 0.5(x E + y E ) + 2(x P + y P ) 830000 (1.8.3) x A, x M, x E, x P 0, y A, y M, y E, y P 0. La funzione obiettivo rappresenta il saldo esportazioni-importazioni; i vincoli (1.8.1) impongono che la produzione interna di ogni prodotto sia in grado di supportare la produzione totale; i vincoli (1.8.2) impongono i limiti richiesti alle produzioni di motori e plastica, ed infine il vincolo (1.8.3) impone di non eccedere il monte-ore disponibile. 1.9. L apertura di un centro è una decisione che differisce da quelle modellate fino a questo momento, per il fatto di essere puramente binaria (un centro viene aperto oppure no, non esistono casi intermedi). Per modellare questo genere di decisioni, è possibile inserire nei programmi lineari variabili binarie, cioè interi con valori limitati all insieme {0, 1}. È da notare che queste variabili, a parte il loro campo di esistenza, non hanno alcun ruolo privilegiato rispetto alle altre; in particolare, non sono disponibili i consueti operatori logici (tipo and, or, not) comuni nei linguaggi di programmazione, che vanno quindi emulati per mezzo di esperessioni lineari puramente algebriche. Inoltre, non è consentito in alcun modo introdurre prodotti del tipo (variabile logica) (altre variabili), errore sorprendentemente comune. Il problema in esame si può modellare con cinque variabili binarie A, B, C, D, E che rappresentano l apertura (variabile= 1) o la non-apertura (variabile= 0) del rispettivo centro. min 310A + 250B + 260C + 330D + 280E
36 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE C + D 1 (1.9.1) A + B + C 1 (1.9.2) A + E 1 (1.9.3) A + D + E 1 (1.9.4) A + B + C + D 1 (1.9.5) B + C + D 1 (1.9.6) D + E 1 (1.9.7) B C + D (1.9.8) I vincoli (1.9.1) (1.9.7) modellano operatori logici di tipo or: in base ai tempi di percorrenza dati, per servire il punto 1 occorre aprire C oppure D; per servire il punto 2 occorre aprire A oppure B oppure C, e così via. Il vincolo (1.9.8) modella un implicazione logica B = C D (il requisito B apre solo se... specificato dal testo: confrontare con la tabella di verità dell operatore logico). Si noti anche che nell insieme di vincoli (1.9.1) (1.9.8) esistono vincoli ridondanti: ad esempio, (1.9.1) implica (1.9.5), (1.9.6) e (1.9.8); questi tre vincoli potrebbero quindi essere rimossi dal modello. Questa operazione non è strettamente necessaria ai fini della correttezza del modello, ma è desiderabile in ambito applicativo, in quanto semplifica la risoluzione del modello. 1.10. La definizione di variabili che porta a realizzare il modello più conciso è probabilmente la seguente: x i = numero di lavorazioni svolte all impianto i = 1, 2, 3. { 1 iff l impianto i è limitato a 1000 barili, y i = i = 1, 2, 3. 0 altrimenti, La definizione suggerita di x i permette di gestire il funzionamento degli impianti con le proporzioni specificate, senza ricorrere a vincoli addizionali. Il modello risulta max 40(2x 1 + 4x 2 + 2x 3 ) + 50(3x 1 + 2x 2 + 2x 3 ) 4x 1 + 3x 2 + 3x 3 5000 3x 1 + 4x 2 + 3x 3 6000 (1.10.1) y 1 + y 2 + y 3 1 (1.10.2) 5x 1 1000y 1 + M(1 y 1 ) 6x 2 1000y 2 + M(1 y 2 ) 4x 3 1000y 3 + M(1 y 3 ) (1.10.3) x i 0, y i {0, 1}, i = 1, 2, 3.
37 I vincoli (1.10.1) sono relativi al magazzino disponibile per i due tipi di greggio, che limita la produzione. Il vincolo (1.10.2) impone che almeno un impianto sia limitato a 1000 barili. I vincoli (1.10.3) svolgono l importante funzione di collegare i valori delle variabili binarie y i con i valori delle x i ; la costante M (detta spesso big-m ) è una costante estremamente grande. Si noti che ad esempio il primo vincolo di questa serie implica: y 1 = 1 = 5x 1 1000, y 1 = 0 = 5x 1 M (cioè 5x 1 non vincolato). Questa tecnica del big-m è comunemente usata per correlare variabili binarie e variabili di altro tipo. 1.11. È necessario scorporare il prodotto sia per tipologia che per tenuta, altrimenti non è possibile gestire le estensioni coltivate e le riserve d acqua. Sono quindi necessarie le variabili x ij = ettari della tenuta j coltivati a coltura i, con i {M, S, G} (Mais, Soia e Grano) e j {A, B, C}. Inoltre tre variabili binarie y A, y B ed y C verranno usate per determinare quale tenuta lascerà 200 ettari incolti (y j = 1 iff la tenuta j lascia 200 ettari incolti). Il modello è il seguente. max 5(x MA + x MB + x MC ) + 7(x SA + x SB + x SC ) + 6(x GA + x GB + x GC ) x MA + x SA + x GA 600 200y A x MB + x SB + x GB 700 200y B (1.11.1) x MC + x SC + x GC 450 200y C 20000x MA + 10000x SA + 10000x GA 8 10 6 20000x MB + 10000x SB + 10000x GB 5 10 6 20000x MC + 10000x SC + 10000x GC 6 10 6 (1.11.2) x SA + x SB + x SC 0.4 i=m,s,g j=a,b,c x ij (1.11.3) y A + y B + y C 1 (1.11.3) x ij 0, y j {0, 1}, i = M, S, G, j = A, B, C. I vincoli (1.11.1) impediscono di coltivare in una tenuta più del totale del suolo disponibile; i vincoli (1.11.2) impediscono di coltivare più di quanto si possa irrigare con le scorte d acqua delle varie tenute; il vincolo (1.11.3) stabilisce che non più del 40% del suolo coltivato in totale può essere messo a soia, ed il vincolo (1.11.3) impone che almeno una tenuta lasci 200 ha di suolo incolto. Si noti che in questo caso non è necessario introdurre un big-m per collegare le y j con le x ij : è sufficiente definire nel modo opportuno i secondi membri dei vincoli (1.11.1).
38 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE 1.12. Il problema proposto riguarda la pianificazione di certi tipi di produzione con costi fissi imputabili alla preparazione degli impianti produttivi e costi variabili legati alle quantità prodotte. La decisione di attivare o meno la produzione di A, B, C o D è di tipo vero/falso, e quindi si può modellare con variabii binarie y i = 1 iff si attiva la produzione di i {A, B, C, D}. Occorre poi determinare anche i volumi prodotti, rappresentabili mediante un altra serie di variabili x i = numero di unità di tipo i prodotte, i {A, B, C, D}. Tenuto conto dei dati su quantitativi minimi, profitti unitari e forza lavoro dati dal testo il modello risulta come segue. max 50x A + 60x B + 55x C + 80x D (14500y A + 10000y B + 8000y C + 9000y D ) x A 1000y A x B 1500y B x C 3000y C (1.12.1) x D 2000y D x A My A x B My B x C My C (1.12.2) x D My D 10x A + 15x B + 5x C + 14x D 2000000 (1.12.3) y A y C + y D (1.12.4) x i Z +, y i {0, 1}, i {A, B, C, D}. I vincoli (1.12.1) impongono il rispetto dei quantitativi minimi qualora un tipo di produzione venga attivato, mentre i vincoli (1.12.2) assicurano che non vengano pianificati quantitativi per produzioni non attivate. Il vincolo (1.12.3) impone di non eccedere la quantità di forza lavoro disponibile; il vincolo (1.12.4) modella l implicazione logica y A = y C y D, come richiesto dal testo. 1.13. Assumendo i turni possibili specificati dal testo, si possono definire due serie di variabili binarie: x i =1 iff il generatore i è utilizzato di giorno, i = A, B, C, y i =1 iff il generatore i è utilizzato sia di giorno che di notte, i = A, B, C.
39 Inoltre, essendoci un costo/mw, occorrono variabili in grado di specificare il numero di MW prodotti dai generatori. Per mantenere distinte la produzione diurna da quella notturna, si usano nuovamente due serie di variabili: W i =MW prodotti dal generatore i se usato nel turno di giorno, i = A, B, C, Z i =MW prodotti dal generatore i se usato nel turno giorno/notte, i = A, B, C. Il modello risulta min (800x 1 + 1200y 1 ) + (700x 2 + 1000y 2 ) + (900x 3 + 1400x 3 ) + 4(W A + Z A ) + 6(W B + Z B ) + 7(W C + Z C ) x 1 + y 1 1 x 2 + y 2 1 x 3 + y 3 1 (1.13.1) W A 2500x A, Z A 2000y A W B 2000x B, Z B 1500y B (1.13.2) W C 3000x C, Z C 2500y C W A + W B + W C + Z A + Z B + Z C 4000 Z A + Z B + Z C 2800 (1.13.3) W i, Z i 0, x i, y i {0, 1}, i = A, B, C. I vincoli (1.13.1) impongono che ogni generatore funzioni secondo al più un tipo di turno. I vincoli (1.13.2) fissano i limiti dell erogazione di potenza come da turno per ogni generatore; si noti anche qui l uso di tecniche in stile big-m: ad esempio, il primo vincolo di questa serie implica x 1 = 1 = W A 2500, x 1 = 0 = W A = 0. Infine, i vincoli (1.13.3) impongono il soddisfacimento delle potenze minime per il giorno e per la notte. 1.14. In questo problema è importante notare che la sequenza delle lavorazioni non è predeterminata; essa deve essere quindi determinata dalla soluzione del modello. Rispetto all esercizio 1.6, occorre una serie di variabili in più: la sequenza è determinata quando, per ogni coppia (non ordinata) {i, j} di lotti si è in grado di determinare se i viene lavorato prima di j (i j) o viceversa. Si possono quindi usare le variabili binarie x ij = 1 iff i j, i < j. Si usano inoltre tutte le variabili dell esercizio 1.6. Il valore delle variabili x ij deve poi essere correlato alle variabili t i mediante una serie di vincoli di tipo
40 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE big-m. Nel seguito, p i e d i rappresentano tempo di lavorazione e scadenza (in minuti dalle 8:30) del lotto i. min 5 i=1 i i t i + p i d i i = 1,..., 5 i (t i + p i d i ) i = 1,..., 5 t i + p i t j + M(1 x ij ) i < j, i = 1,..., 5 t j + p j t i + Mx ij i < j, i = 1,..., 5 (1.14.1) (1.14.2) t i 0, x ij {0, 1}, i, j = 1,..., 5, i < j. I vincoli (1.14.1) sono del tipo usato per gestire i valori assoluti; le serie di vincoli (1.14.2) correlano i valori delle x ij con le t i : x ij = 1 = t i + p i t j (i j), x ij = 0 = t j + p j t i (j i). 1.15. Il problema richiede in pratica di gestire un pool di assunti/neoassunti che varia di mese in mese: è un problema multiperiodale. Una soluzione è un piano di assunzioni che permetta di coprire comunque il monte-ore richiesto nei vari mesi compatibilmente con lo svolgimento dell affiancamento da parte degli esperti. Possiamo modellare la situazione con dieci variabili: y 1, y 2, y 3, y 4, y 5, x 1, x 2, x 3, x 4, x 5, dove y i = disponibilità di esperti al mese i e x i = numero di persone assunte al mese i. Modelliamo con una variabile logica z la scelta di ottenere o non ottenere il contributo statale. Come ulteriore considerazione, si noti che la x 5 è superflua in quanto assumere all ultimo mese è un costo, non fornisce forza lavoro sfruttabile entro l orizzonte temporale coperto dal modello e non influisce sulla possibilità di ottenere il contributo statale. In ogni soluzione ottima si avrà x 5 = 0. In base alle variabili definite il costo del personale (assunzioni e stipendi) totale nei cinque mesi è: f(x) = 500(x 1 + x 2 + x 3 + x 4 + x 5 ) + 1000(y 1 + y 2 + y 3 + y 4 + y 5 ) 100000z. Il modello complessivo risulta essere: min 500(x 1 + x 2 + x 3 + x 4 + x 5 ) + 1000(y 1 + y 2 + y 3 + y 4 + y 5 ) 100000z (Mese 1) y 1 = 20 x 1 y 1 150(y 1 x 1 ) + 70x 1 2000
41 (Mese 2) y 2 = y 1 + x 1 x 2 y 2 150(y 2 x 2 ) + 70x 2 4000 (Mese 3) y 3 = y 2 + x 2 x 3 y 3 150(y 3 x 3 ) + 70x 3 7000 (Mese 4) y 4 = y 3 + x 3 x 4 y 4 150(y 4 x 4 ) + 70x 4 3000 (Mese 5) y 5 = y 4 + x 4 x 5 y 5 150(y 5 x 5 ) + 70x 5 3500 (Vincolo logico) x 1 + x 2 10z x i, y i Z + i, z {0, 1} 1.16. L azienda in questione, a detta del testo, paga un costo sia per lo stoccaggio che per il mancato acquisto di materiali. Quindi, tenuto conto dei quantitativi richiesti e del fatto che si può anche comprare meno del fabbisogno, una funzone obiettivo possibile è: 0.2 V 15000 + P 1300 + 3 A 2900, dove V, P, A sono rispettivamente i quantitativi totali di viti, plastica e acciaio acquistati. I valori assoluti introducono caratteristiche di non linearità nel modello che devono essere opportunamente gestite. Siccome i fornitori hanno a disposizione lotti dai contenuti standard, una scelta naturale di variabili per descrivere il piano di approvvigionamento è: x 1, x 2, x 3, x 4, dove x i = numero di lotti acquistati dal fornitore F i. Per gestire i valori assoluti sono necessarie tre variabili ausiliarie y V, y P, y A. Si noti che X = max(x, X), quindi i valori assoluti si gestiscono con tecniche simili a quelle usate per i problemi min / max. La scelta tra i fornitori F 2 +F 4 e F 1 è modellata con una variabile logica z 1 ; z 1 = 1 iff l azienda si rifornisce presso F 1.
42 CAPITOLO 1. MODELLI DI PROGRAMMAZIONE LINEARE Il modello è il seguente: min 0.2y V + y P + 3y A (Vincoli per gestire i valori assoluti) 50x 1 + 30x 2 + 25x 3 + 10x 4 15000 y V 50x 1 30x 2 25x 3 10x 4 + 15000 y V 3x 1 + 4x 2 + x 3 + 8x 4 1300 y P 3x 1 4x 2 x 3 8x 4 + 1300 y P 5x 1 + 7x 2 + 3x 3 + x 4 2900 y A 5x 1 7x 2 3x 3 x 4 + 2900 y A (Vincolo logico grande M) x 2 + x 4 M(1 z 1 ) x 1 Mz 1 x 1, x 2, x 3, x 4 Z +, y V, y P, y A Z +, z 1 {0, 1}