问题标签 [agent-based-modeling]

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 回答
2732 浏览

social-networking - Creating a social network of linked NetLogo agents of different breeds

I'm trying to put together a "social network" of sorts in NetLogo. A group of people of different age groups who are connected by links.

I'm having trouble with how to put it together because I'm still not fully familiar with some parts of NetLogo's syntax. I only started using breeds in my code in the last week and I haven't fully worked them out yet. Or I'm over complicating them, I'm not sure.

The relevant code is below with the function in question being the "create-network" one. I need to ask each agent (there will be about 800 in total) to connect to a certain amount of each type of other agent (so long as that other agent isn't full up). If the turtle is of the breed toddler for example it will have 10 links in total, 5 of which are to other toddlers, 2 to children, 2 to adults and 1 to over45s. If the first node is a toddler and it connects to an adult, I will need to decrement the number of toddlers that the adult node will try to connect to when I get to it too, if that makes sense.

I can't work out how to ask the current turtle what breed it is, so that I can link to the right amount of the right breeds. If anyone could help me out I'd be insanely grateful. This is only a small section of the code but its been driving me crazy for days now

Every time I try something it results in errors and I'm all out of ideas and the will to live. Thanks so much in advance for your time. Even if you have any thoughts on a better algorithm but not code it would be very welcome too

I'm also wondering whether it would be possible have a function to "pause" the links between agents. For example to turn off a number of or all of the links between children. I know that links have a tie-mode attribute but I'm not sure that this is able to do this. From what I read it seems to be more about holding moving agents together? Could I use untie as a way to turn off the link but to have a it still present?

Edit: Hide link may be more appropriate. How to hide the right links is the next thing

0 投票
1 回答
1530 浏览

social-networking - 有效地停用社交网络中特定代理和品种之间的特定链接

在 NetLogo 中建立了一个不同年龄代理的社交网络,类似如下,从而形成一个由链接连接的代理圈。这些链接的总体目的是代表这些链接之间的联系。该模型模拟了感染通过网络的传播。代理开始时是易感的,如果他们与传染性链接邻居接触,就有可能被感染。例如,我想模拟受感染个体的隔离或隔离。即他们与其他人的链接将被完全停用,或者至少他们的大部分链接将被停用。理想情况下,我会按下观察者界面上的按钮来停用受感染代理的链接。我' d 还希望能够模拟关闭学校,例如,大多数幼儿和儿童以及他们之间的联系将被停用,从而阻止儿童之间的感染能力。如果它们数量较少,它们与成年人的联系可能应该保持开放,尽管现在一次只关注一个品种之间的联系可能会更好。

正如您所看到的,这里有两个问题,一个是根据终端节点所处的状态或品种来停用链接(理想情况下,一旦学校停课结束或一旦受感染的个体恢复,它们可以再次打开)他们是。

第二个问题是计算受感染链接邻居的数量,而不包括停用的链接。隐藏链接并不能阻止它的存在,它只是变得不可见,因此不会停止联系。我还考虑过简单地将停用链接的颜色更改为例如黑色。有没有一种方法可以重写受感染邻居的计数以仅计算非黑色或隐藏的链接,例如set num-infected-neighbors count (link-neighbors with [infected? = true]......并且链接隐藏?= false .... 或链接颜色“!=”黑色?)

我觉得第二个问题可能是两者中较容易的一个,但我可能弄错了。在这个阶段我遇到了太多的砖墙,我的头被这件事炒了。任何帮助将不胜感激。感谢您花时间阅读本文,我意识到这有点咆哮 :) 再次感谢 Nicolas Payette 之前的帮助

编辑:为关闭添加了链接自己的布尔值?

试图更改计算打开链接上受感染邻居数量的部分,但出现错误 this code can't be run by a link error while link 14 15 running SET called by procedure SPREAD called by Button 'Spread'

还在“关闭学校”中添加了一个功能,该功能通过设置关闭来提供所有幼儿链接的非常基本的关闭?为真

编辑:这会是一个可能的解决方案吗

编辑:据我所知,num-infected-neighbors 应该是一个turtles-own变量,但是当我将手表放在乌龟身上并运行模拟时,乌龟的 num-infected-neighbors 似乎一直超过实际数量乌龟拥有的链接邻居。这也是错误的。虽然我不明白为什么....

编辑:

似乎也不能正常工作......

编辑:供将来参考问题已解决 -

首先,由未关闭链接上的链接邻居组成一个列表,然后对其进行过滤以仅提供受感染的链接。num-infected-neighbors 是该列表的长度

0 投票
1 回答
164 浏览

agent-based-modeling - 是否可以在网络浏览器中运行 RepastJ 模型

我是基于代理的建模的新手,并且正在运行 RepastJ (Repast 3) 附带的演示模型。是否可以在网络浏览器中运行模拟?提前致谢。

0 投票
1 回答
162 浏览

performance - 在包含时间列表排序的顶部有一个简单的增量时钟程序!优化netlogo代码

在我的模拟中,每个刻度时钟值都应该增加一,在解决了我的其他一些性能问题后,我注意到这个函数位于按包含时间列表排序的顶部(值是960205 ms):

通话 包括 T(ms) 不包括 T(ms) 不包括/通话

40001 960205.451 3586.591 0.090

根据http://ccl.northwestern.edu/netlogo/5.0/docs/profiler.html 包含时间是从进入程序到完成的时间

我认为这应该是直截了当和容易的,

我在这里做错了什么?

我记得我以前用滴答声来增加时钟,我不记得为什么我把它改成我上面提到的那个,但这不应该花这么多时间!(该分析器包含的时间值为 599841.851 毫秒,这表明以下比上述更快:

通话 包括 T(ms) 不包括 T(ms) 不包括/通话

40001 599841.851 2943.394 0.074

谢谢。马齐

0 投票
1 回答
203 浏览

performance - 在 Netlogo 中使用全局表而不是定向链接来提高性能是个好主意吗?(答案是否定的)

我有一个模型适用于少于 100 个代理(20 * 20 个世界大小),但我现在的模型要求之一是针对不同的代理组测试我的模型,我需要有超过 100 个代理(和 40 * 40 世界大小)。我尝试单独优化每个功能,但恐怕在不破坏模型要求的情况下我可以改变任何东西。

在当前版本中,我使用链接来跟踪代理关系,并且每个代理可以拥有的链接数量没有限制,因此链接数量增长非常快(超过 2000 个链接),需要更新每个链接的每次交互后的关系值。

关于在我的模型中使用链接的更多细节:

  • 代理之间创建/更新链接的价值和频率,如果他们有社交互动

    如果许多代理观察到该代理的异常社交活动,则许多代理会创建或更新其与该代理的链接值和频率(已定义这些活动的不同组,并且将根据活动类型调用不同的操作)

    代理在同一块中时会观察同位代理链接的值,并据此可能有不同类型的社交互动

    一定年龄范围内的代理会根据他们的链接值和其他标准找到一个伴侣。

也许还有一些我现在不记得了,但是链接的值在每个滴答中被多次调用,代理生命周期为 4000,模拟长度为 40000 个滴答,对于 100 个代理,运行需要 10-15 分钟模拟,但对于 200 个代理,只需要 10 分钟即可完成 2000 个滴答声!

由于我在为更多代理测试我的模型时遇到了一个大问题,我正在考虑消除所有链接,并为每对代理及其关系值和关系频率使用一个全局表,但由于使用链接真的很容易,我想我会有难以设定和获得价值。

有谁知道更好的方法来做到这一点?或者使 netlogo 模型可扩展的方法?

更新: 嗨,我一次又一次地检查我确信我的编程风格让我的程序变慢了,我发现 2 例意外询问其中一个非常愚蠢,因为我将链接设置为不可见,这甚至没有必要!!!每当创建链接时,我就可以设置隐藏链接!不用再问了:D

此外,我已经消除了我使用 ask 或 with for out-link neighbors 、 links 和 out-links 的情况。例如,我替换了一个代码,该代码正在检查以查找与调用者代理有共同关系的任何其他代理,我的初始代码非常慢,我用以下代码替换了它,它工作得更快:

但是仍然有很多情况我需要打电话给其他代理,所以我认为可以让代理询问半径 X 内的其他代理!

最后,现在我的系统在更合理的时间内为 400 个代理和15000-20000个链接运行得更好:)

但我确信仍有改进的地方。感谢赛斯的有用回答:)

0 投票
6 回答
35704 浏览

r - 为整个会话修复 set.seed

我正在使用 R 使用蒙特卡罗过程构建基于代理的模型。这意味着我得到了许多使用某种随机引擎的函数。为了获得可重复的结果,我必须修复种子。但是,据我了解,我必须在每次随机抽取或抽样之前设置种子。这是一个真正的颈部疼痛。有没有办法修复种子?

