【问题标题】:Parameter Variation: Fixed, but different seeds for runs参数变化:固定,但运行的种子不同
【发布时间】:2020-08-27 10:01:31
【问题描述】:

所以我用许多概率参数进行了参数变化实验。我使用随机种子,这会产生各种不同的结果,这基本上是我想要的。在我的案例中,一项实验包含 200 次运行。

但是,在随机建模中使用相同的种子进行相同的运行是一种很好的做法,即当我运行两个实验,每次运行 200 次时,我希望每个实验的第一次运行使用相同的种子,第二次运行使用相同的种子(但与第一次运行不同)运行每个实验,第三次......等等直到 200。这意味着我可以将两个实验相互比较,因为它们使用了相同的种子。

我怎样才能做到这一点是 Anylogic?当我使用随机种子选项时,每次运行都会得到不同的种子。当我使用固定种子时,每次都会得到相同的结果,因为从概率参数中选择的值总是相同的。 这可以通过在参数变化实验的“随机性”属性中使用“自定义生成器”来实现吗?或者这可以与复制选项一起使用吗?

非常感谢,如果您需要更多详细信息,请告诉我。

【问题讨论】:

    标签: anylogic seed


    【解决方案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】:

    【讨论】:

    • 谢谢,我以前看过那些,但找不到解决问题的方法...
    猜你喜欢
    • 2015-02-19
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2013-06-12
    相关资源
    最近更新 更多