4

实施基于代理的模型或 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] 的事实意味着,这样做很可能存在一些问题。这些问题是什么?如何解决?

我能够找到的有关该主题的材料:

  1. Nikolaos Bezirgiannis 的“使用 Haskell 的并发和并行性提高仿真软件的性能”论文
    http://dspace.library.uu.nl/handle/1874/284708

  2. NetLogo / 文档 / FAQ #Multiprocessing
    (“对于单个模型运行,仅使用一个处理器。”)
    http://ccl.northwestern.edu/netlogo/docs/faq.html#multiprocessing

  3. 《关于并行运行的问题》<br/> http://netlogo-users.18673.x6.nabble.com/Question-about-parallel-running-td4869363.html

  4. “如何在 NetLogo 中同时运行多个程序?” StackOverflow 上的问题
    如何在 NetLogo 中同时运行多个程序?

  5. NetLogo 文档中的 Ask-concurrent
    (“ask-concurrent 的行为是完全确定的。”)
    http://ccl.northwestern.edu/netlogo/docs/programming.html#ask-concurrent

  6. NetLogo 文档中的 BehaviorSpace
    http://ccl.northwestern.edu/netlogo/docs/behaviorspace.html

4

0 回答 0