Sei sulla pagina 1di 8

Si aggiunge ad A una nuova colonna e

Esempio

Definizioni
m

A =
=

⎪⎢⎥ ⎥
1

Definizione Albero ricoprente - Spanning tree


0
⎡ ⎤
0

⎣ ⎦
1

−1

0
1

−1

0
0

−1

0
Simplesso su rete
Caso non capacitivo

P F CM 0 ⎨

SENZA ARCO FITTIZIO

−1

Dato un grafo G(V , E) , un albero ricoprente, è un sotto grafo T

Definizione Alber ricoprente "radicato"


E' uno spanning tree a cui si aggiunge l'arco radice.

Teorema
0

−1


min f : z = c

Af = d

f ≥ 0

= (V , E T )
I
=
= [A


−1
1

0
T

em ]
f

che ha il numero di righe uguale al numero di nodi, ed è composto da una colonna di 0 tranne che

di un 1 in ultima posizione, quindi in posizione m − esima , generando così A I

Arco fittizio, root arc

CON ARCO FITTIZIO

−1

0
0

−1

0
0

−1
0

−1

connesso e privo di cicli, tale che E


0

1

T ≤ E .
Esempio 1

sono di base e quali no :

​Nota

La prima soluzione :
¯

¯
B =

fB = B

fN = 0
−1

⎢⎥
Una matrice B è una matrice di base per il P F CM se e solo se B è la matrice di incidenza di un rooted spanning tree.

d
1

−1

0
0

−1

0
0

−1
0

1

Nel nostro esempio

E' una soluzione di base? Si, poiché è un rooted spanning tree.


E' ammissibile? Si perché f¯ ≥ 0 e i vincoli sono soddisfatti.

La seconda soluzione :
B

E' una soluzione di base? Si, poiché è un rooted spanning tree.


E' ammissibile? No, f¯

Simplesso
24 < 0

Prima cosa da controllare, è che la somma delle divergenze sia nulla, cioè ∑

inammissibile.

Ogni soluzione di base associata ad un rooted spanning tree soddisfai vincoli Af

Esempio 2
La sua matrice d'incidenza costituisce
una matrice di base per il problema

Creato lo spanning tree, la sua matrice d'incidenza, che rappresenta gli archi fra i nodi, è la nostra matrice di base, e che quindi ci indica quali archi

β = { (1, 3), (2, 3), (3, 4), (4, ⋅) }

ω = { (1, 2), (2, 4) }

Una soluzione di base in corrispondenza di B, matrice di base di un rooted spanning tree, è :

¯
fB =

i∈V

Dobbiamo risolvere con il simplesso questo problema, partendo da questo rooted spanning tree :

β = { (1, 5), (2, 3), (3, 4), (4, 5), (5, ⋅) }

Da questi due insiemi deduco il rooted spanning tree :


,
¯
⎡ f 13 ⎤

¯
f 23

¯
f 34

⎣ ¯ ⎦
f 4,⋅

= d

d ij = 0
,
¯
fN = [
¯
f 12 = 0

¯
f 24 = 0
]

, in questo caso questa condizione è rispettata, quindi il


problema ammette soluzione, altrimenti, se la somma delle divergenze non fosse stata nulla, avremmo potuto dire subito che il problema è

ω = { (1, 2), (1, 3), (4, 2), (5, 3) }


Ora, calcoliamo le variabili in base f¯ , dove abbiamo due modi per calcolarle.
B

Per il primo metodo utilizziamo la formula inversa f¯ B = B


−1 ¯
d ⇒ Bf B = d , quindi andiamo a fare :

Altrimenti, possiamo utilizzare il secondo metodo più semplice :


Per prima cosa disegniamo il nostro rooted spanning tree con l'aggiunta delle divergenze della traccia.
Poi calcoliamo il flusso con l'equazione f u − fe = d :

​Tip

Conviene cominciare dai nodi radice, i questo caso 2 ed 1 .

Fatto questo, calcolati i flussi, dobbiamo controllare se la soluzione è ottima.


Come prima c'è il giro lungo e quello corto, facciamo direttamente quello corto.

Prendiamo il nostro rooted spanning tree e ricopiamo i costi di trasporto originali, impostando al root arc 0 come costo, e come π 5 = 0 :
Fatto questo, calcoliamo tutti i π con la seguente formula : π j − π i = c ji |π j = c ji + π i .
Quindi volendo calcolare π dobbiamo fare :
1

