0

Scipy 的差分进化实现(https://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.differential_evolution.html)使用拉丁超立方体或随机方法进行种群初始化。拉丁超立方体采样试图最大化可用参数空间的覆盖范围。'random' 随机初始化总体。我想知道是否可以为每个参数指定起始值,而不是依赖这些默认算法。

对于复杂的模型(特别是那些在数学上难以处理并因此需要模拟的模型),我观察到 scipy 的差分进化的 2 次独立运行可能会在算法的 X 次迭代后给出不同的结果(我通常设置 X = 100 以避免运行数天的算法)。我认为这是因为(1)两次独立运行之间的总体初始化并不相同(因为总体初始化方法“随机”和“超立方体”的随机性)和(2)模型预测中存在噪声。因此,我正在考虑以 100 次迭代运行约 10 次独立的 DE 运行,在 10 次运行中选取最合适的参数集,并将该参数集用作具有更多迭代(例如 200)的最终运行的起始值。问题是我看不到在 scipy 的 DE 实现中手动输入这些起始值的方法。如果社区中有人可以帮助我,我将不胜感激。

4

1 回答 1

0

自 SciPy 1.1 版以来,这确实是可能的(请注意,您指的是过时的 0.17.0 文档)。特别是,最近的版本允许您指定任何数组,而不仅仅是'hypercube'or 'random'。从文档中,可能的值为init

指定初始种群的数组。数组应该有 shape (M, len(x)),其中len(x)是参数的数量。init在使用前被剪裁到边界。

https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.differential_evolution.html

如果由于某种原因,您被迫使用旧版本,仍然可以通过使用底层来获得您想要的东西DifferentialEvolutionSolver。在那里,您可以修改其中一个初始化函数,或者只运行它们并手动覆盖population初始化后的属性。

于 2019-08-18T19:23:47.773 回答