Skip to content

Commit

Permalink
Custom bwd reachability with progress.
Browse files Browse the repository at this point in the history
  • Loading branch information
daemontus committed Aug 23, 2024
1 parent c959b78 commit 057beae
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
20 changes: 19 additions & 1 deletion biobalm/_sd_attractors/attractor_candidates.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

import random
import biobalm
from biodivine_aeon import Bdd, AsynchronousGraph, BddVariable, Attractors
from biodivine_aeon import Bdd, AsynchronousGraph, BddVariable, Attractors, Reachability
from biobalm.trappist_core import compute_fixed_point_reduced_STG
from biobalm.symbolic_utils import state_list_to_bdd, valuation_to_state, state_to_bdd

Expand Down Expand Up @@ -62,9 +62,27 @@ def symbolic_attractor_candidates(
]

candidate_states = sd.symbolic.mk_subspace(node_space)
avoid = sd.symbolic.mk_empty_colored_vertices()
for child in child_motifs:
candidate_states = candidate_states.minus(sd.symbolic.mk_subspace(child))
avoid = avoid.union(sd.symbolic.mk_subspace(child))

done = False
while not done:
done = True
for var in reversed(sd.symbolic.network_variables()):
if sd.network.get_variable_name(var) in node_space:
# Constant variable, no need to check.
continue
pre = sd.symbolic.var_pre_out(var, avoid)
if not pre.is_empty():
avoid = avoid.union(pre)
print("BWD", avoid, "of", candidate_states)
done = False
break

#avoid_bwd = Reachability.reach_bwd(sd.symbolic, avoid)
candidate_states = candidate_states.minus(avoid)
attractors = Attractors.attractors(sd.symbolic, candidate_states)

seeds: list[BooleanSpace] = []
Expand Down
6 changes: 5 additions & 1 deletion biobalm/succession_diagram.py
Original file line number Diff line number Diff line change
Expand Up @@ -1359,11 +1359,15 @@ def skip_remaining(self) -> int:
pn = self.node_percolated_petri_net(self.root(), compute=True)
minimal_traps = trappist(network=pn, problem="min")

if self.config["debug"]:
print(f"Found {len(minimal_traps)} .")

trap_plus_id: list[tuple[int, BooleanSpace]] = []
for m_trap in minimal_traps:
m_id = self._ensure_node(None, m_trap)
trap_plus_id.append((m_id, m_trap))
self._expand_one_node(m_id)
self.node_data(m_id)["expanded"] = True
#self._expand_one_node(m_id)

skipped_nodes = 0
for n_id in self.node_ids():
Expand Down

0 comments on commit 057beae

Please sign in to comment.