Steady State Calculation Guide

This guide summarizes how to compute steady-state behavior for Boolean Networks (BNs) and Probabilistic Boolean Networks (PBNs) in KGBN.

Overview

Use KGBN.SteadyStateCalculator after loading a network. The calculator selects deterministic attractor finding for BNs and supports Monte Carlo or two-state Markov chain (TSMC) estimation for PBNs.

Quick Start

import KGBN

pbn_string = """
N1 = N1, 1
N2 = N2, 1
N3 = N1, 0.6
N3 = N1 & !N2, 0.4
"""

pbn = KGBN.load_network(pbn_string, initial_state=[1, 1, 0])
calc = KGBN.SteadyStateCalculator(pbn)

steady_state = calc.compute_steady_state(
    method="monte_carlo",
    n_runs=20,
    n_steps=10000,
    p_noise=0.05,
    seed=9,
)

print(steady_state)

Methods

Monte Carlo

Monte Carlo runs independent simulations and averages the second half of each trajectory.

Common parameters:

  • n_runs: number of independent runs.

  • n_steps: simulation steps per run.

  • p_noise: probability of random state flips.

  • seed: random seed.

steady_state = calc.compute_steady_state(
    method="monte_carlo",
    n_runs=20,
    n_steps=10000,
    p_noise=0.05,
    seed=9,
)

TSMC

TSMC estimates steady state with transition-probability criteria and can be faster for large PBNs.

Common parameters:

  • epsilon: convergence threshold.

  • r: accuracy range.

  • s: probability of accuracy.

  • p_mir: perturbation probability.

  • initial_nsteps: initial simulation length.

  • max_iterations: maximum convergence iterations.

  • freeze_constant: whether self-loop nodes should stay fixed.

steady_state = calc.compute_steady_state(
    method="tsmc",
    epsilon=0.001,
    r=0.01,
    p_mir=0.01,
    initial_nsteps=100,
    max_iterations=5000,
    freeze_constant=False,
    seed=9,
)

Deterministic Attractors

For deterministic BNs, KGBN finds fixed points and cyclic attractors.

bn = KGBN.load_network("network.txt", network_type="bn")
calc = KGBN.SteadyStateCalculator(bn)

attractors = calc.compute_steady_state(
    method="deterministic",
    n_runs=100,
    n_steps=1000,
    verbose=True,
    seed=9,
)

print(attractors["fixed_points"])
print(attractors["cyclic_attractors"])

Experimental Conditions

Use experimental conditions to fix stimuli to 1 and inhibitors to 0 before steady-state calculation. Partial efficacy values are supported for Monte Carlo simulation.

calc.set_experimental_conditions(
    stimuli=["N1"],
    stimuli_efficacy=[0.8],
    inhibitors=["N2"],
    inhibitors_efficacy=[0.5],
)

perturbed_state = calc.compute_steady_state(
    method="monte_carlo",
    n_runs=20,
    n_steps=10000,
    p_noise=0.05,
    seed=9,
)

calc.reset_network_conditions()

See Also