2017-11-04 14 views
0

私は、最小化関数に非常に奇妙な問題がありました。私は次のコードを書いて、(0,1)の結果を出力したいと考えました。'bounds'はscipy.stats.minimize関数では機能しません

cons = ({'type':'eq','fun':lambda x: 1-sum(x)}) 
bnds = [(0,1)]*len(w) 
minS = minimize(min_S_function, w, method = 'SLSQP', bounds = bnds, constraints = cons) 

ただし、0から1の範囲で境界を設定しても、結果ではゼロ以外の非常に小さな数値が出力されます。なぜですか?

In [68]:minS.x 
Out[68]: 
array([ 2.18674802e-14, -2.31905438e-14, 4.05696128e-01, 
    1.61295198e-14, 4.98954818e-02, -2.75073615e-14, 
    3.97195447e-01, 1.09796187e-14, -4.33297358e-15, 
    2.38805100e-14, 7.73037793e-15, 3.21824430e-14, 
    -1.42202909e-14, -1.08110329e-14, -1.83513297e-14, 
    -1.37745269e-14, 3.37854385e-14, 4.69473932e-14, 
    -1.09088800e-15, -1.57169147e-14, 7.47784562e-02, 
    1.32782180e-02, 1.64441640e-14, 2.72140153e-15, 
    5.23069695e-14, 5.91562687e-02, 2.16467506e-15, 
    -6.50672519e-15, 2.53337977e-15, -6.68019297e-14]) 

答えて

0

これは問題ありません。

これらの反復ソルバーは、局所的最適近似解を保証するだけで、それはあなたのものです!

数字を調べると、負の範囲外の値の下限までの距離が10^-14 = 0,00000000000001以内であることがわかります。許容誤差(結局浮動小数点数を使用します)。

+0

大丈夫です。あなたの答えをありがとう、おいおい。 – Truefan

関連する問題