【问题标题】:Adding constrain to check if there exist a combination of pairs such that it statisfy a ratio?添加约束以检查是否存在满足比率的对组合?
【发布时间】:2021-01-21 14:38:44
【问题描述】:

假设我在一组 x0, ..., x14 中有一组项目,每个项目都包含自己的值 v0, ..., v14

我正在尝试最多 8 个项目,以便获得最大值。

我能够得到以下最大化问题

max v0*x0 + ... + v14*x14
s.t.
x0 + ... + x14 <= 8
0 <= x0 <= 1
.
.
0 <= x14 <= 1
 

但是,我需要添加另一个约束,即对于选择的项目,我应该能够将它们配对,使它们的比率小于 2。

即假设选择的项目是x0, x1, x3, x4, x8, x9, x10, x11,最大值他们也将具有配对配置,

(v0 * x0)/(v1 * x1)  <= 2, 
(v3 * x3)/(v9 * x9)  <= 2,
(v4 * x4)/(v11 * x11)<= 2,
(v8 * x8)/(v10 * x10)<= 2,

关于如何制定上述约束集的任何想法?

【问题讨论】:

    标签: linear-programming constraint-programming or-tools


    【解决方案1】:

    因此您可以预先计算有效对及其值(两个元素的总和)

    所以最多有 14 * 13 / 2 个潜在的有序对,更不用说有效的了。

    您需要选择 4 对,受限于一旦选择一对,任何包含相同元素的对都不能被选中。这是对 14 个对子集的简单约束。

    for all item in items:
      sum(bool_pair for all bool_pair involving item) <= 1
    

    您可以使用 CP-SAT 或线性求解器包装器来解决此问题。

    【讨论】:

      猜你喜欢
      • 2018-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-10-12
      • 1970-01-01
      相关资源
      最近更新 更多