如何出于测试目的删除 Repast Simphony 中的随机化?

How to remove randomization in Repast Simphony for testing purposes?

我想从我的 Repast 模型中删除所有随机化,以便我可以自信地重构功能不变。但是,我无法通过在 myBuilder.build() 顶部使用 RandomHelper.setSeed(1) 设置种子并确保我的 'Default Random Seed' 参数种子在初始化时的 GUI。

因此,我尝试从示例 JZombies 模型中删除随机化,但遇到了同样的问题。同样,我在 JZombiesBuilder.build() 的顶部设置 RandomHelper.setSeed(1),并确保默认随机种子设置为 1。有时输出相同,有时不同。

在这两种情况下,我都使用 Text Sink 来记录固定数量的总代理计数和总代理属性作为我的数据。我发现使用 Windows 的 FCFCIV.

的输出文件存在差异

我需要进行哪些更改才能确保确定性行为?

编辑:

我通过将 RandomHelper.setSeed(1); 放在每个 class 构造函数的顶部,在 JZombies 演示模型中获得了确定性行为。在我的实际模型中做同样的事情使得第一步始终相同。与第二个刻度仍然存在差异。我认为问题是随机调度,现在?

您不必两次设置随机种子,所以我将从删除构建器(和其他地方)中的 RandomHelper.setSeed(1) 调用开始。 您提到的 GUI 随机种子是通过 JZombies_Demo.rs/parameters.xml 文件设置的。

关于你的实际问题。如果您对代码中的所有随机元素使用 RandomHelper 调用,您应该会看到可重现的结果。如果不是,这可能表明存在一些不明原因的随机性,例如,使用非 RandomHelper 调用或类似遍历 HashMap 的东西。例如,当您在 DefaultContext 上使用 for 循环进行迭代时,迭代发生在 HashSet 上,但是当使用 Context.getObjects() 方法时,内部迭代在 LinkedHashMap 上进行,因此可重复性得到保证。