mobicen / util / milanoMob.py @ c16015e2
History  View  Annotate  Download (1.86 KB)
1 
# https://treyhunner.com/2018/06/howtomakeaniteratorinpython/


2  
3 
from pymobility.models.mobility import gauss_markov, reference_point_group, \ 
4 
tvc, truncated_levy_walk, random_direction, random_waypoint, random_walk 
5 
import numpy as np 
6 
import numpy 
7  
8  
9 
def milano_mob(): 
10 
return iter(Milano()) 
11  
12  
13 
class Milano(object): 
14  
15 
def __init__(self): 
16 
# simulation area (units)

17 
MAX_X, MAX_Y = 100, 100 
18  
19 
# max and min velocity

20 
MIN_V, MAX_V = 0.1, 1. 
21  
22 
# max waiting time

23 
MAX_WT = 0.

24  
25 
# Random Waypoint model

26 
rwp = random_waypoint(nr_nodes=200, dimensions=(

27 
MAX_X, MAX_Y), velocity=(MIN_V, MAX_V), wt_max=MAX_WT) 
28  
29 
# Reference Point Group model

30 
# In tutto 150 nodi = 10x(5+4+3) + 15x(2)

31 
# 10 gruppi X 5

32 
groups = [5 for _ in range(3)] 
33 
nr_nodes = sum(groups)

34 
rpg5 = reference_point_group( 
35 
groups, dimensions=(MAX_X, MAX_Y), aggregation=0.5)

36  
37 
# 10 gruppi X 4

38 
groups = [4 for _ in range(3)] 
39 
nr_nodes = sum(groups)

40 
rpg4 = reference_point_group( 
41 
groups, dimensions=(MAX_X, MAX_Y), aggregation=0.5)

42  
43 
# 10 gruppi X 3

44 
groups = [3 for _ in range(3)] 
45 
nr_nodes = sum(groups)

46 
rpg3 = reference_point_group( 
47 
groups, dimensions=(MAX_X, MAX_Y), aggregation=0.5)

48  
49 
# 15 gruppi X 2

50 
groups = [2 for _ in range(10)] 
51 
nr_nodes = sum(groups)

52 
rpg2 = reference_point_group( 
53 
groups, dimensions=(MAX_X, MAX_Y), aggregation=0.5)

54  
55 
self.movers = [rwp, rpg2, rpg3, rpg4, rpg5]

56  
57 
def __iter__(self): 
58  
59 
while True: 
60 
pos = [] 
61 
for mob in self.movers: 
62 
pos.extend(next(mob))

63 
yield np.array(pos)

64  
65  
66 
if __name__ == '__main__': 
67 
m = milano_mob() 
68 
next(m)

69 
code.interact(local=dict(globals(), **locals())) 