Skip to main content

optirs_core/
lib.rs

1//! # OptiRS Core - Advanced ML Optimization Built on SciRS2
2//!
3//! **Version:** 0.1.0
4//! **Status:** Stable Release - Production Ready
5//!
6//! `optirs-core` provides state-of-the-art optimization algorithms for machine learning,
7//! built exclusively on the [SciRS2](https://github.com/cool-japan/scirs) scientific computing ecosystem.
8//!
9//! ## Dependencies
10//!
11//! - `scirs2-core` 0.1.1 - Required foundation
12//!
13//! ## Quick Start
14//!
15//! ```rust
16//! use optirs_core::optimizers::{Adam, Optimizer};
17//! use scirs2_core::ndarray::Array1;
18//!
19//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
20//! // Create optimizer
21//! let mut optimizer = Adam::new(0.001);
22//!
23//! // Prepare parameters and gradients
24//! let params = Array1::from_vec(vec![1.0, 2.0, 3.0, 4.0]);
25//! let grads = Array1::from_vec(vec![0.1, 0.2, 0.15, 0.08]);
26//!
27//! // Perform optimization step
28//! let updated_params = optimizer.step(&params, &grads)?;
29//! # Ok(())
30//! # }
31//! ```
32//!
33//! ## Features
34//!
35//! ### 19 State-of-the-Art Optimizers
36//!
37//! **First-Order Methods:**
38//! - **SGD** - Stochastic Gradient Descent with optional momentum
39//! - **SimdSGD** - SIMD-accelerated SGD (2-4x faster)
40//! - **Adam** - Adaptive Moment Estimation
41//! - **AdamW** - Adam with decoupled weight decay
42//! - **AdaDelta** - Adaptive LR without manual tuning ⭐ NEW!
43//! - **AdaBound** - Smooth Adam→SGD transition ⭐ NEW!
44//! - **Ranger** - RAdam + Lookahead combination ⭐ NEW!
45//! - **RMSprop** - Root Mean Square Propagation
46//! - **Adagrad** - Adaptive Gradient Algorithm
47//! - **LAMB** - Layer-wise Adaptive Moments for Batch training
48//! - **LARS** - Layer-wise Adaptive Rate Scaling
49//! - **Lion** - Evolved Sign Momentum
50//! - **Lookahead** - Look ahead optimizer wrapper
51//! - **RAdam** - Rectified Adam
52//! - **SAM** - Sharpness-Aware Minimization
53//! - **SparseAdam** - Adam optimized for sparse gradients
54//! - **GroupedAdam** - Adam with parameter groups
55//!
56//! **Second-Order Methods:**
57//! - **L-BFGS** - Limited-memory BFGS
58//! - **K-FAC** - Kronecker-Factored Approximate Curvature
59//! - **Newton-CG** - Newton Conjugate Gradient ⭐ NEW!
60//!
61//! ### Performance Optimizations (Phase 2 Complete)
62//!
63//! #### SIMD Acceleration (2-4x speedup)
64//! ```rust
65//! use optirs_core::optimizers::{Optimizer, SimdSGD};
66//! use scirs2_core::ndarray::Array1;
67//!
68//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
69//! let params = Array1::from_elem(100_000, 1.0f32);
70//! let grads = Array1::from_elem(100_000, 0.001f32);
71//!
72//! let mut optimizer = SimdSGD::new(0.01f32);
73//! let updated = optimizer.step(&params, &grads)?;
74//! # Ok(())
75//! # }
76//! ```
77//!
78//! #### Parallel Processing (4-8x speedup)
79//! ```rust
80//! use optirs_core::optimizers::{Adam, Optimizer};
81//! use optirs_core::parallel_optimizer::parallel_step_array1;
82//! use scirs2_core::ndarray::Array1;
83//!
84//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
85//! let params_list = vec![
86//!     Array1::from_elem(10_000, 1.0),
87//!     Array1::from_elem(20_000, 1.0),
88//! ];
89//! let grads_list = vec![
90//!     Array1::from_elem(10_000, 0.01),
91//!     Array1::from_elem(20_000, 0.01),
92//! ];
93//!
94//! let mut optimizer = Adam::new(0.001);
95//! let results = parallel_step_array1(&mut optimizer, &params_list, &grads_list)?;
96//! # Ok(())
97//! # }
98//! ```
99//!
100//! #### Memory-Efficient Operations
101//! ```rust
102//! use optirs_core::memory_efficient_optimizer::GradientAccumulator;
103//! use scirs2_core::ndarray::Array1;
104//!
105//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
106//! let mut accumulator = GradientAccumulator::<f32>::new(1000);
107//!
108//! // Accumulate gradients from micro-batches
109//! for _ in 0..4 {
110//!     let micro_grads = Array1::from_elem(1000, 0.1);
111//!     accumulator.accumulate(&micro_grads.view())?;
112//! }
113//!
114//! let avg_grads = accumulator.average()?;
115//! # Ok(())
116//! # }
117//! ```
118//!
119//! #### Production Metrics & Monitoring
120//! ```rust
121//! use optirs_core::optimizer_metrics::{MetricsCollector, MetricsReporter};
122//! use optirs_core::optimizers::{Adam, Optimizer};
123//! use scirs2_core::ndarray::Array1;
124//! use std::time::{Duration, Instant};
125//!
126//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
127//! let mut collector = MetricsCollector::new();
128//! collector.register_optimizer("adam");
129//!
130//! let mut optimizer = Adam::new(0.001);
131//! let params = Array1::from_elem(1000, 1.0);
132//! let grads = Array1::from_elem(1000, 0.01);
133//!
134//! let params_before = params.clone();
135//! let start = Instant::now();
136//! let params = optimizer.step(&params, &grads)?;
137//! let duration = start.elapsed();
138//!
139//! collector.update(
140//!     "adam",
141//!     duration,
142//!     0.001,
143//!     &grads.view(),
144//!     &params_before.view(),
145//!     &params.view(),
146//! )?;
147//!
148//! println!("{}", collector.summary_report());
149//! # Ok(())
150//! # }
151//! ```
152//!
153//! ### Learning Rate Schedulers
154//!
155//! - **ExponentialDecay** - Exponential learning rate decay
156//! - **StepDecay** - Step-wise reduction
157//! - **CosineAnnealing** - Cosine annealing schedule
158//! - **LinearWarmupDecay** - Linear warmup with decay
159//! - **OneCycle** - One cycle learning rate policy
160//!
161//! ### Advanced Features
162//!
163//! - **Parameter Groups** - Different learning rates per layer
164//! - **Gradient Accumulation** - Micro-batch training for large models
165//! - **Gradient Clipping** - Prevent exploding gradients
166//! - **Regularization** - L1, L2, weight decay
167//! - **Privacy-Preserving** - Differential privacy support
168//! - **Distributed Training** - Multi-GPU and TPU coordination
169//! - **Neural Architecture Search** - Automated architecture optimization
170//!
171//! ## Architecture
172//!
173//! ### SciRS2 Foundation
174//!
175//! OptiRS-Core is built **exclusively** on the SciRS2 ecosystem:
176//!
177//! - **Arrays**: Uses `scirs2_core::ndarray` (NOT direct ndarray)
178//! - **Random**: Uses `scirs2_core::random` (NOT direct rand)
179//! - **SIMD**: Uses `scirs2_core::simd_ops` for vectorization
180//! - **Parallel**: Uses `scirs2_core::parallel_ops` for multi-core
181//! - **GPU**: Built on `scirs2_core::gpu` abstractions
182//! - **Metrics**: Uses `scirs2_core::metrics` for monitoring
183//! - **Error Handling**: Uses `scirs2_core::error::Result`
184//!
185//! This integration ensures:
186//! - Type safety across the ecosystem
187//! - Consistent performance optimizations
188//! - Unified error handling
189//! - Simplified dependency management
190//!
191//! ### Module Organization
192//!
193//! - [`optimizers`] - Core optimizer implementations
194//! - [`schedulers`] - Learning rate scheduling
195//! - [`simd_optimizer`] - SIMD-accelerated optimizers
196//! - [`parallel_optimizer`] - Multi-core processing
197//! - [`memory_efficient_optimizer`] - Memory optimization
198//! - [`gpu_optimizer`] - GPU acceleration
199//! - [`optimizer_metrics`] - Performance monitoring
200//! - [`gradient_processing`] - Gradient manipulation
201//! - [`regularizers`] - Regularization techniques
202//! - [`second_order`] - Second-order methods
203//! - [`distributed`] - Distributed training
204//! - [`privacy`] - Privacy-preserving optimization
205//!
206//! ## Performance
207//!
208//! ### Benchmarks
209//!
210//! All benchmarks use [Criterion.rs](https://github.com/bheisler/criterion.rs) with statistical analysis:
211//!
212//! - **optimizer_benchmarks** - Compare all 16 optimizers
213//! - **simd_benchmarks** - SIMD vs scalar performance
214//! - **parallel_benchmarks** - Multi-core scaling
215//! - **memory_efficient_benchmarks** - Memory optimization impact
216//! - **gpu_benchmarks** - GPU vs CPU comparison
217//! - **metrics_benchmarks** - Monitoring overhead
218//!
219//! Run benchmarks:
220//! ```bash
221//! cargo bench --package optirs-core
222//! ```
223//!
224//! ### Test Coverage
225//!
226//! - **549 unit tests** - Core functionality
227//! - **54 doc tests** - Documentation examples
228//! - **603 total tests** - All passing
229//! - **Zero clippy warnings** - Production quality
230//!
231//! ## Examples
232//!
233//! See the `examples/` directory for comprehensive examples:
234//!
235//! - `basic_optimization.rs` - Getting started
236//! - `advanced_optimization.rs` - Schedulers, regularization, clipping
237//! - `performance_optimization.rs` - SIMD, parallel, GPU acceleration
238//! - `production_monitoring.rs` - Metrics and convergence detection
239//!
240//! ## Contributing
241//!
242//! When contributing, ensure:
243//! - **100% SciRS2 usage** - No direct ndarray/rand/rayon imports
244//! - **Zero clippy warnings** - Run `cargo clippy`
245//! - **All tests pass** - Run `cargo test`
246//! - **Documentation** - Add examples to public APIs
247//!
248//! ## License
249//!
250//! licensed under Apache-2.0
251
252#![allow(deprecated)]
253#![allow(unreachable_code)]
254#![allow(unused_mut)]
255#![allow(unused_parens)]
256#![allow(for_loops_over_fallibles)]
257#![allow(unexpected_cfgs)]
258#![allow(unused_attributes)]
259#![allow(missing_docs)]
260
261pub mod adaptive_selection;
262pub mod benchmarking;
263#[cfg(not(target_arch = "wasm32"))]
264pub mod coordination;
265pub mod curriculum_optimization;
266#[cfg(not(target_arch = "wasm32"))]
267pub mod distributed;
268#[cfg(not(target_arch = "wasm32"))]
269pub mod domain_specific;
270pub mod error;
271pub mod gpu_optimizer;
272pub mod gradient_accumulation;
273pub mod gradient_flow;
274pub mod gradient_processing;
275#[cfg(not(target_arch = "wasm32"))]
276pub mod hardware_aware;
277pub mod loss_landscape;
278#[cfg(not(target_arch = "wasm32"))]
279pub mod memory_efficient;
280pub mod memory_efficient_optimizer;
281pub mod metrics;
282pub mod neural_integration;
283#[cfg(not(target_arch = "wasm32"))]
284pub mod neuromorphic;
285pub mod online_learning;
286pub mod optimizer_composition;
287pub mod optimizer_metrics;
288pub mod optimizers;
289#[cfg(not(target_arch = "wasm32"))]
290pub mod parallel_optimizer;
291pub mod parameter_groups;
292#[cfg(not(target_arch = "wasm32"))]
293pub mod plugin;
294#[cfg(not(target_arch = "wasm32"))]
295pub mod privacy;
296pub mod regularizers;
297#[cfg(not(target_arch = "wasm32"))]
298pub mod research;
299pub mod schedulers;
300pub mod second_order;
301pub mod self_tuning;
302pub mod simd_optimizer;
303#[cfg(not(target_arch = "wasm32"))]
304pub mod streaming;
305pub mod training_stabilization;
306pub mod unified_api;
307pub mod utils;
308pub mod visualization;
309
310// Re-export commonly used types
311pub use error::{OptimError, OptimizerError, Result};
312pub use optimizers::*;
313pub use parameter_groups::*;
314pub use regularizers::*;
315pub use schedulers::*;
316pub use unified_api::{OptimizerConfig, OptimizerFactory, Parameter, UnifiedOptimizer};
317
318// Re-export key functionality
319pub use adaptive_selection::{
320    AdaptiveOptimizerSelector, OptimizerStatistics, OptimizerType, PerformanceMetrics,
321    ProblemCharacteristics, ProblemType, SelectionNetwork, SelectionStrategy,
322};
323pub use curriculum_optimization::{
324    AdaptiveCurriculum, AdversarialAttack, AdversarialConfig, CurriculumManager, CurriculumState,
325    CurriculumStrategy, ImportanceWeightingStrategy,
326};
327#[cfg(not(target_arch = "wasm32"))]
328pub use distributed::{
329    AveragingStrategy, CommunicationResult, CompressedGradient, CompressionStrategy,
330    DistributedCoordinator, GradientCompressor, ParameterAverager, ParameterServer,
331};
332#[cfg(not(target_arch = "wasm32"))]
333pub use domain_specific::{
334    CrossDomainKnowledge, DomainOptimizationConfig, DomainPerformanceMetrics, DomainRecommendation,
335    DomainSpecificSelector, DomainStrategy, LearningRateScheduleType, OptimizationContext,
336    RecommendationType, RegularizationApproach, ResourceConstraints, TrainingConfiguration,
337};
338pub use gpu_optimizer::{GpuConfig, GpuMemoryStats, GpuOptimizer, GpuUtils};
339pub use gradient_accumulation::{
340    AccumulationMode, GradientAccumulator as GradAccumulator, MicroBatchTrainer,
341    VariableAccumulator,
342};
343pub use gradient_processing::*;
344pub use memory_efficient_optimizer::{
345    ChunkedOptimizer, GradientAccumulator as MemoryEfficientGradientAccumulator,
346    MemoryUsageEstimator,
347};
348pub use neural_integration::architecture_aware::{
349    ArchitectureAwareOptimizer, ArchitectureStrategy,
350};
351pub use neural_integration::forward_backward::{BackwardHook, ForwardHook, NeuralIntegration};
352pub use neural_integration::{
353    LayerArchitecture, LayerId, OptimizationConfig, ParamId, ParameterManager, ParameterMetadata,
354    ParameterOptimizer, ParameterType,
355};
356pub use online_learning::{
357    ColumnGrowthStrategy, LearningRateAdaptation, LifelongOptimizer, LifelongStats,
358    LifelongStrategy, MemoryExample, MemoryUpdateStrategy, MirrorFunction, OnlineLearningStrategy,
359    OnlineOptimizer, OnlinePerformanceMetrics, SharedKnowledge, TaskGraph,
360};
361pub use optimizer_metrics::{
362    ConvergenceMetrics, GradientStatistics, MetricsCollector, MetricsReporter, OptimizerMetrics,
363    ParameterStatistics,
364};
365#[cfg(not(target_arch = "wasm32"))]
366pub use parallel_optimizer::{
367    parallel_step, parallel_step_array1, ParallelBatchProcessor, ParallelOptimizer,
368};
369#[cfg(not(target_arch = "wasm32"))]
370pub use plugin::core::{
371    create_basic_capabilities, create_plugin_info, OptimizerPluginFactory, PluginCategory,
372    PluginInfo,
373};
374#[cfg(not(target_arch = "wasm32"))]
375pub use plugin::sdk::{BaseOptimizerPlugin, PluginTester};
376#[cfg(not(target_arch = "wasm32"))]
377pub use plugin::{
378    OptimizerPlugin, PluginCapabilities, PluginLoader, PluginRegistry, PluginValidationFramework,
379};
380#[cfg(not(target_arch = "wasm32"))]
381pub use privacy::{
382    AccountingMethod, ClippingStats, DifferentialPrivacyConfig, DifferentiallyPrivateOptimizer,
383    MomentsAccountant, NoiseMechanism, PrivacyBudget, PrivacyValidation,
384};
385pub use second_order::{
386    HessianInfo, Newton, NewtonCG, SecondOrderOptimizer, LBFGS as SecondOrderLBFGS,
387};
388pub use self_tuning::{
389    OptimizerInfo, OptimizerTrait, PerformanceStats, SelfTuningConfig, SelfTuningOptimizer,
390    SelfTuningStatistics, TargetMetric,
391};
392pub use simd_optimizer::{should_use_simd, SimdOptimizer};
393#[cfg(not(target_arch = "wasm32"))]
394pub use streaming::{
395    LearningRateAdaptation as StreamingLearningRateAdaptation, StreamingConfig, StreamingDataPoint,
396    StreamingHealthStatus, StreamingMetrics, StreamingOptimizer,
397};
398pub use training_stabilization::{AveragingMethod, ModelEnsemble, PolyakAverager, WeightAverager};
399pub use visualization::{
400    ColorScheme, ConvergenceInfo, DataSeries, MemoryStats as VisualizationMemoryStats,
401    OptimizationMetric, OptimizationVisualizer, OptimizerComparison, PlotType, VisualizationConfig,
402};
403
404#[cfg(feature = "metrics_integration")]
405pub use metrics::*;