scipy.optimize.minimize.最小化用powell方法违背最大函数求值

2024-09-23 22:18:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用优化函数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。我的代码可能出了什么问题,或者是算法本身的问题?在


Tags: 函数代码算法选项resmathscipytmp
1条回答
网友
1楼 · 发布于 2024-09-23 22:18:24

每次迭代需要对函数进行multiple times求值。出于某种原因(我想是性能或其他实现细节),只检查了once per iteration。这就是为什么可以超过最高评价。在

计算计数超出最大值的程度取决于x的维数,也取决于函数和数据。不幸的是,没有简单的方法来估计超调量,但在大多数情况下这应该不是问题。在

相关问题 更多 >