when I write this code, it doesn't work.
cpPack.AddBoolAnd([pack, flag]).OnlyEnforceIf(base)
cpPack.Add(base == 1).OnlyEnforceIf([pack, flag])
then I change the code to following, it works.
base = cpPack.NewBoolVar("base")flag = cpPack.NewBoolVar("flag")
cpPack.Add(z[j] - ze[i] == 0).OnlyEnforceIf(flag )
cpPack.Add(z[j] - ze[i] != 0).OnlyEnforceIf(flag.Not())
cpPack.AddBoolAnd([pack, flag]).OnlyEnforceIf(base)cpPack.AddBoolOr([pack.Not(), flag .Not()]).OnlyEnforceIf(base.Not())
# cpPack.Add(base == 1).OnlyEnforceIf([pack, flag])
What is the difference between them? Do not two half-reified constraints equal to a full-reified constraint in ortools?