#Copyright (c) 2006 EPFL/Switzernet by Emin Gabrielyan reset; commands network-config.txt; table params IN "ODBC" "data/randomwalk.mdb": [], source_node, sink_node, N, T; read table params; data data/LINKS.txt; set PATH dimen 3; table flow IN "ODBC" "data/shortestpath.mdb": PATH <- [frame,link_entry,link_exit]; read table flow; set FRAMES within 1..T default {t in 1..T: {(t,i,j) in PATH} not within {}}; node Node{t in FRAMES, i in NODES}: net_out = ((if i==source_node then 1) + (if i==sink_node then -1)); minimize Cost; param L integer, >=1; param capacity = 1/L; param fec{l in 0..L-1} = 1/(1-l*capacity); param cost{l in 1..L} = if l1 then L*(fec[l-1]-fec[l-2])/capacity else 1; data; param L = 25; model; arc Link{t in FRAMES, (i,j) in LINKS[t], l in 1..L} >=0, <=capacity, from Node[t,i], to Node[t,j], obj Cost cost[l]; objective Cost; solve; set MULTIPATH dimen 3; let MULTIPATH := {t in FRAMES, (i,j) in LINKS[t]: sum{l in 1..L} Link[t,i,j,l]}; param multiflow{MULTIPATH}; for{(t,i,j) in MULTIPATH} let multiflow[t,i,j] := sum{l in 1..L} Link[t,i,j,l]; shell "copy empty.mdb data\multipath.mdb > nul"; table multiflow OUT "ODBC" "data/multipath.mdb": MULTIPATH -> [frame,link_entry,link_exit], multiflow; write table multiflow; display setof {(t,i,j) in MULTIPATH} round(multiflow[t,i,j],5);