如何在Ortools中定义约束以设置不同值的限制

时间:2020-02-28 07:56:35

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

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

1 个答案:

答案 0 :(得分:4)

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

为此,您将需要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)

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