NetLogo 与 Repast Simphony? [关闭]
Posted
技术标签:
【中文标题】NetLogo 与 Repast Simphony? [关闭]【英文标题】:NetLogo vs. Repast Simphony? [closed] 【发布时间】:2010-12-12 17:37:16 【问题描述】:我想使用多代理模拟一些场景 范式,似乎 NetLogo 和 Repast 是最流行的工具。
我想知道是否有人对这两种方法有任何经验并且可以告诉我更多关于它们的信息?例如,我注意到 Repast 有一个类似通量图的建模选项,但我认为它相当有限。我查看了官方网站上的教程和文档,似乎缺少文档。虽然有一些例子,但我想说的是,将它扩展为模拟尚未专门准备的环境,目前似乎是一个遥不可及的目标,尽管 Repast 显然非常强大并且显然能够处理它,只要足够多熟悉它。
另一方面,NetLogo 有更多示例,总体而言,我更喜欢它的简单性,但它似乎更专注于模拟疾病或类似模型的传播。我找到了一本教 Logo 的编程书籍,所以我认为它也更容易上手。
目前,我正在考虑将botnets 和IDSes 模拟为多代理。然而,问题是我必须在一定程度上抽象网络和传输层才能做到这一点,并在节点之间产生流量。 Repast 显然更适合这个,但考虑到它的复杂性和缺乏文档,我正在考虑使用 NetLogo。虽然有一些 NetLogo 与传统应用程序的示例(例如:Tetris 或 Pac-Man),但我不确定它是否适合。
【问题讨论】:
【参考方案1】:如果您已经可以使用 Java 编写代码,您还可以查看以下论文以比较 RePast、Swarm、Quicksilver、和 VSEit,不同的免费可用编程库,用于支持基于社会科学代理的计算机模拟
Tobias, Robert, and Carole Hofmann. "Evaluation of free Java-libraries for social-scientific agent based simulation." Journal of Artificial Societies and Social Simulation 7.1 (2004).
Repast 肯定比 NetLogo 更灵活,但 RePast Symphony 的文档不是很详细
【讨论】:
【参考方案2】:我从未尝试过 NetLogo,但我尝试过 Repast-J 和 Simphony。似乎 Simphony 很好,但目前我被困在将 Edge 类型从直线更改为曲线类型。没有足够的文档和示例可用。 曾经我也尝试过基于 java 的 Mason。它类似于 Repast-J,但速度更快。但最近梅森并没有太大的发展。 我想稍后试试 Jade。
【讨论】:
【参考方案3】:简短回答:这取决于您要使用的编程范式或语言,以及您想要为代理设计的设计:
如果您想要一种低门槛、高门槛的语言,允许快速原型设计但可以进行复杂的模拟,并且愿意学习新的范例(避免循环),请使用 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 环境。从来没有机会尝试过这个,所以我不知道它与其他的相比如何,但你可以试试。
【讨论】:
要了解有关 Jason 的更多详细信息,我建议使用这本书:使用 Jason 在 AgentSpeak 中编程多代理系统 jason.sourceforge.net/jBook/jBook/Home.html【参考方案4】:这是一个通用的比较。
http://www.duncanrobertson.com/research/AMLE.pdf
【讨论】:
【参考方案5】:我有一个网页,上面有几个打瞌睡的netlogo multiagent simulations。我使用 netlogo 进行教学,我发现,一旦你越过了学习曲线,你就能以惊人的速度开发模拟。在其他所谓的代理环境(Jade、Repast,实际上大多只是编程库)中需要 80 个工时的东西可以在 2 小时内完成。
另一方面,netlogo 并不适合需要大量细节的模拟,例如模拟从 TCP/IP 到 HTTP 的网络。这只需要大量的代码,不管编程语言是什么,如果你的程序最终超过 10 页,netlogo 目前很糟糕。话虽如此,大多数人会惊讶于您可以在 10 页 netlogo 代码中完成的工作。
【讨论】:
【参考方案6】:几个月前,当我不得不为我的模拟选择一个框架时,我或多或少地遇到了同样的问题。我看 Repast、NetLogo、Swarm 和 Jade。 NetLogo 很好,我尝试编写一些简单的测试应用程序,但是因为我想使用 Java 作为我的编程语言,所以 NetLogo 不是最佳选择。 Repast 几乎拥有编写大型模拟所需的一切,并且有许多项目(尤其是在社会科学领域)使用 Repast。我对 Repasts 的问题是:糟糕的 API 文档、传递给从未使用过且根本没有任何意义的方法或构造函数的参数(查看源代码)以及大量样板代码。 我现在正在使用 Jade (http://jade.tilab.com/),我对此非常满意。社区很好,他们的邮件列表非常活跃。好的,Jade 只是一个用于基于代理的建模的库和框架。在 Repast 中,您无法获得类似可视化编辑器的任何东西,您必须编写自己的工具来可视化结果。
干杯
【讨论】:
【参考方案7】:您可以使用称为“数据包”的代理类型来模拟流量,该代理类型将生成并从称为“bot”的代理发送到另一个称为“bot”或“server”的代理。不是将数据包发送到 IP 地址,而是将它们发送到一对 X 和 Y 坐标。
Netlogo 有一个病毒如何在网络中传播的示例,这可能是一个很好的起点。
【讨论】:
以上是关于NetLogo 与 Repast Simphony? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
链接服务器“FDMEE_SIMPHONY”的 OLE DB 提供程序“OraOLEDB.Oracle”返回消息“ORA-00903:无效表名”