我正在尝试使用scipy.optimize.differential_evolution优化具有 10 个变量的标量函数。
标量值实际上是由模拟软件计算的,每次迭代大约需要 7 秒。问题是,即使我将 popsize 设置为 10,算法也需要 >1000 次迭代,这会导致计算时间非常长。
10 个变量是 5 个角度和 5 个长度:
phi_1 to phi_5 (0 to 360 degress)
l_1 to l_5 (0 to 20 micrometer)
在每次迭代中,值 (X_1, X_2, X_3, X_4, X_5, Y_1, Y_2, Y_3, Y_4, Y_5) 由下式计算
X = l*sin(phi) and Y = l*cos(phi)
仿真软件根据这些输入计算一个标量。
我试图将 popsize 减少到 3-5,但结果不是全局最优值。我之前也尝试过不同的策略,例如“rand1exp”和“best1exp”以及基于梯度的算法(SLSQP),但问题是由于正弦和余弦函数,起点至关重要,这会导致许多不同的(局部)结果。我相信 DE 是解决这个问题的最佳算法,但我无法想象它需要 >1000 次迭代来解决“仅”10 个变量的问题。
我这样称呼DE:
sol = differential_evolution(objective, popsize=10, strategy="best1bin", bounds=boundList)
有没有人对 DE 有一些经验并且可以给我一些正确参数的提示?