You are on page 1of 18

Operaciona israživanja (SO)

Mrežni protok - Dualni simplex algoritam

1. Dat je problem minimizacije mrežnog protoka grafom, gde su cene transporta napisane na granama i zalihe
(potrebe) pored čvorova.

Polazeći od pokrivajuv́eg drveta {ab, bc, be, ed, fe, gf, hc, id} naći najjeftiniji plan transporta.
Rešenje:
Kao i do sada, bazične grane označavamo crvenom bojom, i prvo računamo vrednosti bazičnih pro-
menljivih primara u početnom rečniku.
Krećemo od listova pokrivajućeg drveta. Vidimo da su to čvorovi {a, g, h, i}.
Ukoliko krenemo od čvora a, njegove zalihe kojih treba da se oslobodi su 2, pa 2 prosled̄uje granom ab čvoru
b. Dakle, xab = 2.
Čvor g ima zalihe 6, pa 6 prosled̄uje granom gf do čvora f, tj. xgf = 6.
Kada posmatramo čvor h, njegove zalihe su 2, dakle, 2 prosled̄uje čvoru c, pa je xhc = 2.
Jedini preostali list je i, njegove potrebe su 3, pa treba da dobije 3 jedinom bazičnom granom koja povezuje
čvor i sa ostalim čvorovima, to je id. Med̄utim, kako grana id ne vodi ka čvoru i, već od čvora i, kod grane id
pišemo −3, biće xid = −3.
Iskoristili smo sve listove, možemo preći na ostale čvorove.
Ako nastavimo, na primer, sa čvorom c, njegove potrebe su 3, dobija 2 granom hc, pa mu fali još jedan, koji
treba da dobije granom bc. Dakle, xbc = 1.
Možemo preći zatim na čvor b. Njegove zalihe su 0, šalje 1 granom bc ka čvoru c, i dobija 2 preko grane ab,
nakon toga njegove zalihe su 1. To treba da prosledi čvoru e, granom be. Prema tome, xbe = 1.
Ukoliko nastavimo ka čvoru e, pre njega treba rešiti d ili f.

1
Ako posmatramo čvor d, njegove potrebe su 5, kako kod grane id piše -3, znači da bi trebalo da šalje 3 čvoru
i, onda su njegove potrebe 8, pa 8 dobija granom ed. Dakle, xed = 8.
Sada možemo preći na e, potrebe su 4, 8 šalje granom ed, dok 1 dobija preko grane be, odnosno, potrebe su
11. Mora dobiti 11 preko grane fe, pa je xfe = 11.
Čvor f služi kao provera. Zalihe su mu 5, šalje 11 granom fe, pa mu nedostaje 6, tih 6 treba da dobije granom
gf. Znači, treba xgf = 6 što smo i dobili.
Nakon unošenja izračunatih vrednosti, graf izgleda ovako:

Vrednosti za dualne promenljive odred̄ujemo isto kao na prethodnim vežbama. Dodelimo nulu proizvoljno
jednom čvoru (odnosno promenljivoj duala koja odgovara tom čvoru). Na primer, neka je to čvor a. Dakle,
u čvor a pišemo 0. Krećemo se dalje bazičnim granama i broju koji se nalazi u čvoru dodajemo ili od njega
oduzimamo cenu transporta za odgovarajuću granu, u zavisnosti od smera grane.
Krećemo od a, nastavljamo ka b, cena za granu ab je 2, te u čvor b pišemo 0 + 2 = 2. Od b nastavljamo ka c,
cena transporta granom bc je 1, pa kod c pišemo 2 + 1 = 3. Čvor c je povezan sa h bazičnom granom, cena
za granu hc je 1, ali kako grana nije usmerena od c ka h, nego obrnuto, pišemo 3 − 1 = 2 u čvor h, itd.
Na grane koje nisu bazične, kao što je već pomenuto, pišemo vrednosti odgovarajućih bazičnih dualnih
promenljivih (broj u čvoru koji je početak grane - broj u čvoru koji je kraj grane + cena transporta za
odgovarajuću granu). Kada je u pitanju grana ag imamo 0 − (−1) + 1 = 2, te je zag = 2. Za gi imamo
−1 − 2 + 4 = 1, te je zgi = 1, itd.

2
Odnosno, dobijamo ovaj graf:

Možemo uočiti da je protok dualno dopustiv (bazične promenljive duala su nenegativne), ali nije primarno
dopustiv ( xid = −3), dakle, nije optimalan. U ovakvom slučaju za nalaženje optimalnog protoka koristimo
Dualni simplex algoritam.
Kako su sada bazične grane negativne, pivotizaciju vršimo tako što najnegativniju granu izbacimo iz baze

