-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathsimplest_simulator.py
More file actions
123 lines (93 loc) · 3.41 KB
/
Copy pathsimplest_simulator.py
File metadata and controls
123 lines (93 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#encoding: utf-8
#python .\simplest_simulator.py --f .\DataInput\NT_13_Routines.json
import sys
sys.path.append('./Plugins/')
import argparse
import environment
from util import *
from data_parse_util import *
import population
from random_inst import FixedRandom
from ExamplePlugin import ExamplePlugin
from AgentBasedPlugin import AgentBasedPlugin
#from InfectionPlugin import InfectionPlugin
from SocialIsolationPlugin import SocialIsolationPlugin
from GatherPopulationPlugin import GatherPopulationPlugin
from ReverseSocialIsolationPlugin import ReverseSocialIsolationPlugin
from ReturnPopulationPlugin import ReturnPopulationPlugin
from LevyWalkPlugin import LevyWalkPlugin
from simulation_logger import SimulationLogger
from pathlib import Path
import time
arg_parser = argparse.ArgumentParser(description="Population Dynamics Simulation.")
arg_parser.add_argument('--f', metavar="F", type=str, default = '', help='Simulation file.')
arg_parser.add_argument('--n', metavar="N", type=str, default = None, help='Experiment Name.')
arg_parser.add_argument('--l', metavar="L", type=float, default = 0, help='L.')
arg_parser.add_argument('--s', metavar="S", type=int, default = 0, help='S')
arg_parser.add_argument('--r', metavar="R", type=float, default = 0, help='R')
args = vars(arg_parser.parse_args())
FixedRandom()
'''
Data Loading
'''
data_input_file_path = args['f']
env_graph = generate_EnvironmentGraph(data_input_file_path)
'''
Parameters
'''
#how many steps each day has
days = 3
day_duration = 24
env_graph.routine_day_length = day_duration
simulation_steps = days * day_duration
'''
Load Plugins Examples
'''
plug = ExamplePlugin(env_graph)
plug.example_parameter = 'bar'
env_graph.LoadPlugin(plug)
walk = LevyWalkPlugin(env_graph)
walk.distribution_scale = int(args['s'])
walk.levy_probability = float(args['l'])
env_graph.LoadPlugin(walk)
social_distance = ReverseSocialIsolationPlugin(env_graph, '', isolation_rate = float(args['r']))
social_distance.day_cycle = day_duration
social_distance.iso_mode = 'regular'
env_graph.LoadPlugin(social_distance)
return_plugin = ReturnPopulationPlugin(env_graph)
env_graph.LoadPlugin(return_plugin)
'''
Logging
'''
logger = SimulationLogger(f'{args["n"]}', day_duration)
#logger.set_to_record('global')
#logger.set_to_record('neighbourhood')
logger.set_default_data_to_record('neighbourhood_disserta')
logger.set_default_data_to_record('metrics')
#logger.set_to_record('nodes')
#logger.set_to_record('positions')
pop_temp = PopTemplate()
#pop_temp.set_property('age', 'adults')
logger.pop_template = pop_temp
# logger.foreign_only = True
# this option saves REALLY big files
# logger.set_to_record('graph')
'''
Simulation
'''
for i in range(simulation_steps):
print(i, end='\r')
# print(i)
# Routine/Repeating Global Action Invoke example
# Updates Node Routines and Repeating Global Actions
# These are defined in the input environment descriptor
env_graph.update_time_step(i % day_duration, i)
# Direct Action Invoke example
# if i == 50:
# dummy_action = TimeAction('push_population', {'region':'example1', 'node':'example2', 'quantity':50})
# env_graph.direct_action_invoke(dummy_action)
# Next frame queue action example
# if i == 60:
# dummy_action = TimeAction('push_population', {'region':'example1', 'node':'example2', 'quantity':50})
# env_graph.queue_next_frame_action(dummy_action)
logger.record_frame(env_graph, i)