0 投票
1 回答
116 浏览

r - 基于 R 代理的接近度

我正在尝试使用 R 对代理网格进行建模,这些代理网格会根据直接邻近的其他代理的决定来改变他们的决定。基本上,每个智能体都会在网格上查看他周围的其他智能体,并且可能会根据他周围的动作改变其行为。我在下面包含了一些示例 dinky-toy 代码来显示(一次迭代)这种动态。

我想知道是否

  1. 有一种优雅的方式来处理网格的边界(目前 t+1, i+1 代码在边缘上不起作用),

  2. 或者是否有其他方法使用矩阵的“空间”维度/使用基于图形的方法来模拟这类模型?


0 投票
1 回答
1681 浏览

netlogo - 在 NetLogo 中实现强化学习(多智能体模型中的学习)

我正在考虑在我的模型中为不同类型的代理实施学习策略。老实说,我仍然不知道我应该先问什么样的问题或从哪里开始。

我有两种类型的代理,我希望他们通过经验来学习,他们有一组动作,根据可能发生的特定情况,每个动作都有不同的奖励。我是强化学习方法的新手,因此欢迎任何关于我应该问自己什么样的问题的建议:)

以下是我将如何提出我的问题:

  1. 代理人有一生,他们会跟踪一些对他们来说很重要的事情,这些指标对于不同的代理人来说是不同的,例如,一个代理人想要增加 A 另一个想要 B 超过 A。
  2. 状态是代理人生命周期中的点,他们有多个选择(我对状态没有明确的定义,因为它们可能会发生几次或根本不发生,因为代理人四处走动,他们可能永远不会面临某种情况)
  3. 奖励是代理可以从特定状态下的动作中获得的指标的增加或减少,并且代理不知道如果他选择另一个动作会得到什么收益。
  4. 增益不是恒定的,状态没有很好的定义,也没有一种状态到另一种状态的正式转换,
  5. 例如,代理可以决定与其中一个位于同一地点的代理(操作 1)或与同一位置的所有代理(操作 2)共享 如果某些条件成立,则操作 A 将对该代理更有利,而在其他条件Action 2会有更高的reward;我的问题是我没有看到任何奖励未知的示例,因为在这种情况下共享还取决于其他代理的特征(这会影响奖励系统的条件),并且在不同的状态下会有所不同。

在我的模型中,动作和后续状态之间没有关系,这让我想知道在这种情况下考虑 RL 是否可以。

我希望在这里优化的是我的代理能够以更好的方式推理当前情况,而不仅仅是响应由其内部状态触发的需求。他们有一些性格可以定义他们的长期目标,并可以影响他们在不同情况下的决策,但我希望他们记住在某种情况下采取什么行动帮助他们增加了他们偏爱的长期目标。

0 投票
3 回答
1588 浏览

java - 在 GUI 颜色上显示 2D 数组内容

我正在创建一个基于代理的建模程序。到目前为止,我有相关的类来模拟模拟器、网格、不同的代理等。我还创建了一个 2D 对象数组,例如在数组周围移动的代理做任何事情。

我熟悉创建简单的 GUI,但我如何创建一个窗格\面板,然后将其添加到 GUI 中。它显示了运行时的二维数组,每个对象都有相应的颜色。另外我想尝试使用 MVC 模式来基本上以不同的方式显示模拟数据。例如,一个窗格显示不同的对象颜色,另一个窗格显示相同的对象,但每个对象的愤怒级别都具有不同的红色深浅。任何指南都会对类似的教程很有帮助。

谢谢

0 投票
0 回答
39 浏览

java - 根据集合中的更改更新 JPanel Canvass

我有一组代理(对象),当模拟器开始时,每个代理执行一个 act() 方法来更新它们在环境中的位置(二维数组)。我的 paintComponent(Graphics g) 在不同的类中被覆盖(它基本上遍历 2D 数组并绘制与代理类型相对应的矩形颜色)。

但实际的集合是在模拟器类中,由用户单击 GUI 中的按钮独立运行。如果我将 repaint() 方法放在paintComponent(Graphics g) 的末尾。它只更新 JPanel 画布两次,一次是在应用程序启动时,第二次是在我单击开始模拟的运行按钮时。

当所有代理执行 act 方法时,如何使用新图像自动更新 JPanel 画布。或者,当集合中发生更改时,代理会在画布上绘制新位置并删除旧位置?