首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >差分进化算法不同运行的不同结果

差分进化算法不同运行的不同结果
EN

Stack Overflow用户
提问于 2021-03-24 07:27:54
回答 1查看 104关注 0票数 1

正如标题所说,我正在使用Python mystic包中实现的差分进化算法来解决O(10)参数的全局优化问题,并有界限和约束。

我使用的是简单的接口diffev

代码语言:javascript
运行
复制
result = my.diffev(func, x0, npop = 10*len(list(bnds)), bounds = bnds, 
        ftol = 1e-11, gtol = gtol, maxiter = 1024**3, maxfun = 1024**3, 
        constraints = constraint_eq, penalty = penalty, 
        full_output=True, itermon=mon, scale =  scale) 

我多次尝试运行相同的优化:给定差分进化算法的缩放比例,我将优化问题运行10倍。

结果呢?几乎所有的结果我都得到了不同的答案!

我尝试了0.7、0.75、0.8和0.85的缩放比例,所有这些都是大致相同的不良行为(如神秘页面所示)。

这里有一个例子:在x轴上有参数,在y轴上有它们的值。标签表示迭代。理想情况下,您只希望看到一行。

我使用gtol = 3500运行,所以它应该相当长。我使用npop = 10*number pars,ftol = 1e-11,diffev算法的其他重要参数是默认参数。

有没有人有什么建议可以用神秘主义来调整差异进化?有没有办法避免结果中的这种差异?我知道这是一个随机算法,但我没想到它在3500的gtol上运行时会给出不同的结果。我的理解也是这个算法不会陷入局部极小值,但我可能错了。

附注:

这与问题无关,但只是给出一些背景,为什么这对我很重要。

我的工作需要做的是在上面的条件下最小化几个输入数据的函数:我对O(10)参数上的每个数据配置进行优化,然后带有一些参数的配置就是“选择的”配置。

现在,如果优化器不稳定,它可能会给我错误的数据配置作为最佳数据配置,因为我运行了数百个数据配置。

EN

回答 1

Stack Overflow用户

发布于 2021-03-24 20:20:22

我是mystic的作者。正如您所说的,差分进化(DE)是一种随机算法。本质上,DE使用当前解决方案向量上的随机突变来提出新的候选解决方案。因此,在许多情况下,特别是当函数是非线性函数时,您可以期望在不同的运行中得到不同的结果。

理论上,如果你让它永远运行,它会找到全局最小值。然而,我们大多数人都不想等那么久。因此,有像gtol (change over generations)这样的终止条件,它设置了没有改进的迭代次数的截止值。还有一些求解器参数会影响变异的生成方式,如crossscalestrategy。本质上,如果您在不同的运行中得到了不同的结果,这意味着您还没有针对特定的成本函数调优优化器,应该尝试使用这些设置。

重要的是npopgtol之间的平衡,这也是我经常首先考虑的。通常,你想要增加候选者的数量,直到它饱和(即没有效果)或变得太慢。

如果您有其他可以约束问题的信息,这通常会有所帮助(例如,使用constraintspenalty来限制您的搜索空间)。

我还使用mystic的可视化工具来尝试了解响应面是什么样子的(例如,日志数据的可视化和插值)。

简短的答案是,在算法中包含随机性的任何求解器通常都需要进行调整,才能获得一致的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66772704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档