-
Notifications
You must be signed in to change notification settings - Fork 96
/
simulation.py
119 lines (85 loc) · 3.41 KB
/
simulation.py
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
# ActivitySim
# See full license in LICENSE.txt.
from __future__ import (absolute_import, division, print_function, )
from future.standard_library import install_aliases
install_aliases() # noqa: E402
import sys
import logging
import pandas as pd
from activitysim.core import mem
from activitysim.core import inject
from activitysim.core import tracing
from activitysim.core import config
from activitysim.core import pipeline
from activitysim.core import mp_tasks
from activitysim.core import chunk
# from activitysim import abm
logger = logging.getLogger('activitysim')
def cleanup_output_files():
active_log_files = \
[h.baseFilename for h in logger.root.handlers if isinstance(h, logging.FileHandler)]
tracing.delete_output_files('log', ignore=active_log_files)
tracing.delete_output_files('h5')
tracing.delete_output_files('csv')
tracing.delete_output_files('txt')
tracing.delete_output_files('yaml')
tracing.delete_output_files('prof')
def run(run_list, injectables=None):
if run_list['multiprocess']:
logger.info("run multiprocess simulation")
mp_tasks.run_multiprocess(run_list, injectables)
else:
logger.info("run single process simulation")
pipeline.run(models=run_list['models'], resume_after=run_list['resume_after'])
pipeline.close_pipeline()
chunk.log_write_hwm()
def log_settings(injectables):
settings = [
'households_sample_size',
'chunk_size',
'multiprocess',
'num_processes',
'resume_after'
'use_shadow_pricing',
'hh_ids',
]
for k in settings:
logger.info("setting %s: %s" % (k, config.setting(k)))
for k in injectables:
logger.info("injectable %s: %s" % (k, inject.get_injectable(k)))
if __name__ == '__main__':
# https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.set_option.html
# pd.set_option('display.max_columns', 50)
data_dir = "E:/projects/clients/ASIM/data/mtc_tm1"
data_dir = '/Users/jeff.doyle/work/activitysim-data/mtc_tm1/data'
data_dir = '../example/data'
# inject.add_injectable('data_dir', '/Users/jeff.doyle/work/activitysim-data/mtc_tm1/data')
inject.add_injectable('data_dir', ['ancillary_data', data_dir])
# inject.add_injectable('data_dir', ['ancillary_data', '../activitysim/abm/test/data'])
inject.add_injectable('configs_dir', ['configs', '../example/configs'])
injectables = config.handle_standard_args()
tracing.config_logger()
config.filter_warnings()
log_settings(injectables)
t0 = tracing.print_elapsed_time()
# cleanup if not resuming
if not config.setting('resume_after', False):
cleanup_output_files()
run_list = mp_tasks.get_run_list()
if run_list['multiprocess']:
# do this after config.handle_standard_args, as command line args may override injectables
injectables = list(set(injectables) | set(['data_dir', 'configs_dir', 'output_dir']))
injectables = {k: inject.get_injectable(k) for k in injectables}
else:
injectables = None
run(run_list, injectables)
# pipeline.open_pipeline('_')
#
# households_df = pipeline.get_table('households')
# print("households_df\n", households_df.head())
#
# tours_df = pipeline.get_table('tours')
# print("tours_df\n", tours_df.head())
#
# pipeline.close_pipeline()
t0 = tracing.print_elapsed_time("everything", t0)