OR-TOOLS - 如果某些 IntVar 的总和大于 0,如何设置 BoolVar 的值,否则为 0?

OR-TOOLS - How to set the value of a BoolVar if the sum of some IntVars is greater than 0, else 0?

我已经查看了大部分文档,但无法理解这一点。我正在使用 or-tools python 进行约束编程。我正在尝试找到一种方法,如果某些 IntVar 的总和大于 0,我可以将 BoolVar 的值设置为 1,否则 BoolVar 应该为 0。

我已经尝试了 AddImplication() 和 OnlyEnforceIf(),它们看起来很有希望,但 none 奏效了。尝试了一些其他的想法,但大多是出于绝望。

这段代码看起来像这样:

for warehouse in WAREHOUSES:
    model.Add(y[warehouse] == 1).OnlyEnforceIf(sum(x[(warehouse, customer)] for customer in CUSTOMERS) > 0)

当前 returns:

AttributeError: 'BoundedLinearExpression' object has no attribute 'Index'

我猜错误是因为我需要将布尔值而不是表达式传递给 OnlyEnforceIf。我试过在一个单独的函数中进行计算,并且只传递 return 值 (True/False)。该程序运行但将所有 BoolVars 设置为 True,这不是很有帮助。

我已经用线性规划解决了这个已知的练习,所以我知道一些 BoolVars 应该是假的。

# x is the IntVar: dict with keys that are tuples and the IntVar as value
# y is the BoolVar

反过来做:

for warehouse in WAREHOUSES:
    model.Add(sum(x[(warehouse, customer)] for customer in CUSTOMERS) > 0).OnlyEnforceIf(y[warehouse])
    model.Add(sum(x[(warehouse, customer)] for customer in CUSTOMERS) == 0).OnlyEnforceIf(y[warehouse].Not())