scirs2_graph/reliability/mod.rs
1//! Network reliability analysis.
2//!
3//! This module provides algorithms for computing and estimating the reliability
4//! of networks under random component (edge) failures.
5//!
6//! ## Problem setting
7//!
8//! Each edge `e` in the graph independently fails with probability `1 − p_e`
9//! (survives with probability `p_e`). Network reliability questions ask: what
10//! is the probability that the surviving edges satisfy some connectivity
11//! criterion?
12//!
13//! | Struct | Question |
14//! |--------|----------|
15//! | [`NetworkReliability`] | P(source `s` can reach terminal `t`) — two-terminal reliability |
16//! | [`AllTerminalReliability`] | P(all nodes mutually reachable) — all-terminal reliability |
17//! | [`ReliabilityPolynomial`] | Exact polynomial in `p` for small networks via inclusion-exclusion |
18//! | [`BDD`] | Exact reliability via binary decision diagrams (BDD) |
19//!
20//! ## Example
21//! ```rust,no_run
22//! use scirs2_core::ndarray::Array2;
23//! use scirs2_graph::reliability::{NetworkReliability, AllTerminalReliability};
24//!
25//! // Triangle graph: 0-1, 1-2, 0-2
26//! let mut adj = Array2::<f64>::zeros((3, 3));
27//! adj[[0,1]] = 0.9; adj[[1,0]] = 0.9;
28//! adj[[1,2]] = 0.8; adj[[2,1]] = 0.8;
29//! adj[[0,2]] = 0.7; adj[[2,0]] = 0.7;
30//!
31//! let rel = NetworkReliability::new(0, 2);
32//! let estimate = rel.monte_carlo(&adj, 10000, Some(42)).unwrap();
33//! println!("Two-terminal reliability ≈ {estimate:.4}");
34//!
35//! let all_rel = AllTerminalReliability::new();
36//! let est2 = all_rel.monte_carlo(&adj, 10000, Some(42)).unwrap();
37//! println!("All-terminal reliability ≈ {est2:.4}");
38//! ```
39
40pub mod network_reliability;
41
42pub use network_reliability::{
43 AllTerminalReliability, ComponentFailureTree, NetworkReliability, ReliabilityPolynomial, BDD,
44};
45
46pub mod reliability_extra;
47
48pub use reliability_extra::{
49 all_terminal_reliability_factoring, k_edge_connectivity, k_vertex_connectivity,
50 min_cut_reliability_bound, reliability_polynomial, two_terminal_reliability,
51};