【问题标题】:AnyLogic Agent-Based simulation agents value transferAnyLogic 基于代理的模拟代理价值转移
【发布时间】:2016-08-17 22:25:14
【问题描述】:

我对 Java 和 AnyLogic 还很陌生,所以请在这方面达到我的水平。

代理有没有办法从另一个代理获取变量值? 在这种情况下,代理将属于同一类型。因此,它们都具有相同的变量,但由于它是具有随机初始值的变量而不是参数,因此值不一样。

代理最初也通过 Small-World 连接进行连接,并且这些连接在运行期间不会更改。

例如,发生在事件中的代理如何从另一个代理收集变量值(例如代理 i 获取代理 j 的变量值 X)。这个值将被放入一个小方程中,以修改代理 i 的变量 X 的值。换句话说,代理 i 会受到他的连接代理 j 的影响,从而改变他的 X 值。

我尝试了.getConnectedAgent().get 的多种组合,但均未成功。我现在正尝试将每个代理的 X 值提取到数据库中,然后使用该数据库通过代理 i 收集代理 j 的 X 值,但我在那里没有取得任何进展。

需要提取的值是doubles,但如果更容易的话,我可以将变量更改为整数。

【问题讨论】:

  • 为了使 Benjamin 的(好的)答案更加明确,如果您想从您连接的第一个代理获取 AnyLogic 变量 x 的值,那么您可以使用 getConnectedAgent(0).x。 (括号中的零告诉 AnyLogic 哪个您要使用连接代理,其中零是第一个。如果您使用小世界网络环境,AnyLogic 已为您设置零个或多个连接,其中在这种情况下,顺序有点无关紧要。)
  • 您还需要测试是否存在 实际上是当前代理的连接,但可能不存在,例如,您将代码放在 @ 987654325@块。

标签: java simulation javaagents agent-based-modeling anylogic


【解决方案1】:

无需将其提取到数据库中。你应该多学习一些面向对象编程的知识,你的问题与 AnyLogic 的关系不大,而与正确使用 Java 的关系更大。

如果您有一组名为“MyAgents”的代理,其中每个代理都有一个带有随机双精度值的变量 var,那么代理 12 可以通过调用 var = get_Main().MyAgents.get(13).var 来获取代理 14 的双精度值。

这里,左侧的var 是调用代理的变量。 get_Main() 在层次结构中将其提升一级以访问其自己的人口和其他代理。然后它访问第 14 个代理(Java 是从零开始的)及其 var 值。

如果您打算使用getConnectedAgent(),则需要先连接代理。如果您使用“Small world”,则可以在某种程度上完成此操作,但通常您希望手动定义连接。查看帮助中的“链接到代理”一文。

干杯

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 2017-03-31
    • 2020-03-08
    • 2022-01-12
    • 1970-01-01
    • 2017-06-20
    • 2023-03-22
    • 2021-07-01
    • 2023-02-10
    相关资源
    最近更新 更多