A UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Una mensa offre un menù con 2 scelte di primi (risotto alla pescatora e spaghetti al tonno) e 2 secondi (pomodori ripieni e seppie al tegame). Una porzione di risotto richiede 60 gr di riso, 10 gr di seppie e 10 gr di olio, una porzione di spaghetti richiede 60 gr di pasta, 16 gr di tonno sgocciolato e 4 gr di olio. Una porzione di pomodori ripieni richiede 120 gr di pomodori , 80 gr di tonno sgocciolato e 5 gr di olio, mentre una porzione di seppie richiede 80 gr di seppie, 40 gr di pomodori e 10 gr di olio. Tutti gli ingredienti si possono acquistare sul mercato al prezzo in tabella (in €/kg), ma il tonno è venduto in confezioni che contengono l’80% di tonno e il 20% di olio, per cui considerate il costo di 1 kg di tonno sgocciolato pari a 6,25€, con un residuo di 250 gr di olio (gratuito) che può essere riciclato risparmiando sull’acquisto di olio in bottiglia. In un giorno dovete offrire 100 primi e 100 secondi, suddivisi anche in quote disuguali tra le 2 scelte. Ingrediente Spaghetti Riso Pomodori Tonno sott’olio Seppie Olio in bottiglia Costo (€/kg) 1 1 1 5 6 6 1. Formulare come problema di PL il problema di definire il numero di porzioni da produrre che minimizzi il costo degli ingredienti necessari. 2. Un’ipotesi è di produrre 40 porzioni di seppie e 50 di risotto. Dimostrare o confutare l’esistenza di una soluzione ottima con queste caratteristiche. Soluzione Il problema è una variante del classico problema di miscelazione in cui si vogliono miscelare 4 sostanze (due primi e due secondi) in modo che la miscela soddisfi 2 caratteristiche (100 primi e 100 secondi). Le variabili saranno quindi legate alle quantità di sostanze nella miscela, cioè al numero di porzioni da produrre per ogni pietanza: x1 = numero di porzioni di risotto alla pescatora x2 = numero di porzioni di spaghetti al tonno x3 = numero di porzioni di pomodori ripieni x4 = numero di porzioni di seppie al tegame I vincoli del problema di miscelazione sono legati alle caratteristiche della miscela. Il costo delle pietanze influisce sulla funzione obiettivo e va minimizzato: 12 centesimi a porzione per il risotto, 16 per gli spaghetti, 62 per i pomodori ripieni e 52 per le seppie al tegame. L’unica risorsa di cui non è noto a priori il costo è l’olio, che può essere acquistato a 6 €/kg oppure è disponibile gratuitamente (in quantità limitata) come sottoprodotto del tonno sgocciolato. Sarà utile quindi associare ad ogni prodotto il costo dei materiali certi (tutti tranne l’olio) e associare un’ulteriore variabile al costo complessivo in olio d’oliva in bottiglia: x5 = grammi da acquistare di olio in bottiglia Un vincolo dovrà tenere conto dell’olio consumato (10x1+4x2+5x3+10x4), che deve essere minore o uguale alla disponibilità, pari all’olio acquistato più quello ottenuto come residuo del tonno (4 gr per ogni porzione si spaghetti e 20 per ogni porzione di pomodori ripieni), cioè x5+4x2+20x3. Esprimendo la funzione obiettivo in centesimi spesi, complessivamente si ha: min 12 x1 + 16 x 2 + 62 x3 + 52 x 4 + 0,6 x5 min 12 x1 + 16 x 2 + 62 x3 + 52 x 4 + 0,6 x5 1. 2. 10x 1 + 4x 2 + 5x 3 + 10x 4 ≤ x 5 + 4x 2 + 20x 3 10x 1 − 15x 3 + 10x 4 − x 5 ≤ 0 x + x = 100 ⇒ 1 x 1 + x 2 = 100 2 x 3 + x 4 = 100 x 3 + x 4 = 100 x ≥ 0 x ≥ 0 L’ipotesi suggerita al punto 2 fissa il valore delle prime 4 variabili: x 4 = 40 , x 1 = 50 , x 2 = 50 , x 3 = 60 . Si vuole sapere se esiste una soluzione ottima con queste caratteristiche. Allo scopo si utilizzano le condizioni di ortogonalità. Il duale è: max 100u 2 + 100u 3 10u1 + u 2 ≤ 12 u ≤ 16 2 − 15u1 + u 3 ≤ 62 10u1 + u 3 ≤ 52 − u ≤ 0,6 1 u1 ≤ 0 u 2 , u 3 libere Si ottengono le condizioni di ortogonalità: u1 (10x 1 − 15x 3 + 10x 4 − x 5 ) = 0 u (x + x − 100) = 0 2 2 1 u 3 (x 3 + x 4 − 100) = 0 x 1 (10u1 + u 2 − 12) = 0 x 2 (u 2 − 16) = 0 x 3 (−15u1 + u 3 − 62) = 0 x 4 (10u1 + u 3 − 52) = 0 x (−u − 0,6) = 0 1 5 Sostituendo x 4 = 40 , x 1 = 50 , x 2 = 50 , x 3 = 60 si ottiene: u1 (500 − 900 + 400 − x 5 ) = 0 10u + u = 12 2 1 u 2 = 16 ⇒ − 15 u + u = 62 1 3 10u1 + u 3 = 52 x 5 (−u1 − 0,6) = 0 u1 (500 − 900 + 400 − x 5 ) = 0 u = −0,4 1 u 2 = 16 u1 = −0,4 u 3 = 56 x 5 (−u1 − 0,6) = 0 ⇒ x 5 = 0 Poiché le soluzioni x e u sono ammissibili (primale e duale rispett.), sono anche ottime. Esercizio 2 È dato il problema di PL in figura. 1. Portare il problema in forma standard. 2. Utilizzando l’algoritmo del simplesso (fase 1 e fase 2) trovare una soluzione ottima del problema o dimostrare che il problema è impossibile o illimitato inferiormente. Applicare la regola di Bland. Soluzione max 3 x 2 + 2 x3 3 x1 − x 2 − x3 + 2 x 4 = 12 x − 3x + x + 2 x = 8 1 2 3 4 x − x + x = 5 2 4 1 x ≥ 0 Per portare il problema in forma standard è sufficiente cambiare segno alla funzione obiettivo. Per impostare il problema artificiale è necessario aggiungere 3 variabili artificiali (come in figura). min x5 + x6 + x7 3 x1 − x 2 − x3 + 2 x 4 + x5 = 12 x1 − 3 x 2 + x3 + 2 x 4 + x 6 = 8 + x 4 + x7 = 5 x1 − x 2 x ≥ 0 La base iniziale è quindi B = [ A5 A6 A7 ] . Al primo pivot entra A1 ed esce A5. Al secondo pivot entra A3 ed esce A6. Fine della fase 1, per iniziare la fase 2 è necessario far uscire l'ultima variabile artificiale. Poiché sia A2 che A4 hanno il terzo elemento pari a zero, si conclude che il terzo vincolo del problema è combinazione lineare degli altri 2, si cancella pertanto il terzo vincolo dal problema, nonché la terza riga e la terza colonna della matrice CARRY. Il vettore u viene aggiornato e si ha: uT=(1/2 -3/2). Analogamente: z = -6. Al successivo pivot entra A2 e si ha d esce A1+ , quindi entra A1− ed esce A3. La base trovata risulta −1 ottima, la soluzione ottima è: A2 = . Il problema è illimitato inferiormente − 2 Esercizio 3 In tabella sono riportati gli archi di un grafo con 6 nodi, e sono dati i valori di capacità degli archi ed un flusso ammissibile. A partire dal flusso dato trovare il massimo flusso inviabile dal nodo 1 al nodo 8 con l’algoritmo di Ford e Fulkerson. Individuare il taglio di capacità minima nel grafo. Archi (1,2) (1,4) (2,3) (2,8) (3,5) (4,3) (4,5) (4,6) (5,8) (6,5) (6,7) (7,5) Capacità 10 30 10 6 11 2 18 12 35 4 1 8 Flussi 10 0 10 0 10 0 0 0 10 0 0 0 Soluzione Il flusso iniziale circolante nella rete è pari a 10. I cammini aumentanti individuati dall’algoritmo di Ford-Fulkerson sono: 1,4,5,8 con flusso 18 1,4,6,5,8 con flusso 4 1,4,6,7,5,8 con flusso 1 1,4,3,2,8 con flusso 2 Il taglio di costo minimo comprende i nodi 1, 4 e 6 con capacità pari a 35. . B UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Dovete pianificare la produzione su una macchina di uno stabilimento industriale. Sapendo che la macchina è in grado di produrre un pezzo l’ora, e che il turno lavorativo è composto da 6 ore, dovete decidere l’ordine di produzione dei sei pezzi in tabella. Ogni pezzo è caratterizzato da un’ora di rilascio che indica l’ora a partire dalla quale il pezzo è disponibile per essere lavorato, un’ora di consegna che indica entro che ora il pezzo può essere consegnato senza pagare una penale, e da un valore di penale che indica il costo da pagare per ogni ora di ritardo con cui un pezzo viene consegnato. Formulare (senza risolvere) il problema di minimizzare i costi di penale come un problema su un grafo opportuno. Pezzo A B C D E F Rilascio 1 1 2 2 3 4 Consegna 2 3 3 4 5 5 Penale 10 3 5 7 2 8 Soluzione Per formulare il problema si può ricorrere ad un grafo bipartito in cui 6 nodi indicheranno i pezzi A, B, …, F, mentre altri sei nodi indicheranno le 6 ore a disposizione per lavorare i pezzi. Il peso degli archi sarà dato dal costo della penale che bisogna pagare per produrre il pezzo nell’ora. Il problema risultante sarà un problema di flusso a costo minimo, dove tutti i nodi “pezzo” generano una unità di flusso, e tutti i nodi “ora” assorbono una unità di flusso. Il grafo sarà composto dai seguenti archi: (A,1) : 0 (A,2) : 0 (A,3) : 10 (A,4) : 20 (A,5) : 30 (A,6) : 40 (B,1) : 0 (B,2) : 0 (B,3) : 0 (B,4) : 3 (B,5) : 6 (B,6) : 9 (C,2) : 0 (C,3) : 0 (C,4) : 5 (C,5) : 10 (C,6) : 15 (D,2) : 0 (D,3) : 0 (D,4) : 0 (D,5) : 7 (D,6) : 14 (E,3) : 0 (E,4) : 0 (E,5) : 0 (E,6) : 2 (F,4) : 0 (F,5) : 0 (F,6) : 8 Esercizio 2 In tabella sono riportati i costi unitari degli archi di una rete di flusso con 6 nodi 1…6 ed un flusso ammissibile iniziale. A partire dal flusso iniziale dato, e utilizzando la fase 2 del simplesso su reti, determinare il flusso di costo minimo, o dimostrare che il problema è illimitato inferiormente. Se necessario si aggiunga per completare la base iniziale un arco che collega il nodo di transito con il nodo pozzo. Archi (1,2) (1,5) (2,3) (3,4) (4,1) (4,6) (5,3) (6,3) Costi 0 6 -1 2 -2 2 2 4 Flusso 0 5 0 0 0 1 5 1 Soluzione L’algoritmo del simplesso su reti procede come segue. Il nodo 2 essendo un nodo di transito va collegato con l’albero ricoprente, ad esempio utilizzando l’arco (2,3). Nella prima iterazione entrerà in base l’arco (1,2), e provocherà l’uscita dell’arco (1,5), il flusso circolante nel ciclo è 5. Nella seconda iterazione entrerà in base l’arco (4,1), e provocherà l’uscita dell’arco (4,6) il flusso circolante nel ciclo è 1. Nella terza iterazione entrerà in base l’arco (3,4), e provocherà un ciclo formato da soli archi concordi. Il problema risulta essere illimitato inferiormente. Esercizio 3 Dato il problema di PL (primale) in figura, 1. risolvere il problema con il metodo grafico ed impostare il problema duale; 2. se il primale ammette una soluzione ottima, dalla soluzione ottima del primale ricavare la soluzione ottima del duale con le condizioni di ortogonalità. Se il primale non ammette una soluzione ottima, risolvere il problema duale con il metodo del simplesso. min 2 x1 + 3 x 2 − x1 + x 2 ≥ 2 x1 − 2 x 2 ≥ 3 x ≥ 0 Soluzione Il problema primale risulta impossibile. x2 2 3 x1 max 2u1 + 3u 2 − u1 + u 2 ≤ 2 Problema duale: In forma standard: u1 − 2u 2 ≤ 3 u ≥ 0 min − 2u1 − 3u 2 − u1 + u 2 + u 3 = 2 u1 − 2u 2 + u 4 = 3 u ≥ 0 Prendendo come base iniziale B = [ A3 A4 ] si può iniziare direttamente la fase 2. Al primo pivot entra A1 ed esce A4. Al secondo pivot entra A2 e il problema risulta illimitato inferiormente. C UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Una mensa offre un menù con 2 scelte di primi (risotto alla boscaiola e lasagne in bianco) e 2 secondi (involtini e polpette). Una porzione di risotto richiede 60 gr di riso, 3 gr di funghi secchi e 20 gr di carne tritata, una porzione di lasagne richiede 60 gr di pasta, 25 gr di besciamella e 15 gr di carne tritata. Una porzione di involtini richiede 80 gr di carne magra, 20 gr di pomodori e 2 gr di funghi secchi, mentre una porzione di polpette richiede 80 gr di carne tritata, 30 gr di pomodori e 4 gr di funghi secchi. Tutti gli ingredienti si possono acquistare sul mercato al prezzo in tabella (in €/kg), ma 1 kg di carne corrisponde a 800 gr di carne magra e 200 gr di ritagli, per cui considerate il costo di 1 kg di carne magra pari a 10€, con un residuo di 250 gr di ritagli (gratuiti). La carne tritata può essere ottenuta in parte con carne da 8€/kg e in parte utilizzando i ritagli avanzati dagli involtini. In un giorno dovete offrire 100 primi e 100 secondi, suddivisi anche in quote disuguali tra le 2 scelte. Ingrediente Pasta Riso Pomodori Carne Funghi secchi Besciamella Costo (€/kg) 1 1 1 8 50 4 1. Formulare come problema di PL il problema di definire il numero di porzioni da produrre che minimizzi il costo degli ingredienti necessari. 2. Un’ipotesi è di produrre 30 porzioni di lasagne e 40 di involtini. Dimostrare o confutare l’esistenza di una soluzione ottima con queste caratteristiche. Soluzione Il problema è una variante del classico problema di miscelazione in cui si vogliono miscelare 4 sostanze (due primi e due secondi) in modo che la miscela soddisfi 2 caratteristiche (100 primi e 100 secondi). Le variabili saranno quindi legate alle quantità di sostanze nella miscela, cioè al numero di porzioni da produrre per ogni pietanza: x1 = numero di porzioni di risotto alla boscaiola x2 = numero di porzioni di lasagne in bianco x3 = numero di porzioni di involtini x4 = numero di porzioni di polpette I vincoli del problema di miscelazione sono legati alle caratteristiche della miscela. Il costo delle pietanze influisce sulla funzione obiettivo e va minimizzato: 21 centesimi a porzione per il risotto, 16 per le lasagne, 92 per gli involtini e 23 per le polpette). L’unico ingrediente di cui non è noto a priori il costo è la carne tritata, che può essere acquistata a 8 €/kg oppure è disponibile gratuitamente (in quantità limitata) dai ritagli come sottoprodotto degli involtini. Sarà utile quindi associare ad ogni prodotto il costo dei materiali certi (tutti tranne la carne tritata) e associare un’ulteriore variabile al costo complessivo della carne tritata: x5 = grammi da acquistare di carne per produrre carne tritata Un vincolo dovrà tenere conto della carne tritata consumata (in grammi: 20x1+15x2+80x4), che deve essere minore o uguale alla disponibilità, pari a quella acquistata più quella ottenuto come dai ritagli degli involtini (20 gr per ogni porzione), cioè x5+20x3. Esprimendo la funzione obiettivo in centesimi spesi, complessivamente si ha: min 21x1 + 16 x 2 + 92 x3 + 23 x 4 + 0,8 x5 min 21x1 + 16 x 2 + 92 x3 + 23 x 4 + 0,8 x5 1. 2. 20x 1 + 15x 2 + 80x 4 ≤ x 5 + 20x 3 x + x = 100 1 2 x 3 + x 4 = 100 x ≥ 0 20x 1 + 15x 2 − 20x 3 + 80x 4 − x 5 ≤ 0 ⇒ x 1 + x 2 = 100 x 3 + x 4 = 100 x ≥ 0 L’ipotesi suggerita al punto 2 fissa il valore delle prime 4 variabili: x 2 = 30 , x 3 = 40 , x 4 = 60 , x 1 = 70 . Si vuole sapere se esiste una soluzione ottima con queste caratteristiche. Allo scopo si utilizzano le condizioni di ortogonalità. Il duale è: max 100u 2 + 100u 3 20u1 + u 2 ≤ 21 15u + u ≤ 16 2 1 − 20u1 + u 3 ≤ 92 80u1 + u 3 ≤ 23 − u ≤ 0,8 1 u1 ≤ 0 u 2 , u 3 libere Si ottengono le condizioni di ortogonalità: u1 (20x 1 + 15x 2 − 20x 3 + 80x 4 − x 5 ) = 0 u (x + x − 100) = 0 2 2 1 u 3 (x 3 + x 4 − 100) = 0 x 1 (20u1 + u 2 − 21) = 0 x 2 (15u1 + u 2 − 16) = 0 x 3 (−20u1 + u 3 − 92) = 0 x 4 (80u1 + u 3 − 23) = 0 x (−u − 0,8) = 0 1 5 Sostituendo x 2 = 30 , x 3 = 40 , x 4 = 60 , x 1 = 70 si ottiene: u1 (1400 + 450 - 800 + 4800 − x 5 ) = 0 20u + u = 21 2 1 15u1 + u 2 = 16 ⇒ − 20u1 + u 3 = 92 80u1 + u 3 = 23 x 5 (−u1 − 0,8) = 0 u1 (500 − 900 + 400 − x 5 ) = 0 u = 1 1 u 2 = 1 u 3 = 112 u 3 = −57 x 5 (−u1 − 0,8) = 0 Poiché il sistema non è compatibile l’ipotesi di cui al punto 2 è confutata. Esercizio 2 In tabella sono riportati gli archi di un grafo con 8 nodi, e sono dati i valori di capacità degli archi ed un flusso ammissibile. A partire dal flusso dato trovare il massimo flusso inviabile dal nodo 1 al nodo 8 con l’algoritmo di Ford e Fulkerson. Individuare il taglio di capacità minima nel grafo. Archi (1,2) (1,3) (2,4) (2,6) (3,5) (3,7) (4,3) (4,8) (5,8) (6,8) (7,5) Capacità 15 7 10 4 8 2 8 6 14 7 7 Flussi 8 0 8 0 8 0 8 0 8 0 0 Soluzione Il flusso iniziale circolante nella rete è pari a 8. I cammini aumentanti individuati dall’algoritmo di Ford-Fulkerson sono: 1,2,4,8 con flusso 2 1,2,6,8 con flusso 4 1,3,4,8 con flusso 4 1,3,7,5,8 con flusso 2 Il taglio di costo minimo comprende i nodi 1, 2, 3 e 4 con capacità pari a 20. Esercizio 3 È dato il problema di PL in figura. 1. Portare il problema in forma standard. 2. Utilizzando l’algoritmo del simplesso (fase 1 e fase 2) trovare una soluzione ottima del problema o dimostrare che il problema è impossibile o illimitato inferiormente. Applicare la regola di Bland. max 3 x1 + 2 x3 x1 + x 2 + x3 = 6 − x + x ≥ −2 1 3 − 2 x1 + x3 ≤ 3 x1 libera x 2 ≥ 0 x3 ≥ 0 Soluzione Portando il problema in forma standard è necessario cambiare segno alla funzione obiettivo e al secondo vincolo, sostituire la variabile libera con una differenza di variabili vincolate, e aggiungere 2 variabili di scarto (come in figura). min − 3 x1+ + 3 x1− − 2 x3 x1+ − x1− + x 2 + x3 = 6 + − x1 − x1 − x3 + x 4 = 2 + − − 2 x1 + 2 x1 + x3 + x5 = 3 x ≥ 0 Non è necessario impostare il problema artificiale poiché è sufficiente utilizzare come base iniziale B = [ A2 A4 A5 ] . Al primo pivot entra A1+ ed esce A4. Al secondo pivot entra A3 ed esce A2. La base corrente risulta 4 ottima. La soluzione ottima è: x* = 0 . 2 D UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Dovete pianificare la produzione di un impianto manifatturiero. Sapendo che l’impianto è in grado di produrre un pezzo al giorno, dovete decidere l’ordine di produzione della prossima settimana: Pezzo Rilascio Consegna Penale A 1 2 3 B 2 3 4 C 3 4 5 D 3 6 10 E 4 5 10 F 5 6 5 G 5 6 10 Ogni pezzo è caratterizzato da una data di rilascio che indica il giorno a partire dalla quale il pezzo è disponibile per essere lavorato, una data di consegna che indica entro che giorno il pezzo può essere consegnato senza pagare una penale, e da un valore di penale che indica il costo da pagare per ogni giorno di ritardo con cui un pezzo viene consegnato. Formulare (senza risolvere) il problema di minimizzare i costi di penale come un problema su un grafo opportuno. Soluzione Per formulare il problema si può ricorrere ad un grafo bipartito in cui 7 nodi indicheranno i pezzi A, B, …, G, mentre altri sette nodi indicheranno le 7 giornate a disposizione per lavorare i pezzi. Il peso degli archi sarà dato dal costo della penale che bisogna pagare per produrre il pezzo nel giorno. Il problema risultante sarà un problema di flusso a costo minimo, dove tutti i nodi “pezzo” generano una unità di flusso, e tutti i nodi “ora” assorbono una unità di flusso. Il grafo sarà composto dai seguenti archi: (A,1) : 0 (A,2) : 0 (A,3) : 3 (A,4) : 6 (A,5) : 9 (A,6) : 12 (A,7) : 15 (B,2) : 0 (B,3) : 0 (B,4) : 4 (B,5) : 8 (B,6) : 12 (B,7) : 16 (C,3) : 0 (C,4) : 0 (C,5) : 5 (C,6) : 10 (C,7) : 15 (D,3) : 0 (D,4) : 10 (D,5) : 20 (D,6) : 30 (D,7) : 40 (E,4) : 0 (E,5) : 0 (E,6) : 10 (E,7) : 20 (F,5) : 0 (F,6) : 0 (F,7) : 5 (G,5) : 0 (G,6) : 0 (G,7) : 10 Esercizio 2 In tabella sono riportati i costi unitari degli archi di una rete di flusso con 6 nodi 1…6 ed un flusso ammissibile iniziale. A partire dal flusso iniziale, e utilizzando la fase 2 del simplesso su reti, determinare il flusso di costo minimo, o dimostrare che il problema è illimitato inferiormente. . Se necessario si aggiunga per completare la base iniziale un arco che collega il nodo di transito con il nodo pozzo. Archi (1,2) (1,5) (2,3) (3,4) (3,6) (4,1) (4,6) (5,3) Costi 1 3 2 2 4 1 4 3 Flusso 0 4 2 4 0 0 4 4 Soluzione L’algoritmo del simplesso su reti procede come segue. Nella prima iterazione entrerà in base l’arco (1,2), e provocherà l’uscita dell’arco (5,3), il flusso circolante nel ciclo è 4. Nella seconda iterazione entrerà in base l’arco (3,6), e provocherà l’uscita dell’arco (4,6) il flusso circolante nel ciclo è 4. La soluzione così trovata rappresenta il flusso di costo minimo. Esercizio 3 Dato il problema di PL in figura, 1. impostare il problema duale e risolverlo con il metodo grafico; 2. Se il duale ammette una soluzione ottima, dalla soluzione ottima del duale ricavare la soluzione ottima del primale con le condizioni di ortogonalità. Se il duale non ammette una soluzione ottima, risolvere il primale con il metodo del simplesso. min − 2 x1 + 3 x 2 x1 − 2 x 2 ≤ 3 x1 − x 2 ≥ 2 x ≥ 0 x ≤ 0 2 1 Soluzione max 3u1 + 2u 2 u1 + u 2 ≤ −2 Duale: − 2u1 − u 2 ≥ 3 u1 ≤ 0 u 2 ≥ 0 Risolvendo con il metodo grafico si ha una soluzione ottima nel punto u* = (-2,0). u2 P -2 -3/2 u1 -2 -3 Procedendo con le condizioni di ortogonalità, si trova la soluzione ottima primale x* = (3,0). E UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Una raffineria produce due varietà di diesel (Normale o Special D) utilizzando 3 diversi impianti. Gli impianti lavorano 24 ore/giorno, sono flessibili e possono essere ri-programmati in qualsiasi momento per produrre carburante di tipo Normale o Special D. In un’ora di lavoro un impianto può produrre un solo carburante alla volta nelle quantità indicate in tabella: impianto A: 4 tonnellate di diesel Normale oppure 3 tonnellate di Special D impianto B: 2 tonnellate di diesel Normale oppure 1 tonnellate di Special D impianto C: 3 tonnellate di diesel Normale oppure 2 tonnellate di Special D Il mercato richiede 150 tonnellate di diesel Normale e 27 tonnellate di Special D al giorno. L'impianto A è a conduzione prevalentemente manuale, e richiede 12 ore/uomo di lavoro per ogni ora di lavoro dell'impianto, l'impianto B è invece totalmente automatizzato (e non richiede manodopera), mentre l'impianto C consuma 6 ore/uomo per ogni ora di lavoro dell'impianto. Per un giorno di lavoro avete a disposizione solo 420 ore/uomo. Il costo di produzione dell'impianto A è di 800 ∈/ora, il costo dell'impianto B è di 500∈/ora, il costo dell'impianto C è di 700 ∈/ora. 1. Formulare come problema di Programmazione Lineare il problema di pianificare la produzione giornaliera (24 ore) di costo di produzione minimo. 2. Un vostro tecnico suggerisce di concentrare su A la produzione di Special D, e di produrre 60 tonnellate di diesel normale su A, 24 su B e 66 su C. Facendo uso delle condizioni di ortogonalità, dimostrare o confutare l'ottimalità di questa soluzione. Variabili: xij = ore di lavoro dedicate dall'impianto i alla produzione del carburante j, con i=A,B,C j=N,S (N = Normale, S= Special D) Formulazione: min 800 (xAn + xAs) + 500 (xBn + xBs) + 700 (xCn + xCs) s.t. 4 xAn + 2 xBn + 3 xCn = 150 3 xAs + 1 xBs + 2 xCs = 27 xAn + xAs < 24 xBn + xBs < 24 xCn + xCs < 24 12 (xAn + xAs) + 6 (xCn + xCs) <420 end x AN 15 x AS 9 x 12 La soluzione x = BN = è ottima x BS 0 xCN 22 x CS 0 Esercizio 2 In tabella sono riportati gli archi di una rete di flusso con 6 nodi 1…6 ed i valori di domanda di ogni nodo (assumendo un valore negativo per un nodo sorgente e un valore positivo per un nodo pozzo). Se necessario si aggiunga per completare la base iniziale un arco che collega il nodo di transito con il nodo pozzo. Si determini un flusso ammissibile utilizzando la fase 1 del simplesso su reti, o dimostrare che il problema non ammette soluzione ammissibile. Nel caso in cui il problema non ammetta soluzione ammissibile proporre il cambiamento di orientamento di un arco nel grafo per rendere il problema ammissibile (senza risolvere di nuovo il problema). Archi (1,2) (1,3) (2,5) (3,2) (3,6) (4,3) Nodi 1 Domanda -1 2 -5 3 0 4 -3 5 6 6 3 Soluzione Dopo l’inserimento del nodo artificiale 7, l’algoritmo del simplesso su reti procede come segue. Il nodo 3 essendo un nodo di transito va collegato con l’albero ricoprente, ad esempio utilizzando l’arco (3,6). Nella prima iterazione entrerà in base l’arco (2,5), e provocherà l’uscita dell’arco (2,7), il flusso circolante nel ciclo è 5. Nella seconda iterazione entrerà in base l’arco (1,2), e provocherà l’uscita dell’arco (5,7) il flusso circolante nel ciclo è 1. Nella terza iterazione entrerà in base l’arco (4,3), e provocherà l’uscita dell’arco (7,6) il flusso circolante nel ciclo è 3. Nella quarta iterazione entrerà in base l’arco (6,1), e provocherà l’uscita dell’arco (4,7) il flusso circolante nel ciclo è 2. Nella quinta iterazione entrerà in base l’arco (3,2), e provocherà l’uscita dell’arco (1,7) il flusso circolante nel ciclo è 0. La soluzione così trovata rappresenta un flusso ammissibile per la rete di flusso. Esercizio 3 È dato il problema di PL in figura. 1. Portare il problema in forma standard. 2. Utilizzando l’algoritmo del simplesso (fase 1 e fase 2) trovare una soluzione ottima del problema o dimostrare che il problema è impossibile o illimitato inferiormente. Applicare la regola di Bland. min 3 x1 − 2 x3 − x1 + 2 x 2 + x3 = 6 − x − x ≤ 2 1 3 2 x + x 3 ≤ 4 1 x1 libera x 2 ≥ 0 x3 ≥ 0 Soluzione Portando il problema in forma standard è necessario sostituire la variabile libera con una differenza di variabili vincolate, e aggiungere 2 variabili di scarto (come in figura). min 3 x1+ − 3 x1− − 2 x3 − x1+ + x1− + 2 x 2 + x3 = 6 + − − x1 + x1 − x3 + x 4 = 2 + − 2 x1 − 2 x1 + x3 + x5 = 4 x ≥ 0 Dividendo per 2 il primo vincolo si può evitare di impostare il problema artificiale poiché è sufficiente utilizzare come base iniziale B = [ A2 A4 A5 ] . min 3 x1+ − 3 x1− − 2 x3 1 1 + 1 − − 2 x1 + 2 x1 + x 2 + 2 x3 = 3 + − − x1 + x1 − x3 + x 4 = 2 2 x + − 2 x − + x + x = 4 1 3 5 1 x ≥ 0 Al primo pivot entra A1− ed esce A4. Al secondo pivot entra A3 ed esce A2. La base corrente risulta − 4 ottima. La soluzione ottima è: x* = 0 . 2 F UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Luigi l’elettricista deve rifare l’impianto elettrico di una stanza quadrata di 4 metri di lato e 3 metri di altezza. Nella stanza bisogna disporre (vedi Figura): • 4 prese elettriche, tutte a 50 cm di altezza dal pavimento, e distanti 1 metro dalla parete a sinistra. Indichiamo queste prese come N1, E1, S1, O1. • 1 presa elettrica sulla parete Nord, a 1 metro dal soffitto e distante 1 metro dalla parete Est. Indichiamo questa presa come N2. • 1 presa elettrica sulla parete Est, a 1 metro dal soffitto e distante 1 metro dalla parete Nord. Indichiamo questa presa come E2. • 2 scatole di derivazione una sulla parete Nord (50 cm dal pavimento, 1 metro dallo spigolo con la parete Est) e una sulla parete Est (50 cm dal pavimento, 1 metro dallo spigolo con la parete Sud). Indichiamo le scatole di derivazione N3 e E3. • 1 punto di ingresso dell’impianto posizionato sulla parete Sud (a 50 cm dal pavimento ed a metà parete). Indichiamo con S2 il punto di ingresso dell’impianto. 100 100 N2 N1 100 50 N3 50 Parete Nord Presa elettrica 100 100 Ingresso dell’ impianto E2 100 E1 E3 100 50 50 Parete Est 100 S1 100 50 S2 200 50 Parete Sud 100 Scatola di derivazione O1 50 Parete Ovest Sapendo che una traccia non si può biforcare (ovvero sono ammesse biforcazioni solo nelle scatole di derivazione e nelle prese elettriche), e che le tracce possono andare solo in orizzontale o in verticale (non sono ammesse tracce diagonali, ma sono ammesse tracce che formano un angolo retto), si formuli senza risolverlo e utilizzando un grafo opportuno il problema di disegnare l’impianto elettrico per minimizzare la lunghezza delle tracce. Soluzione Il problema è formulabile come un problema di albero ricoprente, in cui i nodi rappresentato le prese elettriche, le scatole di derivazione e l’ingresso dell’impianto e gli archi sono le tracce che devono essere passate a cui è associato un costo pari alla lunghezza della traccia. Eliminando alcuni archi superflui il grafo è composto da 9 nodi e 11 archi. (E1,E2) : 150 (E1,E3) : 200 (N1,N3) : 200 (N1,O1) : 400 (E3,S1) : 200 (N2,N3) : 150 (S1,S2) : 100 (N2,E2) : 200 (S2,O1) : 300 (N3,E1) : 200 Esercizio 2 Dato il problema di PL (primale) in figura, 1. risolvere il problema con il metodo grafico ed impostare il problema duale; 2. Se il primale ammette una soluzione ottima, dalla soluzione ottima del primale ricavare la soluzione ottima del duale con le condizioni di ortogonalità. Se il primale non ammette una soluzione ottima, risolvere il problema duale con il metodo del simplesso. min 4 x1 + 3 x 2 − 2 x1 + x 2 ≥ 3 2 x1 − 2 x 2 ≥ 1 x ≥ 0 Soluzione Risolvendo con il metodo grafico il problema primale risulta impossibile. x2 3 -3/2 1/2 x1 -1/2 max 3u1 + u 2 − 2u1 + 2u 2 ≤ 4 Problema duale: In forma standard: u1 − 2u 2 ≤ 3 u ≥ 0 min − 3u1 − u 2 − 2u1 + 2u 2 + u 3 = 4 u1 − 2u 2 + u 4 = 3 u ≥ 0 utilizzando come base iniziale B = [ A3 A4 ] si può iniziare direttamente la fase 2. Al primo pivot entra A1 ed esce A4 . Al secondo pivot entra A2 ed il problema risulta illimitato inferiormente. Esercizio 3 In tabella sono riportati gli archi di un grafo con 4 nodi, e sono dati i costi di ogni arco. Risolvere il problema del cammino minimo per ogni coppia di nodi applicando l’algoritmo di Floyd e Warshall. In presenza di cicli negativi arrestate l’algoritmo e mostrate un ciclo negativo. Altrimenti mostrate l’albero dei cammini centrato nel nodo 3. Archi (1,2) (1,3) (1,4) (2,1) (3,2) (3,4) (4,2) Costi 26 6 71 10 13 -4 5 Soluzione Le matrici iniziali dei cammini minimi e dei predecessori sono 0 10 ∞ ∞ 26 0 13 5 6 ∞ 0 ∞ 71 ∞ -4 0 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 Dopo la prima iterazione vengono aggiornati i cammini da 2 a 3, il cammino da 2 a 4, tutti passando attraverso il nodo 1. Durante la seconda iterazione vengono aggiornati il cammino da 3 a 1, e i cammini da 4 a 1 e da 4 a 3, tutti passando attraverso il nodo 2. Alla fine della seconda iterazione le matrici sono: 0 10 23 15 26 0 13 5 6 16 0 21 71 81 -4 0 1 2 2 2 1 2 3 4 1 1 3 1 1 1 3 4 Nella terza iterazione vengono aggiornati i cammini da 1 a 2, da 1 a 4, e il cammino da 2 a 4 tutti passando per il nodo 3. Infine nella quarta iterazione vengono aggiornati i cammini da 1 a 2, 3 a 1 e da 3 2. Le matrici finali dei cammini e dei predecessori sono: 0 10 11 15 7 0 1 5 6 16 0 21 2 12 -4 0 1 2 2 2 4 2 4 4 1 1 3 1 3 3 3 4 L’albero dei cammini minimi dal nodo 3 è composto dagli archi (3,4), (4,2) e (2,1). G UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Una raffineria produce due varietà di benzina (95 ottani e Sprint) utilizzando 4 diversi impianti. In un'ora di lavoro un impianto produce un mix delle due benzine come indicato in tabella: impianto A: 2 tonnellate di benzina 95 ottani e 4 tonnellate di benzina Sprint impianto B: 1 tonnellate di benzina 95 ottani e 3 tonnellate di benzina Sprint impianto C: 3 tonnellate di benzina 95 ottani e 2 tonnellate di benzina Sprint impianto D: 3 tonnellate di benzina 95 ottani e 3 tonnellate di benzina Sprint Dovete soddisfare un ordine di produzione di 130 tonnellate di benzina 95 ottani e 160 tonnellate di benzina Sprint. L'impianto A è a conduzione prevalentemente manuale, e richiede 28 ore/uomo di lavoro per ogni ora di lavoro dell'impianto, gli impianti B e C sono invece totalmente automatizzati (non richiedono manodopera), mentre l'impianto D consuma 16 ore/uomo per ogni ora di lavoro dell'impianto. Avete a disposizione 700 ore/uomo per soddisfare l'ordine. Formulare come problema di Programmazione Lineare il problema di pianificare la produzione producendo le quantità richieste nel più breve tempo possibile (ovvero in modo tale da minimizzare il tempo di completamento della produzione dell'impianto che termina per ultimo). Un vostro tecnico suggerisce di produrre far lavorare tutti e 4 gli impianti per lo stesso numero di ore (esattamente 15 ore). Facendo uso delle condizioni di ortogonalità, dimostrare o confutare l'ottimalità di questa soluzione. Soluzione variabili: xi = ore di lavoro lavorate dall'impianto i, con i = A,B,C,D min z z ≥ x A z ≥ x B z ≥ xC z ≥ xD 28 x A + 16 x D ≤ 700 2 x A + x B + 3 xC + 3 x D ≥ 130 4 x A + 3 x B + 2 xC + 3 x D ≥ 160 x, z ≥ 0 z 15 x A 15 La soluzione x = x B = 15 NON è ottima xC 15 x 15 D Il risultato si ottiene facilmente in quanto le variabili duali associate agli ultimi 3 vincoli dovrebbero essere nulle (vincoli non soddisfatti all'=), di conseguenza i vincoli associati alle x impongono pari a zero anche le variabili duali associate ai primi 4 vincoli. Il vincolo duale associato a z impone però che sia pari ad 1 la somma delle prime 4 variabili duali, una contraddizione. Esercizio 2 In tabella sono riportati gli archi di una rete di flusso con 5 nodi 1…5 ed i valori di domanda di ogni nodo (assumendo un valore negativo per un nodo sorgente e un valore positivo per un nodo pozzo). Se necessario si aggiunga per completare la base iniziale un arco che collega il nodo di transito con il nodo pozzo. Si determini un flusso ammissibile utilizzando la fase 1 del simplesso su reti, o dimostrare che il problema non ammette soluzione ammissibile. Nel caso in cui il problema non ammetta soluzione ammissibile proporre il cambiamento di orientamento di un arco nel grafo per rendere il problema ammissibile (senza risolvere di nuovo il problema). Archi (1,5) (2,1) (2,3) (2,4) (2,5) (4,3) (4,5) (5,1) Nodi Domanda 1 1 2 -8 3 0 4 9 5 -2 Soluzione Dopo l’inserimento del nodo artificiale 6, l’algoritmo del simplesso su reti procede come segue. Il nodo 3 essendo un nodo di transito va collegato con l’albero ricoprente, ad esempio utilizzando l’arco (1,3). Nella prima iterazione entrerà in base l’arco (2,1), e provocherà l’uscita dell’arco (7,1), il flusso circolante nel ciclo è 1. Nella seconda iterazione entrerà in base l’arco (2,4), e provocherà l’uscita dell’arco (2,7) il flusso circolante nel ciclo è 7. La soluzione così trovata non rappresenta un flusso ammissibile per la rete di flusso poiché del flusso circola ancora attraverso il nodo fittizio. Per rendere il problema ammissibile basta osservare che la causa della inammissibilità del grafo è dovuta alla mancanza di un cammino tra il nodo 5 e il nodo 4. Cambiando l’orientamento dell’arco (4,5) l’istanza diventa ammissibile. Esercizio 3 È dato il problema di PL in figura. 1. Portare il problema in forma standard. 2. Utilizzando l’algoritmo del simplesso (fase 1 e fase 2) trovare una soluzione ottima del problema o dimostrare che il problema è impossibile o illimitato inferiormente. Applicare la regola di Bland. max 4 x 2 + 3 x 4 2 x1 − 2 x 2 + 3 x3 − x 4 = 12 x + x3 − x 4 = 5 1 2 x1 + 2 x 2 + x3 − 3 x 4 = 8 x ≥ 0 Soluzione Per portare il problema in forma standard è sufficiente cambiare segno alla funzione obiettivo. Impostando il problema artificiale è necessario introdurre tre variabili artificiali (come in figura). min x5 + x 6 + x 7 2 x1 − 2 x 2 + 3 x3 − x 4 + x5 = 12 + x3 − x 4 + x 6 = 5 x1 2 x1 + 2 x 2 + x3 − 3 x 4 + x7 = 8 x ≥ 0 La base iniziale è quindi B = [ A5 A6 A7 ] . Al primo pivot entra A1 ed esce A7. Al secondo pivot entra A3 ed esce A5. Fine della fase 1. Per passare alla fase 2 è necessario far uscire l'ultima variabile artificiale rimasta in base. Il secondo vincolo risulta combinazione lineare degli altri 2. Cancellando seconda riga e seconda colonna della carry, e ricalcolando il vettore u=(0,0) e z=0, si può iniziare la fase 2. Al primo pivot entra A2 ed esce A1. Al secondo pivot entra A4 ed il problema risulta inferiormente illimitato. H UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 – Primo appello 23 novembre 2006 SOLUZIONI Esercizio 1 Mario l’elettricista deve rifare l’impianto elettrico di una stanza quadrata di 4 metri di lato e 3 metri di altezza. Nella stanza bisogna disporre (vedi Figura): • 4 prese elettriche, tutte a 50 cm di altezza dal pavimento, e distanti 1 metro dalla parete a sinistra. Indichiamo queste prese come N1, E1, S1, O1. • 1 presa elettrica sulla parete Nord, a 1 metro dal soffitto e distante 1 metro dalla parete Est. Indichiamo questa presa come N2. • 1 presa elettrica sulla parete Est, a 1 metro dal soffitto e distante 1 metro dalla parete Sud. Indichiamo questa presa come E2. • 2 scatole di derivazione una sulla parete Nord (50 cm dal pavimento, 1 metro dallo spigolo con la parete Est) e una sulla parete Sud (1 metro dal soffitto ed 1 metro dallo spigolo con la parete Est). Indichiamo le scatole di derivazione N3 e S2. • 1 punto di ingresso dell’impianto posizionato sulla parete Ovest (a 50 cm dal pavimento ed a metà parete). Indichiamo con O2 il punto di ingresso dell’impianto. 100 100 N2 N1 100 N3 50 50 Parete Nord 100 E1 100 S1 100 50 Ingresso dell’ impianto S2 E2 100 Presa elettrica 100 100 100 100 50 Parete Est O1 50 Parete Sud O2 200 50 Scatola di derivazione Parete Ovest Sapendo che una traccia non si può biforcare (ovvero sono ammesse biforcazioni solo nelle scatole di derivazione e nelle prese elettriche), e che le tracce possono andare solo in orizzontale o in verticale (non sono ammesse tracce diagonali, ma sono ammesse tracce che formano un angolo retto), si formuli senza risolverlo e utilizzando un grafo opportuno il problema di disegnare l’impianto elettrico per minimizzare la lunghezza delle tracce. Soluzione Il problema è formulabile come un problema di albero ricoprente, in cui i nodi rappresentato le prese elettriche, le scatole di derivazione e l’ingresso dell’impianto e gli archi sono le tracce che devono essere passate a cui è associato un costo pari alla lunghezza della traccia. Eliminando alcuni archi superflui il grafo è composto da 9 nodi e 11 archi. (N1,N3) : 200 (N1,O2) : 300 (N2,N3) : 150 (N2,E2) : 400 (N3,E1) : 200 (E1,E2) : 350 (E1,S1) : 400 (E2,S2) : 200 (S1,S2) : 150 (S1,O1) : 100 (O1,O2) : 100 Esercizio 2 In tabella sono riportati gli archi di un grafo con 4 nodi, e sono dati i costi di ogni arco. Risolvere il problema del cammino minimo per ogni coppia di nodi applicando l’algoritmo di Floyd e Warshall. In presenza di cicli negativi arrestate l’algoritmo e mostrate un ciclo negativo. Altrimenti mostrate l’albero dei cammini centrato nel nodo 3. Archi (1,2) (1,3) (2,4) (3,2) (4,1) (4,3) Costi 80 2 4 1 -10 40 Soluzione Le matrici iniziali dei cammini minimi e dei predecessori sono 0 ∞ ∞ -10 80 0 1 ∞ 2 ∞ 0 40 ∞ 4 ∞ 0 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 1 2 2 2 4 Dopo la prima iterazione vengono aggiornati i cammini da 4 a 2 e da 4 a 3. Durante la seconda vengono aggiornati i cammini da 1 a 4 e da 3 a 4. Alla fine della seconda iterazione le matrici sono: 0 ∞ ∞ -10 80 0 1 70 2 ∞ 0 -8 84 4 5 0 1 2 3 4 1 2 3 1 Nella terza iterazione vengono aggiornati i cammini da 1 a 2, 1 a 4, da 4 a 2 e da 4 a 4. Avendo aggiornato il cammino da 4 a 4 si è individuato un ciclo a peso negativo. Le matrici finali dei cammini e dei predecessori sono: 0 ∞ ∞ -10 3 0 1 -7 2 ∞ 0 -8 7 4 5 -3 Il ciclo negativo passa attraverso i nodi 4, 1, 3, 2 e 4 di peso -3. 1 2 3 4 3 2 3 3 1 2 3 1 2 2 2 2 Esercizio 3 Dato il problema di PL in figura, 1. impostare il problema duale e risolverlo con il metodo grafico; 2. Se il duale ammette una soluzione ottima, dalla soluzione ottima del duale ricavare la soluzione ottima del primale con le condizioni di ortogonalità. Se il duale non ammette una soluzione ottima, risolvere il primale con il metodo del simplesso (fase 1 e fase 2). min 4 x1 − 3 x 2 − 2 x1 + x 2 ≥ 2 − 2 x1 + 2 x 2 ≤ 3 x ≤ 0 x ≥ 0 2 1 Soluzione max 2u1 + 3u 2 − 2u1 − 2u 2 ≥ 4 Problema duale: u1 + 2u 2 ≤ −3 u1 ≥ 0 u 2 ≤ 0 In figura è rappresentato l’insieme delle soluzioni ammissibili del duale. La soluzione ottima si ha nel punto u = (0 , -2). u2 u1 -2 -3 -3/2 -2 P Procedendo con le condizioni di ortogonalità, si trova la soluzione ottima primale x* = (-3/2,0).