CASO 1) Pesi positivi ( diretto o indiretto) Algoritmo di Dijkstra

Documenti analoghi
età (anni) manutenzione (keuro) ricavato (keuro)

11.4 Chiusura transitiva

2.3 Cammini ottimi. E. Amaldi Fondamenti di R.O. Politecnico di Milano 1

Operations Management

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

Figura 1: 1) Si scriva la formulazione del problema come problema di PLI (con un numero minimo di vincoli) e la matrice dei vincoli.

Algoritmi e strutture dati

Cammini minimi. Definizioni. Distanza fra vertici. Proprietà dei cammini minimi. Algoritmi e Strutture Dati

Parte V: Rilassamento Lagrangiano

Il problema del commesso viaggiatore

Grafi (orientati): cammini minimi

Esercizi per il corso di. Logistica I. a.a Daniela Favaretto. Dipartimento di Matematica Applicata Università Ca Foscari di Venezia

Problema del trasporto

Problemi, istanze, soluzioni

Possibile applicazione

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 20 giugno 2014

2. ALGORITMO DEL SIMPLESSO

1 Il metodo dei tagli di Gomory

Esercizi Capitolo 11 - Strutture di dati e progettazione di algoritmi

Corso di Matematica per la Chimica

Appunti del corso di Informatica 1 (IN110 Fondamenti) 7 Grafi e alberi: introduzione

Ricerca Operativa. G. Liuzzi. Lunedí 20 Aprile 2015

Introduzione. Il routing permette la comunicazione tra due nodi differenti anche se non sono collegati direttamente

Routing IP. IP routing

A UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 13 giugno 2011

L ALGORITMO DEL SIMPLESSO REVISIONATO

Algoritmo basato su cancellazione di cicli

Problemi di Percorso. Capitolo dodicesimo

Cammini minimi fra tutte le coppie

i completi l'esecuzione dell'algoritmo di programmazione dinamica per questo problema restituendo il valore ottimo e una soluzione ottima del problema

Pianificazione dei progetti. Alberto Caprara DEIS - Università di Bologna

UNIVERSITÀ DEGLI STUDI ROMA TRE Corso di Studi in Ingegneria Informatica Ricerca Operativa 1 Seconda prova intermedia 17 giugno 2013

RISOLUZIONE DI SISTEMI LINEARI

Problema del cammino minimo

Modelli decisionali su grafi - Problemi di Localizzazione

Sistemi lineari. Lorenzo Pareschi. Dipartimento di Matematica & Facoltá di Architettura Universitá di Ferrara

Esame di Ricerca Operativa del 16/06/2015

Conversione di base. Conversione decimale binario. Si calcolano i resti delle divisioni per due

Grafi pesati Minimo albero ricoprente

Assemblaggio degli Elementi: Soluzione del Problema Strutturale Discreto

Pagine di Algebra lineare. di premessa al testo Pagine di Geometria di Sara Dragotti. Parte terza: SISTEMI LINEARI

- Trovare soluzione ottima primale ( con il simplesso o algoritmo analogo)

Decomposizione LU di una matrice quadrata

Introduzione al Metodo del Simplesso. 1 Soluzioni di base e problemi in forma standard

Corso di elettrotecnica Materiale didattico: i grafi

Appunti su Indipendenza Lineare di Vettori

Fondamenti di Internet e Reti

Il problema del commesso viaggiatore e problemi di vehicle routing

1 SIGNIFICATO DEL DETERMINANTE

Metodi & Modelli per le Scelte Economiche

2.2 Alberi di supporto di costo ottimo

4c. Esercizi sul livello di Rete Instradamento in Internet

Formulario sui Prodotti Hermitiani Marcello Mamino Pisa, 24 v 2010

Diagrammi a blocchi 1

Coverage. Visto che il coverage si basa su aree dell ambiente che vengono monitorate non è

La Gestione dei Progetti. Paolo Detti Dipartimento di Ingegneria dell Informazione e Scienze Matematiche Università di Siena

IL METODO DEL SIMPLESSO

Esame di Ricerca Operativa del 15/01/2015

