【发布时间】:2017-07-12 15:03:04
【问题描述】:
我有一个基本的简单问题。我已经创建了一个基本模拟,现在想多次运行它以获得可能值的分布。有没有比多次运行脚本更有效的方法?有没有办法将环境重置为初始状态并以这种方式重新运行,而不必为每次运行加载所有外部类和其他设置?
我应该将整个模拟放在一个 for 循环中并以这种方式收集数据,还是推荐的方法是从 python 外部多次运行脚本并附加到一些数据缓存?
【问题讨论】:
我有一个基本的简单问题。我已经创建了一个基本模拟,现在想多次运行它以获得可能值的分布。有没有比多次运行脚本更有效的方法?有没有办法将环境重置为初始状态并以这种方式重新运行,而不必为每次运行加载所有外部类和其他设置?
我应该将整个模拟放在一个 for 循环中并以这种方式收集数据,还是推荐的方法是从 python 外部多次运行脚本并附加到一些数据缓存?
【问题讨论】:
将所有模拟设置(环境创建、资源、进程……)放入一个函数中,并将其映射到进程池(请参阅https://docs.python.org/3/library/multiprocessing.html)。
【讨论】:
以下是如何使用嵌套 for 循环多次运行模拟的示例:
for variable_a in a_variables:
for variable_b in b_variables:
for variable_c in c_variables:
for variable_d in d_variables:
print 'Starting sim %d' % x
# setup environment
random.seed(random.random())
env = simpy.Environment()
# resource
resource = simpy.Resource(env, capacity = 2)
env.process(source(env))
env.run(until=SIM_TIME)
这是运行需要扫描多个变量的实验的好方法。这称为“full factorial”实验。但请注意,随着您添加因子并增加每个因子中的点数,您最终创建的模拟数量会迅速增加。
【讨论】: