scirs2_optimize/
lib.rs

1//! Optimization module for SciRS
2//!
3//! This module provides implementations of various optimization algorithms,
4//! modeled after SciPy's `optimize` module.
5//!
6
7#![allow(clippy::field_reassign_with_default)]
8//! ## Submodules
9//!
10//! * `unconstrained`: Unconstrained optimization algorithms
11//! * `constrained`: Constrained optimization algorithms
12//! * `least_squares`: Least squares minimization
13//! * `roots`: Root finding algorithms
14//!
15//! ## Examples
16//!
17//! ```
18//! // Example of minimizing a function using BFGS
19//! use ndarray::array;
20//! use scirs2_optimize::unconstrained::{minimize, Method};
21//!
22//! fn rosenbrock(x: &[f64]) -> f64 {
23//!     let a = 1.0;
24//!     let b = 100.0;
25//!     let x0 = x[0];
26//!     let x1 = x[1];
27//!     (a - x0).powi(2) + b * (x1 - x0.powi(2)).powi(2)
28//! }
29//!
30//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
31//! let initial_guess = array![0.0, 0.0];
32//! let result = minimize(rosenbrock, &initial_guess, Method::BFGS, None)?;
33//!
34//! println!("Solution: {:?}", result.x);
35//! println!("Function value at solution: {}", result.fun);
36//! println!("Number of iterations: {}", result.nit);
37//! println!("Success: {}", result.success);
38//! # Ok(())
39//! # }
40//! ```
41
42// Export error types
43pub mod error;
44pub use error::{OptimizeError, OptimizeResult};
45
46// Module structure
47pub mod constrained;
48pub mod least_squares;
49pub mod roots;
50pub mod roots_anderson;
51pub mod roots_krylov;
52pub mod unconstrained;
53
54// Common optimization result structure
55pub mod result;
56pub use result::OptimizeResults;
57
58// Convenience re-exports for common functions
59pub use constrained::minimize_constrained;
60pub use least_squares::least_squares;
61pub use roots::root;
62pub use unconstrained::minimize;
63
64// Prelude module for convenient imports
65pub mod prelude {
66    pub use crate::constrained::{minimize_constrained, Method as ConstrainedMethod};
67    pub use crate::error::{OptimizeError, OptimizeResult};
68    pub use crate::least_squares::{least_squares, Method as LeastSquaresMethod};
69    pub use crate::result::OptimizeResults;
70    pub use crate::roots::{root, Method as RootMethod};
71    pub use crate::unconstrained::{minimize, Method as UnconstrainedMethod};
72}
73
74#[cfg(test)]
75mod tests {
76    #[test]
77    fn it_works() {
78        assert_eq!(2 + 2, 4);
79    }
80}