Università degli Studi di Cagliari FACOLTA’ DI INGEGNERIA Laboratorio di Modelli Matematici per il Supporto alle Decisioni - LAB_MMSD - Dott.ssa Michela Lai mlai@unica.it Dott.ing. Alberto Pillai alberto.pillai@virgilio.it http://sorsa.unica.it/ Esercitazione 2
Esercizi per casa 1 Scrivere il modello e risolverlo con dati a piacere L’agenzia matrimoniale Cuori Solitari deve organizzare il gran ballo di fine anno. L’agenzia ha n clienti maschi e n clienti femmine, ed ha prenotato n tavoli da due posti al famoso ristorante Cupido. Dai profili psicologici raccolti dai clienti, l’agenzia è in grado di calcolare, per ogni maschio i, l’insieme F(i) delle femmine con le quali potrebbe essere interessato ad intrecciare una relazione, e che potrebbero essere interessate ad intrecciare una relazione con lui; un analogo insieme M(j) può essere ottenuto per ogni femmina j. Dai profili dei clienti, l’agenzia è anche in grado di calcolare, per ogni coppia (i; j) “compatibile”, il costo cij della cena da offrire, che deve consistere di piatti graditi ad entrambi i commensali. L’agenzia vuole quindi decidere come formare le coppie per il gran ballo in modo da evitare coppie incompatibili e minimizzare il costo complessivo delle cene.
Esercizi per casa 1
Esercizi per casa 2 Individuazione del problema, analisi della realtà e raccolta dati Per un’indagine conoscitiva si vogliono contattare rispettivamente almeno: 150 donne sposate 110 donne non sposate 120 uomini sposati 100 uomini non sposati Dati: Costo telefonate al mattino (prima delle 14:00) = 0.2€ Costo telefonate alla sera (dopo le 14:00) = 0.1€ Probabilità di risposta: Quante telefonate effettuare nei due periodi? Si richiede che almeno metà delle telefonate sia effettuata al mattino RISP % Mattina % Sera D.S. 30 D.N.S. 10 20 U.S. 15 U.N.S. 40 5
Problema del call center Individuazione del problema, analisi della realtà e raccolta dati ESERCIZIO: Scrivere il relativo modello di ottimizzazione
Problema del call center Costruzione del modello di ottimizzazione Variabili tm: numero di telefonate da compiere al mattino di costo unitario tp: numero di telefonate da compiere al pomeriggio di costo unitario Parametri i: indice delle categorie di persone a cui telefonare aim: probabilità di trovare una persona della categoria i al mattino aip: probabilità di trovare una persona della categoria i al pomeriggio bi: numero minimo di persone di categoria i a cui telefonare
Problema del call center Costruzione del modello di ottimizzazione Funzione obiettivo: min cm ∙ tm + cp ∙ tp Soddisfacimento del numero minimo di chiamate per la categoria i: aim ∙ tm + aip ∙ tp ≥ bi Almeno la metà delle telefonate devono essere effettuate al mattino: tm - tp ≥ 0 Vincoli di non-negatività: tm ≥0 tp ≥0 ESERCIZIO: Scrivere l’istanza su lindo
Problema del call center Determinazione delle soluzioni Modello di ottimizzazione: min cm ∙ tm + cp ∙ tp aim ∙ tm + aip ∙ tp ≥ bi tm - tp ≥ 0 tm ≥0 tp ≥0
Problema del call center Determinazione delle soluzioni ESERCIZIO: Determinare la soluzione con Lindo
Problema del call center Analisi dei risultati Soluzione con Lindo LP OPTIMUM FOUND AT STEP 5 OBJECTIVE FUNCTION VALUE 1) 1440.000 VARIABLE VALUE REDUCED COST TM 480.000000 0.000000 TP 480.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 13800.000000 0.000000 3) 3400.000000 0.000000 4) 0.000000 -0.120000 5) 11600.000000 0.000000 6) 0.000000 -0.800000 NO. ITERATIONS= 5
Introduzione I problemi di flusso su rete presentano una speciale struttura che consente di adottare algoritmi particolarmente efficienti per la loro risoluzione Tra i vari problemi di flusso, ci occuperemo del Problema del Flusso di Minimi Costo (MCF). In questa esercitazione: faremo brevi richiami della teoria dei grafi e del MCF vedremo due possibili applicazioni del MCF utilizzeremo un solver specializzato per problemi di MCF 11
Richiami di teoria dei grafi Un grafo G(N, A) è definito da una coppia di insiemi N e A N, detto insieme dei nodi, è l’insieme dei primi n numeri naturali A, detto insieme degli archi, è un sottoinsieme del prodotto cartesiano N x N Dato un nodo i Є N P(i) = {j: (j, i) Є A}, è l’insieme dei predecessori di i S(i) = {k: (i, k) Є A}, è l’insieme dei successori di i Dato un arco (i, j) Є A Il nodo i è la coda dell’arco Il nodo j è la testa dell’arco Si ha un grafo orientato quando (i, j)≠(j,i) 12
Richiami di teoria dei grafi G(N, A) orientato N = {1, 2, 3, 4, 5} A = {(1, 2), (1, 4), (2, 3), (2, 5), (3, 1), (3, 5), (4, 5), (5, 4)} Si dice cammino un insieme di archi in cui ogni coppia contiene un nodo della coppia precedente. Esempio: {(1, 2), (2, 5), (4, 5)} Si dice cammino orientato un insieme di archi in cui la testa di ogni arco coincide con la coda dell’arco seguente. Esempio: {(1, 2), (2, 5), (5, 4)} 13
Richiami di teoria dei grafi Grafo connesso esiste sempre un cammino tra qualsiasi coppia di nodi Grafo fortemente connesso esiste un cammino orientato tra ogni coppia di nodi Ciclo cammino chiuso, inizia e termina nello stesso nodo. Se il cammino è orientato, anche il ciclo è orientato. Ciclo Hamiltoniano ciclo che passa per ogni nodo del grafo una sola volta 14
Richiami di teoria dei grafi Foglia nodo testa/coda di un solo arco Albero grafo connesso privo di cicli ha almeno due foglie Estraendo un qualsiasi arco l’albero viene suddiviso in due sottoalberi distinti un albero con n nodi presenta n-1 archi Dato un grafo G=(N, A) Grafo parziale G‘=(N, A‘) grafo in cui Albero ricoprente di un grafo albero che costituisce un grafo parziale che tocca tutti i nodi del grafo 15
Richiami di teoria dei grafi Matrice di incidenza nodi-archi uno dei possibili modi in cui rappresentare un grafo Ha un numero di righe pari al numero dei nodi Ha un numero di colonne pari al numero degli archi In ogni colonna solo due elementi sono non-nulli: 1 in corrispondenza della coda di quell’arco -1 in corrispondenza della testa di quell’arco La matrice di incidenza è una struttura adatta a ricavare algoritmi, ma non consente una buona implementazione 16
Richiami di teoria dei grafi Esercizio Ricavare la matrice di incidenza nodi-archi del grafo Una matrice di incidenza con n nodi ha rango n-1 17
Richiami di teoria dei grafi Dimostrazione Il suo rango non è n, infatti, comunque si estragga un minore di ordine n la somma delle sue colonne risulta sempre nulla Considerato un albero ricoprente del grafo, il minore ad esso corrispondente ha n righe e n-1 colonne. Questo albero presenta almeno 2 foglie e la sua matrice di incidenza presenta almeno 2 righe con un coefficiente non nullo Con delle permutazioni si porta il coefficiente non nullo di una foglia in prima riga sulla diagonale principale Si cancella quella foglia e quel ramo, si ottiene un nuovo albero con almeno 2 foglie che possono essere portate in seconda riga sulla diagonale principale Iterando questo procedimento, si portano n-1 coefficienti non nulli sulla diagonale principale 18
Il problema del flusso di minimo costo Dato un grafo G(N,A), ad ogni nodo i viene associata una quantità di risorsa bi Se bi > 0 il nodo i è un nodo offerta Se bi < 0 il nodo i è un nodo domanda Se bi = 0 il nodo i è un nodo di transito Si assume che l’offerta totale di risorsa sia uguale alla domanda, in questo caso la rete si dice bilanciata Notazione: xij : flusso di risorsa che transita sull’arco (i,j) cij : costo di transito sull’arco (i,j), il costo è unitario 19
Formalizzazione del MCF Il problema del flusso di minimo costo Formalizzazione del MCF dove E è la matrice di incidenza nodi archi Se una rete non è bilanciata, occorre bilanciarla con opportuni valori di domande/offerte in nodi artificiali connessi da archi di costo molto elevato 20
Esercizio Risolvere l’istanza con il solver Lindo 21
Esercizio 22
Esercizio Soluzione con Lindo: 23
Utilizzo del solver specializzato MCF c Problem line (il carattere c introduce righe utilizzate per commenti) p min 5 8 (il carattere p introduce la riga della f.o. questo problema ha 5 nodi e 8 archi) c c Node descriptor lines (per convenzione l’offerta è positiva e la domanda è negativa) n 1 2 (il carattere n introduce la riga relativa a un nodo; ad esempio il nodo 1 offre 2 unità di risorsa) n 2 5 n 3 1 n 4 -4 n 5 -4 (il nodo 5 domanda 4 unità di risorsa) c Arc descriptor lines a 1 2 0 10 5 (il carattere a introduce la riga relativa a un arco, riportando nell’ordine coda, a 1 3 0 10 -2 testa, limite inferiore del flusso, limite superiore del flusso e costo) a 1 5 0 10 2 a 2 3 0 10 -4 a 3 4 0 10 0 a 4 2 0 10 6 a 4 5 0 10 3 a 5 3 0 10 4 c End of file Comandi essenziali per MCF: read nome_file.dimacs optimize display write sol_nome_file.txt 24
Utilizzo del solver specializzato MCF Soluzione con MCF: c Output to minimum-cost flow problem sample3.dimacs c The problem was solved with a network simplex code c c need 4 iteration(s) in 0 second(s). s -12 (questo è il valore ottimo della f.o.) f 1 3 2 (il flusso da 1 a 3 vale 2 all’ottimo) f 2 3 5 f 3 4 8 f 4 5 4 c All other variables are zero 25
Il problema dell’Albero Ricoprente di Minimo Costo (MST – Minimal Spanning Tree) Il problema del Commesso viaggiatore (TSP - Travelling Salesman Problem) 26
Richiami di teoria dei grafi Grafo non orientato o simmetrico grafo in cui tutti gli archi sono non orientati Grafo orientato grafo in cui tutti gli archi sono orientati Dato un grafo non orientato G=(N,A) taglio (N',N'') del grafo partizione dell’insieme N in due sottoinsiemi non vuoti N' e N''. Archi di taglio insieme degli archi aventi un estremo in N' e l’altro in N'' A(N', N'') = {(i, j) Є A: i Є N', j Є N'' o j Є N', i Є N'' } Dato un grafo orientato G=(N,A) l’insieme A è partizionato in due sottoinsiemi distinti Archi diretti del taglio, A+(N', N'') A+(N', N'') = {(i, j) Є A: i Є N', j Є N'' } Archi inversi del taglio, A-(N', N'') A-(N', N'') = {(i, j) Є A: j Є N', i Є N'' } A(N', N'') = A+(N', N'') U A-(N', N'') 27
Richiami di teoria dei grafi Esercizio: Dato il taglio (1,3,5)(2,4,6) del grafo in figura, determinare l’insieme degli archi di taglio 28
Richiami di teoria dei grafi Dato un grafo non orientato G(N, A) i, j ЄN sono connessi se esiste un cammino tra loro i, j ЄN sono connessi se non esiste nessun taglio (N',N'') tale che i Є N', j Є N'' e A(N',N'')= ø per ogni taglio taglio (N’,N’’) tale che i Є N', j Є N'' deve esistere almeno un arco di taglio Dato un grafo orientato G(N, A) i, j ЄN sono connessi se esiste un cammino orientato tra loro i, j ЄN sono connessi se non esiste nessun taglio (N',N'') tale che i Є N', j Є N'' e A+(N',N'')= ø 29
Albero di copertura di minimo costo Una banca ha molte filiali e un Centro Elettronico Unificato (CEU) in cui sono svolte tutte le transazioni La banca ha bisogno di collegare tutte le filiali col CEU affittando linee dedicate E’ possibile affittare una linea dedicata dal CEU ad ogni filiale, ma, se la capacità delle linee è sufficientemente grande, può essere più conveniente collegare gruppi di filiali tra loro “vicine” e almeno una al CEU Si deve determinare quali linee affittare in modo tale da collegare tutte le filiali al CEU e minimizzare il costo di affitto delle linee 30
Albero di copertura di minimo costo Modellazione del problema Dato un grafo non orientato G(N,A) con |N|=n e |A|=m Ogni filiale è rappresentata con un nodo; un ulteriore nodo rappresenta il CEU Ogni arco a Є A rappresenta i potenziali collegamenti tra coppie di filiali o tra filiali e CEU con relativo costo ca reale positivo Questo problema consiste nel determinare un grafo parziale G’=(N,A’) connesso di costo minimo, in cui il costo complessivo è dato dalla somma dei costi d’arco in A’. Il grafo parziale in questo caso è un albero ricoprente di G 31
Albero di copertura di minimo costo Introduciamo per ogni arco a una variabile logica xa xa= 1 se l’arco a viene selezionato per formare l’albero di copertura xa= 0 se l’arco a non viene selezionato per formare l’albero di copertura Affinché l’insieme degli archi selezionati formi un grafo parziale connesso è necessario e sufficiente che per ogni taglio (N’,N’’) vi sia almeno un arco a Є A(N’,N’’) con xa = 1, quindi il vincolo Є(N’,N’’) garantisce che i valori assunti dalle variabili decisionali definiscano un grafo parziale connesso 32
Albero di copertura di minimo costo Il problema può essere quindi così formulato: Questa formulazione presenta un numero esponenziale di vincoli, uno per ogni possibile sottoinsieme proprio dell’insieme dei nodi. Il problema viene risolto con un algoritmo euristico. 33
Il problema del commesso viaggiatore Un commesso viaggiatore deve consegnare le sue mercanzie in n località, compresa quella in cui si trova Nota la distanza tra località, il commesso viaggiatore vuole organizzare il suo viaggio in modo che la distanza percorsa sia minima e tutte le località siano raggiunte Dato un grafo non orientato e completo (contenente cioè tutti i possibili archi) G(N,A) con |N|=n e |A|=m=n(n-1)/2 Ad ogni località è associato un nodo Ad ogni arco è associato un costo cij reale e positivo, che rappresenta la minima distanza tra i e j 34
Il problema del commesso viaggiatore L’attività del commesso viaggiatore corrisponde ad un ciclo Hamiltoniano sul grafo G Il problema del commesso viaggiatore consiste nell’individuare il più corto tra tutti i cicli Hamiltoniani Applicazioni: trasporti e logistica, ma non solo… Servire n richieste di lettura e scrittura su un disco magnetico, in modo da minimizzare il ritardo dovuto ai movimenti della testina Trovare la sequenza ottimale dei fori da realizzare nella produzione di circuiti stampati, minimizzando i tempi di movimento del braccio meccanico 35
Il problema del commesso viaggiatore Introduciamo per ogni arco a una variabile logica xij xij =1 se l’arco (i,j) appartiene al ciclo scelto xij = 0 altrimenti La funzione obiettivo può essere quindi scritta come Poiché si vuole ottenere un ciclo, in ogni nodo devono incidere esattamente due archi, ovvero: 36
Il problema del commesso viaggiatore I vincoli precedenti garantiscono solo che gli archi selezionati costituiscano una copertura per cicli del grafo, ovvero una copertura di tutti i nodi del grafo mediante cicli che possono essere disgiunti Esempio: Si sono indicati in grassetto gli archi selezionati 37
Il problema del commesso viaggiatore Per imporre che gli archi selezionati formino un ciclo Hamiltoniano, occorre che la copertura per cicli formi un grafo parziale connesso Condizione necessaria e sufficiente affinché l’insieme degli archi selezionati formi un grafo parziale connesso è che per ogni taglio (N’,N’’) vi sia almeno un arco di taglio: 38
Il problema del commesso viaggiatore La formulazione completa di un problema simmetrico di TSP è: 39
Il problema del commesso viaggiatore Dato un grafo orientato G=(N,A) La formulazione completa di un problema asimmetrico di TSP è:
Il problema del commesso viaggiatore Per risolvere istanze di TSP si ignora il vincolo di connessione sui tagli e si determinano delle soluzione non connesse, che rappresentano dei limiti inferiori del problema originale Successivamente si impone la connessione aggiungendo un numero ristretto di vincoli alla soluzione ottenuta 1 2 3 4 5 6 \ 702 454 842 2396 1196 \ 324 1093 2136 764 1137 2180 798 1616 1857 2900 ESERCIZIO: Scrivere l’istanza su lindo 41
Il problema del commesso viaggiatore ESERCIZIO: Scrivere l’istanza su lindo utilizzando il TSP asimmetrico 1 2 3 4 5 6 \ 702 454 842 2396 1196 \ 324 1093 2136 764 1137 2180 798 1616 1857 2900
Il problema del commesso viaggiatore 43
Il problema del commesso viaggiatore Soluzione inammissibile, in quanto non costituisce un grafo connesso 2 1 OBJ=5668 3 6 5 4
Il problema del commesso viaggiatore E’ necessario inserire nuovi vincoli che impongano la connessione della soluzione: X_1_3 + x_3_1 ≤ 1 X_4_5 + x_5_4 ≤ 1 X_2_6 + x_6_2 ≤ 1 45
Il problema del commesso viaggiatore Soluzione ammissibile dell’istanza di TSP OBJ=6610 2 1 3 6 5 4
Il problema del commesso viaggiatore Con riferimento al precedente problema, scrivere con Lindo l’istanza di TSP simmetrico 1 2 3 4 5 6 \ 702 454 842 2396 1196 \ 324 1093 2136 764 1137 2180 798 1616 1857 2900 47
Il problema del commesso viaggiatore 48
Il problema del commesso viaggiatore Soluzione ammissibile dell’istanza di TSP 2 1 OBJ=6610 3 6 5 4 49