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(¶ms, &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(¶ms, &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, ¶ms_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(µ_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(¶ms, &grads)?;
137//! let duration = start.elapsed();
138//!
139//! collector.update(
140//! "adam",
141//! duration,
142//! 0.001,
143//! &grads.view(),
144//! ¶ms_before.view(),
145//! ¶ms.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//! Dual-licensed under MIT OR 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;
263pub mod coordination;
264pub mod curriculum_optimization;
265pub mod distributed;
266pub mod domain_specific;
267pub mod error;
268pub mod gpu_optimizer;
269pub mod gradient_accumulation;
270pub mod gradient_processing;
271pub mod hardware_aware;
272pub mod memory_efficient;
273pub mod memory_efficient_optimizer;
274pub mod metrics;
275pub mod neural_integration;
276pub mod neuromorphic;
277pub mod online_learning;
278pub mod optimizer_composition;
279pub mod optimizer_metrics;
280pub mod optimizers;
281pub mod parallel_optimizer;
282pub mod parameter_groups;
283pub mod plugin;
284pub mod privacy;
285pub mod regularizers;
286pub mod research;
287pub mod schedulers;
288pub mod second_order;
289pub mod self_tuning;
290pub mod simd_optimizer;
291pub mod streaming;
292pub mod training_stabilization;
293pub mod unified_api;
294pub mod utils;
295pub mod visualization;
296
297// Re-export commonly used types
298pub use error::{OptimError, OptimizerError, Result};
299pub use optimizers::*;
300pub use parameter_groups::*;
301pub use regularizers::*;
302pub use schedulers::*;
303pub use unified_api::{OptimizerConfig, OptimizerFactory, Parameter, UnifiedOptimizer};
304
305// Re-export key functionality
306pub use adaptive_selection::{
307 AdaptiveOptimizerSelector, OptimizerStatistics, OptimizerType, PerformanceMetrics,
308 ProblemCharacteristics, ProblemType, SelectionNetwork, SelectionStrategy,
309};
310pub use curriculum_optimization::{
311 AdaptiveCurriculum, AdversarialAttack, AdversarialConfig, CurriculumManager, CurriculumState,
312 CurriculumStrategy, ImportanceWeightingStrategy,
313};
314pub use distributed::{
315 AveragingStrategy, CommunicationResult, CompressedGradient, CompressionStrategy,
316 DistributedCoordinator, GradientCompressor, ParameterAverager, ParameterServer,
317};
318pub use domain_specific::{
319 CrossDomainKnowledge, DomainOptimizationConfig, DomainPerformanceMetrics, DomainRecommendation,
320 DomainSpecificSelector, DomainStrategy, LearningRateScheduleType, OptimizationContext,
321 RecommendationType, RegularizationApproach, ResourceConstraints, TrainingConfiguration,
322};
323pub use gpu_optimizer::{GpuConfig, GpuMemoryStats, GpuOptimizer, GpuUtils};
324pub use gradient_accumulation::{
325 AccumulationMode, GradientAccumulator as GradAccumulator, MicroBatchTrainer,
326 VariableAccumulator,
327};
328pub use gradient_processing::*;
329pub use memory_efficient_optimizer::{
330 ChunkedOptimizer, GradientAccumulator as MemoryEfficientGradientAccumulator,
331 MemoryUsageEstimator,
332};
333pub use neural_integration::architecture_aware::{
334 ArchitectureAwareOptimizer, ArchitectureStrategy,
335};
336pub use neural_integration::forward_backward::{BackwardHook, ForwardHook, NeuralIntegration};
337pub use neural_integration::{
338 LayerArchitecture, LayerId, OptimizationConfig, ParamId, ParameterManager, ParameterMetadata,
339 ParameterOptimizer, ParameterType,
340};
341pub use online_learning::{
342 ColumnGrowthStrategy, LearningRateAdaptation, LifelongOptimizer, LifelongStats,
343 LifelongStrategy, MemoryExample, MemoryUpdateStrategy, MirrorFunction, OnlineLearningStrategy,
344 OnlineOptimizer, OnlinePerformanceMetrics, SharedKnowledge, TaskGraph,
345};
346pub use optimizer_metrics::{
347 ConvergenceMetrics, GradientStatistics, MetricsCollector, MetricsReporter, OptimizerMetrics,
348 ParameterStatistics,
349};
350pub use parallel_optimizer::{
351 parallel_step, parallel_step_array1, ParallelBatchProcessor, ParallelOptimizer,
352};
353pub use plugin::core::{
354 create_basic_capabilities, create_plugin_info, OptimizerPluginFactory, PluginCategory,
355 PluginInfo,
356};
357pub use plugin::sdk::{BaseOptimizerPlugin, PluginTester};
358pub use plugin::{
359 OptimizerPlugin, PluginCapabilities, PluginLoader, PluginRegistry, PluginValidationFramework,
360};
361pub use privacy::{
362 AccountingMethod, ClippingStats, DifferentialPrivacyConfig, DifferentiallyPrivateOptimizer,
363 MomentsAccountant, NoiseMechanism, PrivacyBudget, PrivacyValidation,
364};
365pub use second_order::{
366 HessianInfo, Newton, NewtonCG, SecondOrderOptimizer, LBFGS as SecondOrderLBFGS,
367};
368pub use self_tuning::{
369 OptimizerInfo, OptimizerTrait, PerformanceStats, SelfTuningConfig, SelfTuningOptimizer,
370 SelfTuningStatistics, TargetMetric,
371};
372pub use simd_optimizer::{should_use_simd, SimdOptimizer};
373pub use streaming::{
374 LearningRateAdaptation as StreamingLearningRateAdaptation, StreamingConfig, StreamingDataPoint,
375 StreamingHealthStatus, StreamingMetrics, StreamingOptimizer,
376};
377pub use training_stabilization::{AveragingMethod, ModelEnsemble, PolyakAverager, WeightAverager};
378pub use visualization::{
379 ColorScheme, ConvergenceInfo, DataSeries, MemoryStats as VisualizationMemoryStats,
380 OptimizationMetric, OptimizationVisualizer, OptimizerComparison, PlotType, VisualizationConfig,
381};
382
383#[cfg(feature = "metrics_integration")]
384pub use metrics::*;