Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求z3py中有界函数的最大值的范围内的值_Python_Z3_Z3py - Fatal编程技术网

Python 求z3py中有界函数的最大值的范围内的值

Python 求z3py中有界函数的最大值的范围内的值,python,z3,z3py,Python,Z3,Z3py,我必须使用z3py获得函数最大值的值(在一定范围内)。 例如:我有一个函数(foo(x,y)=2*x+1+y),我想找到[x,y](使用约束lo=0) 如果s.check()==sat: 打印(“上限:获取模型%s”%s.model()) 如果我只使用一个变量(例如,foo(x)=2*x+1),那么给定的模型是正确的,foo(x)的值是最高的。如果我使用多个变量(例如,foo(x,y)=2*x+y),则找到的结果是最小的 范围中的所有点都在函数的域中 编辑:显然,如果我删除关于X和Y的两个约束

我必须使用z3py获得函数最大值的值(在一定范围内)。 例如:我有一个函数(
foo(x,y)=2*x+1+y
),我想找到
[x,y]
(使用约束
lo=0)
如果s.check()==sat:
打印(“上限:获取模型%s”%s.model())
如果我只使用一个变量(例如,
foo(x)=2*x+1
),那么给定的模型是正确的,
foo(x)
的值是最高的。如果我使用多个变量(例如,
foo(x,y)=2*x+y
),则找到的结果是最小的

范围中的所有点都在函数的域中


编辑:显然,如果我删除关于X和Y的两个约束,我会得到最大值。

使用
scipy
,您可以
最小化
(如果最小化f,则最大化-f)

如您所见,您有一个
bounds
参数

界限:序列,变量的可选界限(仅适用于L-BFGS-B, TNC、COBYLA和SLSQP)。x中每个元素的(最小,最大)对, 定义该参数的边界。对于“最小”或“最大”中的一个,请使用“无” 当这个方向没有边界时


关于优化例程的更多细节

您的解决方案非常好,但不幸的是,我刚刚发现我必须使用z3py,因为我必须处理位向量。
    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())
scipy.optimize.minimize(fun, x0, args=(), method='BFGS', jac=None, 
    hess=None, hessp=None, bounds=None, constraints=(), tol=None, 
    callback=None, options=None)