问题标签 [multi-agent]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
241 浏览

netlogo - 模拟多智能体系统的最佳工具箱

我想模拟一个多代理系统。netlogo 对它有好处吗?它是否具有模拟所有具有任何特征的多智能体系统的良好能力。netlogo 的图形效果好吗?我们可以使用 netlogo 在代理之间进行任务共享吗?我们可以用netlogo做功能分析吗?

你有什么其他的工具箱建议?

0 投票
1 回答
95 浏览

optimization - 如何让我的 NetLogo 模型更好?(代码结构)

我有一个模型,它在 go 过程中询问所有代理一次,其余的生产者从一个条件开始,如果代理有这个条件将执行任务。

我可以通过另一种方式来做到这一点,让我的条件向具有 [条件] 的代理询问,并消除在执行过程中的询问。

我已经使用第一种方法完成了我的整个模型,用第二种方法测试它真的很耗时,我想知道是否有人发现这两种方法对性能的影响(如果有任何区别! )

0 投票
1 回答
426 浏览

qt - 在 OOP 中使用 OpenGL 绘图

我尝试以现代管道实现的方式在 OS X 10.9 上使用 Qt (v5.1.1) 编写 OpenGL 项目。该程序应该是一个基于多智能体的系统或粒子系统。但是我缺乏理解如何从另一个类中提取一些东西。

在 cinder 中,您可以调用一些简单的 drawThisAndThat() 命令。我阅读了第 6 版的“OpenGL Superbible”。从这个和几个教程中,所有示例似乎都只涵盖了所有修改都来自初始化 OpenGL 的类的程序。

我想实例化一些在网格上移动的对象并绘制像素以显示它们的位置。我知道我必须打电话void glVertexAttrib4fv(GLuint index, const GLfloat * vi);,但这还不够。

  • 我还需要打电话吗?glEnableVertexAttribArray(1);还有glDrawArrays(GL_POINTS, 0, 3);什么?
  • 我是对的,在实例化 OpenGL 并在主循环之后实例化控制粒子的类吗?
  • 我如何管理粒子在擦除他被绘制的位置时绘制自己?

该程序基于此代码

0 投票
1 回答
1357 浏览

netlogo - 有没有更好的方法在每个刻度上访问 patch 和 turtle 的变量?

我需要在每个刻度上更新每个海龟的财富变量,调用次数在我的分析器列表的顶部。

我确信最多的计算时间用于计算有多少其他代理在他们的家中使用相同的补丁并计算每只海龟的份额。food_carrying 和 my-home 是 turtle 的属性, Storage 是 patch 属性。

你能想出更好的方法吗?

0 投票
1 回答
71 浏览

simulation - 这是一种可接受的行人运动算法,在通往目标的路径上搜索并与“伙伴”混合吗?

我先把我的伪代码放在这里,请根据现实世界的行人运动建议它的有效性,以及如何改进它。

前提:一只乌龟从它的出生点走到目标。在途中,它遇到了其他乌龟。相同颜色的海龟将被视为“伙伴”,并会靠近它,模拟“朋友-走在街上”的场景。距离较近的同色海龟优先级较高,例如朋友 A 比朋友 B 更近,所以我会先接近朋友 A。

接近目标后,海龟会返回其生成点。

伪代码:

请建议改进​​?

0 投票
2 回答
757 浏览

c# - .NET 多代理模拟的插件架构(运行时加载/卸载)

描述

我目前正在为 C# 多代理模拟设计一个架构,其中代理动作由其“大脑”中的许多模块驱动,这些模块可以读取传感器、投票支持动作或向其他模块发送消息/查询(所有这些都是通过消息交换)。当然,模块可以有状态。

模块并行运行:它们有一个更新方法,该方法使用消息和查询,并执行某种计算。update 方法返回迭代器,并且在它们的主体中有多个 yield,这样我就可以协同调度模块。我不会为每个模块使用单个线程,因为我希望每个代理都有数百到数千个模块,这将导致线程开销占用大量 RAM。

我希望这些模块的行为类似于运行时插件,以便在模拟运行时我可以添加新模块类并重写/调试现有模块类,而无需停止模拟过程,然后使用这些类从代理的大脑,或者只是让现有模块由于其方法的新实现而改变其行为。

可能的解决方案

在过去的几天里,我想出了一些可能的解决方案,但都有一些令人失望的地方:

  1. 将我的模块编译成 DLL,将每个模块加载到不同的AppDomain 中,然后使用 AppDomain.CreateInstanceFromAndUnwrap() 来实例化模块,然后我会将其转换为某个 IModule 接口,在我的模拟和模块之间共享(并由每个模块类实现) . 该接口将只公开所有模块共有的 SendMessage、Update 和一些其他成员。

    • 此解决方案的问题是 AppDomain 之间的调用比直接调用(在同一个 AppDomain 内)慢得多。
    • 另外,我不知道 AppDomains 的开销,但我想它们不是免费的,所以拥有数千可能会成为问题。
  2. 为模块使用一些脚本语言,同时为底层引擎保留 C#,这样就不会加载/卸载程序集。相反,我将为每个模块的脚本语言托管一个执行上下文。

    • 我主要担心的是我不知道一种的脚本语言(如“python、lua、ruby、js 很大,Autoit 和 Euphoria 不是”)快速可嵌入到 .NET并允许逐步执行(其中我需要为了执行模块执行的协作调度)。
    • 对此的另一个担忧是,我想我必须为每个模块使用运行时上下文,这反过来会产生巨大的开销。
    • 最后,我认为脚本语言可能会比 C# 慢,这会降低性能。
  3. 避免卸载程序集,而是以某种方式重命名/版本化它们,这样我就可以拥有大量不同的版本,然后为每种类型使用最新的版本。

    • 我什至不确定这是可能的(由于共同的类型和命名空间)
    • 即使可能,它的内存效率也会非常低。
  4. 透明地重新启动模拟,这意味着暂停模拟(以及执行大脑/模块的调度程序),序列化所有内容(包括每个模块),退出模拟,重新编译代码,再次启动模拟,反序列化所有内容,捕获由于我对类所做的更改和恢复执行而引发的任何异常。

    • 这是很多工作,所以我认为这是我最后的手段。
    • 此外,整个过程在某些时候会非常缓慢,具体取决于模块的数量及其大小,因此不切实际

我可以克服最后一个问题(解决方案 4 中的整个过程变得缓慢),方法是混合解决方案 3 和 4,加载许多带有某种形式的版本控制的程序集,并不时执行重新启动以清理混乱。然而,我更喜欢不会仅仅因为我在模块类中做了一个小改动而中断整个模拟的东西。

实际问题

所以这是我的问题:还有其他解决方案吗?我是否错过了针对我发现的问题的任何解决方法?例如,是否有一些 .NET 脚本语言可以满足我的需求(解决方案 #2)?版本控制是否可能,以我模糊描述的方式(解决方案#3)?

甚至,更简单地说:.NET 是这个项目的错误平台吗?(我想坚持使用它,因为 C# 是我的主要语言,但如果需要,我可以看到自己在 Python 或类似的东西中这样做)

0 投票
1 回答
86 浏览

simulation - 将乌龟分配给乌龟自己的变量时出错

我有一只海龟,其视锥被定义为 5, 120。现在,我希望海龟将最近的海龟与它的朋友颜色相同。我的代码返回错误

这是我的代码

错误显示在

在第三行。这里有什么问题?

0 投票
1 回答
1206 浏览

java - AKKA vs JADE 代表代理系统

我正在开展一个项目,在该项目中,我将交通信号控制器表示为(主)代理,并且它们相互通信。我打算为此使用 JADE,但后来我遇到了 AKKA。现在我有点困惑,因为我读到的关于 AKKA 的内容表明有 1 个主人,主人首先创建工人;对吗?如果是这样,我该如何实现(所有主)代理表示?

0 投票
2 回答
768 浏览

java - 就多代理开发而言,纯 Java 与 JADE 框架

如果任务是构建多代理系统(例如,基准图书拍卖系统),则有两种选择:

  • 使用纯 Java 构建它,其中每个代理都是一个线程 + 使用原生 Java 功能
  • 使用 JADE Java 框架。

使用这些方法的优点和/或缺点是什么?

0 投票
2 回答
393 浏览

java - JADE_mulli代理系统

我无法在用 Java 实现的 JADE 中部署代理,还有其他选择吗?