12

我想使用多代理范式模拟一些场景,似乎NetLogoRepast是最流行的工具。

我想知道是否有人对这两种方法有任何经验,可以告诉我更多关于它们的信息吗?例如,我注意到 Repast 有一个类似通量图的建模选项,但我认为它相当有限。我查看了官方网站上的教程和文档,似乎缺少文档。虽然有一些例子,但我想说的是,将它扩展为模拟尚未专门准备的环境,目前似乎是一个遥不可及的目标,尽管 Repast 显然非常强大并且显然能够处理它,只要足够多熟悉它。

另一方面,NetLogo 有更多示例,总体而言,我更喜欢它的简单性,但它似乎更专注于模拟疾病或类似模型的传播。我找到了一本教Logo的编程书,所以我认为它也更容易上手。

目前,我正在考虑将僵尸网络IDS es 模拟为多代理。然而,问题是我必须在一定程度上抽象网络和传输层才能做到这一点,并在节点之间产生流量。Repast 显然更适合这个,但考虑到它的复杂性和缺乏文档,我正在考虑使用 NetLogo。虽然有一些 NetLogo 与传统应用程序(例如:俄罗斯方块吃豆人)的例子,但我不确定它是否适合。

4

7 回答 7

12

我有一个网页,上面有几个打瞌睡的netlogo 多代理模拟。我使用 netlogo 进行教学,我发现,一旦你越过了学习曲线,你就能以惊人的速度开发模拟。在其他所谓的代理环境(Jade、Repast,实际上主要是编程库)中需要 80 个工时的东西可以在 2 小时内完成。

另一方面,netlogo 对于需要大量细节的模拟来说并不是很好,比如模拟从 TCP/IP 到 HTTP 的网络。这将只需要大量代码,无论编程语言如何,如果您的程序最终超过 10 页,netlogo 目前很糟糕。话虽如此,大多数人会惊讶于您可以在 10 页 netlogo 代码中完成的工作。

于 2010-02-10T22:24:28.353 回答
12

简短的回答:这取决于您要使用的编程范式或语言,以及您想要的代理设计:

  • 如果您想要一种允许快速原型制作但复杂模拟的低入门高上限语言,并且愿意学习新的范例(避免循环),请使用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 环境。从来没有机会尝试过这个,所以我不知道它与其他的相比如何,但你可以尝试一下。

于 2014-03-05T17:05:13.580 回答
4

这是一个通用的比较。

http://www.duncanrobertson.com/research/AMLE.pdf

于 2011-07-06T06:23:18.560 回答
2

几个月前,当我不得不为我的模拟选择一个框架时,我或多或少地遇到了同样的问题。我看 Repast、NetLogo、Swarm 和 Jade。NetLogo 很好,我尝试编写一些简单的测试应用程序,但由于我想使用 Java 作为我的编程语言,NetLogo 不是最佳选择。Repast 几乎拥有编写大型模拟所需的一切,并且有许多项目(尤其是在社会科学领域)使用 Repast。我对 Repasts 的问题是:糟糕的 API 文档、传递给从未使用过且根本没有任何意义的方法或构造函数的参数(查看源代码)以及大量样板代码。我正在使用 Jade(http://jade.tilab.com/) 现在我真的很高兴。社区很好,他们的邮件列表非常活跃。好的,Jade 只是一个用于基于代理的建模的库和框架。在 Repast 中,您不会得到类似可视化编辑器的任何东西,您必须编写自己的工具来可视化结果。

干杯

于 2009-11-21T10:46:29.680 回答
1

您可以使用名为“packet”的代理类型来模拟流量,该代理类型将生成并从名为“bot”的代理发送到另一个名为“bot”或“server”的代理。不是将数据包发送到 IP 地址,而是将它们发送到一对 X 和 Y 坐标。

Netlogo 有一个病毒如何在网络中传播的例子,这可能是一个很好的起点。

于 2009-11-07T20:17:08.673 回答
0

我从未尝试过 NetLogo,但我尝试过 Repast-J 和 Simphony。似乎 Simphony 很好,但目前我被困在将 Edge 类型从直线更改为曲线类型。没有足够的文档和示例可用。曾经我也尝试过基于 java 的 Mason。它类似于 Repast-J,但速度更快。但最近梅森并没有太大的发展。我想稍后试试 Jade。

于 2009-12-03T22:36:21.543 回答
0

如果您已经可以使用 Java 编写代码,您还可以查看以下论文以比较RePastSwarmQuicksilverVSEit,这些不同的免费可用编程库支持基于社会科学代理的计算机模拟

托拜厄斯、罗伯特和卡罗尔霍夫曼。“评估基于社会科学代理的模拟的免费 Java 库。” 人工社会与社会模拟杂志 7.1 (2004)。

Repast 绝对比 NetLogo 更灵活,但是 RePast Symphony 的文档不是很详细

于 2017-03-29T15:11:13.803 回答