【发布时间】:2020-04-14 06:30:16
【问题描述】:
我运行一个模拟,其中我有一个代理类型,但它们的大小是 100。代理有一个参数,比如颜色,它在模拟中会发生变化。我想在运行后查看每个代理的颜色。
我在文档site 上看到我可以使用图表或检查窗口。但是,此选项似乎适用于单个系统变量/参数。我想查看每个代理颜色的值,即 100 个参数的列表。我也会很感激了解参数值的历史变化。我怎样才能做到这一点?
【问题讨论】:
标签: simulation anylogic
我运行一个模拟,其中我有一个代理类型,但它们的大小是 100。代理有一个参数,比如颜色,它在模拟中会发生变化。我想在运行后查看每个代理的颜色。
我在文档site 上看到我可以使用图表或检查窗口。但是,此选项似乎适用于单个系统变量/参数。我想查看每个代理颜色的值,即 100 个参数的列表。我也会很感激了解参数值的历史变化。我怎样才能做到这一点?
【问题讨论】:
标签: simulation anylogic
这是一个比较笼统的问题;有很多方法可以做到这一点,具体取决于您想要什么(确切的细节也将特定于您如何编码/确定模型中的颜色)。作为一些通用指针
如果您希望每个代理有单独的值,您可以创建具有动态数据条目数量的图表(如 Sahar 的回答)或使用复制的文本对象(具有动态内容)来生成表格 --- 请参阅 AnyLogic 帮助 > 2D 和 3D 动画 > 形状复制 帮助主题。
如果您想要总数(比如每种颜色的代理数量),您可以将统计数据添加到代理群体并查询图表(或一组文本对象)---请参阅 AnyLogic 帮助 > 基于代理的建模 > 在"AnyLogic 7 in 3 Days" free textbook 中收集代理的统计数据 帮助主题或市场模型的第 3 阶段(第 54 页)。
如果您想要上述内容,但又不想硬编码颜色集(根据每种颜色的统计信息),您可以执行以下操作:
Color(作为参数)并在种群中循环,返回该颜色的代理数量;如果您想拥有纵向数据(在模拟时间内),请使用 数据集 来存储时间序列数据(也可以使用图表绘制)--- 请参阅AnyLogic 帮助 > 收集输出数据 > 数据集 帮助主题。如果您需要动态确定所需数据集的数量,您可以动态创建数据集(在 Java 级别)。
【讨论】:
可以有很多创造性的方法来可视化最终结果,这里有一种:
将 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 类型变量,并在您更改值时将其添加到列表中。我现在想不出更好的方法,也许有人会回答更有效的方法:)
【讨论】: