scirs2_optimize/unconstrained/
result.rs

1//! Result structure for unconstrained optimization
2
3use ndarray::{Array1, Array2};
4
5/// Result structure for optimization algorithms
6#[derive(Debug, Clone)]
7pub struct OptimizeResult<T> {
8    /// Solution vector
9    pub x: Array1<f64>,
10    /// Objective function value at solution
11    pub fun: T,
12    /// Number of iterations performed
13    pub iterations: usize,
14    /// Number of iterations (alternative name)
15    pub nit: usize,
16    /// Number of function evaluations
17    pub func_evals: usize,
18    /// Number of function evaluations (alternative name)
19    pub nfev: usize,
20    /// Whether optimization was successful
21    pub success: bool,
22    /// Status message
23    pub message: String,
24    /// Gradient at solution (optional)
25    pub jacobian: Option<Array1<f64>>,
26    /// Hessian at solution (optional)
27    pub hessian: Option<Array2<f64>>,
28}
29
30impl<T: Default> Default for OptimizeResult<T> {
31    fn default() -> Self {
32        Self {
33            x: Array1::zeros(0),
34            fun: T::default(),
35            iterations: 0,
36            nit: 0,
37            func_evals: 0,
38            nfev: 0,
39            success: false,
40            message: String::new(),
41            jacobian: None,
42            hessian: None,
43        }
44    }
45}