如何在 Anylogic 中使用 LinkedHashMaps

How to use LinkedHashMaps in Anylogic

我想要累计进入 Sink 的母猪数量(deadSowsCulledSows 和 sowDeaths)在过去 52 周内。我为每周母猪创建了变量 使用循环事件在这些汇点位置死亡。我希望在模拟的每一周都计算这个累积数。例如,在第 10 周——我想要累积 第 1 至 10 周的死亡人数;在第 52 周——我想要第 1 周的累计数字 到 52,对于第 53 周——我想在第 2 周和第 53 周之间有一个累计数, 等等。

有人建议我使用LinkedHashMap,我同意,但我不知道从哪里开始设置?我想使用周作为价值,每周死亡作为关键。在哪里插入代码以将值放入 LinkedHashMap?

我觉得我缺少实现此目标的组件。

听起来你想要过去 52 周的 window 移动。

这里有几个选项,但我建议您使用的最简单的选项是使用 AnyLogic DataSet 对象,因为它已经具有您需要的“保持最大样本数”功能.

  1. 设置一个数据集,将最大样本数设置为 52,不要自动更新,也不要将时间用作 x-axis,因为我们将自行设置。

  1. 在接收器块中增加每周变量。 (我假设你已经在做)

  1. 创建一个 HashMap。我建议您使用星期作为键,使用死亡人数作为值(您在问题中采用了相反的方式)

  1. 然后你有一些事件将每周的值总和保存到数据集中,将变量重置为 0。

然后获取数据集的总和,保存到LinkedHasMap中。

您每周活动的代码如下

weekCounter ++;
deaths.add(weekCounter, weeklyDeaths);
weeklyDeaths = 0;
int tempSum = 0;
for (int i = 0; i < deaths.size(); i ++) {
    tempSum += deaths.getY(i);
}
mapOfDeathsPerWeek.put(weekCounter, tempSum);

其中 weekCounter 只是我创建的另一个变量,我可以每周增加它以跟踪周数。