2

我有一个叫卡车的代理,它将执行一些操作(例如装载包裹)。这里的问题与执行动作的代理的随机序列有关。例如,假设我有三辆卡车,每次不同的运行时装载顺序都是随机的。

Run-1: truck-1, truck-3, truck-2
Run-2: truck-2, truck-1, truck-3
Run-3: truck-3, truck-1, truck-2
...

如何确保代理(卡车)基于序列执行动作,例如通过它们的 id,以便我们始终可以从模拟中获得一致的结果。

Run-1: truck-1, truck-2, truck-3
Run-2: truck-1, truck-2, truck-3
Run-3: truck-1, truck-2, truck-3
...
4

1 回答 1

3

至少有 3 种方法可以做到这一点。

  1. 如果您设置随机种子,卡车的顺序在运行中应该是相同的,所有其他条件都相同。它很可能不会按 id 排序,但应该是相同的。

  2. 创建时将所有卡车添加到 ArrayList。按 id 对该列表进行排序,模拟的每个刻度都遍历该列表,在每辆卡车上执行卡车动作。一个快速的谷歌应该向您展示如何使用比较器订购 Java 列表。

  3. 调整调度以反映卡车 id - 例如,卡车 1 在 1.0 执行,之后的每个滴答,卡车 2 在 1.1 和之后的每个滴答,卡车 3 在 1.2,等等。

  4. 3 的一种变体。通过 id 设置调度优先级——所有卡车都可以在 1.0 和之后的每个滴答中执行,但卡车 1 具有最高优先级,卡车 2 次之,依此类推。

作为旁注,计划中项目的随机迭代是默认设置,以防止常见的 ABM 行为执行排序问题,例如先发优势。

于 2020-02-10T14:10:08.957 回答