AnyLogic:模拟完成后查看各个agent的参数
AnyLogic: view parameter of each agent after simulation is completed
我 运行 一个模拟,其中我有一种代理类型,但它们到达的大小是 100。代理有一个参数,比如颜色,它会在模拟中发生变化。我想在 运行 之后查看每个代理的颜色。
我在文档 site 上看到我可以使用图表或检查 window。但是,此选项似乎适用于单个系统 variable/parameter。我想查看每个代理颜色的值,即 100 个参数的列表。我还将感谢了解参数值的历史变化。我该怎么做?
可以有很多创造性的方式来可视化最终结果,这里是一个:
将图表元素拖到 canvas 并删除其中的默认数据项。使用此代码创建函数:
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);
}
在实验的 "After simulation run" 框上调用此函数。此代码将在您的图表上绘制如下内容:
MyAgent 代理有一个名为 color 的参数,该参数在启动时设置为 randomColor()。
要存储代理拥有的所有颜色,您可以在代理中创建一个 ArrayList 类型变量,并在您更改值时将其添加到列表中。我现在想不出更好的方法,也许有人会回答更有效的方法:)
这是一个比较笼统的问题;有很多方法可以做到这一点,具体取决于您想要什么(确切的细节也将特定于您如何 coded/determined 模型中的颜色)。作为一些通用的指针
如果您希望每个代理都有单独的值,您可以使用动态数量的数据条目创建图表(如 Sahar 的回答)或使用复制的文本对象(具有动态内容)来生成表格—— - 请参阅 AnyLogic 帮助 > 2D 和 3D 动画 > 形状复制 帮助主题。
如果你想要总数(比如每种颜色的代理人数量),你可以将 statistics 添加到代理人总体并查询图表(或设置文本对象)---参见 AnyLogic Help > Agent Based Modeling >
在 "AnyLogic 7 in 3 Days" free textbook.
中收集有关代理 帮助主题或市场模型第 3 阶段(第 54 页)的统计信息
如果您想要上述内容,但不想对颜色集进行硬编码(根据每种颜色的统计数据),您可以执行以下操作:
- 编写一个 函数 接受一个
Color
(作为参数)并循环遍历人口,返回该颜色的代理人数量;
- 在某些 系列 中定义颜色集,并根据模型的具体情况动态添加内容;
- 使用图表(具有动态数量的数据条目)或复制的文本/形状对象来显示此信息(即,每个集合条目的条目和通过调用函数获取的值)。
如果要纵向数据(超过模拟时间),使用datasets存储时间序列数据(也可以使用图表绘制)- -- 请参阅 AnyLogic 帮助 > 收集输出数据 > 数据集 帮助主题。如果您需要动态确定所需的数据集数量,您可以动态创建数据集(在 Java 级别)。
我 运行 一个模拟,其中我有一种代理类型,但它们到达的大小是 100。代理有一个参数,比如颜色,它会在模拟中发生变化。我想在 运行 之后查看每个代理的颜色。
我在文档 site 上看到我可以使用图表或检查 window。但是,此选项似乎适用于单个系统 variable/parameter。我想查看每个代理颜色的值,即 100 个参数的列表。我还将感谢了解参数值的历史变化。我该怎么做?
可以有很多创造性的方式来可视化最终结果,这里是一个:
将图表元素拖到 canvas 并删除其中的默认数据项。使用此代码创建函数:
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);
}
在实验的 "After simulation run" 框上调用此函数。此代码将在您的图表上绘制如下内容:
要存储代理拥有的所有颜色,您可以在代理中创建一个 ArrayList 类型变量,并在您更改值时将其添加到列表中。我现在想不出更好的方法,也许有人会回答更有效的方法:)
这是一个比较笼统的问题;有很多方法可以做到这一点,具体取决于您想要什么(确切的细节也将特定于您如何 coded/determined 模型中的颜色)。作为一些通用的指针
如果您希望每个代理都有单独的值,您可以使用动态数量的数据条目创建图表(如 Sahar 的回答)或使用复制的文本对象(具有动态内容)来生成表格—— - 请参阅 AnyLogic 帮助 > 2D 和 3D 动画 > 形状复制 帮助主题。
如果你想要总数(比如每种颜色的代理人数量),你可以将 statistics 添加到代理人总体并查询图表(或设置文本对象)---参见 AnyLogic Help > Agent Based Modeling > 在 "AnyLogic 7 in 3 Days" free textbook.
中收集有关代理 帮助主题或市场模型第 3 阶段(第 54 页)的统计信息
如果您想要上述内容,但不想对颜色集进行硬编码(根据每种颜色的统计数据),您可以执行以下操作:
- 编写一个 函数 接受一个
Color
(作为参数)并循环遍历人口,返回该颜色的代理人数量; - 在某些 系列 中定义颜色集,并根据模型的具体情况动态添加内容;
- 使用图表(具有动态数量的数据条目)或复制的文本/形状对象来显示此信息(即,每个集合条目的条目和通过调用函数获取的值)。
- 编写一个 函数 接受一个
如果要纵向数据(超过模拟时间),使用datasets存储时间序列数据(也可以使用图表绘制)- -- 请参阅 AnyLogic 帮助 > 收集输出数据 > 数据集 帮助主题。如果您需要动态确定所需的数据集数量,您可以动态创建数据集(在 Java 级别)。