SISTEMI LINEARI: APPROFONDIMENTI ED ESEMPI

Progettazione di Algoritmi

Programmazione Lineare Intera. Programmazione Lineare Intera p. 1/4

( ) le colonne della matrice dei coefficienti, con. , risulta A 3 = A 1 + 4A 2 + 4A 5, A 4 = A 1 + A 2,

AUTOMA A STATI FINITI

Grafi (non orientati e connessi): minimo albero ricoprente

LEZIONE 12. v = α 1 v α n v n =

Macchine sequenziali. Automa a Stati Finiti (ASF)

La Gestione dei Progetti. Paolo Detti Dipartimento di Ingegneria dell Informazione e Scienze Matematiche Università di Siena

2. Risolvere con il metodo di eliminazione di Gauss con pivoting parziale il seguente sistema lineare:

Esecuzione concorrente di transazioni

Si consideri il sistema a coefficienti reali di m equazioni lineari in n incognite

Programmazione Lineare Intera

Esercitazione 5: Sistemi a risoluzione immediata.

Algebra di Boole: minimizzazione di funzioni booleane

Esercizi svolti di Programmazione Lineare. a cura di Laura Scrimali Dipartimento di Matematica e Informatica Università di Catania

GRAFI. fig.1 - GRAFI (1) Si avvisa il lettore che certe definizioni che verranno date differiscono da quelle presenti in letteratura.

Problemi di flusso a costo minimo

POTENZE DI MATRICI QUADRATE

4.5 Metodo del simplesso

Ricerca Operativa Note su Programmazione Lineare e Metodo del Simplesso (parte III)

Metodi per la risoluzione di sistemi lineari

Progettazione di Algoritmi

Minimo albero di copertura

UNIVERSITÀ DEGLI STUDI DI PAVIA FACOLTÀ DI INGEGNERIA. Matlab: esempi ed esercizi

20 + 2y = 60 2y y = 10

Grafi: definizioni e visite

CONSIGLI PER LA RISOLUZIONE DEI CIRCUITI ELETTRICI

Problemi di Flusso: Il modello del Trasporto

Analisi delle corrispondenze

Altrimenti, il M.C.D. di a e b è anche divisore di r (e.g. a=15,b=6,r=3 che è il M.C.D.)

Osservazione. Convergenza dei metodi di Gauss-Seidel e di Jacobi. Condizioni sufficienti per la convergenza. Definizione

Matrici. Matrici.h Definizione dei tipi. Un po di esercizi sulle matrici Semplici. Media difficoltà. Difficili

Esercizi sui sistemi di equazioni lineari.

Problema dell albero di cammini minimi (SPT, Shortest Path Tree) o problema dei cammini minimi :

Esercitazione di Calcolo Numerico 1 22 Aprile Determinare la fattorizzazione LU della matrice a 1 1 A = 3a 2 a 2a a a 2 A =

Calcolatori: Sistemi di Numerazione

Appendice A: un esempio di scelta del mix ottimo di produzione in presenza di vincoli 19

Analisi di un telaio a due livelli e maglie di forma generica secondo il Metodo degli Spostamenti (MdS)

