繁体   English   中英

Z3Py 如何在solve() 函数后获取值

[英]Z3Py How to get values after solve() function

有人可以解释如何在使用https://pypi.org/project/z3-solver/的 solve() 函数时访问方程变量的结果值。

x, y = BitVecs('x y', 32)
solve(x + y == 2, x > 0, y > 0)

我试过以下无济于事

m = solve(x + y == 2, x > 0, y > 0)
print(m.x)

请注意,在这种情况下,我们不想使用求解器

s = Solver()
s.add(And(x + y == 2, x > 0, y > 0))
s.check()
m = s.model()
print(m[x], m[y])

好像没有直接的方法。 函数solve()打印找到的解决方案,但不返回模型。

文件z3.py 中solve()定义:

def solve(*args, **keywords):
    """Solve the constraints `*args`.

    This is a simple function for creating demonstrations. It creates a solver,
    configure it using the options in `keywords`, adds the constraints
    in `args`, and invokes check.

    >>> a = Int('a')
    >>> solve(a > 0, a < 2)
    [a = 1]
    """
    s = Solver()
    s.set(**keywords)
    s.add(*args)
    if keywords.get('show', False):
        print(s)
    r = s.check()
    if r == unsat:
        print("no solution")
    elif r == unknown:
        print("failed to solve")
        try:
            print(s.model())
        except Z3Exception:
            return
    else:
        print(s.model())

所以, solve()只是一个包装函数。 它创建一个Solver()并且不公开结果模型来访问变量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM