Optimization 或工具最大化/最小化或/异或

Optimization 或工具最大化/最小化或/异或,optimization,or-tools,Optimization,Or Tools,简单的例子: days=范围(1,10) 对于d(以天为单位): 模型AddBoolXOr(a、b、c、d、e、f、g) 上面我可以保证每天只有一个a…g是正确的。但并非每天都能做到这一点,所以我希望能够最大限度地提高实现的次数。类似于 array\u bools=[] 天数=范围(1,10) 对于d(以天为单位): day\u bool=NewBoolVar('name')) model.Add(day_bool=XOr(a,b,c,d,e,f,g)) 数组\u bools.append(日

简单的例子:

days=范围(1,10)
对于d(以天为单位):
模型AddBoolXOr(a、b、c、d、e、f、g)
上面我可以保证每天只有一个a…g是正确的。但并非每天都能做到这一点,所以我希望能够最大限度地提高实现的次数。类似于

array\u bools=[]
天数=范围(1,10)
对于d(以天为单位):
day\u bool=NewBoolVar('name'))
model.Add(day_bool=XOr(a,b,c,d,e,f,g))
数组\u bools.append(日\u bool)
最大化(范围内i的和(数组布尔[i]))

参见

xor(布尔变量数组)
并不意味着只有一个是真的,它意味着奇数个是真的。谢谢Laurent。即便如此。。。是否可以最大化返回True的天数?这正是我想要的。非常感谢劳伦特。
array_bools = []
days = range(1,10)
for d in days:
    day_bool = NewBoolVar('name')
    model.Add(sum([a,b,c,d,e,f,g]) == 1).OnlyEnforceIf(day_bool)
    model.Add(sum([a,b,c,d,e,f,g]) != 1).OnlyEnforceIf(day_bool.Not())
    array_bools.append(day_bool)

model.Maximize(sum(array_bool))