gpt4 book ai didi

python - 使用 OR 工具在 python 中进行约束优化 : How to enforce a multi level constraint?

转载 作者:行者123 更新时间:2023-12-02 01:49:00 24 4
gpt4 key购买 nike

我有一个优化问题,我有一个“BoolVar”对象列表的列表。所以像这样:

[[BoolVar1,BoolVar2],[BoolVar3, BoolVar4],[BoolVar5,BoolVar6]]

我需要评估以下内容:

(BoolVar1 && BoolVar2) || (BoolVar3 && BoolVar4) || (BoolVar5 && BoolVar6)

我是否必须按以下方式执行此操作:

and12 = model.NewBoolVar("and12")
model.Add(and12 == True).OnlyEnforceIf([BoolVar1,BoolVar2])
and34 = model.NewBoolVar("and34")
model.Add(and34 == True).OnlyEnforceIf([BoolVar3,BoolVar4])
and56 = model.NewBoolVar("and56")
model.Add(and56 == True).OnlyEnforceIf([BoolVar5,BoolVar6])
model.AddBoolOr([and12,and34,and56])

我已经尝试过这段代码,它似乎可以正常工作,但由于“OnlyEnforceIf”函数,我对此表示怀疑。如果不强制执行会怎样? and12 然后设置为 False 或者它可以是 False 或 True,从那时起这个等式就不会被强制执行?我根据 this post 来到这段代码.

最佳答案

  1. OnlyEnforceIf 只是一种暗示。您需要添加反向。

  2. 你应该留在 bool 世界:

from ortools.sat.python import cp_model

model = cp_model.CpModel()

and12 = model.NewBoolVar("and12")
BoolVar1 = model.NewBoolVar("b1")
BoolVar2 = model.NewBoolVar("b2")
model.AddBoolAnd([BoolVar1, BoolVar2]).OnlyEnforceIf(and12)
model.AddBoolOr([and12]).OnlyEnforceIf([BoolVar1, BoolVar2])

solver = cp_model.CpSolver()
solver.parameters.enumerate_all_solutions = True
solver.Solve(model, cp_model.VarArraySolutionPrinter([BoolVar1, BoolVar2, and12]))

输出

Solution 0, time = 0.00 s
b1 = 0 b2 = 0 and12 = 0
Solution 1, time = 0.00 s
b1 = 1 b2 = 0 and12 = 0
Solution 2, time = 0.00 s
b1 = 0 b2 = 1 and12 = 0
Solution 3, time = 0.00 s
b1 = 1 b2 = 1 and12 = 1

关于python - 使用 OR 工具在 python 中进行约束优化 : How to enforce a multi level constraint?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70553100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com