简短回答:这取决于您要使用的编程范式或语言,以及您想要为代理设计的设计:
如果您想要一种低门槛、高门槛的语言,允许快速原型设计但可以进行复杂的模拟,并且愿意学习新的范例(避免循环),请使用 NetLogo。很好的文档。
1234563很慢)。温和的文档。
如果您想使用 FIPA 通信对认知代理(而不是反应式)进行建模,最好使用支持 AgentSpeak + Java 的Jason 或更好的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]
此外,如果您找不到有效地做您想做的事的方法,请务必检查if maybe an extension exists(也请检查库和工具下的here),例如现在允许我使用的本机矩阵扩展制作一个efficient neural network in NetLogo。
另一方面,Repast 可能比 NetLogo 更灵活(因为您可以访问整个 Java 库范围),但由于您必须知道如何处理 Groovy,所以稍微复杂一些。
如果您只对速度感兴趣,请不要使用 ReLogo(Repast 的类似 NetLogo 的语法),它已被证明比 NetLogo 慢很多(参见下面的 2012 年论文)。在任何情况下,您最好的选择是使用上述技巧尝试使用 NetLogo 实现,或者如果您想稍后真正使用您的应用程序,还有一个名为 Repast for High Performance Computing 的发行版它消除了海龟和补丁对象带来的大部分重载,因此它可以用于实际应用程序。 similar extension exists for NetLogo 用于在集群中进行并行计算,但它不是官方发行版。
如果您想了解有关各种平台的更多信息,请查看 2006 年的精彩回顾:
Railsback, S. F., Lytinen, S. L., & Jackson, S. K. (2006). Agent-based Simulation Platforms: Review and Development Recommendations. SIMULATION, 82(9), 609-623.
以及 2012 年这篇论文的更新版本,涉及 NetLogo 与 ReLogo:
Lytinen, S. L., & Railsback, S. F. (2012, April). The evolution of agent-based simulation platforms: A review of netlogo 5.0 and relogo. In Proceedings of the Fourth International Symposium on Agent-Based Modeling and Simulation.
/编辑:我引用了 Jason,但没有提供更多细节。如果您想对认知代理(而不是反应代理)进行建模,您可以在 NetLogo 中使用非官方的BDI extension 进行建模,该方法效果很好但有点受限(但它很容易扩展,因为它是纯 NetLogo),但最好的选择是使用专门设计的框架来对完全支持 AgentSpeak 的认知代理进行建模。
Jason 非常好,因为您可以使用完整的 AgentSpeak 语言 + JAVA 来实现技术方面。事实上,你可以只使用 AgentSpeak 来完成整个项目(我做过),但你也可以制作更多面向 Java 的版本,这取决于你想如何设计你的程序,结果或多或少是一样的。这为您的设计工作流程提供了很大的灵活性。
提示:在文档中搜索 "Jason internal actions" 以获得对可用 AgentSpeak 命令的详细说明。
另外,如果您对 Jason 感兴趣,您可能会对 JaCaMo (= Jason + Cartago + Moise) 感兴趣,这是三个项目作者合作的结果,以制作一个成熟的认知代理框架,该框架也可以对复杂环境(使用工件理论)和多代理组织(角色、组、任务等)进行建模。
我知道但没有机会尝试的最后一个框架是Mason,它支持 2D 和 3D 环境。从来没有机会尝试过这个,所以我不知道它与其他的相比如何,但你可以试试。