选择一个选项并赋值
Pick one option and assign value
我有一个项目列表,我希望求解器从给定列表中选择一个项目。我读到我们不能在 SOLVER 上赋值。
例如:
如果我有字符串列表
A = {“opt1”,“opt2”,“opt3”}
求解器条件“opt1”或“opt2”或“opt3”
求解器将 SAT 并选择一个。
有什么方法可以分配字符串值来做到这一点?!
很难准确解读您的要求;但这当然是完全可能的。如果你分享你的代码和你尝试过的东西,它会有所帮助。下面是一个可以帮助您入门的示例:
from z3 import *
opt1 = Bool("opt1")
opt2 = Bool("opt2")
opt3 = Bool("opt3")
s = Solver()
# Add some constraints on the options
s.add(Or(opt1, opt2))
s.add(Or(opt2, opt3))
# make sure only one is picked
s.add(If(opt1, 1, 0) + If(opt2, 1, 0) + If(opt3, 1, 0) == 1)
if s.check() == sat:
m = s.model()
if m.evaluate(opt1): print("picked: opt1")
if m.evaluate(opt2): print("picked: opt2")
if m.evaluate(opt3): print("picked: opt3")
当 运行 时,打印:
picked: opt2
根据您的其他限制、z3 版本等,您可以通过这种方式获得与您的问题一致的任意设置。
我有一个项目列表,我希望求解器从给定列表中选择一个项目。我读到我们不能在 SOLVER 上赋值。
例如: 如果我有字符串列表 A = {“opt1”,“opt2”,“opt3”} 求解器条件“opt1”或“opt2”或“opt3” 求解器将 SAT 并选择一个。
有什么方法可以分配字符串值来做到这一点?!
很难准确解读您的要求;但这当然是完全可能的。如果你分享你的代码和你尝试过的东西,它会有所帮助。下面是一个可以帮助您入门的示例:
from z3 import *
opt1 = Bool("opt1")
opt2 = Bool("opt2")
opt3 = Bool("opt3")
s = Solver()
# Add some constraints on the options
s.add(Or(opt1, opt2))
s.add(Or(opt2, opt3))
# make sure only one is picked
s.add(If(opt1, 1, 0) + If(opt2, 1, 0) + If(opt3, 1, 0) == 1)
if s.check() == sat:
m = s.model()
if m.evaluate(opt1): print("picked: opt1")
if m.evaluate(opt2): print("picked: opt2")
if m.evaluate(opt3): print("picked: opt3")
当 运行 时,打印:
picked: opt2
根据您的其他限制、z3 版本等,您可以通过这种方式获得与您的问题一致的任意设置。