我正在使用优化函数scipy.optimize.minimize.最小化用鲍威尔算法。有一个名为maxfev的选项来设置最大的函数求值。然而,它似乎并不总是有效的。算法超过了函数求值的极限。代码如下:
def func_eval(x):
import math as math
funcval=0
dimension=len(x)
tmp=0
tmp2=0
for i in range(dimension):
tmp +=x[i]
for i in range(dimension):
tmp2=(tmp-x[i])*x[i]
funcval += dimension*(math.pow(x[i],2)+0.4*tmp2)
return funcval
from scipy.optimize import minimize
x=[-11.04021,-92.72567,28.60728,68.65449,66.41443,-25.59824,73.97660,-69.85293,1.10955,17.56914]
res=minimize(func_eval,x,method='Powell',options={'maxfev':220})
print(res.fun)
print(res.nfev)
第二个选项的输出,即函数求值的数量是298,而不是220。我的代码可能出了什么问题,或者是算法本身的问题?在
每次迭代需要对函数进行multiple times求值。出于某种原因(我想是性能或其他实现细节),只检查了once per iteration。这就是为什么可以超过最高评价。在
计算计数超出最大值的程度取决于
x
的维数,也取决于函数和数据。不幸的是,没有简单的方法来估计超调量,但在大多数情况下这应该不是问题。在相关问题 更多 >
编程相关推荐