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

问题描述 投票:1回答:1

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

c# linear-programming constraint-programming or-tools
1个回答
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)

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

© www.soinside.com 2019 - 2024. All rights reserved.