实施基于代理的模型或 ABM 建模软件(例如 NetLogo)需要解决哪些具体实施问题或瓶颈?
TL;DR 版本:
与实施 ABM 软件(尤其是 NetLogo)相关的问题是什么,以便它能够使用多个 CPU?
解决这些问题的尝试是什么?
并行化 NetLogo 需要什么?
NetLogo 在并行模式下的工作方式有何不同?
更长的版本:
目前,NetLogo 通过一次顺序处理一个代理来执行模拟。尽管通过 BehaviorSpace [6] 可以在单台机器上运行多个模型(在单独的 NetLogo 实例中),甚至是特定模型的不同配置(在单个 NetLogo 实例中),但单个模型在一个 CPU 上运行 [ 2, 3]。
还有一种通过 ask-concurrent 命令 [4, 5] 处理代理行为的伪并行模式,但它不需要在多个 CPU 上并行执行。
我读过关于在 Haskell 中并行化 NetLogo 实现它的尝试(Nikolaos Bezirgiannis 的 HLogo 实现)[1]。然而,该研究项目的作者指出,“[e] 执行结果表明,在大多数情况下,HLogo 比 NetLogo 更快,尤其是在代理数量很少的情况下。当代理数量增长到产生大量 STM 冲突时,HLogo 的性能会大幅下降。”</p>
显然,与并行执行相比,以非并行、顺序方式运行模拟会大大降低速度。NetLogo 实现不使用多处理/并行性 [关于单个模型运行] [2, 3] 的事实意味着,这样做很可能存在一些问题。这些问题是什么?如何解决?
我能够找到的有关该主题的材料:
Nikolaos Bezirgiannis 的“使用 Haskell 的并发和并行性提高仿真软件的性能”论文
http://dspace.library.uu.nl/handle/1874/284708NetLogo / 文档 / FAQ #Multiprocessing
(“对于单个模型运行,仅使用一个处理器。”)
http://ccl.northwestern.edu/netlogo/docs/faq.html#multiprocessing《关于并行运行的问题》<br/> http://netlogo-users.18673.x6.nabble.com/Question-about-parallel-running-td4869363.html
“如何在 NetLogo 中同时运行多个程序?” StackOverflow 上的问题
如何在 NetLogo 中同时运行多个程序?NetLogo 文档中的 Ask-concurrent
(“ask-concurrent 的行为是完全确定的。”)
http://ccl.northwestern.edu/netlogo/docs/programming.html#ask-concurrentNetLogo 文档中的 BehaviorSpace
http://ccl.northwestern.edu/netlogo/docs/behaviorspace.html