我试图定义一个约束来限制求解器生成的唯一值的数量。它可以生成尽可能多的重复项来解决问题,但唯一值有限制。
为每个值创建一个布尔变量selected_value
这是正确的,当且仅当至少为它分配了一个值。
为此,您将需要 2 组约束:
从左到右:selected_value
表示该值已被选择
model.AddBoolOr([var_i_equals_value, ...]).OnlyEnforcedIf(selected_value)
从右到左,选择的值意味着selected_value
is true
for var_i_equals_value in ...:
model.AddImplication(var_i_equals_value, selected_value)
然后你只需要约束所选值的总和
model.Add(sum(selected_value_array) <= 10)
现在您需要询问是否真的需要整数变量,或者只是布尔变量矩阵。我建议后者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)