正如标题所说,我正在使用 Python mystic 包中实现的差分进化算法来解决 O(10) 参数的全局优化问题,具有边界和约束。
我正在使用简单的界面diffev
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 算法的其他重要参数是默认参数。
有没有人有一些关于用神秘调整差分进化的建议?有没有办法避免结果中的这种差异?我知道这是一个随机算法,但我没想到它在 gtol 为 3500 上运行时会给出不同的结果。我的理解也是这个算法不会陷入局部最小值,但我可能错了。
ps
这与问题无关,只是为了说明为什么这对我很重要。
我的工作需要做的是在上述条件下,针对几个输入数据最小化一个函数:我在 O(10) 参数上针对每个数据配置进行优化,然后带有一些参数的配置给出整体最小值是被选中的人。
现在,如果优化器不稳定,它可能会偶然给我错误的数据配置作为最佳配置,因为我运行了数百个。