我必须使用 z3py 获得函数最大值的值(在它们的范围内)。例如:我有foo(x,y) = 2*x + 1 + y
一个函数[x,y]
(换句话说,我必须解决一个范围内的最大问题,这可能吗?lo <= foo(x,y) <= hi
foo(x,y)
我在 python 中编写了这个简单的脚本:
s = Solver()
# hi is given by the user
# expr is foo(x)
s.add(expr <= hi)
s.add(expr >= lo)
s.add(X >= 0)
s.add(Y >= 0)
if s.check() == sat:
print('_upper_bound: got model %s' % s.model())
如果我只使用一个变量(例如,foo(x) = 2*x + 1
),那么给定的模型是正确的,并且 的值foo(x)
是最高的。如果我使用多个变量(例如foo(x,y) = 2*x+y
),则找到的结果是最小值。
范围内的所有点都在函数的域中。
编辑:显然,如果我删除关于 X 和 Y 的两个约束,我会得到最大值。