Control

These are methods and modules used to calculate control in Boolean Networks. They are divided in dynamics- and structure-based methods.

Note that these methods do not need to be called directly, as cana.boolean_network.BooleanNetwork provides the appropriate methods.

Dynamics based control

The control methods used here are implemented directly on the base class BooleanNetwork and BooleanNode. That is because the Network class can ask its nodes directly to step into a specific trajectory, thus compartmentalizing the logic.

Attractor Control

BooleanNetwork.attractor_driver_nodes(min_dvs=1, max_dvs=4, verbose=False)[source]

Get the minimum necessary driver nodes by iterating the combination of all possible driver nodes of length \(min <= x <= max\).

Parameters
  • min_dvs (int) – Mininum number of driver nodes to search.

  • max_dvs (int) – Maximum number of driver nodes to search.

Returns

The list of driver nodes found in the search.

Return type

(list)

Note

This is an inefficient bruit force search, maybe we can think of better ways to do this?

BooleanNetwork.controlled_state_transition_graph(driver_nodes=[])[source]

Returns the Controlled State-Transition-Graph (CSTG). In practice, it copies the original STG, flips driver nodes (variables), and updates the CSTG.

Parameters

driver_nodes (list) – The list of driver nodes.

Returns

The Controlled State-Transition-Graph.

Return type

(networkx.DiGraph)

BooleanNetwork.controlled_attractor_graph(driver_nodes=[])[source]
Parameters

cstg (networkx.DiGraph) – A Controlled State-Transition-Graph (CSTG)

Returns

The Controlled Attractor Graph (CAG)

Return type

(networkx.DiGraph)

Structure based control

These are control methods that only take the structure of the boolean network (aka: the structure graph) into consideration when computing driver nodes.

Feedback Vertex Set

The NP-complete Feedback Vertex Set (FVS) problem is defined as the minimum number of vertices that need to be removed from a directed graph so that the resulting graph has no direct cycle. [PQR98] [ABGD13].

Two methods are implemented here. A bruteforce and the Greedy Randomized Adaptive Search Procedure (GRASP) method by [PQR98].

cana.control.fvs.fvs_bruteforce(directed_graph, max_search=5, keep_self_loops=True)[source]

The Feedback Vertex Set bruteforce implementation.

Parameters
  • directed_graph (networkx.DiGraph) – The structure graph.

  • max_search (int) – Maximum number of additional variables to include in the search.

  • keep_self_loops (bool) – If self-loops are used in the computation. By FVS theory, all self-loop nodes are needed for control.

Returns

A list of sets with with the driver nodes.

Return type

(list)

Warning

Use the GRASP method for large graphs.

See also

fvs_grasp().

cana.control.fvs.fvs_grasp(directed_graph, max_iter=100, keep_self_loops=True)[source]

The Feedback Vertex Set GRASP implementation. This implementation is not exact but it is recommended for very large graphs.

Parameters
  • directed_graph (networkx.DiGraph) – The structure graph.

  • max_iter (int) – Maximum number of iterations for the search.

  • keep_self_loops (bool) – If self-loops are used in the computation. By FVS theory, all self-loop nodes are needed for control.

Returns

A list of sets with the driver nodes.

Return type

(list)

See also

fvs_bruteforce().

Minimum Dominating Set

cana.control.mds.mds(directed_graph, max_search=5, keep_self_loops=True)[source]

The minimum dominating set method.

Parameters
  • directed_graph (networkx.DiGraph) – The structural graph.

  • max_search (int) – Maximum search of additional variables. Defaults to 5.

  • keep_self_loops (bool) – If self-loops are used in the computation.

Returns

A list of sets with the driver nodes.

Return type

(list)

Structural Controllability

cana.control.sc.sc(directed_graph, keep_self_loops=True)[source]

The Structural Contolability driver sets.

Parameters
  • directed_graph (networkx.DiGraph) – The directed graph capturing the network structure.

  • keep_self_loops (bool) – Determines if the self loops are kept in the determination of structural control.

Returns

A list of sets with the driver nodes.

Return type

(list)

See also

If you only need the size of the set, see sc_min_size().

cana.control.sc.sc_min_size(directed_graph, keep_self_loops=True)[source]

The minimum number of driver variables required by structural controllability.

Parameters
  • directed_graph (networkx.DiGraph) – The directed graph capturing the network structure.

  • keep_self_loops (bool) – Determines if the self loops are kept in the determination of structural control.

Returns

The number of driver variables necessary to render the graph structurally controlled.

Return type

(int)

See also

sc()