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

How to define a constraint in Ortools to set a limit of distinct values

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

为每个值创建一个布尔变量 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)

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