【问题标题】:How do I add a quadratic constraint using coeff in the scipsuite python interface如何在 scipsuite python 界面中使用 coeff 添加二次约束
【发布时间】:2016-03-15 06:15:27
【问题描述】:

如何使用 scip python 接口添加二次约束? 在其中一个示例中,我看到类似 model.addCons(x*x+y*y<=6) 但是,由于我有很多变量(x1..xn 并且我的约束是 x'Qx<=0.2 的形式,其中 x 是 n*1,Q 是 n*n),所以这种方法是不可能的。当我做线性约束时,如何将二次约束放入 coeffs 的 python 字典中? (coeffs={x**2:3.0,y**2:1.0,z**2:5.0} 例如如果我想要 3x^2+y^2+5z^2<=10)

【问题讨论】:

  • {x:3, y:1, z:5} 与 10 有何关系?
  • 10 并不重要,这里只是举例,后面会通过设置 lhs 将 10 放入约束中。
  • 但是如何从 3,1 和 5 计算得出呢? 3+1+5=9 所以我想弄清楚 10 是从哪里来的。
  • 3和1和5是变量x^2, y^2, z^2的系数
  • 抱歉,我以为你想根据字典生成限制。

标签: python scip


【解决方案1】:

目前不支持此功能。您需要遍历您的二次约束并使用表达式方法一个接一个地添加它们。

【讨论】:

  • 感谢您的回答。但由于我的约束中有大量二次项(x'Qx,其中 Q 的比例为 5000*5000)。我可以有效地循环遍历这么多的术语吗?
  • 我不明白你为什么不能。这在很大程度上取决于您的系数是如何存储的。但是,在创建二次约束时,我强烈建议使用 quicksum() 方法,而不是显式声明线性或二次表达式。
  • 如何使用 quicksum() 方法,有相关文档吗,谢谢
  • 示例:model.addCons(quicksum(c[i,j]*x[i,j] for i in I for j in J) <= 10)
猜你喜欢
  • 2020-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多