LEZIONE 4. { x + y + z = 1 x y + 2z = 3

SISTEMI LINEARI. x y + 2t = 0 2x + y + z t = 0 x z t = 0 ; S 3 : ; S 5x 2y z = 1 4x 7y = 3

Soluzione dei Problemi di Programmazione Lineare

Transcript:

4) DISTANZE Problematiche Si suppone un grafo in cui ad ogni arco e' associato un peso (distanza). Il grafo puo' essere sia diretto che non diretto. Se non e' diretto ogni arco puo' essere pensato come una coppia di archi orientati. Si tratto di calcolare il percorso tra i-j corrispondente ai pesi (distanze) minime. Il problema e' sensato se il minimo esiste. Se ad una sequenza di archi che parte e arriva nello stesso vertice corrisponde una somma di distanze negativa allora la sequenza puo' essere percorsa un numero infinito di volte e il problema di minima distanza e' mal posto. Si e' sicuramente nel caso precedente se il grafo non e' diretto e l'arco (i,j) ha peso (distanza) d(i,j) < 0 perche' il cammino i-j-i puo' essere indefinitamente ripetuto. La non esistenza del ciclo negativo e' un ipotesi che va in qualche modo aggiunta e conviene considerare separatamente i tre casi che vengono risolti con tecniche differenti: - grafi (diretti o indiretti) con pesi (distanze) non negative - grafi diretti con distanze sia positive che negative ma senza cicli negativi - grafi diretti con distanze sia positive che negative ma senza cicli (aciclici) CASO 1) Pesi positivi ( diretto o indiretto) Algoritmo di Dijkstra Se si fissa un vertice i e' possibile calcolare il cammino minimo da i a ogni vertice. (Algoritmo di Dijkstra) Si suppone di avere ad ogni passo un insieme di vertici raggiungibili da i. Sia V tale insieme. Per ogni vertice x V e' noto il valore del cammino minimo da i a x. Per i rimanenti vertici y Y e' noto il valore d V (y) del cammino minimo da i a y attraverso V. Si puo' partire da V = {i} in tal caso d(i)=0 e per i rimanenti vertici y d(y) = d(i,y) se esiste arco (i,y) e + negli altri casi. Se z e' il vertice di Y per cui si ha d V (z) = min { d V (y), y Y } allora d(z) = d V (z). Infatti attraverso V si ha un cammino da i a z di lunghezza d V (z) Un eventuale altro cammino i---z parte da V (i V), raggiunge un vertice p Y, p z e da questo z Il costo C del cammino e' allora C= d V (p) + costo( p---z) Il peso di ogni arco e' positivo, vale d V (p) d V (z) e C d V (p) d V (z)

Si puo' quindi fissare il vertice z e avere V=V {z} Y= Y\{z} Se z e' aggiunto a V i cammini i---y attraverso V possono passare attraverso z quindi se y Y d V (y) = min { d V (y), d(z) + d(z,y) } Dopo n-1 passi sono calcolate tutte le distanze da i ai rimanenti vertici. Nell'algoritmo si tiene memoria oltre che delle quantita' provvisorie d V e definitive d() del predecessore/padre di ogni vertice nel cammino i---vertice. in modo poter ricostriuire facilmente il cammino ad i. Il predecessore/padre e' posto come il vertice che precede il vertice nel cammino attraverso V. Inizialmente e posto a i ed e' modificato ogni volta che nel calcolo del minimo il valore cambia.

Esempio 1 Si calcolano tutte le distanze da 1 ai rimanenti vertici V={1} n [1, 2, 3, 4, 5, 6, 7, 8] D=(0, 7, 4, 2, 4, +, +, + ) P= (1, 1, 1, 1, 1, 1, 1, 1) Si fissa 4, V={1,4} Si effettua il ricalcolo, se nel ricalcolo il valore e' modificato il vertice padre e' il nuovo vertice. Ricalcolo d V (2) = min { 7, 2 + d(4,2) } = min { 7, + } =7 d V (3) = min { 4, 2 + d(4,3) }= min {4,2+1 }= 3 (modificato) d V (5) = min { 4, 2 + d(4,5) }= min {4,2+1 }= 3 (modificato) d V (6) = min { +, 2 + d(4,6) }= min { +,2+5 }=7 (modificato) d V (7) = min { +, 2 + d(4,7) }= min { +, + }= + d V (8) = min { +, 2 + d(4,8) }= min {+, + }=+ Il valore minimo e' d V (3) = 3 V diventa { 1,4,3} Ricalcolo (uno dei due possibili)

