【问题标题】:How to define a constraint in Ortools to set a limit of distinct values如何在 Ortools 中定义约束以设置不同值的限制
【发布时间】:2020-02-28 07:56:35
【问题描述】:

我正在尝试定义一个约束来限制求解器生成的唯一值的数量。它可以生成尽可能多的重复项来解决问题,但唯一值存在限制。

【问题讨论】:

  • 如果您使用的是 cp-sat,您可以为每个值创建一个布尔值,指示该值是否存在并限制它们的总和
  • 这将限制生成的值而不是唯一值。我想让它有尽可能多的重复项,但限制不同的值

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


【解决方案1】:

为每个值创建一个布尔变量selected_value,如果至少为其分配了一个值,则该变量为真。

为此,您将需要 2 组约束:

从左到右:selected_value 表示该值被选中

model.AddBoolOr([var_i_equals_value, ...]).OnlyEnforcedIf(selected_value)

从右到左,选择的值意味着selected_value为真

for var_i_equals_value in ...:
    model.AddImplication(var_i_equals_value, selected_value)

然后你只需要约束所选值的总和

model.Add(sum(selected_value_array) <= 10)

现在您需要询问您是否真的需要整数变量,或者只是一个布尔变量矩阵。我建议后者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多