このコードは に対してのみ実行されますi=4
が、場所が初期化されていない場合、i=19
?????
に対して実行されます。location=BoolVal(False)
場所はここで初期化されます
from z3 import *
x,t,t1,t2,x_next=Reals ('x t t1 t2 x_next')
location,location_next=Bools('location location_next')
x=20
#t1=0
t=0
location=BoolVal(False)
#set_option(precision=10)
k=20
for i in range(k):
s=Solver()
s.add(Or(And((10*x_next)>=(3*t1)-(3*t2)+(10*x),(10*x_next)<=(10*x)-(t2-t1),x_next>=18,(t2-t1)>0,Not(location_next)),
And((10*x_next)>=(t2-t1)+(10*x),(5*x_next)<=(5*x)+(t2-t1),x_next<=22,(t2-t1)>0,location_next)),
location_next==If(And(Not(location),x_next<19),True,If(And(location,x_next>21),False,location)))
print i
print s.check()
if s.check()==unsat:
break
m=s.model()
x=m[x_next]
#t1=m[t2]
print m[x_next].as_decimal(10)