我有一个优化问题,需要求解向量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"方法似乎给了我想要的东西。