【问题标题】:Scipy optimize return the innitial guess as solutionScipy 优化返回初始猜测作为解决方案
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2019-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 2015-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-26
    相关资源
    最近更新 更多