π1 − π5 = 2 ⇒ π1 − 0 = 2 ⇒ π1 = 2

E cosi via, fino ad avere :

Calcolati i nostri π , andiamo a calcolarci c^


T
N
= c
T
N
− π
T
N .
In modo più semplice, dobbiamo calcolare i costi ridotti fuori base con la seguente formula :

c
^ij = c ij − π i + π j (i, j) ∈ ω

Dove c è semplicemente il costo di trasporto dell'arco fuori base dal nodo i al nodo j , arco che non è presente nel rooted spanning tree e quindi
ij

dobbiamo guardare il grafico di partenza :

Quindi :

∙ c
^12 = c 12 − π 1 + π 2 = 5 − 2 + (−1) = 2

∙ ^13 = c 13 − π 1 + π 3 = −2 − 2 + 3 = −1
c

Potremmo anche calcolare gli altri, ma abbiamo già trovato un valore negativo in corrispondenza di c^ 13 = −1 < 0

Questo sta a significare che dobbiamo fare entrare in base l'arco (1, 3).

Come si fa? Vediamolo.

A sinistra il nostro grafo con soluzione, ( non ottima ) , a destra l'entrata in base del nuovo arco.

Il Δ che si nota, sarebbe il nostro α nel simplesso normale.


Aggiungendo questo nuovo arco in base, si viene a creare un ciclo, e non va bene, quindi devo trovare il modo di eliminare un arco così da
estinguere il ciclo.
Ovviamente, l'arco da eliminare deve necessariamente far parte del ciclo.

I passi da seguire sono i seguenti :

Tratteggio il nuovo arco sul mio grafo.


Individuo il verso del ciclo concorde all'arco entrante in base.
Gli archi concordi al ciclo vanno in un insieme chiamato E +
c

Gli archi discordi al ciclo vanno in un insieme chiamato E −


c

Aumento di Δ tutti gli archi che sono concordi al verso del ciclo.
Decremento di Δ tutti gli archi che sono discordi al verso del ciclo.
Δ = min
i,j∈E c

¯
{f ij } , che in spicci significa che Δ è uguale al flusso più piccolo tra i flussi degli archi discordi.
Aggiorno i flussi ed il grafo

In questo caso il più piccolo flusso degli archi discordi, nonché unico, è quello dell'arco (1, 5) , che quindi verrà eliminato :

​Nota

Nel caso non ci fosse stato un arco discorde al verso del ciclo, per esempio al posto di (1, 5) ci stava (5, 1), in questa situazione Δ sarebbe
+∞ e quindi avremmo avuto un problema I llimitato .

Arrivati a questo punto reiteriamo il processo, quindi avendo già il flusso f¯ , andiamo a calcolarci i nostri π e poi controllare i costi ridotti fuori base
per l'ottimalità della soluzione.

Calcoliamo le nostre variabili duali π ( π j − π i = c ji ):

Costi degli archi come da traccia

π5 = 0

π4 = 3 + 0 = 3

π3 = 0 + 3 = 3

π 2 = −4 + 3 = −1

π 1 = −2 + 3 = 1

Calcoliamo ora i costi ridotti fuori base :

^12 = 5 − 1 − 1 = 3
c

c
^15 = 2 − 1 + 0 = 1

c
^42 = 6 − 3 − 1 = 2

c
^53 = 4 − 0 + 3 = 7

In questo caso tutte le componenti sono ≥ 0 e quindi ci fermiamo , poiché la soluzione, è una soluzione ottima.
Questo è il grafo con flusso ottimo :

Con f ∗
B
= [2 5 8 4] ez=c T
f

= −2(2) + (−4)5 + 0(8) + 3(4) = −12

Caso capacitivo
T
⎧ min f : z = c f

m = |V |

Af = d n = |E|

l ≤ f ≤ u

In questo caso abbiamo vincoli di lower e upper bound su f .


Nel caso precedente, non capacitivo, le variabili fuori base erano tutte nell'insieme ω poste a 0, il quale era il nostro lower bound .
Ora in presenza anche di un upper bound, le variabili fuori base si dividono in due insiemi, ω e ω . L U

