您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Z3 / Python从模型中获取python值

5b51 2022/1/14 8:22:20 python 字数 1386 阅读 561 来源 www.jb51.cc/python

如何从Z3模型获取真正的 python值? 例如. p = Bool('p') x = Real('x') s = Solver() s.add(Or(x < 5, x > 10), Or(p, x**2 == 2), Not(p)) s.check() print s.model()[x] print s.model()[p] 版画 -1.4142135623? False 但是那些是Z3对象,

概述

例如.

p = Bool('p')
x = Real('x')
s = Solver()
s.add(Or(x < 5,x > 10),Or(p,x**2 == 2),Not(p))
s.check()
print s.model()[x]
print s.model()[p]

版画

-1.4142135623?
False

但是那些是Z3对象,而不是python float / bool对象.

我知道我可以使用is_true / is_false来检查布尔值,但是如何优雅地将int / reals / …转换回可用的值(例如,不经过字符串和切除这个额外的符号).

p = Bool('p')
x = Real('x')
s = Solver()
s.add(Or(x < 5,Not(p))
s.check()
m = s.model()
print m[p],m[x]
print "is_true(m[p]):",is_true(m[p])
print "is_false(m[p]):",is_false(m[p])
print "is_int_value(m[x]):",is_int_value(m[x])
print "is_rational_value(m[x]):",is_rational_value(m[x])
print "is_algebraic_value(m[x]):",is_algebraic_value(m[x])
r = m[x].approx(20) # r is an approximation of m[x] with precision 1/10^20
print "is_rational_value(r):",is_rational_value(r)
print r.numerator_as_long()
print r.denominator_as_long()
print float(r.numerator_as_long())/float(r.denominator_as_long())

总结

以上是编程之家为你收集整理的Z3 / Python从模型中获取python值全部内容,希望文章能够帮你解决Z3 / Python从模型中获取python值所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