#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 FRAMES within 1..T default 1..T; var F{1..T}>=0; node Node{t in FRAMES, i in NODES}: net_out = F[t] * ((if i==source_node then 1) + (if i==sink_node then -1)); minimize Cost; arc Link{t in FRAMES, (i,j) in LINKS[t]} >=0, <=1, from Node[t,i], to Node[t,j], obj Cost 1; maximize Flow: sum{t in FRAMES} F[t]; objective Flow; solve; let FRAMES := {t in FRAMES: F[t]}; for{t in 1..T diff FRAMES} fix F[t] := 0; for{t in FRAMES} fix F[t] := 1; objective Cost; solve; set PATH dimen 3; let PATH := {t in FRAMES, (i,j) in LINKS[t]: Link[t,i,j]}; param flow{PATH}; for{(t,i,j) in PATH} let flow[t,i,j] := Link[t,i,j]; shell "copy empty.mdb data\shortestpath.mdb > nul"; table flow OUT "ODBC" "data/shortestpath.mdb": PATH -> [frame,link_entry,link_exit], flow; write table flow;