use crate::DType;
use numr::runtime::Runtime;
use numr::tensor::Tensor;
use crate::optimize::minimize::TensorMinimizeResult;
#[derive(Debug, Clone)]
pub struct TrustRegionOptions {
pub initial_trust_radius: f64,
pub max_trust_radius: f64,
pub eta: f64,
pub gtol: f64,
pub max_iter: usize,
}
impl Default for TrustRegionOptions {
fn default() -> Self {
Self {
initial_trust_radius: 1.0,
max_trust_radius: 1000.0,
eta: 0.15,
gtol: 1e-8,
max_iter: 200,
}
}
}
#[derive(Debug, Clone)]
pub struct TrustRegionResult<R: Runtime<DType = DType>> {
pub x: Tensor<R>,
pub fun: f64,
pub grad: Tensor<R>,
pub iterations: usize,
pub converged: bool,
pub trust_radius: f64,
pub nfev: usize,
}
impl<R: Runtime<DType = DType>> From<TrustRegionResult<R>> for TensorMinimizeResult<R> {
fn from(result: TrustRegionResult<R>) -> Self {
TensorMinimizeResult {
x: result.x,
fun: result.fun,
iterations: result.iterations,
nfev: result.nfev,
converged: result.converged,
}
}
}