0

像差分进化这样的全局优化更准确。其中,由于 Cython 性能和批处理模式,PyFDE 是最好的之一。但是像 L_bfgs_B 这样的局部优化要快得多。我想知道是否有混合方法?

PyFDE 示例:

import pyfde
from math import cos, pi

def fitness(p):
    x, y = p[0], p[1]
    val = 20 + (x**2 - 10*cos(2*pi*x)) + (y**2 - 10*cos(2*pi*y))
    return -val
    
solver = pyfde.ClassicDE(fitness, n_dim=2, n_pop=40, limits=(-5.12, 5.12))
solver.cr, solver.f = 0.9, 0.45
best, fit = solver.run()

迭代器模式:

for best, fit in solver(n_it=10):
    # custom logic here, breaking when desired
    if condition:
        break

我有一个不成熟的想法:(1)运行 PyFDE 以获得步骤 2 的可行初始值;(2) 运行 SciPy 的 fmin_l_bfgs_b 得到最终结果。我知道这种混合方法并不完美,可能无法获得全局最小值。我的问题是(1)如何实现这个概念?例如,在 PyFDE 的迭代器模式中,获得步骤 2 的可行初始值的最佳/可能的条件代码是什么?(2) 有没有更好的概念?

任何帮助深表感谢。

4

0 回答 0