私は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などの値をとるということです。それでも、すべての反復で使用しようとしたベクトルは、初期ベクトルと同じです。したがって、最小値を特定したとしても、実際には何もしていません。明らかに正しくないすべてのステップで、答えとして最初のベクトルを取得します。
問題は何ですか?ある時点で、初期値よりも小さい関数の値が明確に識別されたため、その動作の正当性がわかりません。