首页 > 解决方案 > OR SAT google 中的条件约束未按预期工作

问题描述

我是 python 中的 google 或 SAT 新手,文档不是很清楚。我想要做的是以下内容:有一个这样的列表:

desk[1] = 3
desk[2] = 5
desk[3] = 4
desk[4] = 2
desk[5] = 1

和一个名为 person_la_croix 的变量,其值 = 4,比方说。我想从 t[i] = 1 中创建一个布尔列表 (t),如果 desk[i] != person_la_croix,否则为 0。然后我想从 t[i] which t[i] == 1 中取出 i 并将其分配给变量desk_la_croix

我试过这个:

for i in s:
    model.Add(desk[i] == person_la_croix).OnlyEnforceIf(t[i])
for i in s:
    model.Add(desk_la_croix == i).OnlyEnforceIf(t[i])

它不工作......有人可以用这段代码帮助我还是建议一种更聪明的方法来做到这一点?

标签: or-tools

解决方案


你读了...吗

https://github.com/google/or-tools/blob/stable/ortools/sat/doc/channeling.md

我猜你错过了 OnlyEnforceIf 的反面,因为这些只是暗示,而不是等价。


推荐阅读