如何在 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)
现在你需要问你是否真的需要整数变量,或者只是一个布尔变量矩阵。我建议后者。
我正在尝试定义一个约束条件来限制求解器生成的唯一值的数量。它可以生成尽可能多的重复项来解决问题,但对唯一值有限制。
为每个值创建一个布尔变量 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)
现在你需要问你是否真的需要整数变量,或者只是一个布尔变量矩阵。我建议后者。