Scipy优化返回初始猜测作为解决方案



我有一个优化问题,需要求解向量X:

E=O-X*H

O和H都是已知的。求解X,使E.的方差最小化

我写的代码如下:

H = np.matrix(df.ix[:,1:5]) # 61 by 4 matrix
O = np.matrix(df[fund]) # 1 by 61 matrix
#X = np.array([1,0,0,0]) # 1 by 4 matrix
def fitness(X, H=H, O=O):
    A = X*np.transpose(H) # 1 by 61 matrix
    E = O - A
    target = np.var(E, ddof=1)
    return target
cons = ({'type':'eq','fun': lambda X: sum(X)-1})
bnds = [(0, 1) for i in range(4)]
res = optimize.minimize(fitness, np.array([0,1,0,0]), method='SLSQP', bounds=bnds, constraints=cons)
print res.x

代码不断返回与解决方案相同的初始猜测。我还尝试了"BFGS"方法,该方法返回了一个违反边界约束的错误答案。我想知道我是不是在剧本上做错了什么,或者我使用的方法不合适?

我不确定是什么造成了不同,但"TNC"方法似乎给了我想要的东西。

最新更新