lmi_solver_rs/lib.rs
1//! # lmi-solver-rs
2//!
3//! LMI (Linear Matrix Inequality) solver using the Ellipsoid Method.
4//!
5//! This crate provides an implementation of an LMI feasibility oracle that
6//! can be used with the ellipsoid method from [ellalgo-rs](https://github.com/luk036/ellalgo-rs)
7//! to solve optimization problems with Linear Matrix Inequality constraints.
8//!
9//! ## Modules
10//!
11//! - [`ldlt_mgr`] - LDL^T factorization manager for positive definiteness checking
12//! - [`lmi_oracle`] - Linear Matrix Inequality (LMI) feasibility oracle
13//!
14//! ## Usage
15//!
16//! ```rust,ignore
17//! use ellalgo_rs::arr::Arr;
18//! use ellalgo_rs::cutting_plane::OracleFeas;
19//! use lmi_solver_rs::lmi_oracle::LMIOracle;
20//! use ndarray::Array2;
21//!
22//! let f = vec![
23//! Array2::from_shape_vec((2, 2), vec![-7.0, -11.0, -11.0, 3.0]).unwrap(),
24//! Array2::from_shape_vec((2, 2), vec![7.0, -18.0, -18.0, 8.0]).unwrap(),
25//! Array2::from_shape_vec((2, 2), vec![-2.0, -8.0, -8.0, 1.0]).unwrap(),
26//! ];
27//! let b = Array2::from_shape_vec((2, 2), vec![33.0, -9.0, -9.0, 26.0]).unwrap();
28//! let mut oracle = LMIOracle::new(f, b);
29//! let x = Arr::from(vec![1.0, 1.0, 1.0]);
30//! let cut = oracle.assess_feas(&x);
31//! assert!(cut.is_some());
32//! ```
33
34pub mod ldlt_mgr;
35pub mod lmi_oracle;