Skip to main content

Module bayesian_network_inference

Module bayesian_network_inference 

Source
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 rand dependency).

§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§

BayesianNetwork
A Bayesian network: a DAG of random variables with CPTs.
BayesianNetworkInference
Bayesian network inference engine.
BniConfig
Configuration for BayesianNetworkInference.
BniStats
Runtime statistics for the inference engine.
ConditionalProbabilityTable
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.
InferenceQuery
A query to the inference engine.
QueryResult
Per-variable result of a Bayesian inference query.
RandomVariable
A discrete random variable with named states.

Enums§

BniError
All errors that can arise during Bayesian network construction or inference.
EliminationOrder
Variable elimination ordering heuristic.
InferenceAlgorithm
Describes which inference algorithm to use.

Functions§

bni_xorshift64
Xorshift64 PRNG — advance state and return next pseudo-random u64.