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

Python Scipy优化返回初始猜测作为解决方案,python,optimization,scipy,Python,Optimization,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 ma

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

很可能你的问题与矩阵上的svd计算密切相关,你使用Excel解决矩阵X。当我在脚本中插入X时,适应度函数会给我精确的Excel输出。你应该始终检查
res.success
是否正确,使您知道解算器已收敛(如果它返回初始点,则可能不是这种情况)。