#Nasledujúci textoví súbor obsahuje zdrojové kody k obom uloham riesenym v bakalarskej praci. #Tieto kody su urcene pre program AMPL, pricom kazda uloha obashuju tri zdrojove kody s koncovkami .run .mod .dat #Zaciatok ulohy 1------------------------------------------------------------------------------------------------------------------------------------------------ Uloha1.run reset; model Uloha1.mod; data Uloha1.dat; option solver "D:\ampl\ampl_mswin64 (1)\xpress"; #treba tu pridat spravnu cestu k binarnemu solveru solve; display y; display x; display r; display t; display p; #-------------------------------------------------------------------------------------------------------------------------------------------------------------------- Uloha1.mod set BV; #Boundary vertices - zmnozina zaciatocneho a konecneho vrcholou set IV; #Internal vertices - vn set V := IV union BV; #vsetky vrcholy param D {V, V} >= 0; # matica nominalnych vydialenosti param E {V, V} >= 0; # matica ktora ma 1 ak existuje hrana medzi i a j param C {V, V} >= 0; #matica ceny z miernenie neistoty param Delta >= 0; # konstanta urcujuca maximalny sucet prvkov vekotru xi param DecEff >= 0; # DecisionEfficiency efektivita rozhodnutia ktora pre x[i,j]=1 # meni maximalnu hodnotu xi[i,j] z 1 na 1-x[i,j]*DecEff param LinCost >= 0; #konstanta urcujuca linearny vytah medzi cenou a dlzkou hrany param fixedPrice >= 0; #cena za znizenie neistoty kazdej hrany var y {i in V, j in V} binary; # matica urcujuca cestu var x {i in V, j in V} binary; # nase rozhodnutia zmiernit neisotu var t {i in V, j in V} >= 0; # nasledujuce tri premenne v clanku spadli z neba var r {i in V, j in V} >= 0; # a nedokazem ich rozumne reprezentovat var p >= 0 ; minimize totalCost: #ucelova funkcia sum {i in V, j in V} y[i, j] * D[i, j]+ sum {i in V, j in V} x[i, j] * ((C[i,j]*LinCost)+fixedPrice)+ sum {i in V, j in V} (t[i,j] *(DecEff))+ sum {i in V, j in V} (r[i,j] * (1-DecEff))+ p*Delta; subject to firstNode: # tieto tri podmienky su podmienky predchodov sum {j in V} y['V1', j] - sum {i in V} y[i, 'V1'] = 1; subject to lastNode: # a naslednikov v grafe sum {j in V} y['V5', j] - sum {i in V} y[i, 'V5'] = -1; subject to everyNode {v in IV}: sum {j in V} y[v, j] - sum {i in V} y[i, v] = 0; #nasledujuce dve podmienky su podm. pre formulaciu robustnej najkratsej cesty subject to everyNodeConstraint1 {i in V, j in V}: (p+t[i,j]) >= ((y[i,j]*D[i,j]-x[i,j]*D[i,j])/2); subject to everyNodeConstraint2 {i in V, j in V}: (p+r[i,j]) >=((y[i,j]*D[i,j])/2); #subject to X: ak pridame tuto pod. dostavame zadanie podla prvej kapitoly #sum {i in V, j in V} x[i,j] <=1; #-------------------------------------------------------------------------------------------------------------------------------------------------------------------- Uloha1.dat set IV := V2 V3 V4 V6; #Boundary vertices - zmnozina zaciatocneho a konecneho vrcholou set BV := V1 V5; #Boundary vertices - mnozina zaciatocneho a konecneho vrcholou param D: V1 V2 V3 V4 V5 V6 := V1 0 30 25 100000 100000 95 V2 30 0 4 40 100000 100000 V3 25 4 0 40 70 100000 V4 100000 40 40 0 37 100000 V5 100000 100000 70 37 0 5 V6 95 100000 100000 100000 5 0; #matica vzdialenosti medzi vrcholmi grafu param C: V1 V2 V3 V4 V5 V6 := V1 0 30 25 100000 100000 95 V2 30 0 4 40 100000 100000 V3 25 4 0 40 70 100000 V4 100000 40 40 0 37 100000 V5 100000 100000 70 37 0 5 V6 95 100000 100000 100000 5 0; #skopirovana matica vzdialenosti pre pripad kedy cena za znizenie neisoty je lin. funkciou jej dlzky param Delta:=1; param DecEff:=0.8; param fixedPrice:=10; #cena za znizenie neistoty kazdej hrany param LinCost:=0; #konstanta urcujuca linearny vytah medzi cenou a dlzkou hrany #koniec kodu k ulohe 1------------------------------------------------------------------------------------------------------------------------------------------------------------ #Nasleduje zdrojový kod k druhej uloha o prazkej mestkej hromadnej doprave-------------------------------------------------------------------------------------------------------- Praha.run reset; model Praha.mod; data Praha.dat; option solver "D:\ampl\ampl_mswin64 (1)\xpress"; #treba tu pridat spravnu cestu k binarnemu solveru solve; display y; display x; #-------------------------------------------------------------------------------------------------------------------------------------------------------------------- Praha.dat set IV := V1 V2 V3 V5 V6 V7 V8 V9 V10 V11 V13 ; #Internal vertices - vnutorne vrcholy grafu set BV := V4 V12;#Boundary vertices - mnozina zaciatocneho a konecneho vrcholou param D: V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13:= V1 0 210 250 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 #Florenc V2 210 0 470 10000 140 10000 10000 10000 10000 10000 10000 10000 10000 #Hl. nadrazi V3 250 470 0 150 10000 10000 10000 10000 10000 10000 10000 10000 10000 #Masarikovo nadrazi V4 10000 10000 150 0 10000 10000 355 10000 10000 10000 10000 10000 10000 #Olsanske nam V5 0 140 10000 10000 0 80 10000 145 270 10000 10000 10000 10000 #Muzeum V6 10000 10000 10000 10000 80 0 320 230 10000 10000 10000 10000 650# Jir z Podebrad V7 10000 10000 10000 355 10000 320 0 10000 10000 10000 10000 10000 10000 #Flora V8 10000 10000 10000 10000 145 230 10000 0 120 10000 10000 10000 10000 #Nam mieru V9 10000 10000 10000 10000 270 10000 10000 120 0 90 400 10000 260# I.P. Pavlova V10 10000 10000 10000 10000 10000 10000 10000 10000 90 0 305 10000 10000 # Vysehrad V11 10000 10000 10000 10000 10000 10000 10000 10000 400 305 0 120 10000 #Karlovo namieste V12 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 120 0 250 #Nar. trieda V13 10000 10000 10000 10000 10000 650 10000 10000 260 10000 10000 250 0; #Mustek #matica vzdialenosti medzi vrcholmi grafu param C: V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13:= V1 0 150 210 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 #Florenc V2 150 0 400 10000 140 10000 10000 10000 10000 10000 10000 10000 10000 #Hl. nadrazi V3 210 400 0 250 10000 10000 10000 10000 10000 10000 10000 10000 10000 #Masarikovo nadrazi V4 10000 10000 250 0 10000 10000 350 10000 10000 10000 10000 10000 10000 #Olsanske nam V5 0 140 10000 10000 0 150 10000 160 270 10000 10000 10000 10000 #Muzeum V6 10000 10000 10000 10000 150 0 390 250 10000 10000 10000 10000 800# Jir z Podebrad V7 10000 10000 10000 350 10000 390 0 10000 10000 10000 10000 10000 10000 #Flora V8 10000 10000 10000 10000 160 250 10000 0 100 10000 10000 10000 10000 #Nam mieru V9 10000 10000 10000 10000 270 10000 10000 100 0 90 400 10000 600# I.P. Pavlova V10 10000 10000 10000 10000 10000 10000 10000 10000 90 0 350 10000 10000 # Vysehrad V11 10000 10000 10000 10000 10000 10000 10000 10000 400 350 0 180 10000 #Karlovo namieste V12 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 180 0 240 #Nar. trieda V13 10000 10000 10000 10000 10000 800 10000 10000 600 10000 10000 240 0; #Mustek #skopirovana matica vzdialenosti pre pripad kedy cena za znizenie neisoty je lin. funkciou jej dlzky param Delta:=5; #velka delta urcujuca hornu medzu pre sucet neistoty param DecEff:=0.8; #mala delta urcujuca efektivitu rozhodnuti param fixedPrice:=40; #cena za znizenie neistoty kazdej hrany #-------------------------------------------------------------------------------------------------------------------------------------------------------------------- Praha.mod set BV; #Boundary vertices - mnozina zaciatocneho a konecneho vrcholou set IV; #Internal vertices - vn set V := IV union BV; #vsetky vrcholy param D {V, V} >= 0; # matica nominalnych vydialenosti param C {V, V} >= 0; #matica ceny zmensenia neistoty param Delta >= 0; # konstanta urcujuca maximalny sucet prvkov vekotru xi param DecEff >= 0; # DecisionEfficiency efektivita rozhodnutia ktora pre x[i,j]=1 # meni maximalnu hodnotu xi[i,j] z 1 na 1-x[i,j]*DecEff param LinCost >= 0; #konstanta urcujuca linearny vytah medzi cenou a dlzkou hrany param fixedPrice >= 0; #cena za znizenie neistoty kazdej hrany var y {i in V, j in V} binary; # matica urcujuca cestu var x {i in V, j in V} binary; # nase rozhodnutia zmiernit neisotu var t {i in V, j in V} >= 0; var r {i in V, j in V} >= 0; var p >= 0 ; minimize totalCost: sum {i in V, j in V} y[i, j] * D[i, j]+ sum {i in V, j in V} x[i, j] * fixedPrice+ sum {i in V, j in V} (t[i,j] *(DecEff))+ sum {i in V, j in V} (r[i,j] * (1-DecEff))+ p*Delta; subject to firstNode: # tieto tri podmienky su podmienky predchodcov naslednikou sum {j in V} y['V4', j] - sum {i in V} y[i, 'V4'] = 1; subject to lastNode: # a zarucuju ze y je cesta v grafe sum {j in V} y['V12', j] - sum {i in V} y[i, 'V12'] = -1; subject to everyNode {v in IV}: sum {j in V} y[v, j] - sum {i in V} y[i, v] = 0; #nasledujuce dve podmienky su podm. pre formulaciu robustnej najkratsej cesty subject to everyNodeConstraint1 {i in V, j in V}: (p+t[i,j]) >= ((y[i,j]*D[i,j]-x[i,j]*D[i,j])/2); subject to everyNodeConstraint2 {i in V, j in V}: (p+r[i,j]) >=((y[i,j]*D[i,j])/2); #koniec kodu --------------------------------------------------------------------------------------------------------------------------------------------------------------------