d V (2) = min { 7, 3 + d(3,2) } = min { 7, 3 +3} =6 d V (5) = min { 3, 3 + d(3,5)}= min {3, + }= 3 d V (6) = min { 7, 3 + d(3,6)}= min { 7,2+5 }=7 d V (7) = min { +, 3 + d(3,7) }= min { +, 3 +5}=8 (modificato) d V (8) = min { +, 3 + d(3,8) }= min {+, + }=+ Il valore minimo e' d V (5) = 3 (uno dei due possibili al passo precedente ) V diventa { 1,4,3,5} Ricalcolo d V (2) = min { 7, 3 + d(5,2) } = min { 6, + } =6 d V (6) = min { 7, 3 + d(5,6)}= min { 7,3+3 }=6 (modificato) d V (7) = min { 8, 3 + d(5,7) }= min { 8, 3 +5}=8 d V (8) = min { +, 3 + d(5,8) }= min {+, 3 + 6 }=9 (modificato) Nei passi successivi vengono introdotti i valori 2 e 6 modificando per V= { 1,4,3,5,2} d V (6) = min { 6, 63 + d(2,6)}= min { 6, + }=6 d V (7) = min { 8, 6 + d(2,7) }= min { 8, 6 +1}=7 (modificato) d V (8) = min { 9, 6 + d(2,8) }= min {9, + }=9 per V= { 1,4,3,5,2,6} d V (7) = min { 7, 6 + d(6,7) }= min { 7, 6 +3}=7 d V (8) = min { 9, 6 + d(6,8) }= min {9,6+4 }=9 Il valore minore e' d V (7)=7 si ottiene quindi d V (8) = min { 9, 7 + d(7,8) }= min {9,7+1 }=8 che ovviamente e' il valore del minimo cammino 1---8 Si ottiene l'albero delle minime distanze da 1 segnato nella figura (archi piu' spessi)

Esempio 2 Si effettua il calcolo delle minime distanze da 1 per il grafo (diretto) in figura Si parte da V={1} n [1 2 3 4 5 6 ] D (0,10,20, +,+,+ ) P (1,1,1,1,1,1) Il valore minimo delle distanze verso vertici non in V e ' D(2)= 10 Si ha V= {1,2} e si ricalcola d V (3) = min { 20, 10 + d(2,3) } = min { 20, 10 +20} =20 d V (4) = min { +, 10 + d(2,4) }= min {+, + }= + d V (5) = min { + 4, 10 + d(2,5) }= min {+, + }= + d V (6) = min { +, 10 + d(2,6) }= min {+, + }= + Il valore minimo e' d V (3) =20 V={1,2,3} e si ricalcola d V (4) = min { +, 20 + d(3,4) }= min {+,20+30}=50 (modificato) d V (5) = min { +, 20 + d(3,5) }= min {+, + }=+ d V (6) = min { +, 20 + d(3,6) }= min {+, 20+40 }= 60 (modificato) Il valore minimo e' d V (4) = 50 Si ha V={1,2,3,4}

ricalcolo d V (5) = min { +, 50 + d(4,5) }= min {+,50+50 }=100 (modificato) d V (6) = min { 60, 50 + d(4,6) }= min {60, + }= 60 Il valore piu' piccolo e' d V (6) =60 e l'ultimo valore risulta d V (5) = min { 100, 60 + d(6,5) }= min{100,+ }=100 L'albero delle minime distanze da 1 e' segnato nella figura In un grafo diretto il cammino di minimo costo tra due vertici k --p puo' essere espresso come problema lineare. Si considere la matrice A (nodi archi) dove ogni colonna corrisponde ad un arco (i,j) e ha elementi nulli tranne in riga i (= -1) e riga j (=1) e il vettore c di componenti c(i,j)= costo percorso i j Ad ogni arco si associa una variabile x(i,j) intera tra 0 e 1 x(i,j)=1 se arco i--j nel minimo cammino, 0 altrimenti Il prodotto scalare c(i,j) x(i,j) esprime il costo del cammino. Il vincolo Ax=g dove g = -1 per k, 1 per p, 0 altrimenti "cattura" i vettori di un cammino k--p attraverso i vertici i-j-s... garantendo arrivo e partenza in ogni vertice intermedio. Il minimo cammino tra k--p e' un problema del tipo min cx Ax=g x 0 x 1 (su ogni componente) CASO 2 (no cicli negativi) In questo caso non e' possibile tornare vantaggiosamente allo stesso vertice e si puo' applicare un algoritmo simile al precedente. Come dimostra un esempio semplicissimo se c(1,2)=5, c(1,3)=2, c(2,3)= -9 il cammino minimo tra 1 e 3 e' dato da 1-2-3 con costo -4 l'analisi dell'adiacenza di 1 non determina con sicurezza il cammino minimo a nessun vertice. In realta' il cammino minimo tra i-j va determinato come cammino minimo tra

tutti i cammini possibili. Se si segue un algoritmo tipo Dijkstra (scegliendo un vertice ad ogni passo) nessuna distanza puo' essere considerata esatta fino ad esaurimento del grafo. L'unica osservazione utile e' (Programmazione dinamica / principio di Bellman ) se il cammino minimo tra i--j passa da h necessariamente la parte h--j (del cammino minimo i--j ) e' il minimo cammino tra h e j ( ovvero : code di cammini ottimali sono ottimali ) Utilizzando questa osservazione e' facile costruire l'atlante dei cammini minimi ( cammino minimo da ogni vertice a tutti) (Algoritmo di Floyd? ) Si definiscono D(i,j) = minimo cammino da i a j Do (i,j) = minimo cammino da i a j utilizzando solo gli archi del grafo D 1 (i,j) = minimo cammino da i a j utilizzando (passando attraverso) il nodo 1 D k (i,j) = minimo cammino da i a j utilizzando (passando attraverso)i nodi 1...k Se non esiste cammino i-j il valore D e' posto = + allora partendo da D o (i,j) e calcolando for k=1:n (nodi di possibile appoggio) for i=1:n (nodo iniz ) for j=1:n (nodo finale) D k (i,j) = min [ D k-1 (i,j), D k-1 (i,k)+ D k-1 (k,j) ] si ottiene come D k il valore corretto di D Oltre alle distanze D k (i,j) conviene conservare per ogni j l' etichetta del vertice "padre" nel cammino verso i. (Matrice delle etichette) L'algoritmo puo' essere applicato anche se le distanze sono negative. Se esiste un ciclo negativo e' possibile tornare a costo <0 in un vertice Se applicato ad un grafo con cicli negativi si ottengono dei valori diagonali D(i,i) <0 per qualche i nel ciclo.

Esempio 3 ( Floyd ) Si considera il grafo in figura Le distanze iniziali sono Inf 1 2 Inf Inf Inf Inf 3 2 Inf Inf Inf Inf Inf 0 Inf Inf 4 Inf -1-1 Inf Inf Inf Inf Permettendo il passaggio da 1 le distanze minime (dirette o attraverso 1) sono (tabella) Inf 1 2 Inf Inf Inf Inf 3 2 Inf Inf Inf Inf Inf 0 Inf Inf 4 Inf -1-1 0 1 Inf Inf ( si aggiungono i valori finiti 5-2 che corrisponde a 5-1-2,, 5-3 [5-1-3] Percorsi piu' lunghi (come 4-5-1-2 ) saranno possibili dopo il possibile passaggio per tutti i vertici intermedi Alla fine (k = 5, passaggio possibile attraverso tutti i vertici) si ha Tabella 1 1 2 3 2 0 1 2 2 1-1 0 1 2 0-2 -1 0 1-1 -1 0 1 2 1 Nel grafo sono possibili i cicli 1-2-4-5-1 & 1-3-5-1 (costo 1)

Se il peso di (5,1) diventa -2 il costo dei cicli diventa 0 e la tabella finale si modifica in 0 1 2 3 2-1 0 1 2 1-2 -1 0 1 0-3 -2-1 0-1 -2-1 0 1 0 Se il peso di (5,1) diventa 3 i cicli hanno costo negativo Se si permette il passaggio attraverso 1 si considera il cammino 5-1-3 Se si permette il passaggio attraverso 3 si ha (5-1-3)+(3-5) ovvero 5-1-3-5 (costo -1) Quindi gia' nella tabella 3 il cammino (5,5) diventa negativo Inf 1 2 3 2 Inf Inf 3 2 3 Inf Inf Inf Inf 0 Inf Inf 4 Inf -1-3 -2-1 0-1 Se i calcoli proseguono nella tabella finale -1 0 1 2 1-2 -1 0 1 0-3 -2-1 0-1 -4-3 -2-1 -2-4 -3-2 -1-2 tutti i termini diagonali sono negativi. poiche' ogni vertice e' in ciclo negativo [ 1-2-4-5-1 e/o 1-3-5-1 ]

CASO 3 grafi aciclici I grafi aciclici hanno alcune particolarita' a) E' possibile ordinare i vertici in modo che se esiste arco (i,j) allora i<j b) si possono calcolare sia min + massime distanze Dim a) Si parte da un vertice arbitrario e si prosegue scegliendo sempre arbitrariamente un arco uscente. Dopo un numero finito di passi si arriva, (per aciclicita' i vertici non si possono ripetere nel cammino ) in un vertice senza archi uscenti. Tale vertice puo' essere scaricato e si puo' ripetere il procedimento partendo da qualsiasi altro vertice (per esempio il vertice immediatamente precedente al vertice scaricato). In questo modo si scaricano progressivamente tutti i vertici e per costruzione il primo vertice scaricato v1 ha solo archi entranti il secondo vertice scaricato v2 puo' avere solo archi diretti a v1 il terzo vertice scaricato v3 puo' avere solo archi diretti a v1 e v2... Se si rinumerano nell'ordine i vertici scaricati come n,n-1,n-2,..., 1 si verifica l'ipotesi Se i vertici sono cosi' numerati e' molto facile calcolare la minima distanza tra tutti i vertici (senza inutili ricalcoli ) Sia D(i,j) il minimi percorso tra i e j Ovviamente D(i,j)= + se i vertici i e j non sono collegati e in particolare per i j Sia d(i,j) il peso dell'arco (i,j) e + se l'arco non esiste Inoltre per tutti gli indici i =2,...,n si ha D(i-1,i)= d(i-1,i ) [ da i-1 si possono raggiungere solo vertici h con h i e non esistino archi (h,i) se h>i ] Il calcolo dei valori D si effettua in modo molto semplice E' immediato il calcolo di D(1,2) Se si suppongono noti i valori D(j,k)= j <k < i I valori D(j,i) successivi si possono calcolare come D(i-1,i)= d(i-1,i ) Per i rimanenti si ha D(j,i) = min { d(j,i), min j<k<i {D(j,k)+D(k,i) } }

Se il calcolo e' eseguito nell'ordine j= i-2,...,1 in ogni formula compaiono solo valori D(j,k), k <i ( e quindi noti) e D(k,i) j<k ( gia' calcolati ) I valori D calcolati non vanno aggiornati. E' possibile calcolare il massimo cammino E' sufficeinte sostituire max a min nella formula e si ha D(j,i) = max { d(j,i), max j<k<i {D(j,k)+D(k,i) } } [ In questo caso d(i,j) e' il peso dell'arco (i,j) che vale - se l'arco non esiste ] Un' applicazione dei grafi aciclicici e' la determinazione ottimale di di calendari di lavori spesso indicata come CPM (Critical path method ) o PERT (Planning evaluation...? ) Si tratta di tecniche estremamente utili e concettualmente semplici. Viene presentato un esempio da cui e' possibile capire la tecnica per eventuali applicazioni Esempio 4 (CPM/ PERT) Occorre compiere un lavoro attraverso - produzione di 4 parti A B C D - Occorre una macchina M1 per produrre A e D - Occorre una macchina M2 per produrre B - Occorre una macchina M3 per produrre C I vari pezzi vanno assemblati : C va unito a D, B unito al pezzo (C+D), A unito al pezzo (B+(C+D)). Occorre una macchina V per testare il pezzo finale Ogni singola operazione richiede un tempo 1- per la disponibilità di M1 occorre T=2 2- per la disponibilità di M2 occorre T=3 3- per la disponibilta di M3 occorre T=4 4- per la disponibilità di V occorre T=2 5- per produrre A occorre T=5 6- per produrre B occorre T=3 7- per produrre C occorre T= 2 8- per produrre D occorre T= 2 9 -per assemblare (C+D) occorre T=1 10- per assemblare B+(C+D) occorre T=2 11- per assemblare occorre A+(B+(C+D)) T=3 12- per la verifica occorre T=1

Ovviamente vanno rispettatte le precedenze quindi (basta indicare le precedenze immediate) 1 precede 5 e 8 2 precede 6 3 precede 7 4 precede 12 5 precede 11 6 precede 10 7 precede 9 8 precede 9 9 precede 10 10 precede 11 11 precede 12 Si forma un grafo con n (=12) vertici corrispondenti alle varie operazioni, un vertice 0 (inizio lavori), un vertice n+1 fine lavori (13 in questo caso). Nel grafo gli archi corrispondono alle precedenze, 0 precede i lavori(1,2,3,4) non preceduti, 13 e' preceduto dai lavori che non ne precedono altri (12) Ad ogni arco (i,j) si associa un peso (distanza) corrispondente al tempo necessario per compiere il lavoro i. ( 0 per il lavoro 0) I nodi del grafo possono essere pensati come eventi. Il nodo i corrispondebbe all'inizio del lavoro i. Il grafo risulta aciclico se le precedenze sono logicamente corrette. E' quindi possibile calcolare cammini minimi e massimi tra vertici Ogni cammino 0--13 corrisponde ad una sequenza di lavori Il tempo di effettuazione dei lavori corrisponde al massimo cammino

0--13. In generale il lavoro k puo' iniziare non prima di max cammino 0--k Se T* e' il tempo finale per non ritadare la fine dei lavori e' sufficente che il lavoro k inizi non piu' tardi di T*- max(k--13) In questo caso Alcune operazioni [3,7,9,10,11,12] non possono ritardare senza ritardare la fine delle operazioni. Queste operazioni sono dette operazioni critiche e nel grafo il percorso corrispondente e' detto cammino critico. Altre [1,2,4,5,6,8] possono ritardare. E' possibile considerare per ogni operazione - di quanto puo' essere ritardata senza ritardare la fine dei lavori - di quanto puo' essere ritardata senza impedire che i lavori successivi abbiano inizio a data minima - di quanto puo' essere ritardata nel caso piu' sfavorevole ( lavori precedenti a data masima lavori successivi a data minima) Si possono generare facilmente tabella di questo tipo. E' considerato solo il primo tipo di ritardo. Op min inizio Max cammino a 13 max inizio Ritardo Durata prevista 1 0 11 2 2 2 4 2 0 12 1 1 3 4 3 0 13 0 0 4 4 4 0 3 10 10 2 12 5 2 9 4 2 5 7 6 3 9 4 1 3 4 7 4 9 4 0 2 2 8 2 9 4 2 2 4 9 6 7 6 0 1 1 10 7 6 7 0 2 2 11 9 4 9 0 3 3 12 12 1 12 0 1 1 13 13 0 13 0 0 0 Max durata Questa analisi permette di ricavare un calendario dei lavori, di valutare le conseguenze dei ritardi, e le operazioni piu' importanti.

Se ritardare un 'operazione diminuisce i costi ( in modo diverso per ogni operazione) si puo' anche cercare di minimizzare i costi con il vincolo di terminare entro la data stabilita. Si tratta di distruibuire al meglio i ritardi considerando costi e conseguenze. Ad esempio sui cammini 1-5-11 e 1-8-9 sono possibili ritardi di 2 che possono essere ottenuti sia ritardando le tre operazioni 1,5,8, del tempo 1 oppure le sole operazioni 5,8 del tempo 2.. Calcolare il tempo minimo (e i calendari) corrisponde a risolvere un problema lineare Se t(i) e' il tempo di arrivo nel nodo i / inizio del lavoro i e d(i) e' la durata del lavoro i e' come se si calcolasse min ( t(n+1) ) con i vincoli t(0)=0 e per ogni arco /precedenza (i,j) t(i) +d(i) t(j) Se il ritardo di un tempo s(i) nel lavoro i comporta un risparmio di c(i)s(i) una volta fissato il tempo finale t(n+1)=t risolvere il problema max c(i)s(i) con i vincoli t(0)=0 t(n+1)=t e per ogni arco /precedenza (i,j) t(i) +d(i)+s(i) t(j) equivale a determinare un calendario ottimale con il massimo risparmio possibile