amari_optimization/
lib.rs

1//! # Amari Optimization
2//!
3//! Advanced optimization algorithms and techniques for mathematical computing.
4//!
5//! This crate provides a comprehensive suite of optimization algorithms designed for
6//! integration with the Amari mathematical computing ecosystem. It supports:
7//!
8//! ## Features
9//!
10//! - **Linear Programming**: Simplex method, interior-point methods
11//! - **Nonlinear Optimization**: Gradient descent, Newton's method, quasi-Newton methods
12//! - **Constrained Optimization**: Penalty methods, barrier methods, Lagrange multipliers
13//! - **Metaheuristics**: Genetic algorithms, simulated annealing, particle swarm optimization
14//! - **Convex Optimization**: Specialized algorithms for convex problems
15//! - **Multi-objective Optimization**: Pareto optimization, NSGA-II
16//! - **GPU Acceleration**: WGPU-based parallel optimization for large-scale problems
17//! - **Geometric Algebra Integration**: Optimization in geometric algebra spaces
18//!
19//! ## Usage
20//!
21//! ```rust,no_run
22//! use amari_optimization::prelude::*;
23//!
24//! // Define an objective function
25//! let objective = |x: &[f64]| x[0].powi(2) + x[1].powi(2);
26//!
27//! // Set up optimization problem (to be implemented)
28//! // let problem = OptimizationProblem::new(objective)
29//! //     .with_bounds(vec![(-10.0, 10.0), (-10.0, 10.0)])
30//! //     .with_initial_guess(vec![1.0, 1.0]);
31//! //
32//! // // Solve using gradient descent (to be implemented)
33//! // let result = GradientDescent::default().solve(problem)?;
34//! # Ok::<(), Box<dyn std::error::Error>>(())
35//! ```
36//!
37//! ## Integration with Amari Ecosystem
38//!
39//! This crate is designed to work seamlessly with other Amari components:
40//!
41//! - [`amari-core`]: Geometric algebra operations and multivectors
42//! - [`amari-dual`]: Automatic differentiation for gradient computation
43//! - [`amari-tropical`]: Optimization in tropical semirings
44//! - [`amari-gpu`]: GPU acceleration for large-scale optimization
45//!
46//! [`amari-core`]: https://docs.rs/amari-core
47//! [`amari-dual`]: https://docs.rs/amari-dual
48//! [`amari-tropical`]: https://docs.rs/amari-tropical
49//! [`amari-gpu`]: https://docs.rs/amari-gpu
50
51#![cfg_attr(not(feature = "std"), no_std)]
52#![warn(missing_docs)]
53#![warn(clippy::all)]
54
55#[cfg(feature = "std")]
56extern crate std;
57
58#[cfg(not(feature = "std"))]
59extern crate alloc;
60
61#[cfg(not(feature = "std"))]
62use alloc::string::String;
63
64use thiserror::Error;
65
66/// Main error type for optimization operations
67#[derive(Error, Debug)]
68pub enum OptimizationError {
69    /// Convergence failure
70    #[error("Optimization failed to converge after {iterations} iterations")]
71    ConvergenceFailure {
72        /// Number of iterations attempted
73        iterations: usize,
74    },
75    /// Invalid problem specification
76    #[error("Invalid optimization problem: {message}")]
77    InvalidProblem {
78        /// Error message
79        message: String,
80    },
81    /// Numerical error during computation
82    #[error("Numerical error: {message}")]
83    NumericalError {
84        /// Error message
85        message: String,
86    },
87    /// GPU computation error
88    #[cfg(feature = "gpu")]
89    #[error("GPU optimization error: {0}")]
90    GpuError(#[from] amari_gpu::UnifiedGpuError),
91
92    /// Invalid input parameters
93    #[error("Invalid input: {0}")]
94    InvalidInput(String),
95
96    /// Computation failed
97    #[error("Computation failed: {0}")]
98    ComputationFailed(String),
99}
100
101/// Optimization solution containing result data and metadata
102#[derive(Debug, Clone)]
103pub struct OptimizationSolution {
104    /// The optimal solution found
105    pub solution: Vec<f64>,
106    /// Final objective function value
107    pub objective_value: f64,
108    /// Number of iterations performed
109    pub iterations: usize,
110    /// Whether the algorithm converged
111    pub converged: bool,
112    /// Final gradient norm (if available)
113    pub gradient_norm: Option<f64>,
114}
115
116/// Result type for optimization operations
117pub type OptimizationResult<T> = Result<T, OptimizationError>;
118
119/// Phantom types for compile-time optimization state verification
120pub mod phantom;
121
122/// Natural gradient optimization on statistical manifolds
123pub mod natural_gradient;
124
125/// Core optimization traits and types
126pub mod core {}
127
128/// Linear programming algorithms
129pub mod linear {}
130
131/// Nonlinear optimization algorithms
132pub mod nonlinear {}
133
134/// Constrained optimization methods
135pub mod constrained;
136
137/// Metaheuristic optimization algorithms
138pub mod metaheuristics {}
139
140/// Convex optimization specializations
141pub mod convex {}
142
143/// Multi-objective optimization
144pub mod multiobjective;
145
146/// GPU-accelerated optimization
147#[cfg(feature = "gpu")]
148pub mod gpu;
149
150/// Geometric algebra optimization
151pub mod geometric {}
152
153/// Tropical optimization
154pub mod tropical;
155
156/// Utility functions and helpers
157pub mod utils {}
158
159/// Convenient re-exports for common usage
160pub mod prelude {
161    pub use crate::{OptimizationError, OptimizationResult, OptimizationSolution};
162
163    // Phantom types for compile-time safety
164    pub use crate::phantom::{
165        Constrained, ConstraintState, Convex, ConvexityState, Euclidean, HandlesConstrained,
166        HandlesMultiObjective, HandlesStatistical, HandlesUnconstrained, ManifoldState,
167        MultiObjective, NonConvex, ObjectiveState, OptimizationProblem, RequiresConvex, Riemannian,
168        SingleObjective, Statistical, Unconstrained,
169    };
170
171    // Natural gradient optimization
172    pub use crate::natural_gradient::{
173        NaturalGradientConfig, NaturalGradientOptimizer, NaturalGradientResult, ObjectiveWithFisher,
174    };
175
176    // Tropical optimization
177    pub use crate::tropical::{
178        scheduling::TropicalScheduler, TropicalConfig, TropicalConstraint, TropicalObjective,
179        TropicalOptimizer, TropicalResult,
180    };
181
182    // Multi-objective optimization
183    pub use crate::multiobjective::{
184        Individual, MultiObjectiveConfig, MultiObjectiveFunction, MultiObjectiveResult, NsgaII,
185        ParetoFront,
186    };
187
188    // Constrained optimization
189    pub use crate::constrained::{
190        ConstrainedConfig, ConstrainedObjective, ConstrainedOptimizer, ConstrainedResult,
191        PenaltyMethod,
192    };
193
194    // GPU-accelerated optimization
195    #[cfg(feature = "gpu")]
196    pub use crate::gpu::{GpuMultiObjectiveOptimizer, GpuOptimizer};
197}
198
199// Error types are already defined above and don't need re-export
200
201#[cfg(test)]
202mod tests {
203    use super::*;
204
205    #[test]
206    fn test_error_creation() {
207        let error = OptimizationError::ConvergenceFailure { iterations: 1000 };
208        assert!(error.to_string().contains("1000"));
209
210        let error = OptimizationError::InvalidProblem {
211            message: "test".to_string(),
212        };
213        assert!(error.to_string().contains("test"));
214    }
215}