¿Cómo puedo obtener valores de python reales de un modelo Z3?Z3/Python obteniendo valores de python del modelo
E.g.
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]
impresiones
-1.4142135623?
False
pero esos son objetos Z3 y no objetos de flotación/bool pitón.
sé que puedo comprobar los valores booleanos utilizando is_true
/is_false
, pero ¿cómo puedo convertir elegantemente enteros/reales/... volver a los valores utilizables (sin pasar por las cuerdas y cortando este ?
símbolo adicional, por ejemplo) .
¿Has probado 'bool (s.model() [x])' y 'flotador (s.model() [p])'? –
Sí, pero eso no funciona (correctamente): 'bool (s.model() [p])' da 'True', cuando debería ser' False' y 'float (s.model() [x]) 'lanza una excepción' AttributeError: instancia AlgebraicNumRef no tiene ningún atributo '__float __' ' – tqx