2

scipy.optimize用来解决最小化问题。但它在做什么没有任何意义。如果我没有设置最大迭代次数,它将永远运行(嗯,至少 12 小时)。因此,我将最大迭代次数设置为要测试的小值,例如 20。

我的函数的初始值为 880.770191886。当我使用所有诊断输出(full_output=Trueretall=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 等。然而,它在每次迭代中尝试使用的向量与初始向量相同!所以它实际上并没有做任何事情,即使它确定了一个最小值。我只是在每一步都将初始向量作为答案,这显然是不正确的。

任何想法是什么问题?我看不出它的工作方式有任何理由,因为它在某些时候清楚地确定了小于初始值的函数值。

4

1 回答 1

0

我猜你正在解决的问题并不是真的不适定,scipy.fmin 可以通过很少的迭代收敛到非常好的结果,但是因为你只定义了maxiter它试图满足你的请求的参数。你有没有尝试使用xtolftol参数。您没有提到您使用的 SciPy 版本,但它们从 0.11 开始提供。

从 0.11 开始,您还可以使用scipy.minimize它来更好地控制方法及其参数。

于 2013-07-25T22:27:12.003 回答