KGBN Optimizer¶
KGBN optimizes PBN rule probabilities against experimental measurements.
Overview¶
Optimization requires:
a
ProbabilisticBNobject,an experiment CSV or parsed experiment list,
optional
nodes_to_optimizeto restrict which node probabilities can vary.
Basic Usage¶
import KGBN
pbn = KGBN.load_pbn_from_file("network.txt")
optimizer = KGBN.ParameterOptimizer(
pbn,
"experiments.csv",
nodes_to_optimize=["Cas3"],
verbose=False,
normalize=False,
)
result = optimizer.optimize(method="differential_evolution")
if result.success:
optimized_pbn = optimizer.get_optimized_pbn(result)
Experimental Data¶
Experiment CSV files describe perturbations and measurements:
Experiments,Stimuli,Stimuli_efficacy,Inhibitors,Inhibitors_efficacy,Measured_nodes,Measured_values
1,TGFa,1,TNFa,1,"NFkB,ERK,C8,Akt","0.7,0.88,0,1"
2,TNFa,1,TGFa,1,"NFkB,ERK,C8,Akt","0.3,0.12,1,0"
Important columns:
Stimuli: nodes fixed to 1.Stimuli_efficacy: optional efficacy values from 0 to 1.Inhibitors: nodes fixed to 0.Inhibitors_efficacy: optional efficacy values from 0 to 1.Measured_nodes: measured node names or a formula.Measured_values: target values for measured nodes or the formula.
Formula-Based Measurements¶
Use a formula when the objective should fit an aggregate phenotype-like score instead of individual node values.
optimizer = KGBN.ParameterOptimizer(
pbn,
"experiments.csv",
nodes_to_optimize=["nodeX"],
Measured_formula="nodeA + nodeB - nodeC",
normalize=True,
)
Formulas support +, -, *, /, parentheses. Formula variables must match network node names.
Configuration¶
KGBN currently supports differential evolution and particle swarm optimization.
Pass method-specific parameters through config:
config = {
"seed": 9,
"success_threshold": 0.005,
"max_try": 3,
"de_params": {
"maxiter": 500,
"popsize": 15,
"workers": -1,
"early_stopping": True,
},
"pso_params": {
"n_particles": 30,
"iters": 100,
"options": {"c1": 0.5, "c2": 0.3, "w": 0.9},
},
"steady_state": {
"method": "monte_carlo",
"monte_carlo_params": {
"n_runs": 10,
"n_steps": 1000,
},
},
}
optimizer = KGBN.ParameterOptimizer(pbn, "experiments.csv", config=config)
result = optimizer.optimize(method="differential_evolution")
Results And Evaluation¶
The optimizer returns a SciPy-style result object with fields such as
success, message, x, fun, history, nfev, and nit.
Plot optimization history:
optimizer.plot_optimization_history(
result,
save_path="optimization_history.png",
show_stagnation=True,
log_scale=True,
)
Evaluate the optimized model:
evaluator = KGBN.evaluate_optimization_result(
result,
optimizer,
output_dir="evaluation_results",
plot_residuals=True,
save=True,
detailed=True,
)
See Also¶
References¶
Trairatphisan, P., et al. (2014). “optPBN: An Optimisation Toolbox for Probabilistic Boolean Networks.” PLOS ONE 9(7): e98001.