非零值计数个数

  • 本文关键字:非零值 or-tools
  • 更新时间 :
  • 英文 :


给定一个整数列表,例如[1,2,5,3,8,10],是否可以使用表示大于5的元素数量的变量创建约束?我有以下代码,但它显然没有计算元素的数量:

bs = []
for i in range(6):
b = model.NewBoolVar(f'b_{i}')
p = model.NewIntVar(s, 50, f'p_{i}')
model.Add(p >= 5).OnlyEnforceIf(b)
model.Add(p < 5).OnlyEnforceIf(b.Not())
bs.append(b)
x = model.NewIntVar(0, 10000, 'x')
y = model.NewIntVar(0, 10000, 'y')
s1 = model.NewIntVar(0, 3, 's1')
#...
model.Add(s1 == sum(bs))
model.AddDivisionEquality(x, y, s1)

我知道s1是3,但解与model.AddDivisionEquality(x, y, 3)

不同更新:如果s1 = model.NewIntVar(1, 3, 's1'),似乎给出了预期的结果。目前还不清楚为什么会这样。

您应该打印solve()的确切状态。它说模型无效,因为它拒绝了分母可以为零的模型。

最新更新