Added the enc_state_with_blocking() function
This allows to specify reactants and inhibitors in the provided state.
This commit is contained in:
@@ -295,6 +295,22 @@ class SmtCheckerRSC(object):
|
|||||||
|
|
||||||
return simplify(enc)
|
return simplify(enc)
|
||||||
|
|
||||||
|
def enc_state_with_blocking(self, level, prop):
|
||||||
|
"""Encodes the state at the given level with blocking certain concentrations"""
|
||||||
|
|
||||||
|
required,blocked = prop
|
||||||
|
|
||||||
|
enc = True
|
||||||
|
for ent,conc in required:
|
||||||
|
e_id = self.rs.get_entity_id(ent)
|
||||||
|
enc = And(enc, self.v[level][e_id] >= conc)
|
||||||
|
|
||||||
|
for ent,conc in blocked:
|
||||||
|
e_id = self.rs.get_entity_id(ent)
|
||||||
|
enc = And(enc, self.v[level][e_id] < conc)
|
||||||
|
|
||||||
|
return simplify(enc)
|
||||||
|
|
||||||
def decode_witness(self, max_level, print_model=False):
|
def decode_witness(self, max_level, print_model=False):
|
||||||
|
|
||||||
m = self.solver.model()
|
m = self.solver.model()
|
||||||
@@ -351,7 +367,7 @@ class SmtCheckerRSC(object):
|
|||||||
print("[i] Adding the reachability test...")
|
print("[i] Adding the reachability test...")
|
||||||
self.solver.push()
|
self.solver.push()
|
||||||
|
|
||||||
self.solver.add(self.enc_min_state(current_level,state))
|
self.solver.add(self.enc_state_with_blocking(current_level,state))
|
||||||
|
|
||||||
result = self.solver.check()
|
result = self.solver.check()
|
||||||
if result == sat:
|
if result == sat:
|
||||||
|
|||||||
Reference in New Issue
Block a user