我使用scipy.optimize
來解決最小化問題。但它所做的沒有任何意義。如果我沒有設置最大迭代次數,它會永遠運行(至少12小時)。所以我把迭代的最大次數設置爲小測試,比如20。scipy.optimize令人困惑的行爲
我函數的初始值是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等。然而,它試圖在每次迭代中使用的向量與初始向量相同!所以它實際上並沒有做任何事情,即使它確定了最低限度。我只是將初始向量作爲每一步顯然不正確的答案而退出。
任何想法是什麼問題?我看不出任何工作方式的理由,因爲它清楚地標識出某個值小於初始值的函數值。
最終的向量是什麼樣的?另外,你能否證實這20個矢量都是平等的?我的意思是,我們在這裏看不到所有的座標。 –
@LevLevitsky是的,如果我從最初減去最後,我在每個位置得到0。如果我在迭代中從原始數據中減去每個數組,則相同。 – tpg2114
那麼最後是一樣的嗎? 'optimize_grid(dataOut [0],0.5,(65,86,2))'仍然是880而不是197? –