【问题标题】:CVXPY optimization problem. DCPError: Problem does not follow DCP rulesCVXPY 优化问题。 DCPError:问题不遵循 DCP 规则
【发布时间】:2020-12-15 10:30:19
【问题描述】:

我们已经很好地设置了约束,现在正在研究合作伙伴偏好问题的目标函数。我们可以构建一个 20x20 的工人到工人的对称矩阵,每个元素是两个工人之间的综合得分。但是,矩阵不是半正定的,我们无法进一步前进。我们正在使用cvxpy python 包。请帮忙!

一段代码澄清一下:

part_pref = pd.read_excel('Preferred Partners Updated.xlsx')
part_pref_np = np.array(part_pref)[:,1:21] # 20x20 symmetric matrix with partner preference

y = cp.Variable((20, 4), integer = True)

objective = cp.Maximize(-cp.sum(y.T @ part_pref_np @ y))

constraints = [y >= 0,
               y <= 1,
               cp.sum(y, axis = 1) == 1,
               cp.sum(y, axis = 0) >= b,
               cp.sum(y, axis = 0) <= c,
               (skill_np-d).T @ y >= e,
               cp.multiply((skill_np[:,2]-4),y[:,0]) >= 0,  
               cp.multiply((skill_np[:,0]-4),y[:,3]) >= 0,
               f @ x[:,0] >=1]
    
problem = cp.Problem(objective, constraints)
problem.solve()

引发错误

DCPError:问题不符合 DCP 规则。

【问题讨论】:

    标签: python matrix optimization cvxpy


    【解决方案1】:

    我怀疑问题出在

    cp.Maximize(-cp.sum(y.T @ part_pref_np @ y))
    

    你可以试试

    cp.Maximize(0)
    

    看看会发生什么。我希望这将提供一个可行的解决方案。

    CVXPY 只允许凸二次目标,我认为你的目标不是凸的(取决于数据,所以我无法验证这一点)。如果是这样,您可以将目标线性化,因为决策变量是 0-1 变量。然而,在 CVXPY 中这样做并不是那么简单,因为 y 已经是一个二维变量(CVXPY 仅支持 0、1 和 2 维变量)。

    我不完全确定您为什么在这里使用二次目标。也许你可以考虑一个线性的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-07
      • 1970-01-01
      相关资源
      最近更新 更多