3
(naravno, ako granu izbacimo iz baze, moramo drugu granu ubaciti u bazu). Ovde je to grana id. Prilikom
izbacivanja grane iz baze dolazi do podele čvorova u dve grupe, po povezanosti (ponovo crtamo most izmed̄u
te dve grupe, zelenom bojom).

Kao što možemo videti sa slike, kada iz baza izad̄e grana id, čvor i se odvaja od ostalih čvorova.Sada prvo
ažuriramo vrednosti nebazičnih promenljivih. Dodajemo ili oduzimamo t > 0 od zij kod svake nebazične
grane koja prelazi most, u zavisnoti od toga na koji način spaja grupe čvorova koje su nastale. Grana id izlazi
iz baze, pa vrednost zid treba da se poveća sa 0 na 0 + t, a ona vodi od čvora i ka ostalim čvorovima. Dakle,
kod svake grane za koju važi to isto (idu od i ka ostalima) dodajemo t, kod ostalih oduzimamo. Odnosno +t
pi vsemo kod id, ic, ie, dok −t pišemo kod bi, hi, gi. Grane koje ne prelaze most ostaju nepromenjene.
Iz baze izlazi grana kod koje imamo zij − t, sa najmanjim zij . U ovom slučaju je 1 − t kod bi, 1 − t kod gi,
i 2 − t kod hi, kako je 1 < 2, biramo da jedna od grana bi i gi ud̄e u bazu (proizvoljno). Neka u bazu ud̄e
grana bi.
Vrednost za t odred̄ujemo tako da za granu ij koja ulazi u bazu dobijemo zij = 0. Ovde je to grana bi, dakle,
treba da bude 1 − t = 0, pa je t = 1.
Nakon nebazičnih, treba ažurirati vrednosti bazičnih promenljivih.
Kada grana bi ud̄e u bazu, a pre nego što grana id izad̄e iz baze, bazične grane grade konturu (označeno
žutom bojom). Kontura u primeru je bideb.

4
Krećemo se po kunturi, i dodajemo ili oduzimamo A > 0 od xij u zavisnosti od smera kretanja. Pozitivan
smer je smer grane koja izlazi iz baze, tj. id. Prema tome, + A pišemo kod grana {id, bi}, a − A kod grana
{be, ed}.
Vrednost za A odred̄ujemo tako da za granu ij koja izlazi iz baze xij postane nula. Dakle, kod bi treba
−3 + A = 0, pa je A = 3.

5
Nakon pivotizacije dobijamo graf:

Vidimo da i dalje imamo negativnih bazičnih dualnih promenljivih, tako da nastavljamo pivotizacije.
Najnegativnija grana izlazi iz baze, to je grana be. Kada ona izad̄e iz baze nastaju dve grupe čvorova, i
crtamo most.

6
Grupe čvorva koje nastaju su {a, b, c, h, i} i {g, f, e, d}. Grana koja ulazi u bazu, be, spaja prvu grupu
čvorova sa drugom, zbe postaje 0 + t, i ostalim granama koje spajaju grupe čvorova na taj način dodajemo t.
Dakle, t dodajemo kod grana {be, bf, ie, id, cd, ag}, a oduzimamo kod grana {gi, fc}.
Vidimo da u bazu treba da ud̄e grana gi, dakle, treba 0 − t = 0, pa je t = 0.
Kontura koja nastaje kada granu gi ubacimo u bazu, a pre nego što izbacimo be, je befgib. Pozitivan smer
za A je smer grane be. Prema tome, A dodajemo kod be, gi, a oduzimamo kod {fe, gf, bi}. Pritom, A = 2
(treba xbe = −2 + A = 0).
Nakon pivotizacije imamo:

Dobijeni protok je optimalan. Rešenje je:

∗ ∗ ∗ ∗ ∗ ∗ ∗ ∗
xab = 2, xbc = 1, xhc = 2, xbi = 1, xgi = 2, xgf = 4, xfe = 9, xed = 5.

ζ ∗ = 2 · xab
∗ ∗
+ 1 · xbc ∗
+ 1 · xhc ∗
+ 1 · xbi ∗
+ 4 · xgi ∗
+ 3 · xgf ∗
+ 1 · xfe ∗
+ 2 · xfe = 47.

7
2. Rešiti problem minimizacije mrežnog protoka polazeći od pokrivajućeg drveta { AB, AC, BD, CE}.

Rešenje:
Popunjavamo početni graf na sledeći način:

Možemo uočiti da je dobijeni transport dualno dopustiv (crne grane nenegativne), ali nije primarno dopustiv
(npr. x AB = −12). Dakle, radimo dualne pivotizacije.
Najnegativnija grana izlazi iz baze, to je grana AB.

8
Grupe čvorova koje pritom nastaju su { B, D } i { A, C, E}. Grana AB spaja drugu grupu sa prvom, pa t doda-
jemo kod grane AB, a oduzimamo kod grana koje spajaju prvu grupu sa drugom, to su { BC, DE, DC, DA}.
U bazu ulazi grana DA, pa treba z DA = 5 − t = 0, odnosno t = 5.
Kontura koja nastaje kada DA ud̄e u bazu, pre izlaska AB, je DABD. Pozitivan smer za dodavanje A je smer
grane AB, pa A dodajemo kod { AB, BD, DA}. Pritom, A = 12 (x AB = −12 + A = 0).
Nakon pivotizacije dobijamo:

Dobijeni transport je optimalan. Rešenje:

x ∗BD = 7, x ∗AC = 17, x ∗DA = 12, xCE



= 9.

ζ ∗ = 2 · x ∗BD + 1 · x ∗AC + 2 · x ∗DA + 3 · xCE



= 82.

9
3. (Zadatak sa ispita)
Data je mreža transporta sa čvorovima N = {a, b, c, d, e} i granama A = {ab, ac, ad, bc, be, cd, ce, de}.
Zalihe su redom {5, 3, 2, −4, −6}, a cene transporta redom {4, 3, 2, 3, 5, 2, 3, 2}.
Problem linearnog programiranja koji odgovara nalaženju najjeftinijeg transporta je c T x → min, Ax =
−b, x ≥ 0.
Odrediti matrice A, b i c.
Postaviti dualni problem.
Napraviri skicu problema.
Polazeći od pokrivajuv́eg drveta:

(a) {ab, ac, ad, de},


(b) {ab, bc, be, cd}

izračunati odgovarajuće protoke, dualne promenljive i dodatne dualne promenljive.


Za oba pokrivajuća drveta: ako je problem primarno dopustiv - napraviti jednu primarnu pivotizaciju i izra-
čunati cenu transporta u polaznom i dobijenom planu transporta. Ako je dualno dopustiv, napraviti jednu
dualnu pivotizaciju.
Rešenje:
Tražene matrice A, b i c su sledeće (A je matrica incidencija grafa, b je vektor sa zalihama (potrebama),
dok vektor c sadrži cene transporta za svaku granu):
4
 
 3 
−1 −1 −1
   
5  
 2 
 1
 −1 −1 

 3 
 
 
 3 
A=  1 1 −1 −1 , b =  2 , c =  5 .
    
 1 1 −1   −4   
 2 
1 1 1 −6  
 3 
2
Dual koji odgovara datom problemu, zapisan u matričnom obliku je:

−ξ = −bT y → max
AT y + z = c
z ≥ 0.

Matrice A, b i c su gore navedene matrice.

10
Skica datog problema (graf koji odgovara datom problemu mrežnog protoka):

Protoci, dualne promenljive i dodatne dualne promenljive:

(a) ako su bazične grane {ab, ac, ad, de}:

11
(b) ako su bazične grane {ab, bc, be, cd}:

U nastavku, za oba pokrivajuća drveta treba da napravimo po jednu pivotizaciju.

(a) Kod prvog pokrivajućeg drveta možemo primetiti da je problem dualno dopustiv (nema negativnih
crnih grana), a nije primarno dopustiv (ima negativnih crvenih grana). Dakle, vršimo jednu dualnu
pivotizaciju, tj. najnegativniju granu izbacujemo iz baze.

12
Iz baze izlazi grana ab, čvorovi se dele u dve grupe. Jednu grupu čini čvor b, a drugu ostali čvorovi. Za
granu ab, zab postaje 0 + t, grane bc i be spajaju grupe suprotno od grane ab pa kod njih oduzimamo t.
Prema tome, grana koja ulazi u bazu je bc, i pritom je t = 4. Kontura koju dobijamo je abca, pozitivan
smer za dodavanje A je smer grane ab, pa dodajemo i kod bc, a oduzimamo kod ac. Kako bi xab postalo
nula mora biti A = 3.
Nakon pivotizacije imamo:

(b) Kad je u pitanju drugo pokrivajuće drvo, problem je primarno dopustiv (crvene grane nenegativne), ali
nije dualno dopustiv (ima negativnih crnnih grana). Dakle, vršimo primarnu pivotizaciju, najnegativniju
granu ubacujemo u bazu.

