zxc*_*bnm 12 java artificial-intelligence agent netlogo logo-lang
我想使用多智能体范例来模拟一些场景,看起来NetLogo和Repast是最受欢迎的工具.
我想知道是否有人对任何一方有任何经验,可以告诉我更多关于它们的信息吗?例如,我注意到Repast有一个类似于通量图的建模选项,但我认为它相当有限.我查看了官方网站上的教程和文档,文档似乎缺乏.虽然有一些例子,我会说扩展它来模拟一个它没有专门准备的环境,目前看起来像一个无法达到的目标,尽管Repast显然非常强大并且显然能够处理它,给予足够的熟悉它.
另一方面,NetLogo有更多的例子,总体而言我更喜欢它的简单性,但它似乎更侧重于疾病或类似模型的模拟传播.我找到了一本教授Logo的编程书,所以我觉得开始使用它也比较容易.
目前,我正在考虑将僵尸网络和IDS模拟为多代理.然而,问题是我必须抽象网络和传输层到一定程度,以便能够做到这一点,以及在节点之间产生流量.Repast显然更适合这种情况,但鉴于其复杂性和缺乏文档,我正在考虑使用NetLogo.虽然NetLogo有一些传统应用程序的例子(例如:俄罗斯方块或吃豆人),但我不确定它的适用性.
Jos*_*dal 12
我有一个带有几个打瞌睡的netlogo多智能体模拟的网页.我使用netlogo进行教学,我发现,一旦你超越了学习曲线,你就可以非常快速地开发模拟.在其他所谓的代理环境(Jade,Repast,它们实际上只是编程库)中花费80个工时的东西可以在2小时内完成.
另一方面,netlogo对于需要大量细节的模拟并不是很好,例如从TCP/IP到HTTP一直模拟网络.这将需要大量代码,无论编程语言如何,如果您的程序最终超过10页,netlogo目前很糟糕.话虽如此,大多数人都会对10页netlogo代码中的内容感到惊讶.
gab*_*ous 12
简短回答:这取决于您想要使用的编程范例或语言,以及您希望代理的设计:
如果你想要一个低入门 - 高天花板语言,允许快速原型设计,但复杂的模拟,并愿意学习一个新的范例(避免循环)使用NetLogo.好文档.
如果您想要在高度并行化的集群上使用真正的应用程序,或者只是想使用Java Groovy或者需要特定的Java库来实现您的目的,请使用Repast或更好的Repast进行高性能计算(但要避免使用非常慢的ReLogo) .温和的文件.
如果你想认知代理(而不是反应)与FIPA通信模型,更好地利用杰森或更好JaCaMo支持AgentSpeak + Java的(所以你也可以使用自己喜欢的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]
Run Code Online (Sandbox Code Playgroud)
此外,如果你找不到有效地做你想要的方法,一定要检查是否存在扩展名(在图书馆和工具下也可以查看),例如现在的原生矩阵扩展允许我制作一个NetLogo中的高效神经网络.
另一方面,Repast可能比NetLogo更灵活(因为您可以访问所有Java库),但更复杂,因为您必须知道如何处理Groovy.
如果您只对速度感兴趣,请不要使用ReLogo(类似NetLogo的Repast语法),它已经显示出比NetLogo慢很多(参见下面的2012年论文).在任何情况下,您最好的选择是使用上面的技巧尝试NetLogo的实现,或者如果您想在以后使用您的应用程序,还有一个名为Repast for High Performance Computing的分发可以消除大部分的重载.带有海龟和补丁对象,因此它可以用于实际应用.一个类似的扩展存在的NetLogo在与并行集群计算,但它不是一个正式发行.
如果你想了解更多关于各种平台的信息,这里有一个很好的2006年回顾:
Railsback,SF,Lytinen,SL,&Jackson,SK(2006).基于代理的仿真平台:审核和开发建议.SIMULATION,82(9),609-623.
2012年本文的更新版本涉及NetLogo与ReLogo:
Lytinen,SL和Railsback,SF(2012年4月).基于代理的仿真平台的演变:对netlogo 5.0和relogo的回顾.在第四届基于Agent的建模与仿真国际研讨会论文集中.
/编辑:我引用杰森,但没有提供更多细节.如果你想模拟认知代理(而不是反应代理),你可以使用非官方的BDI扩展在NetLogo中做到这一点,该扩展效果很好但是有点限制(但它很容易扩展,因为它是纯NetLogo),但你最好的选择是使用专门设计的框架,在AgentSpeak的全力支持下对认知代理进行建模.
Jason非常好,因为您可以使用完整的AgentSpeak语言+ JAVA来实现技术方面.事实上,你可以只使用AgentSpeak(我做过)完成整个项目,但是你也可以制作更多面向Java的版本,这取决于你如何设计你的程序,结果或多或少都是一样的.这为您的设计工作流程提供了很大的灵活性.
提示:在文档中搜索"Jason内部操作"以获得可用的AgentSpeak命令的良好描述.
此外,如果您对Jason感兴趣,您可能会对JaCaMo(= Jason + Cartago + Moise)感兴趣,这是三个项目作者合作的结果,可以创建一个完整的认知代理框架,该框架也可以模拟复杂的环境(工件理论)和多代理组织(角色,团体,任务等).
我所知道但最没有机会尝试的最后一个框架是支持2D和3D环境的Mason.从来没有机会尝试这个,所以我不知道这与其他人相比如何,但你可以尝试一下.
您可以使用名为“数据包”的代理类型来模拟流量,该代理类型将生成并从名为“机器人”的代理发送到另一个名为“机器人”或“服务器”的代理。您无需将数据包发送到 IP 地址,而是将它们发送到一对 X 和 Y 坐标。
Netlogo 有一个病毒如何在网络中传播的示例,这可能是一个很好的起点。
| 归档时间: |
|
| 查看次数: |
7885 次 |
| 最近记录: |