【问题标题】:AnyLogic: view parameter of each agent after simulation is completedAnyLogic:模拟完成后查看各个agent的参数
【发布时间】:2020-04-14 06:30:16
【问题描述】:

我运行一个模拟,其中我有一个代理类型,但它们的大小是 100。代理有一个参数,比如颜色,它在模拟中会发生变化。我想在运行后查看每个代理的颜色。

我在文档site 上看到我可以使用图表或检查窗口。但是,此选项似乎适用于单个系统变量/参数。我想查看每个代理颜色的值,即 100 个参数的列表。我也会很感激了解参数值的历史变化。我怎样才能做到这一点?

【问题讨论】:

    标签: simulation anylogic


    【解决方案1】:

    这是一个比较笼统的问题;有很多方法可以做到这一点,具体取决于您想要什么(确切的细节也将特定于您如何编码/确定模型中的颜色)。作为一些通用指针

    • 如果您希望每个代理有单独的值,您可以创建具有动态数据条目数量的图表(如 Sahar 的回答)或使用复制的文本对象(具有动态内容)来生成表格 --- 请参阅 AnyLogic 帮助 > 2D 和 3D 动画 > 形状复制 帮助主题。

    • 如果您想要总数(比如每种颜色的代理数量),您可以将统计数据添加到代理群体并查询图表(或一组文本对象)---请参阅 AnyLogic 帮助 > 基于代理的建模 > 在"AnyLogic 7 in 3 Days" free textbook 中收集代理的统计数据 帮助主题或市场模型的第 3 阶段(第 54 页)。

    • 如果您想要上述内容,但又不想硬编码颜色集(根据每种颜色的统计信息),您可以执行以下操作:

      • 编写一个函数,该函数接受Color(作为参数)并在种群中循环,返回该颜色的代理数量;
      • 在某些集合中定义颜色集,并根据模型的具体情况动态添加内容;
      • 使用图表(具有动态数据条目数)或复制的文本/形状对象来显示此信息(即,每个集合条目的条目和调用函数获取的值)。
    • 如果您想拥有纵向数据(在模拟时间内),请使用 数据集 来存储时间序列数据(也可以使用图表绘制)--- 请参阅AnyLogic 帮助 > 收集输出数据 > 数据集 帮助主题。如果您需要动态确定所需数据集的数量,您可以动态创建数据集(在 Java 级别)。

    【讨论】:

      【解决方案2】:

      可以有很多创造性的方法来可视化最终结果,这里有一种:

      将 Chart 元素拖到画布上并删除其中的默认数据项。使用此代码创建一个函数:

      for(MyAgent myAgent : myAgents){
          DataItem di = new DataItem();
          //set the height of the bars
          di.setValue(5);
          chart.addDataItem(di, "MyAgent " + myAgent.getIndex(), myAgent.color);
      }
      

      在实验的“模拟运行后”框中调用此函数。此代码将在您的图表上绘制类似这样的内容:

      MyAgent 代理有一个名为 color 的参数,该参数在启动时设置为 randomColor()。

      要存储代理拥有的所有颜色,您可以在代理中创建一个 ArrayList 类型变量,并在您更改值时将其添加到列表中。我现在想不出更好的方法,也许有人会回答更有效的方法:)

      【讨论】:

      • 感谢您的回答! “颜色”实际上是一个整数,(但您的示例看起来非常好),所以我正在寻找一些东西来一一写下参数值。我认为您的提示也可以让我找到它!
      猜你喜欢
      • 2021-10-24
      • 2016-10-19
      • 2018-09-19
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 2017-04-22
      • 2018-09-04
      相关资源
      最近更新 更多