Expand description
Bayesian Network Inference — variable elimination, belief propagation, and sampling-based inference over discrete Bayesian networks.
§Overview
A BayesianNetwork is a directed acyclic graph (DAG) of discrete random
variables where each variable has a ConditionalProbabilityTable (CPT)
that encodes P(variable | parents). Given observed Evidence, the
BayesianNetworkInference engine answers marginal-probability queries
using one of three algorithms:
- Variable Elimination — exact inference by successive factor multiplication and marginalization.
- Belief Propagation — sum-product message passing (exact on trees, approximate on loopy graphs).
- Sampling — rejection / likelihood-weighting sampling with a
reproducible xorshift64 PRNG (no
randdependency).
§Example
use ipfrs_tensorlogic::bayesian_network_inference::{
BayesianNetwork, BayesianNetworkInference, BniConfig, ConditionalProbabilityTable,
EliminationOrder, Evidence, Factor, InferenceAlgorithm, InferenceQuery, RandomVariable,
};
use std::collections::HashMap;
// Build a tiny Rain → Wet-Grass network.
let rain = RandomVariable { id: "Rain".into(), states: vec!["T".into(), "F".into()], cardinality: 2 };
let wet = RandomVariable { id: "Wet".into(), states: vec!["T".into(), "F".into()], cardinality: 2 };
// P(Rain)
let f_rain = Factor {
id: "f_rain".into(),
variables: vec!["Rain".into()],
values: vec![0.2, 0.8],
shape: vec![2],
};
let cpt_rain = ConditionalProbabilityTable {
variable: "Rain".into(),
parents: vec![],
factor: f_rain,
};
// P(Wet | Rain) — rows: Rain=T, Rain=F; cols: Wet=T, Wet=F
let f_wet = Factor {
id: "f_wet".into(),
variables: vec!["Rain".into(), "Wet".into()],
values: vec![0.9, 0.1, 0.2, 0.8],
shape: vec![2, 2],
};
let cpt_wet = ConditionalProbabilityTable {
variable: "Wet".into(),
parents: vec!["Rain".into()],
factor: f_wet,
};
let mut variables = HashMap::new();
variables.insert("Rain".into(), rain);
variables.insert("Wet".into(), wet);
let mut adjacency = HashMap::new();
adjacency.insert("Wet".into(), vec!["Rain".into()]);
let net = BayesianNetwork {
variables,
cpts: vec![cpt_rain, cpt_wet],
adjacency,
};
let config = BniConfig::default();
let mut engine = BayesianNetworkInference::new(net, config).expect("example: should succeed in docs");
let query = InferenceQuery {
query_variables: vec!["Rain".into()],
evidence: vec![],
algorithm: InferenceAlgorithm::VariableElimination,
};
let results = engine.query(&query).expect("example: should succeed in docs");
assert_eq!(results.len(), 1);
let rain_dist = &results[0].distribution;
assert!((rain_dist[0].1 - 0.2).abs() < 1e-9);Structs§
- Bayesian
Network - A Bayesian network: a DAG of random variables with CPTs.
- Bayesian
Network Inference - Bayesian network inference engine.
- BniConfig
- Configuration for
BayesianNetworkInference. - BniStats
- Runtime statistics for the inference engine.
- Conditional
Probability Table - A conditional probability table encoding P(variable | parents).
- Evidence
- A single piece of observed evidence.
- Factor
- A factor (un-normalised joint distribution table) over a set of variables.
- Inference
Query - A query to the inference engine.
- Query
Result - Per-variable result of a Bayesian inference query.
- Random
Variable - A discrete random variable with named states.
Enums§
- BniError
- All errors that can arise during Bayesian network construction or inference.
- Elimination
Order - Variable elimination ordering heuristic.
- Inference
Algorithm - Describes which inference algorithm to use.
Functions§
- bni_
xorshift64 - Xorshift64 PRNG — advance state and return next pseudo-random u64.