参数变化:固定,但运行的种子不同
Posted
技术标签:
【中文标题】参数变化:固定,但运行的种子不同【英文标题】:Parameter Variation: Fixed, but different seeds for runs 【发布时间】:2020-08-27 10:01:31 【问题描述】:所以我用许多概率参数进行了参数变化实验。我使用随机种子,这会产生各种不同的结果,这基本上是我想要的。在我的案例中,一项实验包含 200 次运行。
但是,在随机建模中使用相同的种子进行相同的运行是一种很好的做法,即当我运行两个实验,每次运行 200 次时,我希望每个实验的第一次运行使用相同的种子,第二次运行使用相同的种子(但与第一次运行不同)运行每个实验,第三次......等等直到 200。这意味着我可以将两个实验相互比较,因为它们使用了相同的种子。
我怎样才能做到这一点是 Anylogic?当我使用随机种子选项时,每次运行都会得到不同的种子。当我使用固定种子时,每次都会得到相同的结果,因为从概率参数中选择的值总是相同的。 这可以通过在参数变化实验的“随机性”属性中使用“自定义生成器”来实现吗?或者这可以与复制选项一起使用吗?
非常感谢,如果您需要更多详细信息,请告诉我。
【问题讨论】:
【参考方案1】:在参数变化实验中 --> 'Before simulation run' 下的 Java Actions 你可以为每个复制手动设置种子,
例如root.getDefaultRandomGenerator().setSeed(listOfSeeds.get(getCurrentReplication()));
listOfSeeds 是您的 ParametersVariation 中的一个集合,您可以在界面中或在“初始实验设置”中生成它,该集合存储每次复制的所有种子。
【讨论】:
谢谢,这听起来真的很有用,我理解它背后的原因。但是,我收到“种子”无法解析或不是字段的错误(对于命令root.seed = listOfSeeds.get(getCurrentReplication());
我该怎么办?
哦,真的。我将种子作为变量保存在 main 中,以便稍后在每次运行时查看它。我更正了上面的代码,直接在 ParametersVariation 实验中设置种子。
非常感谢!我在你的代码中用getCurrentIteration
替换了getCurrentReplication
,因为getCurrentReplication
我所有的结果都是一样的(即只有一个种子)。此外,我使用数组变量而不是集合,并使用 variable[getCurrentIteration()] 来检索当前迭代。您认为使用数组变量和getCurrentIteration
可以达到相同的目标吗?非常感谢!! :)
取决于您的实现。数组根本不重要。迭代更棘手。例如,假设您有一个要从 0 变为 1 的参数。比您有 2 次迭代,您将在设置为 0 和设置为 1 上运行不同的种子。复制重复每个设置(例如,100 次)。因此,您进行 200 次模拟运行,0 次运行 100 次,1 次运行 100 次。通常,您希望确保这 100 次运行在两种设置之间是相似的。但是,如果您将复制建模为迭代,您将获得相同的结果。
是的,我明白了。我认为在我的情况下这并不重要,因为我只想确保两个独立的实验使用相同的种子。所以我运行一个实验 200 次,回到 Anylogic,更改一些参数,然后我运行另一个实验 200 次。我认为通过我的实现,我可以确保这两个实验使用相同的种子。【参考方案2】:
这符合您的要求吗?
https://help.anylogic.com/index.jsp?topic=%2Fcom.anylogic.help%2Fhtml%2Fstochastic%2FCustom_RNG.html
...或随机建模下的任何其他条目
https://help.anylogic.com/index.jsp?nav=%2F0_17
【讨论】:
谢谢,我以前看过那些,但找不到解决问题的方法...以上是关于参数变化:固定,但运行的种子不同的主要内容,如果未能解决你的问题,请参考以下文章