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}