我scipy.optimize
用来解决最小化问题。但它在做什么没有任何意义。如果我没有设置最大迭代次数,它将永远运行(嗯,至少 12 小时)。因此,我将最大迭代次数设置为要测试的小值,例如 20。
我的函数的初始值为 880.770191886。当我使用所有诊断输出(full_output=True
,retall=True
)运行时scipy.optimize.fmin
,我得到:
>>dataOut = so.fmin(optimize_grid, coordsOuter, args=(0.5,(65,86,2)), maxiter=20, disp=True, full_output=True, retall=True)
>>print dataOut[1:]
给出:
Warning: Maximum number of iterations has been exceeded
(197.24011337756517, 20, 11207, 2, [array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373]), array([ 0.5 , 0.5 , 0.55702654, ..., 2.45997569,
2.47487373, 2.47487373])])
所以所有这一切都是说我的函数的最小值取值 197.24 等。然而,它在每次迭代中尝试使用的向量与初始向量相同!所以它实际上并没有做任何事情,即使它确定了一个最小值。我只是在每一步都将初始向量作为答案,这显然是不正确的。
任何想法是什么问题?我看不出它的工作方式有任何理由,因为它在某些时候清楚地确定了小于初始值的函数值。