13
U bazu ulazi grana ad, dobijamo pritom konturu adcba. Pozitivan smer za dodavanje t je smer grane
ad, pa kod svih grana koje čine konturu, sem kod ad, oduzimamo t. Grana koja izlazi iz baze je bc, pa
je t = 2. Grupe čvorova koje nastaju prilikom izbacivanja grane bc iz baze,a pre ubacivanja ad, su {c,d}
i {a,b,e}. Grana ad povezuje drugu grupu sa prvom pa je to pozitivan smer za dodavanje A. Očigledno,
A = 7 (x AD = −7 + A = 0).
Nakon pivotizacije imamo:

Cena transporta u polaznom planu je:

ζ = 5 · 4 + 2 · 3 + 6 · 5 + 4 · 2 = 64.

Dok je cena transporta u dobijenom planu transporta nakon pivotizacije:

ζ = 3 · 4 + 6 · 5 + 2 · 2 + 2 · 2 = 50.

4. (Zadatak sa ispita)
Data je mreža transporta sa čvorovima N = {a, b, c, d, e} i granama A = {ad, ba, bc, be, cb, cd, dc, de}.
Zalihe su redom {1, 5, 6, −4, −8}, a cene transporta redom {2, 1, 1, 6, 3, 7, 1, 2}.
Problem linearnog programiranja koji odgovara nalaženju najjeftinijeg transporta je c T x → min, Ax =
−b, x ≥ 0.
Odrediti matrice A, b, i c.
Postaviti dualni problem.
Napraviti skicu problema.
Polazeći od pokrivajućeg drveta:

(a) {ad, ba, cd, de},


(b) {ad, ba, bc, de}

izračunati odgovarajuće protoke, dualne promenljive i dodatne dualne promenljive.


Za oba pokrivajuća drveta: ako je problem primarno dopustiv - napraviti jednu primarnu pivotizaciju i izra-
čunati cenu transporta u polaznom i dobijenom planu transporta. Ako je dualno dopustiv - napraviti jednu
dualnu pivotizaciju.

14
Rešenje:
Matrice A, b, i c su sledeće:
2
 
 1 
−1
   
1 1  
 1 
 −1 −1 −1 1   5   
     6 
A= 1 −1 1 , b= 6 , c= .
     3 
 1 1 −1 −1   −4   
 7 
1 −1 1 −8  
 1 
2
Dual, zapisan u matričnom obliku je:

−ξ = −bT y → max
AT y + z = c
z ≥ 0.

Skica problema:

15
Dalje računamo protoke, dualne promenljive i dodatne dualne promenljive:

(a) Ako su bazične grane {ad, ba, cd, de}:

(b) Ako su bazične grane {ad, ba, bc, de}:

16
U nastavku vršimo pivotizacije:

(a) U prvom slučaju vidimo da je primarno dopustiv (crvene grane nenegativne), a nije dualno dopustiv
(ima negativnih crnih grana). Dakle, vršimo primarnu pivotizaciju, u bazu ulazi najnegativnija grana.

U bazu ulazi grana cb, dobijamo konturu cbadc. Pozitivan smer za dodavanje t je smer grane cb. Iz baze
izlazi grana cd, pa je t = 6. Kada grana cd izad̄e iz baze, čvor c se odvaja od ostalih. Grana cd ide od c
ka ostalim čvorovima, te je to pozitivan smer za dodavanje A. Očigledno, A = 1.
Nakon pivotizacije imamo:

Cena transporta u polaznom planu transporta:

ζ = 5 + 6 · 2 + 8 · 2 + 6 · 7 = 75.

17
Cena transporta u dobijenom planu transporta nakon pivotizacije:

ζ = 11 · 1 + 12 · 2 + 6 · 3 + 8 · 2 = 69.

(b) U drugom slučaju problem je dualno dopustiv (nenegativne su sve crne grane), a nije primarno dopustiv
(ima negativnih crvenih grana). Dakle, vršimo dualnu pivotizaciju, najnegativniju granu izbacujemo iz
baze.

Iz baze izlazi grana bc, pritom se čvor c odvaja od ostalih. Grana bc vodi od ostalih čvorova ka c, pa je
to pozitivan smer za dodavanje t. U bazu ulazi cb, pa je t = 4. Kontura koja nastaje kad u bazu ud̄e cb,
pre nego što izad̄e bc, je cbc. Pozitivan smer za dodavanje A je smer grane bc. Očigledno, A = 6.
Nakon pivotizacije imamo:

18

You might also like