#Copyright (c) 2006 EPFL/Switzernet/Intarnet by Emin Gabrielyan reset; commands network-config.txt; commands randomwalk-config.txt; option randseed (randseed); param xxx; param yyy; param xx{NODES}; param yy{NODES}; param a{NODES} default Uniform(0,2*PI); printf "Preparing the timeframes of random walk ad-hoc network:\n"; for{i in NODES} { let xx[i] := Uniform(0,x_max); let yy[i] := Uniform(0,y_max); let x[1,i] := xx[i]; let y[1,i] := yy[i]; } printf " (1) Positions of nodes evolving over time ... "; for{t in 2..T} { for{i in NODES} { if 0 <= Uniform(0,walk) <= step then let a[i] := Uniform(0,2*PI); repeat { let xxx := xx[i]+step*cos(a[i]); let yyy := yy[i]+step*sin(a[i]); if xxx in interval [0,x_max] && yyy in interval [0,y_max] then break; let a[i] := Uniform(0,2*PI); } let xx[i] := xxx; let yy[i] := yyy; } for{i in NODES} { let x[t,i] := xx[i]; let y[t,i] := yy[i]; } } printf "Ok\n"; printf " (2) Adding links ... "; for{t in 1..T} let LINKS[t] := union{i in 1..N, j in i+1..N: (x[t,i]-x[t,j])^2+(y[t,i]-y[t,j])^2<=r^2} {(i,j), (j,i)}; printf "Ok\n"; param distance{i in NODES,j in NODES: j>i} = (x[1,j]-x[1,i])^2+(y[1,j]-y[1,i])^2; param max_distance = max{(i,j) in {i in NODES,j in NODES: j>i}} distance[i,j]; for{(i,j) in {i in NODES,j in NODES: j>i}: distance[i,j] = max_distance} { let source_node := i; let sink_node := j; break; } printf " (3) saving parameters (mdb)\n"; table params OUT "ODBC" "data/randomwalk.mdb": [], x_max, y_max, N, r~coverage, T, source_node, sink_node, randseed; write table params; printf " (4) saving links (txt)\n"; let pname := "LINKS"; display LINKS > (fname); close (fname); printf " (5) saving coordinates (mdb)\n"; table coordinates OUT "ODBC" "data/randomwalk.mdb": {1..T,NODES} -> [Timeframe,NODES], x,y; write table coordinates; printf "Done.\n\n";