简短的回答:这取决于您要使用的编程范式或语言,以及您想要的代理设计:
如果您想要一种允许快速原型制作但复杂模拟的低入门高上限语言,并且愿意学习新的范例(避免循环),请使用NetLogo。好的文档。
如果您想在高度并行化的集群上使用真正的应用程序,或者只想使用 Java Groovy 或需要特定的 Java 库来实现您的目的,请使用 Repast 或更好的 Repast 进行高性能计算(但避免使用非常慢的 ReLogo) . 温和的文档。
如果您想使用 FIPA 通信对认知代理(而不是反应式)进行建模,最好使用Jason或支持 AgentSpeak + Java 的更好的JaCaMo(这样您也可以使用您喜欢的 Java 库),并且不需要 Groovy。糟糕的文档(许多不详细的功能和命令以及糟糕的太复杂且未注释的示例)。
长答案:
免责声明:我对 NetLogo 更有经验,但我也使用过 Repast 和其他一些人,比如 Jason。
基本上,NetLogo 和 Repast 之间的区别在于,使用 NetLogo,您将拥有一个更简单的框架,但您需要学习如何在面向海龟和补丁的范例中编程,而在 Repast 中,您将必须学习 + Java Groovy 背后的机制,但您最终将获得更大的灵活性。速度在这里并不是一个真正的标准(见下文)。
更清楚地说,如果你最大限度地使用海龟和补丁的原生函数,你可以在 NetLogo 中高效地编程。例如,如果您想实现 A*,而不是实现节点列表,您应该直接使用补丁并使用以下内容过滤它们:
ask patchs with [criteria1 = value and criteria2 = value2] [do-some-stuff]
ask patchs with-min [criteria][do]
let var [somevalue] of min-one-of patches [criteria]
此外,如果您找不到有效地做您想做的事情的方法,请务必检查是否存在用于您的目的的扩展(也可以在库和工具下查看),例如现在允许我制作的原生矩阵扩展NetLogo 中的高效神经网络。
另一方面,Repast 可能比 NetLogo 更灵活(因为您可以访问整个 Java 库范围),但由于您必须知道如何处理 Groovy,所以稍微复杂一些。
如果您只对速度感兴趣,请不要使用 ReLogo(Repast 的类似 NetLogo 的语法),它已被证明比 NetLogo 慢很多(参见下面的 2012 年论文)。在任何情况下,您最好的选择是使用上面的技巧尝试使用 NetLogo 实现,或者如果您想稍后真正使用您的应用程序,还有一个名为Repast for High Performance Computing的分发,它消除了大部分过载带有海龟和补丁对象,因此可以用于实际应用。NetLogo 存在类似的扩展,可以在具有并行化的集群中计算,但它不是官方发行版。
如果您想了解有关各种平台的更多信息,这里是 2006 年的精彩回顾:
Railsback, SF, Lytinen, SL, & Jackson, SK (2006)。基于代理的模拟平台:审查和开发建议。模拟,82(9),609-623。
以及 2012 年这篇论文的更新版本,涉及 NetLogo 与 ReLogo:
Lytinen, SL 和 Railsback, SF(2012 年 4 月)。基于代理的模拟平台的演变:netlogo 5.0 和 relogo 的回顾。在第四届基于代理的建模与仿真国际研讨会论文集上。
/编辑:我引用了杰森,但没有提供更多细节。如果你想对认知代理(而不是反应代理)进行建模,你可以在 NetLogo 中使用非官方的BDI 扩展来做到这一点,该扩展运行良好但有点受限(但它很容易扩展,因为它是纯 NetLogo),但你最好的选择是使用专门设计用于建模认知代理的框架,并完全支持 AgentSpeak。
Jason非常好,因为您可以使用完整的 AgentSpeak 语言 + JAVA 来实现技术方面。事实上,你可以只使用 AgentSpeak 来完成整个项目(我做过),但你也可以制作更多面向 Java 的版本,这取决于你想如何设计你的程序,结果或多或少是一样的。这为您的设计工作流程提供了很大的灵活性。
提示:在文档中搜索“Jason 内部操作”以获得对可用 AgentSpeak 命令的详细描述。
此外,如果您对 Jason 感兴趣,您可能会对JaCaMo (= Jason + Cartago + Moise) 感兴趣,它是三个项目作者合作的结果,以制作一个成熟的认知代理框架,该框架也可以对复杂环境进行建模(与人工制品理论)和多代理组织(角色、组、任务等)。
我知道但没有机会尝试的最后一个框架是Mason,它支持 2D 和 3D 环境。从来没有机会尝试过这个,所以我不知道它与其他的相比如何,但你可以尝试一下。