Riassunto gerarchico delle nozioni del corso 2005-2006 di
ottimizzazione del Prof. Marco Gaviano - Università degli Studi di
Cagliari, Facoltà di Scienze Matematiche Fisiche Naturali,
Dipartimento di Matematica ed Informatica, Corso di Laurea in
Informatica
- scopo della Ricerca Operativa
- Fornire strumenti matematici di supporto alle attività decisionali in cui occorre gestire e coordinare attività e risorse al fine di effettuare le scelte migliori per raggiungere un determinato obiettivo
- fasi per la risoluzione di un problema
- esame della situazione reale e raccolta delle informazioni;
- formulazione del problema (individuazione delle variabili e scelta della funzione obbiettivo da massimizzare o minimizzare);
- costruzione del modello matematico che rispecchi il più possibile il problema reale;
- soluzione e verifica del modello matematico;
- verifica delle soluzioni ottenute in rapporto al problema reale (si verifica se la funzione obbiettivo offre vantaggi e si verifica la rappresentatività del modello).
- criteri di modellizzazione
- raccogliere il maggior numero di elementi che descrivono la situazione reale.
- costruire un modello il più vicino possibile alla realtà.
- condurre rigorosamente la fase di costruzione del modello.
- non costruire un modello sofisticato quando uno semplice è sufficiente.
- non dimenticare che un modello è un'astrazione della realtà.
- problema generale della Programmazione Lineare (PL o LP)
- consiste nella ricerca dell'ottimo (minimo o massimo) di una funzione lineare di variabili soggette a vincoli lineari (equazioni o disequazioni) chiamate vincoli.
- funzione obbiettivo
- è la funzione da ottimizzare
- formulazione generale del problema PL
- min (max) z = ∑j=1,n (cjxj)
- soggetta a:
- ∑j=1,n (aijxj) = di , per i = 1, ..., m1
- ∑j=1,n (aijxj) ≥ di , per i = m1 + 1, ..., m1 + m2
- ∑j=1,n (aijxj) ≤ di , per i = m1 + m2 + 1, ..., m1 + m2 + m3
- xj ≥ 0 , j = 1, ..., n
- dove:
- M={1,2,...,m}: insieme degli indici dei vincoli;
- N={1,2,...,n}: insieme degli indici delle variabili;
- Mi sottoinsieme di M;
- Ni sottoinsieme di N;
- A=(aij), i ∈ M, j ∈ N: matrice m x n di numeri reali;
- aj: la j-ma colonna di A;
- ai: l'i-ma riga di A;
- x = [x1,...,xn]T variabili decisionali
- c = [x1,...,xn]T coefficienti della funzione obiettivo
- d = [x1,...,xm]T termini noti dei vincoli
- il problema di massimo è equivalente al problema di minimo
perché:
- minimo di f(x) = - massimo di -f(x)
- possiamo ricondurre tutte le disequazioni allo stesso tipo moltiplicando per -1 quelle di tipo diverso
- questo ci consente di ricondurre i problemi PL ad una forma standard
- formulazione canonica del problema PL
- min z = ∑j=1,n (cjxj)
- soggetta a:
- ∑j=1,n (aijxj) ≥ di , per i = 1, ..., m
- xj ≥ 0 , j = 1, ..., n
- formulazione standard del problema PL
- min z = ∑j=1,n (cjxj)
- soggetta a:
- ∑j=1,n (aijxj) = di , per i = 1, ..., m
- xj ≥ 0 , j = 1, ..., n
- formulazione canonica compatta del problema PL
- min z = cTx
- soggetta a:
- Ax ≥ d
- x ≥ 0
- formulazione standard compatta del problema PL
- min z = cTx
- soggetta a:
- Ax = d
- x ≥ 0
- PL dalla forma generale alla forma canonica e viceversa:
- α) ∑j=1,n (aijxj) ≤ di ⇔ ∑j=1,n (-aijxj) ≥ -di
- β) ∑j=1,n (aijxj) = di ⇔ { ∑j=1,n (aijxj) ≥ di ; ∑j=1,n (-aijxj) ≥ -di }
- γ) xj libera ⇔ { xj =
xj+ - xj- ;
xj+, xj- ≥ 0}
- una variabile è libera se non è vincolata in segno
- PL dalla forma generale alla forma standard e viceversa:
- γ) xj libera ⇔ { xj =
xj+ - xj- ;
xj+, xj- ≥ 0}
- una variabile è libera se non è vincolata in segno
- δ) ∑j=1,n (aijxj) ≤ di ⇔ { ∑j=1,n (aijxj) + si = di , si ≥ 0 }
- φ) ∑j=1,n (aijxj) ≥ di ⇔ { ∑j=1,n (aijxj) - ti = di , ti ≥ 0 }
- γ) xj libera ⇔ { xj =
xj+ - xj- ;
xj+, xj- ≥ 0}
- variabili di scarto (slack variable) si
- variabili xis che vengono introdotte per poter trasformare un problema PL dalla forma canonica a quella standard
- non devono influenzare la funzione da ottimizzare, pertanto avranno coefficiente nullo nella z=cTx
- variabili di surplus ti
- variabili xis che vengono introdotte per poter trasformare un problema PL dalla forma canonica a quella standard
- non devono influenzare la funzione da ottimizzare, pertanto avranno coefficiente nullo nella z=cTx
- programma, soluzione ammissibile, feasible solution
- una n-pla di valori che soddisfa tutti i vincoli compresi quelli di non-negatività
- soluzione non ammissibile
- una n-pla di valori che soddisfa tutti i vincoli eccetto quelli di non negatività
- soluzione ottimale (programma ottimale)
- un programma finito (tutte le variabili sono finite) che minimizza la funzione obiettivo z
- cTx ≤ cTy , ∀y ∈ Rn : Ay = d,y ≥ 0
- ipotesi su un problema PL
- Il sistema di equazioni Ax = d è supposto composto di equazioni linearmente indipendenti (m<n, rango di A uguale ad m) ed avente più di una soluzione.
- base di un problema PL
- Dato il sistema Ax = d dove A è una matrice mxn di rango m e m < n si dice base di A una collezione di m colonne di A linearmente indipendenti.
- il sistema Ax = d può essere riscritto come
[B|N]·[xB|xN]T = d
- xB : variabili in base (m variabili associate con le colonne della base B)
- xN : variabili fuori base (non in base, secondarie)
- soluzione di base (programma di base)
- la soluzione di base associata a B è il vettore [xB|xN] soluzione del sistema Ax = BxB + NxN = d ottenuta ponendo xB = B−1d e xN = 0.
- soluzione di base ammissibile (SBA)
- soluzione di base per la quale vale: xB = B−1d ≥ 0
- soluzione ottimale di base
- per il teorema fondamentale della PL, corrisponde alla soluzione ottimale
- soluzione di base degenere
- una base alla quale corrisponde una soluzione di base con almeno una variabile in base nulla
- teorema fondamentale della PL
- dato un problema PL in forma standard:
- se esiste almeno un programma finito, esso ha almeno una programma di base
- se ha almeno un programma ottimale finito, allora ha almeno un programma ottimale di base
- dato un problema PL in forma standard:
- numero massimo delle soluzioni di base in un problema PL
- numero di basi = programmi di base = (n m) = n! / m!(n-m)!
- a causa della grande quantità di calcoli necessari anche per problemi di dimensione modesta si sono sviluppate apposite tecniche risolutive
- come si distinguono i vincoli di un problema PL
- sono funzioni lineari (equazioni o disequazioni) che delimitano piani (o iperpiani) la cui intersezione delimita la regione di ammissibilità delle soluzioni
- passaggi con cui si riscrive un problema PL utilizzando la
conoscenza di una base B
- si parte dal problema PL in forma standard
- Ax = [B|N]·[xB|xN]T = BxB + NxN = d
- xB = B-1d - B-1NxN = B-1d - YxN
- Y = B-1N = [y1 y2 ... yn-m]
- z = cTx = [cB|cN]·[xB|xN]T = cBxB + cNxN = cBB-1d - (cBY - cN)xN
- xB = B-1d , z = cBB-1d
- xB = xB - YxN , z = z - (cBY - cN)xN
- xB = xB - ∑j∈NN xjyj, z = z - (cB∑j∈NN xjyj - ∑j∈NN cjxj)
- zj = cByj , j ∈ NN
- min z = z - ∑j∈NN (zj - cj)xj
- formulazione del problema PL in forma standard utilizzando la
conoscenza di una soluzione di base B
- min z = z - ∑j∈NN (zj - cj)xj
- xB = xB - ∑j∈NN xjyj
- x ≥ 0
- condizioni affinché una soluzione di base sia ottimale
- dato un programma di base ammissibile associato con un base B, una condizione necessaria e sufficiente perché esso sia ottimale è che: zj - cj ≤ 0 per ogni j ∈ NN
- condizione necessaria e sufficiente affinché un programma di
base ottimale sia unico
- zj - cj < 0 per ogni j ∈ NN
- condizioni affinché una soluzione di un problema PL non abbia
una soluzione finita
- i vincoli del problema sono tra loro incompatibili e di conseguenza la regione di ammissibilità è vuota
- idea generale dell'algoritmo di simplesso
- è una procedura iterativa che genera una successione di programmi di base in cui la funzione obbiettivo decresce
- geometricamente cerca le soluzioni nei vertici della regione di ammissibilità determinata dai vincoli
- relazioni su cui si basa l'algoritmo del simplesso
- si riformula il problema PL in forma standard utilizzando la
conoscenza di una soluzione di base B:
- min z = z - ∑j∈NN (zj - cj)xj
- xB = xB - ∑j∈NN xjyj
- x ≥ 0
- si considerano i seguenti teoremi:
- 1) dato un programma ammissibile di base associato ad una base B, se zk - ck > 0 e yk ≤ 0 per qualche k ∈ NN, non esiste alcun programma ottimale
- 2) dato un programma ammissibile di base associato ad una base B, se per k ∈ NN, zk - ck > 0 e ysk ≤ 0 per almeno un s ∈ NB, allora un nuovo programma di base ammissibile può essere ottenuto dando a z un nuovo valore z' ≤ z
- 3) dato un programma ammissibile di base associato ad una base B, una condizione necessaria e sufficiente perché esso sia ottimale è che zj - cj ≤ 0 per ogni j ∈ NN
- dato un programma di base xB e calcolati gli
elementi di Y (=B-1N) e i valori di
zj-cj, questi tre teoremi permettono di
stabilire:
- se è necessario calcolare un nuovo programma di base
- se è necessario fermare il calcolo o perché un programma ottimale è stato trovato o perché non esiste alcun programma ottimale finito
- si riformula il problema PL in forma standard utilizzando la
conoscenza di una soluzione di base B:
- criterio di uscita nell'algoritmo del simplesso
- il criterio di uscita è dato dalla relazione xh / yhk = minysk>0 (xs / ysk) , s ∈ NB che ci permette di individuare la variabile principale xh che dovrà diventare secondaria nel cambiamento di base.
- criterio di entrata nell'algoritmo del simplesso
- il criterio di entrata è dato dalla relazione zk - ck = maxj∈NN (zj - cj) > 0 che permette di scegliere k in modo da massimizzare il decremento della z ( δz = z' - z = (zk - ck)(xh / yhk) ) quando la base viene cambiata perché la relazione zj - cj > 0 è generalmente soddisfatta da un sottoinsieme di NN
- questa scelta di k non produce la massima variazione della funzione obiettivo z ma fornisce un semplice criterio di entrata che funziona bene nella pratica
- convergenza dell'algoritmo del simplesso
- il metodo del simplesso garantisce il passaggio da una soluzione di base x ad una nuova soluzione di base x' con z' ≤ z
- convergenza
- nel caso di soluzioni di base non degeneri (xB>0) vale il segno < e l'algoritmo converge
- non convergenza
- se vale il segno =, la funzione obbiettivo non è decrementata
- può avvenire che una variabile di base esca dalla base e poi vi
rientri in una iterazione successiva lasciando invariato il valore
di z (ciclo infinito)
- nella pratica su problemi reali non si è mai verificato
- esistono tecniche come il metoto lessicografico del simplesso che evitano questo fenomeno
- cambiamento di base nel metodo del simplesso.
- il criterio di entrata e di uscita ci forniscono gli indici k
ed h delle variabili che devono ripettivamente entrare ed uscire
nella base. Lo scambio di queste due variabili genera una nuova
base che, posto p l'indice di colonna di xh in B, si può
calcolare come segue:
- vp = [-y1,k/yp,k, -y2,k/yp,k, ... yp-1,k/yp,k, 1/yp,k, -yp+1,k/yp,k, ... ym/yp,k]
- Jp = [e1 e2 ... ep-1 vp ep+1 ... em]
- Y' = (B')-1N' , (B')-1 = JpB-1 , xB' = (B')-1d
- N' ≡ colonne di A che non appartengono a B'
- il criterio di entrata e di uscita ci forniscono gli indici k
ed h delle variabili che devono ripettivamente entrare ed uscire
nella base. Lo scambio di queste due variabili genera una nuova
base che, posto p l'indice di colonna di xh in B, si può
calcolare come segue:
- tabella del simplesso
- la tabella del simplesso (simplex tableau) è una tabella che
viene costruita per ogni iterazione fatta dall'algoritmo del
simplesso che riporta in maniera ordinata tutti i dati necessari
per effettuare i calcoli, ovvero per trovare una base che ottimizzi
la funzione obiettivo. Generalmente ha la struttura seguente:
# iterazione z1-c1 z2-c2 z3-c3 ... cB xB xB y1 y2 y3 ... xsk/ysk - cB: vettore colonna dei coefficienti
- xB: variabili di base
- xB: vettore delle soluzioni
- yi: elementi del vettore Y = B-1N = [y1 y2 ... yn-m] = (yij)
- zk-ck: utilizzato per il criterio di entrata (scelta della variabile d'entrata)
- xsk/ysk: utilizzato per il criterio di uscita (scelta della variabile d'uscita)
- la tabella del simplesso (simplex tableau) è una tabella che
viene costruita per ogni iterazione fatta dall'algoritmo del
simplesso che riporta in maniera ordinata tutti i dati necessari
per effettuare i calcoli, ovvero per trovare una base che ottimizzi
la funzione obiettivo. Generalmente ha la struttura seguente:
- base iniziale nel metodo del simplesso (problema artificiale
PL)
- l'algoritmo del simplesso necessita di un programma di base
iniziale ammissibile che se non è disponibile lo si deve calcolare:
- moltiplicando, se necessario certe equazioni dei vincoli in forma standard per -1, così da avere d ≥ 0
- aggiungendo alla matrice A un numero necessario e sufficiente di vettori colonna unitari associati con variabili artificiali u1, u2, ..., up (p ≤ n), che insieme ad eventuali variabili di scarto o variabili isolate forniscono un programma iniziale ammissibile
- l'algoritmo del simplesso necessita di un programma di base
iniziale ammissibile che se non è disponibile lo si deve calcolare:
- problema artificiale associato ad un problema PL in forma
standard
- alla matrice A si aggiunge un numero necessario e sufficiente di vettori colonna unitari associati con variabili artificiali u1, u2, ..., up (p ≤ n), che insieme ad eventuali variabili di scarto o variabili isolate forniscono un programma iniziale ammissibile
- il nuovo problema PL' ammette il programma di base u1=d1, u2=d2, ..., um=dm x1=x2=...=xn=0
- i vincoli lineari hanno la seguente forma esplicita:
- a11x1 + a12x2 + ... + a1nxn + u1 = d1
- a21x1 + a22x2 + ... + a2nxn + u2 = d2
- ...
- am1x1 + am2x2 + ... + amnxn + um = dm
- variabili artificiali in un problema PL
- variabili u1, u2, ..., up (p ≤ n) artificialmente introdotte che, insieme ad eventuali variabili di scarto o variabili isolate, forniscono un programma iniziale ammissibile da utilizzare nell'algoritmo del simplesso
- metodo delle due fasi
- affinché un programma del problema PL' sia una soluzione del problema PL iniziale, è necessario che nessuna variabile artificiale appaia nel risultato finale con valori strettamente positivi
- metodo che si utilizza per trovare una base iniziale per l'algoritmo del simplesso utilizzando le variabili artificiali
- questo metodo evita che le variabili artificiali appaiano nel risultato finale con valori strettamente positivi
- fase 1
- la funzione obiettivo iniziale è sostituita da: min ξ = ∑i ui
- si possono avere i seguenti casi:
- a) per il programma ottimale si ha ξ=0 e nessuna variabile artificiale è parte della base corrente
- b) per il programma ottimale si ha ξ=0 e almeno una variabile artificiale è parte della base corrente
- c) per il programma ottimale ξ>0 (in questo caso il programma PL non ha soluzione)
- fase 2
- nel caso (a) il programma ottimale del problema artificiale è un programma iniziale per il problema iniziale PL; si applica di nuovo l'algoritmo del simplesso
- nel caso (b) il programma ottimale del problema artificiale è un programma iniziale per il problema iniziale PL ma le variabili artificiali presenti nella base devono restare nulle; si applica nuovamente l'algoritmo del simplesso imponendo che nessuna delle variabili secondarie per le quali zj-cj<0 alla fine della fase 1 possano entrare nella base
- si trova sempre una base al termine della prima fase?
- se per il programma ottimale ξ = ∑i ui >0 il programma PL non ha soluzione
- algoritmo del simplesso rivisto
- quando un programma di base ammissibile è conosciuto il problema PL iniziale può essere scritto come sistema (m+1)×(n+1) aumentando i vincoli con la funzione obiettivo
- si passa da { min z = cTx , Ax = d , x ≥ 0 } a { min z: z - cTx = 0 , Ax = d , x ≥ 0 }
- A = [1 -c ; 0 A] = [a0 a1 ... an] = [aj] , j ∈ N = N ∪ {0}
- B = [1 -cB ; 0 B] = [ai] , i ∈ NB = NB ∪ {0}
- B-1 = [1 -cBB-1 ; 0 B-1]
- d = [0 d]T
- B-1(A,d) = [1 z1-c1 z2-c2 ... zn-cn z ; 0 y1 y2 ... yn xB]
- quindi nel metodo rivisto del gradiente le quantità (zj-cj) sono ottenute moltiplicando la prima riga di B-1 per aj, ed il valore yk della variabile xk che entra nella base è ottenuto moltiplicando le ultime m rige di B-1 per ak
- la funzione obiettivo z è considerata come una variabile speciale che non è soggetta al vincolo di non negatività e non lascerà mai la base (vale a dire che il criterio di uscita non si applica a z)
- tabella nel metodo del simplesso rivisto
-
cB xB xB y1 y2 y3 ... xsk/ysk
-
- simplesso rivisto con base di partenza artificiale
- si assume di usare un insieme completo di variabili artificiali u1, u2, ..., um
- Con ai si indica la riga i-ma di A
- il sistema aggiunto dei vincoli includerà sia la funzione obiettivo sia la funzione delle variabili artificiali, consiterà quindi di (m+2)×(n+m+2) variabili x1, x2, ..., xn, u1, u2, ..., um, z, ξ
- il problema PL è quello di minimizzare:
- z - cTx = 0
- ξ - ... - γx = d0
- u1 + a1x = d1
- u2 + a2x = d2
- ...
- um + amx = dm
- con:
- γ = ∑i=1,m ai
- d0 = ∑i=1,m di
- A = [1 0 ... -c ; 0 1 ... -γ ; ... ... ... A]
- B = [1 0 ... -cB ; 0 1 ... -γB ; ... ... ... B]
- B-1 = [1 0 ... -cBB-1 ; 0 1 ... -γBB-1 ; ... ... ... B-1]
- d = [0 d0 d]T
- B-1A-1 = [1 0 ... -cBB-1 z1-c1 z2-c2 ... zn-cn; 0 1 ... -γBB-1 ξ1-γ1 ξ2-γ2 ... ξn-γn; ... ... ... B-1 y1 y2 ... yn]
- simplesso rivisto in due fasi
- fase 1
- calcola ξj-γj, j∈NN, moltiplicando la seconda riga di B-1 per le colonne secondarie di A;
- determina k mediante il criterio di entrata ξk-γk = maxj∈NN (ξj-γj) > 0
- calcola yk moltiplicando B-1 per la corrispondente colonna di A
- applica il criterio di uscita per tutte le variabili di base eccetto z e ξ
- esegui il cambio di variabili
- fase 2
- calcola zj-cj, j∈NN, moltiplicando la prima riga di B-1 per le colonne secondarie di A;
- determina k mediante il criterio di entrata zk-ck = maxj∈NN (zj-cj) > 0
- calcola yk moltiplicando per B-1 la corrispondente colonna di A;
- applica il criterio di uscita per tutte le variabili di base ad eccezione di z e ξ
- esegui il cambio di variabili
- durante la prima fase non è necessario eseguire le operazioni con la prima riga di B-1, durante la seconda fase con la seconda riga di B-1
- fase 1
- problema PL da canonico a duale
- {min z = cTx , Ax ≥ d , x ≥ 0} ⇒ {max w = ub , uA ≤ c , u ≥ 0}
- problema PL da standard a duale
- {min z = cTx , Ax = d , x ≥ 0} ⇒ {max w = ub , uA ≤ c , u qualsiasi}
- trasformazione di un problema di PL nel suo duale
- ad ogni vincolo di diseguaglianza (≥) corrisponde una variabile duale (ui) soggetta a vincolo di non negativita(≥0)
- ad ogni vincolo di uguaglianza (=) corrisponde una variabile duale (ui) non soggetta ad alcun vincolo
- le matrici dei coefficienti dei vincoli "veri" nei due problemi sono una la trasposta dell'altra
- i valori a secondo membro dei vincoli veri di ciascun problema sono gli opposti dei coefficienti della funzione obbiettivo da minimizzare nell'altro problema
- il duale di un problema duale da il problema di partenza
- formulazione:
- {min z = ∑j=1,n (cjxj)} ⇒ {max w = ∑i=1,m -(diui)}
- {∑j=1,n (aijxj) ≥ di, i ∈ M1} ⇒ {ui ≥ 0 , ui ∈ M1}
- {∑j=1,n (aijxj) = di, i ∈ M1} ⇒ {ui qualsiasi , ui ∈ M1}
- {xj ≥ 0 , j ∈ N1} ⇒ {∑i=1,m -(aijui) ≥ -cj, j ∈ N1}
- {xj qualsiasi, j ∈ N1} ⇒ {∑i=1,m -(aijui) = -cj, j ∈ N1}
- M1 = M - M1 , N1 = N - N1 , u vettore riga
- variabili duali
- sono le variabili ui che nel passaggio dalla forma primale a quella duale corrispondono ai vincoli di disuguaglianza e di uguaglianza del problema primale
- i vincoli aix ≥ di e ui ≥ 0 oppure uaj ≤ cj e xj ≥ 0 sono chiamati vincoli duali
- ui è la variabile duale del vincolo di indice j
- relazione tra due soluzioni duali
- se x ed u sono una coppia di soluzioni
ammissibili di due problemi duali: cx ≥ ud
- se cx = ud , allora x ed u sono soluzioni ottimali
- se x ed u sono una coppia di soluzioni
ammissibili di due problemi duali: cx ≥ ud
- teorema di esistenza della dualità
- data una coppia di problemi duali, una ed una sola delle tre
proposizioni è vera:
- 1. nessuno dei due problemi ha una soluzione ammissibile;
- 2. se un problema non ammette una soluzione, l'altro ha almeno una soluzione ma non ha soluzioni ottimali;
- 3. i due problemi hanno soluzioni ottimali.
- data una coppia di problemi duali, una ed una sola delle tre
proposizioni è vera:
- teorema della dualità
- data una coppia di problemi duali una condizione necessaria e sufficiente affinché una soluzione x (o u) di uno dei due problemi sia ottimale eche esista un u (o x) dell'altro problema tale che cx = ud
- la soluzione u è essa stessa una soluzione ottimale e la relazione è verificata per ogni coppia di soluzioni ottimali
- teorema debole degli scarti complementari
- data una coppia di problemi duali, una condizione necessaria e sufficiente affinché due soluzioni x e u siano ottimali è che siano verificate le seguenti relazioni: u(Ax - d) = 0 , (c - uA)x = 0
- teorema forte degli scarti complementari
- data una coppia di problemi duali aventi entrambi delle soluzioni, allora esiste almeno una coppia di programmi ottimali x ed u: (Ax - d) + u > 0 , (c - uA) + x > 0
- importanza della dualità
- la soluzione ottimale del problema duale permette di calcolare la soluzione del primale
- in certe situazioni è più facile risolvere il problema duale, si risolve quindi questo ottenendo allo stesso tempo la soluzione del problema primale
- interpretazione economica di un problema di PL e del suo duale
- problema primale
- data una domanda (disponibilità) di m beni i ed un costo (profitto) unitario cj per ciascuna delle n attività j quale deve essere il livello di funzionamento di ciascuna attività affinché la quantità totale dei beni i prodotti (utilizzati) sia maggiore o uguale (minore o uguale) alla domanda (disponibilità) di e che il costo (profitto) totale sia minimo (massimo)
- schema
- ∑j (livello dell'attività j)×(produzione da j al livello 1 del bene i) ≥ (domanda di i)
- (livello di j) ≥ 0
- min (costo totale) = ∑j (costo unitario di j)×(livello di j)
- problema duale
- dato un costo unitario cj per ciascuna delle m attività j ed una domanda (disponibilità) di per ciascuno degli m beni i, quale deve essere il prezzo unitario di ciascun bene affinché il valore totale dei beni prodotti (utilizzati), a livello 1, sia inferiore o uguale (superiore o uguale) al costo (profitto) cj e che il valore totale dei beni prodotti (utilizzati) sia massimo (minimo).
- schema
- ∑i ui×(produzione da j al livello 1 del bene i) ≤ (costo unitario di j)
- ui ≥ 0
- max w = ∑j (domanda di i)×(ui)
- problema primale
- prezzi ombra
- sono le variabili ui che compaiono nell'interpretazione economica del problema duale
- rappresentano il prezzo unitario del bene i e misurano l'incremento del profitto nel problema primale quando si incrementa di una unità la disponibilità delle ore di lavoro, delle attrezzature e delle materie prime
- analisi della sensibilità nella PL
- è una tecnica di post-ottimizzazione che consiste nell'analisi degli effetti prodotti sulla soluzione ottimale dalle modifiche di A, c, d, e dall'introduzione di vincoli e variabili
- importanza dei prezzi ombra nell'analisi della sensibilità
nella PL
- la loro variazione misura l'incremento del profitto nel problema primale a seguito della modifica dei dati
- i prezzi ombra con valori grandi sono detti "sensibili"
- modifica del vettore c della funzione obiettivo
- equivale alla modifica della funzione obiettivo, si passa da c a c + δc
- Se B è la base che fornisce la soluzione di base ottimale del problema originale, la soluzione di base ottimale xB è ancora una soluzione di base ma non è necessariamente ottimale per il nuovo programma
- posto:
- z'j = (c + δc)Byj = zj + δcByj , j ∈ J
- z' = (c + δc)BxB = z + δcBxB
- si hanno due casi:
- se z'j - cj ≤ 0 (j ∈ J), u>xB è ancora un programma di base ottimale; il nuovo valore della funzione obiettivo è: z + δcBxB
- se z'j - cj > 0 (per almeno un j ∈ J), xB è ancora un programma di base ma non è ottimale; le formule precedenti permettono di continuare l'applicazione del metodo del simplesso a partire dalla tabella finale ottenuta nella soluzione del problema originale
- modifica del vettore d dei vincoli
- si passa da d a d + δd
- la soluzione di base corrispondente alla base ottimale B del problema originale soddisfa i criteri di ottimalità ma potrebbe non essere una soluzione ammissibile
- posto:
- x'B = B-1(d + δd) = xB + B-1δd
- si hanno due casi:
- x'B = B-1(d + δd) = xB + B-1 ≥ 0 , allora x'B è la nuova soluzione ottimale
- x'B = B-1(d + δd) =
xB + B-1 < 0 , per qualche
componente di x'
- se il numero delle componenti minori di zero è grande, conviene applicare da capo il metodo del simplesso altrimenti esistono dei metodi che permettono di utilizzare i dati della tavola del simplesso ottenuta con la risoluzione del problema originale
- introduzione di una nuova variabile
- l'introduzione di una nuova variabile xn+1 porta ad
aggiungere una nuova colonna an+1 alla matrice A ed un
nuovo elemento cn+1 al vettore c. Al termine della
applicazione dell'algoritmo al problema originale (per es, con
l'algoritmo del simplesso rivisto) si dispone sia di
B-1sia di cBB-1. Allora:
- (cBB-1an+1-cn+1) ≥ 0 , la soluzione di base ottimale del problema originale è anche soluzione di base ottimale del nuovo problema
- (cBB-1an+1-cn+1) > 0 , si continua l'applicazione del simplesso a partire dalla tabella finale ottenuta nella soluzione del problema originale
- l'introduzione di una nuova variabile xn+1 porta ad
aggiungere una nuova colonna an+1 alla matrice A ed un
nuovo elemento cn+1 al vettore c. Al termine della
applicazione dell'algoritmo al problema originale (per es, con
l'algoritmo del simplesso rivisto) si dispone sia di
B-1sia di cBB-1. Allora:
- modifica dei coefficienti aj della variabile
xj
- nel caso in cui xj è una variabile secondaria si procede come nel caso dell'introduzione di una nuova variabile. Se xj è una variabile di base, si passa dalla base B ad una nuova base B' ottenuta modificando la colonna relativa a xj. Nel caso B' sia ancora una base e xB=(B')-1d ≥ 0 allora si è in presenza di una nuova soluzione di base. Questa potrà essere ottimale oppure no. Nel secondo caso si continua con l'algoritmo del simplesso a partire dalla tabella finale ottenuta nella soluzione del problema originale. Le altre situazioni (B' non euna base) sono risolte con tecniche specifiche. Può essere necessario applicare il simplesso da capo
- introduzione di un nuovo vincolo
- questo caso è comune perché si vuole sperimentare come varia la funzione obiettivo z in rapporto ai vincoli. L'introduzione di un vincolo può ridurre l'insieme delle soluzioni ammissibili e pertanto non può migliorare il valore della funzione z. Il contrario avviene se un vincolo viene eliminato. Nel caso che la soluzione di base ottimale del problema originale soddisfi il nuovo vincolo allora essa è una soluzione ottimale (non necessariamente di base) anche per il nuovo problema. Anche ora gli altri casi sono risolti con tecniche specifiche e può essere necessario applicare il simplesso da capo.
- programmazione parametrica nella PL
- è una tecnica di post-ottimizzazione che permette di studiare il problema originario nel caso in cui i dati vengano fatti variare con continuità, ovvero siano modificati con quantità che variano in maniera continua
- parametrizzazione del vettore d
- sia d0 il vettore della domanda (o disponibilità), posto d = d0 + θδ , δ vettore fisso e θ ≥ 0
- supponiamo che x0B = B-1d0 sia una soluzione di base ottimale con base B
- facciamo variare θ assegnandole valori positivi crescenti
- il valore della soluzione di base varia secondo xB = B-1d0 + θB-1δ
- il criterio di ottimalità xB continua ad essere soddisfatto poiché non interviene nel calcolo di zj-cj ma il vettore potrebbe ad un certo punto non essere ammissibile
- posto ξ = B-1δ si ha:
- se ξ ≥ 0 allora xB continua ad essere un programma ottimale per ogni valore di θ ≥ 0
- se ξj < 0 (ξj qualche componente di ξ)
esiste un valore θ1 di θ, oltre il quale
xB non è una soluzione ammissibile poiché una sua
componente diventa negativa
- θ1 = - xo1/ξ1 = mins/ξs<0 (- xos/ξs) , s ∈ I
- volendo ancora studiare il problema per valori di θ>θ1 si calcola la soluzione ottimale per θ=θ1 e poi si procede con varie tecniche che dipendono dal risultato ottenuto
- parametrizzazione del vettore c
- sia c0 il vettore dei costi, posto c = c0 + θγ , γ vettore fisso e θ ≥ 0
- supponiamo che xB = B-1d0 sia una soluzione di base ottimale con base B
- variando θ, xB continua ad essere una soluzione di base ma non necessariamente ottimale
- zj-cj = cByj -
cj = (c0B + θγB)yj -
(c0j + θγj) = c0Byj -
c0j + θ(γByj - γj) =
z0j - c0j + θ(ζj - γj)
, con ζj = γByj
- se γBY-γ ≤ 0 la base B resta ottimale per ogni valore di θ ≥ 0
- ζj-γj (almeno una j di J) esiste un
valore θ1 di θ oltre il quale B non è una base ottimale
poiché almeno un zj-cj diventa positivo
- θ1 = - (z0k -c0k) / (ξk - γk) = minj/(ξj - γj)>0 [- (z0j -c0j) / (ξj - γj)]
- volendo ancora studiare il problema per valori di θ>θ1 si calcola la soluzione ottimale per θ=θ1 e poi si procede con varie tecniche che dipendono dal risultato ottenuto
- complessità computazionale del metodo del simplesso
- teoricamente ha una complessità esponenziale
- nei problemi pratici derivanti dal mondo reale la complessità è dell'ordine di O(m)
- è stato dimostrato che scegliendo A, c e d con una opportuna distribuzione di probabilità, la complessità del metodo del simplesso è di tipo polinomiale O(min(m2,n2))
- gradiente di una funzione di una o più variabili
- il gradiente di una funzione di n variabili, f(x), x ∈ Rn si indica con ∇f(x) ed è il vettore delle derivate parziali di f(x): ∇f(x) = [fx1(x) fx2(x) ... fx3(x)]T
- moltiplicando il gradiente per -1, otteniamo la direzione massima di discesa della funzione
- algoritmo degli ellissoidi nella PL
- è stato sviluppato per funzioni convesse anche non differenziabili, a partire dal metodo "delle sezioni centrali" e dal metodo del "gradiente generalizzato"
- è stato dimostrato che la complessità nel caso venga applicato a problemi di programmazione lineare è polinomiale
- in pratica si è rivelato inefficiente
- algoritmo di Karmarkar
- è un algoritmo di complessità polinomiale per la risoluzione di problemi PL
- nella risoluzione di problemi classici ha una complessità comparabile con quella del metodo del simplesso
- è applicabile ad un problema PL nella forma:
- min z = cTx , Ax = 0 , x ∈ Δ
- con Δ = {x∈Rn | eTx=1, x≥0} , eT=(1,1,...,1)∈Rn
- si considerano valide le seguenti ipotesi:
- A è una matrice m×n di rango m
- Ae=0 , implica che x0=e/n é un punto ammissibile
- il minimo di z=cTx è zero
- complessità computazionale
- l'algoritmo di Karmarkar risolve un problema di PL standard con
n variabii ed m vincoli in circa O(p4L2)
operazioni tra bit
- p = n + m
- L = ∑i=0,m∑j=0,n (log2(|aij|+1)+1) lunghezza dell'input
- l'algoritmo di Karmarkar risolve un problema di PL standard con
n variabii ed m vincoli in circa O(p4L2)
operazioni tra bit
-
- problema dei trasporti
- è un problema di programmazione lineare
- si devono trasportare degli oggetti da m punti di origine (O1, O2, ..., Om) a n-1 punti di destinazione (D1, D2, ..., Dn-1)
- ad ogni linea di comunicazione tra un punto di origine Oi ed uno di destinazione Dj, è associato un costo cij
- si vogliono determinare le quantità di oggetti da trasportare in ogni cammino soddisfando le richieste e minimizzando i costi
- formulazione matematica del problema dei trasporti
- formulazione tipica per m nodi di partenza ed n-1 destinazioni
- min z = ∑i=1,m∑j=1,n-1 cijxij
- ∑j=1,n-1 xij ≤ ai ; i = 1, ..., m
- ∑j=1,m xij ≥ bj ; j = 1, ..., n-1
- xij ≥ 0 ; i = 1, ..., m ; j = 1, ..., n-1
- ∑ ai ≥ ∑ bj , ai ≥ 0 , bj ≥ 0 , cij ≥ 0
- formulazione standard
- min z = ∑i=1,m∑j=1,n cijxij
- ∑j=1,n xij = ai ; i = 1, ..., m
- ∑j=1,m xij = bj ; j = 1, ..., n
- xij ≥ 0 ; i = 1, ..., m ; j = 1, ..., n
- ∑ ai = ∑ bj , ai ≥ 0 , bj ≥ 0 , cij ≥ 0, cin = 0
- formulazione tipica per m nodi di partenza ed n-1 destinazioni
- caratteristica della formulazione del problema del trasporto
come problema PL
- il problema del trasporto è rappresentabile con un grafo
- risultati teorici del problema del trasporto
- il problema del trasporto ammette sempre una soluzione ammissibile ed ogni soluzione è limitata
- dimostrazione
- i valori xij = aibj / ∑ ai costituiscono una soluzione, inoltre xij ≤ min(ai,bj)
- se i valori ai e bj sono numeri interi, i valori delle soluzioni di base sono anch'essi interi. Esiste pertanto un programma di base con valori interi
- grafi G e T
- al grafo G si fa corrispondere il grafo T
- ad un arco di G si associa un nodo di T
- ad un nodo p di G si associano gli archi di T che collegano due nodi in T i cui archi corrispondenti in G incidono p
- ad un arco nel grafo G corrisponde un solo nodo in T
- ad un nodo in G possono corrispondere nessuno, uno o più archi nel grafo T
- ai nodi origine nel grafo G corrispondono archi orizzontali
- ai nodi di destinazione corrispondono archi verticali
- ad ogni nodo del grafo T corrisponde una variabile del problema del trasporto (cij è il costo associato)
- ad ogni nodo del grafo T è associata una colonna della matrice A dei vincoli
- un m-ciclo è un sottografo di T che ha al più un arco in ciascuna riga e ciascuna colonna
- importanza del grafo T nel problema del trasporto
- il grafo T permette di semplificare i calcoli rappresentando il grafo G sotto forma di tabella
- un sottografo di T è un sottoinsieme dei nodi ed archi di T che collegano nodi vicini del sottografo
- il più importante risultato derivante dall'associare al
problema dei trasporti la teoria dei grafi
- i grafi modellizzano bene questo tipo di problemi perchè hanno una natura geometrica (punti di partenza, punti di arrivo e collegamenti), danno cioè un'immediata rappresentazione visiva del problema reale
- inoltre rappresentare il problema con la teoria dei grafi permette di utilizzare più semplici strategie risolutive
- semplificazioni di un problema del trasporto rispetto ad un
generico problema PL
- la matrice completa del sistema diventa: (A,d) = (a1, a2, ..., aj, ..., am·n)
- sottomatrice di (A,d) in cui si elimina una riga: (A1,d1) = (a11, a12, ..., a1j, ..., a1m·n, d1)a11
- sottomatrice di A composta da (m+n-1) vettori colonna linearmente indipendenti: B' = (aj1, aj2, ..., ajm+n-1)
- poiché ogni sottomatrice estratta da B' di ordine (m+n-1) ha determinante diverso da 0, la matrice B ottenuta da B' eliminando una sua riga forma una base che si indica con B = (a1j1, a1j2, ..., a1jm+n-1) , le (m+n-1) variabili associate alle colonne di B' sono le corrispondenti variabili di base
- ogni colonna aj si può esprimere in funzione delle colonne di B', ossia: aj = B'yj = ∑s=j1,jm+n-1 ysjas , yj = B-1a1j , j = 1, ..., m·n
- la soluzione di base associata a B è: xB = B-1d1
- cB = (cj1, cj2, ..., cjm+n-1)
- il valore di z in una base è: z = cBxB
- zj = cByj = ∑s=j1,jm+n-1 ysjcs
- calcolo di (zj-cj)
- un vettore aj che non appartiene alla base può esprimersi come combinazione lineare delle colonne di base che sono associate ad un m-ciclo: aj = as1 - as2 - ... + (-1)p+1asp + ... + as2q-1
- da cui: zj - cj = cs1 - cs2 - ... + (-1)p+1csp + ... + cs2q-1
- si determina l'indice k del vettore che entra nella base mediante: zk - ck = maxj (zj - cj)
- calcolo di xsk/ysk per tutti gli s
tali che ysk > 0
- se ysk > 0 esso ha valore +1 ed s è un indice dispari, pertanto x1 = minp (xs2p-1) , p = 1, 2, ..., q
- calcolo delle nuove variabili di base
- x's = xs - x1(ysk/y1k) , con ysk = 1
- poiché cambiano solo le variabili associate ai nodi
dell'm-ciclo (che interviene nel determinare la nuova base) si ha:
- x'2p = x2p + x1
- x'2p-1 = x2p-1 - x1
- Calcolo dei nuovi valori yj
- La conoscenza dell'm-ciclo fornisce immediatamente i valori di yj
- algoritmo del trasporto (formulazione generica)
- a) si parte dalla tabella del trasporto, si trova un programma di base e si scrivono i valori nella stessa tabella
- b) si considerano successivamente tutte le caselle che corrispondono a variabili non di base; per ciascuna di esse si trova l'm-ciclo composto da questa casella e dalle caselle delle variabili di base. Si calcola (zj-cj). Se (zj-cj)≤0 allora la soluzione corrente è ottimale, altrimenti si calcola l'indice k del vettore che entra nella base zk-ck=max(zj-ci) ed il corrispondente m* m-ciclo
- c) marcare le caselle pari nella successione dei nodi di m* ponendo uguale ad uno la prima casella del ciclo.Tra queste caselle trovare la variabile col valore minimo; sia x1 il suo valore
- d) diminuire di x1 i valori delle variabili nelle caselle marcate ed aumentare di x1i valori delle altre caselle di m* (compreso xk che assume il valore x1). L'insieme composto da xk e dalle variabili di base precedenti, eccetto xl, sono le nuove variabili di base
- e) ripetere i punti b), c) e d) finché il criterio di ottimalità è soddisfatto
- ricerca di una soluzione di base iniziale (nord-ovest)
- ad una qualsiasi variabile xij (che sarà di base) si assegna il valore: xij = min(ai, bj)
- si sostituisce ai e bj con ai-xij e bj-xij
- si elimina la riga i se xij=ai oppure la colonna se xij=bj
- nel metodo chiamato nord-ovest si sceglie ad ogni passo la variabile situata nella prima riga e prima colonna non eliminate
-
- grafo orientato
- un grafo (P,U) è dato da un insieme finito P di nodi pi (o vertici) e da un insieme U di coppie (pi,pj) ordinate di nodi, chiamate archi (o spigoli)
- i nodi pi e pj di un arco (pi,pj) sono detti adiacenti
- l'arco (pi,pj) ed il nodo pi (o pj) sono detti incidenti
- grafo non orientato
- un grafo (P,U) è dato da un insieme finito P di nodi pi (o vertici) e da un insieme U di coppie (pi,pj) non ordinate di nodi, chiamate archi (o spigoli)
- i nodi pi e pj di un arco (pi,pj) sono detti adiacenti
- l'arco (pi,pj) ed il nodo pi (o pj) sono detti incidenti
- un arco può essere percorso in entrambe le direzioni
- si hanno le definizioni di grafo connesso, catena e ciclo
- sottografo
- un sotto-grafo del grafo (P,U) è dato dal grafo
(Ps,Us) tale che:
- Ps ⊂ P
- (pi,pj) ∈ Us ⇔ pi ∈ Ps , pj ∈ Ps e (pi,pj) ∈ U
- un sotto-grafo del grafo (P,U) è dato dal grafo
(Ps,Us) tale che:
- grafo parziale
- dato il grafo (P,U), un grafo si dice grafo parziale di (P,U) se l'insieme dei suoi nodi coincide con P e l'insieme dei suoi archi è un sottoinsieme di U
- grafo simmetrico
- un grafo (P,U) si dice simmetrico se (p,q) ∈ U ⇔ (q,p) ∈ U
- grafo completo
- un grafo (P,U) si dice completo se ogni coppia di nodi definisce almeno un arco
- cappio
- è un arco i cui nodi coincidono
- cammino
- dato un grafo (P,U), un cammino è una successione di archi ui, i=1,...,p, tali che il secondo nodo di ciascun arco coincide con il primo nodo dell'arco successivo (posto uk=(pi,pj) si ha uk+1=(pj,ph))
- circuito
- è un particolare cammino nel quale il primo nodo del primo arco coincide con il secondo nodo dell'ultimo arco
- cammino composto
- lo è se utilizza due volte o più volte lo stesso arco
- è il contrario del cammino semplice
- cammino semplice
- lo è se non utilizza mai lo stesso arco
- è il contrario del cammino composto
- cammino elementare
- lo è se non incontra due o più volte lo stesso nodo
- grafo fortemente connesso
- un grafo (P,U) si dice fortemente connesso se per ogni coppia di nodi p e q di P esiste un cammino che ha come primo nodo p ed ultimo nodo q
- albero
- un grafo non orientato è un albero se è connesso e senza cicli
- differenza tra un grafo orientato parziale ed un suo sottografo
- il grafo orientato parziale contiene tutti i nodi del grafo (P,U) originale, mentre il sottografo contiene solo un sottoinsieme di nodi Ps ⊂ P
- archi di un grafo completo con 4 nodi
- se il grafo è orientato, ogni nodo è connesso con tutti gli altri, ci sono quindi n(n-1) archi dove n è il numero dei nodi; con 4 nodi: 4(4-1) = 12 archi
- se il grafo è non orientato, l'arco (pi,pj) coincide con l'arco (pj,pi) ci sono quindi n(n-1)/2 archi; con 4 nodi: 4(4-1)/2 = 6 archi
- rappresentazione di un grafo orientato
- un grafo può rappresentarsi mediante una matrice A=(aij) detta matrice d'adiacenza
- l'indice i si riferisci ai nodi e l'indice j agli archi
- la matrice è composta da 0 (assenza di arco) ed 1 (presenza di un arco tra il nodo i ed il nodo j)
- rete di trasporto
- una rete è un grafo orientato (P,U) senza alcun cappio tale che
- a) a ciascun arco (pi,pj) pi∈U
sono associati
- una capacità kij ≥ 0 (per esempio se si tratta di una strada il massimo numero di autoveicoli che la possono percorrere in un'ora)
- una lunghezza uij ≥ 0 (per esempio se si tratta di una strada la sua lunghezza o il tempo necessario per percorrerla)
- b)a ciascun nodo pi ∈ P è associata una domanda d(pi) che può essere positiva, negativa o nulla
- se d(pi) > 0, il nodo pi e detto una destinazione (o uscita)
- se d(pi) < 0 il nodo pi e detto origine (o entrata)
- se d(pi) = 0 il nodo pi e detto punto di transito
- a) a ciascun arco (pi,pj) pi∈U
sono associati
- una rete è un grafo orientato (P,U) senza alcun cappio tale che
- rete di trasporto semplice
- è una rete di trasporto in cui i nodi possono essere ripartiti
in due insiemi disgiunti P1 e P2 tali che:
- (pi,qi) ∈ U ⇒ pi ∈ P1 , qj ∈ P2
- d(qi) > 0 ⇔ qj ∈ P2
- d(ii) > 0 ⇔ pi ∈ P1
- è una rete di trasporto in cui i nodi possono essere ripartiti
in due insiemi disgiunti P1 e P2 tali che:
- rete di trasporto ridotta
- rete di trasporto che ha una sola origine p0 ed una sola destinazione pn
- non esiste alcun arco che ha p0 come secondo nodo (arco incidente interiormente) ed alcun arco che ha pn come primo nodo (arco incidente esteriormente).
- spesso si definisce una rete ridotta a partire da una rete primitiva aggiungendo due nodi fittizi p0 e pn all'insieme P e creando gli archi (p0,pe) e (ps,p1) con pe ogni nodo origine (che diventa di transito) e pn ogni nodo destinazione (che diventa di transito)
- flusso aritmetico in una rete di trasporto
- è una qualsiasi funzione x(·) che associa ad ogni arco
(pi,pj) della rete un numero positivo:
pi,pj → x(pi,pj) (o
semplicemente xij) tale che
- il flusso in un arco non può superare la sua capacità
- 0 ≤ x(pi,pj) ≤ kij , (i,j) ∈ U
- in un nodo di transito il flusso in entrata deve essere uguale
al flusso in uscita
- x(pi,P) - x(P,pi) = 0 , pi ∈ P-E-S
- in un qualsiasi nodo di entrata il flusso deve essere > 0
- x(pe,P) - x(P,pe) ≥ 0 , pe ∈ E
- in un qualsiasi nodo di uscita il flusso deve essere ≤ 0
- x(ps,P) - x(P,ps) ≤ 0 , ps ∈ S
- il flusso in un arco non può superare la sua capacità
- x(pk,P) = ∑p∈P x(pk,p) , x(P,pk) = ∑p∈P x(p,pk) , k = i, e, s
- la funzione x(pi,pj)=xij può essere considerata come il valore della circolazione nell'arco (i,j) da pi a pj e sarà chiamato il flusso nell'arco (i,j)
- esempi di flusso
- se la rete è una rete stradale, xij può essere il numero di automobili che vanno da pi a pj e xji il numero di automobili che vanno in senso contrario
- se la rete è un cavo ottico, il flusso può essere la quantità di bit che vengono trasmessi lungo il cavo
- è una qualsiasi funzione x(·) che associa ad ogni arco
(pi,pj) della rete un numero positivo:
pi,pj → x(pi,pj) (o
semplicemente xij) tale che
- flusso algebrico in una rete di trasporto
- è dato dalla differenza del flusso aritmetico nei due sensi
- f(pi,pj) = xij - xji
- proprietà:
- il flusso algebrico in un arco da pi a pj
è l'opposto del flusso da pj a pi
- f(pi,pj) = - f(pj,pi)
- il flusso algebrico può assumere valori >0, <0 e =0 ma
sempre entro la capacità fissata
- -kij ≤ f(pi,pj) ≤ kij
- il flusso algebrico è uguale zero per i nodi di transito
- f(pi,P) = 0 , p ∈ P-E-S
- il flusso algebrico è positivo per i nodi d'entrata (nodi di
origine)
- f(pe,P) ≥ 0 , p ∈ E
- il flusso algebrico è negativo per i nodi d'uscita (nodi di
destinazione)
- f(ps,P) ≤ 0 , p ∈ S
- il flusso algebrico in un arco da pi a pj
è l'opposto del flusso da pj a pi
- f(pk,P) = ∑p∈P f(pk,p) , f(P,pk) = ∑p∈P f(p,pk) , k = i, e, s
- la definizione di flusso algebrico produce delle
semplificazioni nello studio dei problemi sulle reti
- aumentare di k unità il flusso algebrico negativo f(pi,pj) in un arco (pi,pj) significa diminuire la circolazione da pj a pi di k unità
- flusso della rete
- φ = φe = φs
- φe = f(E,P) flusso totale che dai nodi di entrata va in rete
- φs = f(P,S) flusso totale che dai nodi di uscita esce dalla rete
- capacità residua di una rete di trasporto
- ad ogni arco tra i nodi pi e pj si
associano due capacità residue:
- rij = kij - f(pi,pj)
- rji = kji - f(pj,pi)
- vale la relazione: rij + rji = kij + kji
- ad ogni arco tra i nodi pi e pj si
associano due capacità residue:
- taglio in una rete di trasporto
- in una rete di trasporto ridotta, è ogni sottoinsieme W di U tale che ogni cammino da p0 a pn ha un arco in W
- eliminando gli archi del taglio non sarà più possibile raggiungere pn da p0
- teorema di Ford-Fulkerson
- sia G un grafo orientato (P,U) ridotto con capacita
kij≥0 finita (kij capacità dell'arco
(pi,pj) e p0 e pn i
nodi di entrata ed uscita senza alcun cappio, allora:
- a) per ogni flusso f su G ed ogni taglio C di G il valore del flusso è minore o uguale alla capacità di C
- b) per il flusso massimo f0 su G esiste un taglio C0 su G tale che il valore del flusso è uguale alla capacità di C0; il taglio ha capacità minima
- sia G un grafo orientato (P,U) ridotto con capacita
kij≥0 finita (kij capacità dell'arco
(pi,pj) e p0 e pn i
nodi di entrata ed uscita senza alcun cappio, allora:
- teorema di Gale
- data una rete di trasporto (P,U) in cui è definita una domanda, questa può essere soddisfatta se e solo se k(A,A) ≥ d(A) , ∀A⊂P con (A,A) un insieme qualsiasi di archi incidenti su un nodo v di A (con direzione verso v) e k(A,A) la somma delle capacità degli archi (A,A)
- teorema di Gale per reti ridotte
- data una rete di trasporto ridotta (P,U), la condizione necessaria e sufficiente affinché esista un flusso che saturi gli archi incidenti il nodo di uscita pn è che: k(A,A) ≥ k(A,pn) , ∀A⊂P-{p0,pn}
- corollario
- data una rete di trasporto ridotta (P,U) in cui S è l'insieme dei nodi adiacenti a pn(S⊂P), la condizione necessaria e sufficiente affinchè esista un flusso che saturi gli archi incidenti il nodo di uscita pn è che esista un flusso aritmetico x tale che: x(A,A) ≥ k(A,pn) , ∀A⊂P
- problema del cammino minimo (o Shortest Paths, SP)
- dato un grafo orientato (P,U), siano ps e pv due nodi qualsiasi, trovare il cammino di lunghezza minima tra ps e pv
- algoritmo di Dijkstra
- trova il cammino minimo tra un nodo ps e tutti gli altri nodi
- l'algoritmo può essere utilizzato parzialmente per trovare il cammino minimo che unisce due nodi del grafo, totalmente per trovare quelli che uniscono un nodo d'origine a tutti gli altri nodi o più volte per trovare tutti i cammini minimi da ogni nodo ad ogni altro nodo
- è considerato uno degli algoritmi più efficienti per risolvere il problema del cammino minimo
- la complessità computazionale dell'algoritmo di Dijkstra "naif" è di O(n2) ma ottimizzando il processo si arriva a O(m + n log(n)) con m numero di archi
- algoritmo
- Supponiamo di avere un grafo con n vertici contraddistinti da numeri interi {1,2,...,n} e che 1 sia scelto come nodo di partenza. Il peso sull'arco che congiunge i nodi j e k è indicato con p(j,k). Ad ogni nodo, al termine dell'analisi, devono essere associate due etichette, f(i) che indica il peso totale del cammino (la somma dei pesi sugli archi percorsi per arrivare al nodo i-esimo) e J(i) che riporta il nodo sul cammino minimo che porta al nodo i-esimo subito precedente questo ultimo. Inoltre definiamo due insiemi S e T che contengono rispettivamente i nodi a cui sono già state assegnate le etichette e quelli ancora da scandire.
- 1. Inizializzazione.
- Poniamo S={1}, T={2,3,...,n}, f(1)=0, J(1)=0.
- Poniamo f(i)=p(1,i), J(i)=1 per tutti i nodi adiacenti ad 1.
- Poniamo f(i)= ?, per tutti gli altri nodi.
- 2. Assegnazione etichetta permanente
- Se f(i)= ? per ogni i in T STOP
- Troviamo j in T tale che f(j)=min f(i) con i appartenente a T
- Poniamo T=T-{j} e S=S?{j}
- Se T=Ø STOP
- 3. Assegnazione etichetta provvisoria
- Per ogni i in T, adiacente a j e tale che f(i)>f(j)+p(j,i)
poniamo:
- f(i)=f(j)+p(j,i)
- J(i)=j
- Andiamo al passo 2
- Per ogni i in T, adiacente a j e tale che f(i)>f(j)+p(j,i)
poniamo:
- albero di supporto
- dato un grafo G non orientato (P,U), un albero di supporto è un qualunque grafo parziale che ha la struttura di un albero
- lunghezza di un albero di supporto è data dalla somma delle lunghezze degli archi che lo compongono
- problema del minimo albero di supporto
- dato un grafo non orientato trovare l'albero di supporto di lunghezza minima
- lemma: sia X un sottoinsieme dei vertici di G ed a sia l'arco di lunghezza minima che connette X a P-X, allora a fa parte del minimo albero di supporto
- algoritmo di Prim
- trova il minimo albero di supporto
- ad ogni iterazione si aggiunge a T l'arco di lunghezza minima (che connette direttamente X a P-X), che secondo il lemma (vedi punto precedente) deve far parte dell'albero minimo
- utilizzando la struttura dati "heap" si ottiene la complessità computazione di O(m + n log n)
- algoritmo
- 1. Si parte con una matrice che descrive la distanza da un punto ad un altro punto.
- 2. Si utilizza una lista (Vt) che contiene tutti i nodi già presi in considerazione. All'inizio la scelta del nodo è arbitraria.
- 3. Et contiene invece le connessioni fatte e all'inizio è vuoto.
- 4. ζ(V) invece contiene tutte le connessioni che partono dai nodi contenuti in Vt.
- 5. Metto dentro Vt il nodo di partenza.
- 6. Et è vuoto, ζ(V) contiene ora gli archi uscenti dal nodo di partenza.
- 7. Prendo la connessione con peso (o distanza) minore in ζ(V) e inserisco il nodo correlato nella lista Vt, l'arco nella lista Et e dopo aggiorno ζ(V) mettendo tutte le connessioni che ora si possono fare sia col nodo di partenza, che col nuovo arco inserito nella lista Vt.
- 8. Ovviamente tolgo da ζ(V) la connessione appena inserita in Et.
- 9. Si prosegue tenendo in considerazione che non bisogna prendere connessioni della lista ζ(V) tra due nodi già presenti in Vt, altrimenti creo un ciclo.
- 10. Finisco quando tutte le connessioni possibili in ζ(V) creerebbero cicli.
- problema del flusso massimo
- trovare il flusso massimo in una rete ridotta (P,U) con nodo di ingresso p0 e nodo di uscita pn
- la ricerca del un flusso massimo in una rete di trasporto qualsiasi equivale alla ricerca del flusso massimo in una rete ridotta ottenuta aggiungendo alla rete iniziale gli archi(p0,pe) di capacità c(p0,pe)≥c(pe,P) pe∈E ,(ps,pn) di capacità c(ps,pn)≥c(P,ps) pn∈S con E = insieme di tutti i nodi di entrata, S = insieme di tutti i nodi di uscita, P = insieme di tutte i nodi di transito
- si suppone che:
- la disponibilità in p0 e la domanda in pn sono infinite
- non esiste un cammino da p0 a pn in cui tutti gli archi hanno capacità infinita
- formalizzazione come problema PL
- max ∑j=0,n x0j ≡ ∑j=0,n xjn ≡ φ
- 0 ≤ xij ≤ cij , (i,j) ∈ U
- ∑j=0,n (xij - xji) = 0 , i = 1, ..., n-1
- xij è il flusso aritmetico dell'arco (i,j)
- algoritmo di Ford-Fulkerson
- trova il flusso massimo in una rete di trasporto
- l'algoritmo è composto da due parti chiamate da Ford e Fulkerson rispettivamente Routine A e Routine B. La prima è un processo di etichettatura che cerca l'augmenting path (percorso con capacità disponibile, ovvero un percorso da s a t in cui il flusso > capacità lungo tutti gli archi orientati da s a t e flusso > 0 per tutti gli archi orientati da t ad s). Se la Routine A trova un augmenting path, la Routine B modifica corrispondentemente il flusso. Altrimenti, non esiste alcun augmenting path e l'ottimalità del flusso corrente è assicurata dal seguente teorema: un flusso f è massimo se e solo se non ci sono altri flussi di augmenting path rispetto ad f
- problema del flusso di costo minimo
- sia data una rete di trasporto semplice (P1,P2,U0) per la quale in ciascun nodo di entrata pi è definita una disponibilità positiva ai(o una domanda negativa -ai) ed in ciascun nodo d'uscita qj è definita una domanda positiva bj e su ciascun arco (pi,qj)∈U è definito un costo unitario cij, del flusso. Si vuole trovare un flusso aritmetico x che soddisfi la domanda in ciascun nodo e che il costo del trasporti sia minimo
- formulazione matematica (standard)
- min z = ∑(i,j)∈MN cijxij
- ∑j∈N = ai , i ∈ M
- ∑i∈M = bj , j ∈ N
- 0 ≤ xij ≤ kij , (i,j) ∈ MN
- ∑ ai = ∑ bj , ai > 0 , bj > 0 , cij ≥ 0
- nota:
- si suppone che per ogni coppia di nodi pi,pj esista l'arco (pi,pj), eventualmente creando archi fittizi con capacità nulla
- M={1,..,m} è l'insieme degli indici dei nodi d'entrata
- N= {1, ..., n} è l'insieme degli indici dei nodi d'uscita
- si aggiunge una destinazione fittizia qn di capacità kin=+∞ verso cui si indirizza la disponibilità eccedente la domanda; ossia: bn = ∑i∈M ai - ∑j∈N bj
- in un flusso ottimale per i vincoli relativi alle uscite deve valere l'uguaglianza, il segno "=" può sostituirsi al segno di "≥"
- la rete (P1,P2,U) che è semplice la si trasforma in una rete ridotta aggiungendo un nodo q0 e gli archi (q0,pi), i∈M,di capacità koi, i=ai ed un nodo pv e gli archi (qj,pv), j∈N di capacità kjv=bj
- ad ogni soluzione ottimale corrisponde un flusso che satura gli archi estremi e viceversa
- il problema si risolve con un algoritmo chiamato algoritmo del simplesso per le reti di trasporto che combina l'algoritmo del simplesso e l'algoritmo di Ford-Fulkerson
- differenza tra il problema del trasporto ed il problema di
flusso di costo minimo in una rete
- nel problema dei trasporti non si tiene conto della capacità di ciascun cammino (arco)