From 026e799c7410a366a94964b900a07d49445a897b Mon Sep 17 00:00:00 2001 From: "Joshua E. Jodesty" Date: Wed, 14 Nov 2018 14:58:55 -0500 Subject: [PATCH] Parallelize Simulations --- engine/multiproc.py | 11 +++++++++++ engine/run.py | 27 ++++++++++++++++----------- 2 files changed, 27 insertions(+), 11 deletions(-) create mode 100644 engine/multiproc.py diff --git a/engine/multiproc.py b/engine/multiproc.py new file mode 100644 index 0000000..61800bb --- /dev/null +++ b/engine/multiproc.py @@ -0,0 +1,11 @@ +from pathos.multiprocessing import ProcessingPool as Pool + + +def parallelize_simulations(f, states_list, configs, env_processes, T, N): + def process(config): + return f(states_list, config, env_processes, T, N) + + with Pool(len(configs)) as p: + results = p.map(process, configs) + + return results \ No newline at end of file diff --git a/engine/run.py b/engine/run.py index f8bd0b4..8fe9652 100644 --- a/engine/run.py +++ b/engine/run.py @@ -1,24 +1,29 @@ -from ui.config import state_dict, mechanisms, exogenous_states, env_processes, sim_config +import pandas as pd +from tabulate import tabulate + from engine.configProcessor import generate_config, create_tensor_field from engine.mechanismExecutor import simulation from engine.utils import flatten -from tabulate import tabulate -import pandas as pd +from ui.config import state_dict, mechanisms, exogenous_states, env_processes, sim_config +from engine.multiproc import parallelize_simulations + def main(): states_list = [state_dict] ep = list(exogenous_states.values()) - configs = generate_config(state_dict, mechanisms, ep) - # print(len(configs)) - print(tabulate(create_tensor_field(mechanisms, ep), headers='keys', tablefmt='psql')) - print - # p = pipeline(states_list, configs, env_processes, range(10)) + config = generate_config(state_dict, mechanisms, ep) T = sim_config['T'] N = sim_config['N'] + configs = [config, config] # Dimensions: N x r x mechs - s = simulation(states_list, configs, env_processes, T, N) - result = pd.DataFrame(flatten(s)) + if len(configs) > 1: + simulations = parallelize_simulations(simulation, states_list, configs, env_processes, T, N) + else: + simulations = [simulation(states_list, configs[0], env_processes, T, N)] - return result \ No newline at end of file + for result in simulations: + print(tabulate(create_tensor_field(mechanisms, ep), headers='keys', tablefmt='psql')) + print + print(tabulate(pd.DataFrame(flatten(result)), headers='keys', tablefmt='psql')) \ No newline at end of file