In questo problema non è detto che le variabili fuori base siano nulle, poiché il lower bound non è detto che sia 0.

​Nota

Una soluzione di base x̄ è ammissibile se :

l β(i) ≤ x̄ β(i) ≤ u β(i) , i = 1.. m


Teorema
Sia x̄ una soluzione di base per P l−u , allora :

se
T
c
^
Nl
≥ 0 e c
^
T
Nu
≤ 0 ⇒ x̄ è soluzione ottima

​Nota

Nel caso esteso, una soluzione x̄ di base è degenere se almeno una componente in base è uguale al valore di lower bound o upper bound

Esempio 1

Calcoliamo le variabili primali f :

In questo caso, gli archi fuori base , non è detto che siano nulli, quindi non possiamo semplicemente non contarli, dobbiamo aggiungerli al disegno.
Questi due archi fuori base, fanno parte dell'insieme ω , e questo significa che hanno come flusso lo stesso valore del proprio upper bound ,
u

quindi l'arco (1, 3) , per esempio, avrà valore di flusso uguale a 3 , cioè il suo upper bound .
Stesso ragionamento per (2, 4) , che avrà flusso uguale a 4 .

Ora andiamo a calcolare le variabili duali π :

Calcolate anche le variabili duali, controlliamo se la soluzione trovata è ottima, verificando i costi ridotti fuori base .
Come cambiano qua le cose?
Una soluzione per essere ottima deve avere i costi ridotti degli archi appartenenti all'insieme ω tutti ≤ 0 , i costi ridotti degli archi appartenenti
u

all'insieme ω tutti ≥ 0 .
l

Nel nostro esempio , calcolando l'arco (1, 3) :

c
^13 = c 13 − π 1 + π 3 = 4 − 8 + 6 = 2

Abbiamo un valore positivo, l'arco fa parte di ω , quindi non ci si ferma e l'arco (1, 3) entra in base .
u

Disegniamo il grafo :
​Attento

Ci rimane capire quale arco esce dalla base ed il calcolo di Δ .


Quando fai il calcolo del ciclo devi contare solo gli archi in base e quello che sta entranto in base. Per esempio ora nel ciclo non è da contare
l'arco (2, 4).
Il ciclo in questo caso è formato dagli archi (1, 3), (3, 2), (1, 2)

Come nel caso non capacitivo, abbiamo bisogno di dare un senso al ciclo.
Qui la regola diventa che :

Se l'arco che deve entrare in base fa parte di ω , allora il senso del ciclo si assegna concorde all'arco entrante.
l

Se l'arco che deve entrare in base fa parte di ω , allora il senso del ciclo si assegna discorde all'arco entrante.

Quindi avremo :

Se sottraiamo Δ faremo ≥
Se sommiamo Δ faremo ≤

Cosi da avere :
lowerBound

upperBound
u

Dedotto il senso del ciclo, dobbiamo trovare il valore di Δ , come facciamo?


Mettiamo a confronto i tre risultati, creando una disequazione dove :

⎧3 − Δ ≥ 0

⎨2 + Δ ≤ 6

2 − Δ ≥ 1

Perfetto esce dalla base questo arco, ma in quale dei due insiemi ω ω va?

Quindi la situazione ora è nel seguente modo :


l
u l

⎧Δ ≤ 3

⎨Δ ≤ 4

Δ ≤ 1

Di questi tre si prende il valore più alto possibile, cioè Δ = 1 che corrisponde all'arco che aveva 2 − Δ, il (3, 2), che quindi uscirà dalla base.

Dato che Δ = 1 → 2 − Δ = 2 − 1 = 1 che è proprio il valore di lower bound di quell'arco. Essendo che l'arco ora ha preso come flusso il valore del
suo lower bound, lo inseriamo nell'insieme ω .
Se fosse stato uguale al valore del suo upper bound , lo avremmo inserito in ω .

Calcoliamo ora le variabili duali e poi l'ottimalità della soluzione :


u
^32 = c 32 − π 3 + π 2 = −1 − 6 + 9 = 2 ∈ ω l ≥ 0
c ✔
c
^24 = c 24 − π 2 + π 4 = 2 − 9 + 0 = −7 ∈ ω u ≤ 0 ✔

Costi ridotti giusti, mi fermo, ho trovato la soluzione ottima.

Potrebbero piacerti anche