【发布时间】:2016-04-03 15:36:16
【问题描述】:
我有一个优化问题,我需要求解一个向量 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”方法,该方法返回了违反边界约束的错误答案。不知道是我脚本做错了还是我使用的方法不合适?
【问题讨论】:
-
很可能你的问题与矩阵 H 上的 svd-computation 密切相关
-
我使用 Excel 求解矩阵 X。当我将 X 插入脚本时,适应度函数会准确地给出 Excel 输出。
-
您应该始终检查
res.success是否为真,以便您知道求解器已收敛(如果它返回初始点则可能不是这种情况)。
标签: python optimization scipy