Modelli di flusso 2013 Modelli su rete (Grafi) Vari tipi di problemi possono essere rappresentati graficamente per mezzo di grafi o reti. Un tipico problema incontrato è il problema del trasporto. Vedremo ora la struttura di base dei modelli su rete ed alcuni esempi di problemi di carattere economico e finanziario che possono essere formulati per mezzo di tali modelli. I modelli su rete sono dei particolari modelli di PL che possiedono caratteristiche più vantaggiose rispetto ai modelli di PL generali: • consentono di fornire un'interpretazione grafica al problema considerato • possono essere risolti con algoritmi specifici ancora più efficienti di quelli disponibili per la PL • sotto opportune ipotesi garantiscono l’interezza delle soluzioni ottime come nel caso dei problemi di trasporto. RETI O GRAFI Intuitivamente, una rete o grafo è una struttura caratterizzata da vertici (o nodi) ed archi (o spigoli) come nell’esempio seguente. ESEMPIO : V = {1, 2, 3, 4, 5, 6} A = {(1,2), (1,4), (1,6), (2,3), (3,6), (4,5), (5,3), (5,6)} Dal punto di vista matematico una rete o grafo è individuata da una coppia di insiemi (V,A), ove V={insieme dei vertici o nodi} ed A={insieme degli archi}. Supponendo che i nodi siano numerati da 1 ad n, ovvero V={1,...,n}, la coppia (orientata) (i,j) indicherà l'arco (orientato) che collega il nodo i al nodo j. Quando si parla di arco in generale si definisce una relazione tra una coppia di nodi, ad esempio, nella figura sopra l’arco (4,5) evidenzia come il nodo 4 sia in relazione col nodo 5, l’orientamento indica però che tale relazione non è biunivoca ovvero 4 è in relazione a 5 ma non viceversa. Un esempio intuitivo di grafo è dato dalle reti di trasporto urbano dove i nodi rappresentano gli incroci mentre gli archi sono i tratti stradali tra due incroci successivi. L’arco (4,5) specifica allora che è possibile andare dall’incrocio 4 all’incrocio 5 ma non viceversa (siamo in presenza di una strada a senso unico). In generale non tutte le coppie di nodi saranno collegate da archi. L’insieme A può essere interpretato come un sottoinsieme del prodotto cartesiano VxV (= l'insieme di tutte le possibili coppie (i,j) ). Quando invece non si ha interesse a specificare l’orientamento del collegamento tra due nodi allora si parla di spigoli del grafo ed uno spigolo tra due nodi (i,j) (indicato semplicemente con una linea tra i e j vedi figura) rappresenta ora una relazione biunivoca tra i e j. Modelli di flusso 2013 i j FLUSSI Nei modelli su rete si associano a tutti gli agli archi (i,j) delle variabili decisionali xij che possono essere interpretate fisicamente come la quantità di flusso che si intende inviare dal vertice i al vertice j (se xij∈R), oppure se debba esserci un legame (flusso) fra il vertice i ed il vertice j (se xij = 0 o 1) (flusso booleano). Ad esempio, nei problemi economici o finanziari i nodi possono rappresentare periodi temporali o siti e le variabili xij possono essere interpretate come rappresentanti un "flusso" (monetario, di materiali, ecc.) fra un nodo ed un altro. Nel problema del trasporto xij è la quantità da trasportare dal deposito i al mercato j o più in generale da un nodo i ad un nodo j attraverso l’arco (i,j). Ovviamente, a seconda dei problemi, l’interpretazione delle variabili xij sarà completamente diversa, tuttavia per la formulazione generale dei modelli conviene immaginarle sempre come “flussi” di qualche tipo (beni, flussi monetari etc…). CAPACITA' E COSTI Oltre alle variabili decisionali xij , agli archi (i,j) vengono spesso associate: • • limitazioni o capacità massime uij e/o minime lij per i flussi che li possono percorrere; costi (o profitti) unitari cij di percorrenza per i flussi xij. FORNITURE E CESSIONI Si può inoltre supporre che nei nodi vi siano forniture o cessioni di flusso indicate da un valore bi negativo (fornitura o aumento di flusso) o positivo (cessione o diminuzione di flusso). (Si noti che i segni sono puramente convenzionali ed in alcuni testi viene adottata la convenzione inversa). POZZI E SORGENTI I vertici aventi solo archi uscenti (come il vertice 1 nell'esempio precedente) vengono detti sorgenti (source), mentre quelli aventi solo archi entranti (come il vertice 6 nell'esempio precedente) vengono detti pozzi (sink). CAMMINI Dato un grafo orientato, dove cioè sono specificati l’orientamento di ciascun arco, un cammino è una sequenza (orientata) di nodi e di archi che generalmente viene indicata con {v1, (v1, v2), v2, (v2, v3), v3,…, (vn-1, vn), vn), dove v1 è il nodo iniziale del cammino e vn il nodo finale del cammino. Nell'esempio precedente la sequenza (1, (1,4), 4, (4,5), 5, (5,6)) è un cammino da 1 a 6 passante per i nodi 4 e 5. PROBLEMA DEL CAMMINO MINIMO (MASSIMO) Interpretando i costi cij come distanze fra i vertici (o nodi) i e j, trovare il cammino di lunghezza minima (massima) fra due vertici assegnati v1, vn. Si noti che si può facilmente trasformare un problema di cammino minimo in un problema di cammino massimo (e viceversa) cambiando il segno ai coefficienti cij (infatti in generale vale la proprietà: max f(x) = min - f(x) Modelli di flusso 2013 PROBLEMA DEL FLUSSO MASSIMO Supponendo che in un grafo: • vi sia una sola sorgente ed un solo pozzo; • in ogni vertice diverso dalla sorgente e dal pozzo la quantità di flusso entrante coincida con quello uscente (ossia bi = 0) (bilanciamento del flusso al nodo i); • vi siano delle capacità massime sugli archi; trovare la quantità massima di flusso che si può inviare dalla sorgente al pozzo. PROBLEMA DEL FLUSSO DI COSTO MINIMO Il problema del flusso a costo minimo è un problema fondamentale della Ricerca Operativa e comprende diversi problemi come ad esempio i due precedentemente introdotti che altro non sono che casi particolari del problema del flusso a costo minimo. Il problema può essere semplicemente formulato nel seguente modo: Dato un grafo od una rete di trasporto, bisogna determinare l’insieme dei percorsi per trasportare al minimo costo un bene da dei punti di offerta localizzati sui nodi della rete a dei punti (nodi) di domanda in modo tale da soddisfare tutta la richiesta del bene in questione. Sulla rete di trasporto, indipendentemente dalla presenza o meno di sorgenti e pozzi si suppone di assegnare ad ogni arco (i,j) un costo cij (supposto non negativo) ed eventualmente delle capacità minime e/o massime lij ed uij. I nodi di offerta saranno i nodi in cui supponiamo ci siano delle forniture del bene mentre i nodi di domanda sono i nodi in cui si individuano le cessioni o richieste del bene. Gli altri nodi sono semplicemente nodi di passaggio del flusso (bene) caratterizzati dall’avere bi = 0. Caratteristica fondamentale di questo modello, come nel caso del flusso massimo, è la richiesta di bilanciamento dei flussi in ogni nodo, ovvero si suppone che in ciascun nodo il flusso complessivo in entrata sia uguale al flusso complessivo in uscita comprendendo anche le richieste o forniture per ogni nodo. L’obiettivo di questi modelli è quello di minimizzare il costo totale ∑ cij xij (i , j )∈A dei flussi sulla rete rispettando i vincoli di bilanciamento dei flussi in ogni nodo ed i vincoli di capacità sugli archi. Una assunzione che generalmente viene fatta è che, analogamente al modello del trasporto, l’offerta totale sia uguale alla domanda totale. Tale assunzione, considerando le cessioni e le forniture di flusso ai nodi ± bi, si può esprimere: ∑ bi = 0 i∈N MODELLO RELATIVO AL PROBLEMA DEL FLUSSO DI COSTO MINIMO Per esprimere in modo sintetico la formulazione del problema di flusso di costo minimo come problema di programmazione lineare conviene introdurre delle notazioni aggiuntive. Per ogni nodo i della rete poniamo : P(i) = {k : (k, i) ∈ A} (= insieme dei nodi predecessori di i) S(i) = {k : (i, k) ∈ A} (= insieme dei nodi successori di i) Allora in ogni nodo i deve valere la seguente equazione di bilancio del flusso: ∑ k∈P (i ) xki − ∑ k∈S (i ) xik = bi xki i xik Modelli di flusso 2013 bi Inoltre su ogni arco (i,j) appartenente all’insieme A degli archi del grafo vi possono essere dei vincoli di capacità inferiore e/o superiore: lij ≤ xij ≤ uij Dunque il problema del flusso di costo minimo può essere formulato come segue: min ∑ cij xij ( i , j )∈ A bi s.t. ∑P (i ) xki − k∈∑S (i ) x= ik ∈ k lij ≤ xij ≤ uij ∀i ∈ V ∀(i, j ) ∈ A Problemi di flusso e trasporto Il problema del trasporto si può formulare come un modello di flusso a costo minimo. Supponiamo di avere dei depositi indicati con 1,2,3 e dei mercati indicati con 4,5,6,7. Consideriamo una rete con dei nodi N={1,2,3,4,5,6,7} ed archi solamente fra coppie di nodi (i,j) con i=1,2,3 e j=4,5,6,7 . Nei depositi 1,2,3 si può immaginare che ci sia una fornitura di flusso (merce) pari alla quantità di merce ai in essi effettivamente disponibile ma considerata con segno negativo -ai (fornitura). Analogamente, nei mercati 4,5,6,7 si supporrà che ci sia una cessione di flusso di entità pari alle domande bj dei mercati medesimi. Agli archi fra depositi e mercati viene associato un costo unitario cij, interpretato come costo unitario di trasporto. Allora il classico problema di trasporto equilibrato può essere immaginato come un problema di flusso di costo minimo che verifica le seguenti condizioni : Convenzione : • • • • Il flusso entrante lo indichiamo con segno negativo; Il flusso uscente lo indichiamo con segno positivo. Nei nodi (1,2,3) c'è una fornitura di flusso -ai, nei nodi (4,5,6,7) c'è una cessione di flusso bj ; In ogni nodo j la somma delle quantità di flusso entrante (gli xij) meno la somma delle quantità di flusso uscente (gli xjk) coincide con la fornitura o cessione di flusso in tale nodo: ∑ xij b= = j 4,5, 6, 7 j i −a j j = 1, 2,3 −∑ x jk = k Modelli di flusso 2013 Si osservi che risulta facile estendere il modello del trasporto al caso in cui ci siano dei nodi intermedi j tra i depositi ed i mercati. In tal caso si deve richiedere che in tali nodi tutto quello che entra debba anche uscire, ovvero che la somma algebrica dei flussi entranti e dei flussi uscenti sia zero : ∑x i ij − ∑ x jk = 0 k OSSERVAZIONI SUI MODELLI DI FLUSSO Sorgenti e pozzi multipli Nel problema di flusso massimo abbiamo supposto che vi sia un'unica sorgente ed un unico pozzo. Quest'ipotesi può essere facilmente eliminata. Infatti se vi sono più sorgenti, ad esempio S1, S2, S3, si può trasformare il problema in uno equivalente aggiungendo una "supersorgente" fittizia S0 collegata alle precedenti con archi di capacità illimitata, come mostrato nella seguente figura: In modo analogo, se vi sono più pozzi, questi possono essere tutti collegati ad un "superpozzo" mediante archi di capacità illimitata ottenendo un problema equivalente con un unico pozzo. Modelli di flusso 2013 Capacità sui nodi Nei problemi su rete considerati abbiamo supposto che vi siano dei vincoli di capacità solamente sugli archi. In realtà, si possono facilmente aggiungere anche dei vincoli di capacità sui nodi trasformando, anche in questo caso, il problema in uno equivalente. Se si vuole imporre che il flusso passante per il nodo i non superi una capacità massima Ui basta scomporre il nodo i in due nodi distinti i' ed i" collegati fra loro con un arco (i' , i") di capacità Ui come indicato nella figura seguente: Rappresentazione grafica di forniture e cessioni Per rappresentare graficamente il fatto che nel nodo i vi sia una richiesta o fornitura di flusso bi si può disegnare un arco rispettivamente entrante o uscente da tale nodo con il valore di bi indicato a lato. Esempio: Fornitura di 5 unità di flusso (bi = -5) Cessione di 7 unità di flusso (bi = 7) In forma compatta, il modello di trasporto, ripreso in precedenza, così come il modello più generale di flusso a costo minimo, possono essere descritti in forma matriciale analogamente a qualunque altro problema di PL nel seguente modo: min c T x Ax ≥ d x≥0 Dove, nel caso specifico di un problema di trasporto cT è il vettore riga dei costi unitari del trasporto, x è il vettore colonna delle variabili decisionali, A è una matrice di dimensione (n+m) × (nm) con (n+m) il totale dei vincoli sulle disponibilità dei depositi (n vincoli) più i vincoli sulle richieste dei mercati (m vincoli), nm è il totale delle variabili del modello e d è il vettore colonna avente (n+m) elementi, ovvero contenente le n disponibilità ai ∀ i = 1,2,…,n, e le m richieste bj ∀ j = 1,2,…,m. Si noti che è sempre possibile scrivere il vincolo compatto Ax ≥ d con il segno di maggiore od uguale dato che un vincolo di “≤” può essere sempre trasformato in uno di “≥” moltiplicando per –1 entrambi i membri della disequazione di “≤”. Modelli di flusso 2013 Nella realtà, andrebbe inserito un ulteriore vincolo per specificare che le singole quantità da trasportare devono essere intere, non avendo senso trasportare ad esempio un televisore e mezzo. Se però le disponibilità ai ∀i =1, 2,.., n , e le richieste b j ∀j =1, 2,.., m sono intere allora la soluzione sarà sicuramente intera dato che la matrice dei vincoli A è una matrice totalmente unimodulare ovvero i determinanti di tutte le sottomatrici quadrate di A hanno valore –1,0,1. La totale unimodularità della matrice A è una caratteristica dei modelli di flusso su rete, ed in particolare del modello di flusso a costo minimo, in cui la matrice A rappresenta la matrice nodi-archi del grafo sottostante. Ogniqualvolta, in un problema di PL, la matrice A dei vincoli risulta essere totalmente unimodulare, se i termini noti del sistema dei vincoli sono interi, allora la soluzione del relativo problema sarà sicuramente intera. Condizione necessaria affinché una matrice A sia totalmente unimodulare è che abbia tutti i suoi elementi uguali a 0,-1 o 1. Non esiste una condizione che sia necessaria e sufficiente per stabilire se una matrice A sia totalmente unimodulare. Inoltre, verificare la totale unimodularità di una matrice non è affatto semplice! Determinazione dinamica dei lotti ( Dynamic Lot Sizing ) Si tratta di un problema di produzione multiperiodale dove, oltre a decidere quanto produrre in ogni periodo in modo tale da soddisfare la domanda di ogni periodo, bisogna anche decidere quanta merce prodotta può/deve essere immagazzinata tra due periodi successivi. Supponiamo, dunque, di voler soddisfare la domanda prevista dt di una certa merce in K periodi futuri ( t = 1,...,K ). Per soddisfare queste domande si può decidere di produrre in ogni periodo tutta la merce richiesta, oppure si può decidere di produrla in quantità superiore in un periodo in modo tale da conservare l’eccesso di merce in magazzino da un periodo all'altro per soddisfare la domanda nel periodo successivo. La produzione deve ovviamente essere effettuata al minimo costo, supponendo che ct, sia il costo di produzione al tempo t = 1,...,K, e ct,t+1, il costo di immagazzinamento tra il periodo t ed il periodo t+1. Questo ed altri problemi simili possono essere risolti non solo formulandoli come problemi di produzione, ma anche come problema di flusso di costo minimo su una rete. Infatti, si consideri la rete nella figura a seguito. Col nodo 0 si è indicato il momento della produzione in (all’inizio di) ogni periodo, ed il corrispondente arco (0,t), t = 1,...,K, rappresenta graficamente il processo di produzione della merce nel periodo t. Ogni arco (t,t+1), t = 1,...,K-1, rappresenta invece l’immagazzinamento della merce tra due periodi successivi. Con - dt, t = 1,...,K, si indica la domanda prevista in ogni periodo t, e nel nodo 0 si ipotizza una fornitura di flusso pari alla somma di tutte le domande. Modelli di flusso 2013 k 0 Σd i i=1 x2 x1 1 -d1 I1 xk xk-1 2 I2 k-1 -dk-1 -d2 Ik-1 k -dk Supponiamo inoltre che ci siano dei vincoli di capacità sugli archi che rappresentano, ad esempio, la massima quantità di merce che può essere o prodotta o immagazzinata in un dato periodo, il problema potrà quindi essere formulato come problema di flusso di costo minimo. Consideriamo ora la possibilità di non riuscire a soddisfare tutte le domande in tutti i periodi. Abbiamo il cosiddetto schema dei backorders (ordini evasi in ritardo) secondo il quale prevediamo ad esempio di produrre nel periodo 2 per soddisfare la domanda del periodo 1. Il consumatore 1 non sarà quindi molto contento e vorrà essere risarcito con una penale. Quindi ci saranno dei costi per "mandare" la merce da un periodo successivo ad un periodo precedente (Bt+1,t). Anche in questo caso bisogna determinare il flusso di costo minimo della merce che soddisfi tutte le domande. Supponendo che ci siano capacità superiori e/o inferiori sugli archi, potremo formulare il problema attraverso un modello di flusso di costo minimo. k 0 Σd i i=1 x2 x1 I1 1 2 B1 -d1 -d2 xk xk-1 I2 B2 k-1 -dk-1 Ik-1 Bk-1 k -dk Una possibile soluzione può avere l'aspetto riportato nella figura successiva: produciamo in 3 per soddisfare la domanda di 3 e attraverso il backorder e lo stoccaggio le domande del periodo 2 e 4 rispettivamente. Produciamo nel periodo 5 per soddisfare i periodi 5-6-7 e infine produciamo nel periodo 8 per soddisfare la domanda relativa al periodo 8. Modelli di flusso 2013 MODELLO RELATIVO AL PROBLEMA DEL CAMMINO MINIMO Il problema del cammino minimo da un nodo u ad un nodo v può essere formulato di nuovo come un problema di flusso di costo minimo in cui vi è la fornitura (offerta) di un’unità di flusso in u (bu = -1), la cessione (domanda) di un’unità di flusso in v (bv = 1) ed il bilanciamento tra flussi entranti ed uscenti (senza cessioni nè forniture) in tutti gli altri nodi (bi = 0). I costi associati agli archi sono anche detti costi generalizzati in quanto possono rappresentare il costo “monetario” per attraversare una data strada rappresentata dall’arco (i,j) o più semplicemente rappresentano la lunghezza di quel tratto di strada tra due nodi/incrocio o una combinazione dei due. Si ottiene quindi il seguente modello: min ∑ cij xij ( i , j )∈A ∑ xik 0 per ogni i ∈V , i ≠ u, v ∑ xki − = k∈S (i ) k∈P (i ) −1 − ∑ xuk = k∈S (u ) xkv = 1 k∈∑ P (v ) per ogni (i, j ) ∈ A lij ≤ xij ≤ uij La soluzione ottima del problema così formulato, dovendo essere intera per le proprietà dei modelli su rete, potrà avere solo valori 0 o 1 e fornirà un cammino minimo tra u e v mediante la seguente interpretazione: xij = 1 ⇒ L’arco (i,j) appartiene al cammino minimo xij = 0 ⇒ L’arco (i,j) non appartiene al cammino minimo Modelli di flusso 2013 Si osservi che per questo tipo di problemi esistono degli algoritmi molto più semplici ed efficienti di quelli basati sulla Programmazione Lineare o anche sui modelli di flusso di costo minimo. Si tratta dei cosiddetti algoritmi su grafi (tra cui, ad esempio, l'algoritmo di Dijkstra che richiede circa n2 operazioni). MODELLO RELATIVO AL PROBLEMA DEL FLUSSO MASSIMO Il problema del flusso massimo può essere descritto sinteticamente nel modo seguente: Supponiamo di avere un grafo in cui: • vi sia una sola sorgente ed un solo pozzo; • in ogni vertice diverso dalla sorgente e dal pozzo la quantità di flusso entrante coincida con quello uscente (ossia bi = 0) (bilanciamento del flusso al nodo i); • vi siano solamente delle capacità massime sugli archi; trovare la quantità massima di flusso che si può inviare dalla sorgente al pozzo. Anche il problema del flusso massimo può essere formulato come problema di flusso di costo minimo mediante un opportuno artificio. Si aggiunge al grafo originario un arco fittizio di ritorno dal pozzo alla sorgente senza vincoli di capacità (o con capacità molto grande) e si assegna costo zero a tutti gli archi della rete eccetto quello fittizio cui viene assegnato un costo negativo qualsiasi (generalmente -1). In questo modo il flusso di costo minimo risulterà essere quello in cui viene inviata la maggior quantità possibile di flusso dal pozzo alla sorgente attraverso l’arco fittizio e questa quantità corrisponde alla massima quantità di flusso che è possibile inviare dalla sorgente al pozzo attraverso gli archi originari del problema compatibilmente con i vincoli di capacità. Dunque i valori delle variabili xij associate agli archi (i,j) non fittizi forniranno la soluzione del problema di flusso massimo originario. 2 Sorgente 4 1 Pozzo 6 3 5 Arco fittizio Modelli di flusso 2013 La formulazione del modello associato a questo grafo è la seguente: min − x61 (= - max x61) ∑ xki − ∑ xik = 0 ∀ i ∈ N k∈S (i ) k∈P (i ) ≤ x ≤ u ∀ (i, j) ∈ A ij ij ij