我正在用Java创建一个agent-based modeling program。
我正在尝试确定动画代理的最好方法。我见过几个使用网格的例子,允许每个代理一次只占用一个单元。
我正在寻找一种更平滑的东西,在这种东西中,代理可以在窗口中从各个方向“流动”。
有什么建议吗?
谢谢!
编辑:
环境将是简单的和二维的。将有从一个代理到数百个代理的任何地方。
我想将智能体表示为带有某种方向指示的小圆圈(细节无关紧要;重点是智能体需要旋转的能力)。
第二次编辑:
我目前正在阅读这个教程:http://www.giosoft.net/Development/Java-Asteroids-Tutorial.html
看起来它会帮助我完成我想要完成的事情。
发布于 2011-09-13 08:52:33
我不知道你到底在问什么。也许你正在问(或打算问)这三个问题?
在进行基于agent的建模时,您必须以对您的领域有意义的方式设计您的模拟。这里没有人可以给你一个合理的答案,关于做出什么样的空间选择,除非他们对你的领域有一些了解。
你可以选择2维或3维可视化。您可能希望使用环形空间。您可能会强加一个网格(例如,离散的x和y维),或者您可能允许连续的空间。您可能有关于接近的某些规则(例如,一次只能有一个代理占用一个网格空间)。您可能希望使用其他一些规则。
同样,关键是找到一组对您的域有意义的规则。我建议找到一组最简单的规则,这些规则仍然可以创建对您的模型至关重要的行为。
一旦您决定了基于代理的模型的空间方面,那么您将准备决定使用什么技术来显示它。这是一个广泛的主题,但我建议您研究一下Processing、Piccolo2D、JavaFX、Java2D和Java3D。
实际上,这个问题比我上面提到的要宽泛一点。你可能关心的不仅仅是动画。基于代理的模型可以由GUI和/或命令行界面驱动。如果您需要一个GUI,那么您将需要各种输入控件,以便可以调优模型参数。您至少应该考虑Swing和JavaFX。
到目前为止,Wikipedia comparison of agent-based modeling tools是我见过的最全面的列表,但它可能会让您不知所措。在我的经验中,同事和同龄人往往倾向于以下一个或多个: NetLogo、RePast模拟、AnyLogic或梅森。有些人(包括我自己)经常发现滚动起来更快--你自己的。如果你走这条路,我强烈建议你看看高级语言,比如Ruby、Scala或Python,这样你就可以专注于领域逻辑而不是低级语言的细节。
发布于 2011-09-11 16:23:12
2000-2006年间,我在Tryllian工作,这是一家专门从事多智能体系统的荷兰公司。该公司现在处于非活跃状态。
Tryllian的第一个想法是构建一个基于代理的搜索设备(称为Gossip)。这是一个图形化的客户端应用程序,有许多颜色鲜艳的圆形代理,眼睛可爱。每种药剂的背部都有一个缝隙,可以将“背包”拖入其中。背包可以包含搜索查询和多个搜索结果(URL、文档、图像等)。为了进行搜索,用户必须拖着一个带着准备好的背包的特工到“互联网门户”上,就像你在科幻电影中看到的那样,这是一种带有星光背景的登机舱门。然后,代理将被“传送”到Tryllian服务器,在那里它将被居住在服务器上的“管家-代理”定向到“主题房间”。在房间里,它可以与其他智能体交互,交换搜索兴趣和-results。看起来你还可以下载八卦here。

后来,Tryllian决定开发一个代理开发工具包(ADK),使用它可以更容易地创建像Gossip这样的代理应用程序。它为智能体的行为规划提供了一个基于任务的模型。您的代理将获得大量事件(agentStarted等),并且在事件处理程序中可以添加任务,这些任务反过来也将获得事件(taskStarted等),并且可以调度更复杂的行为(可能是以子任务的形式)。API确实做得很好。
在我看来,ADK的关键特性是它提供的代码移动性;座席不仅可以在其本地ARE (Agent Runtime Environment)上的虚拟房间之间旅行,而且还可以旅行到另一台服务器。这涉及到类序列化和多类加载器解决方案,这在当时是相当革命性的(我们喜欢这样认为)。这个特性使得你可以将代码带到数据中,而不是到处传递数据(我所知道的大多数企业系统的主要特性仍然是抽出数据)。例如,Tryllian开发了一个远程审计应用程序,它允许审计公司的匿名者将审计规则编码到代理中,并将其安全地发送到客户的服务器,以监控流程。
在这个答案变得非常冗长之前,我会停下来(-;
这可能比你现在想要实现的目标还要多一点。如果你能更具体地表达你的问题,我可以给出一些关于如何设置你的多智能体系统的建议(如何对智能体之间的消息传递建模也是一个非常有趣的话题-哦,对不起,我说过我会停止...)。
你的多智能体系统的目的是什么?一个代理会做什么?它是在一台机器上运行,还是分布式运行?智能体的行为/规则是硬编码的、可配置的还是完全动态的?
最后一个建议:考虑对简单智能体建模的一个合理起点是sense-plan-act,它通常与机器人联系在一起。
编辑:回复您的评论
Tryllian代理模型更关注消息传递,而不是与模拟物理环境的紧密交互。查看您发布的示例站点,似乎性能非常关键,特别是当代理数量增加时。你不会利用Tryllian代理的优点:代码移动性,基于任务的编程,通用性,所以我认为它不是像这样的模拟的最佳工具。
你提到了“网格”和“平滑”的方法。我认为在计算机模拟中,你总是需要在某种离散的坐标系中表示智能体的大小、坐标、速度和方向。因此,总会有某种形式的网格,但你可以将“单元格”变得更小,让它看起来更平滑。
也许在游戏领域中可以找到一些有用的资源?(精灵、碰撞检测等)
祝你好运,玩得开心!
发布于 2011-09-12 10:56:01
你可能想看看MASON。它是一个用于多智能体模拟的开源Java平台。一些演示(例如MAV)展示了如何准确地执行您所描述的操作。
RePast是另一个可能的选择。
最后,NetLogo使您所描述的一切变得极其简单。尽管可以将NetLogo与其他Java代码集成在一起,但它有自己的小语言,允许非常快速的开发。
https://stackoverflow.com/questions/7376839
复制相似问题