pub struct EllCalc {
pub helper: EllCalcCore,
pub use_parallel_cut: bool,
/* private fields */
}Expand description
The EllCalc struct represents an ellipsoid search space in Rust.
EllCalc = {x | (x - xc)^T mq^-1 (x - xc) \le \kappa}
Properties:
n_f: Then_fproperty is a floating-point number that represents the dimensionality of the search space. It indicates the number of variables or dimensions in the ellipsoid search space.helper: Thehelperproperty is of typeEllCalcCoreand is used to perform calculations related to the ellipsoid search space. It is a separate struct that contains the necessary methods and data for these calculations.use_parallel_cut: A boolean flag indicating whether to use parallel cut or not.
Fields§
§helper: EllCalcCore§use_parallel_cut: boolImplementations§
Source§impl EllCalc
impl EllCalc
Sourcepub fn new(n: usize) -> EllCalc
pub fn new(n: usize) -> EllCalc
The new function constructs a new EllCalc object with a given value for n_f and sets the
use_parallel_cut flag to true.
Arguments:
n_f: The parametern_fis a floating-point number that is used to initialize theEllCalcstruct.
Returns:
The new function is returning an instance of the EllCalc struct.
§Examples:
use ellalgo_rs::ell_calc::EllCalc;
let ell_calc = EllCalc::new(4);
assert!(ell_calc.use_parallel_cut);Sourcepub fn calc_single_or_parallel_bias_cut(
&self,
beta: &(f64, Option<f64>),
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_single_or_parallel_bias_cut( &self, beta: &(f64, Option<f64>), tsq: f64, ) -> (CutStatus, (f64, f64, f64))
The function calculates the updating of an ellipsoid with a single or parallel-cut.
Arguments:
beta: Thebetaparameter is a tuple containing two values:beta0andbeta1_opt.beta0is of typef64andbeta1_optis an optional value of typeOption<f64>.tsq: Thetsqparameter is a reference to af64value.
Sourcepub fn calc_single_or_parallel_central_cut(
&self,
beta: &(f64, Option<f64>),
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_single_or_parallel_central_cut( &self, beta: &(f64, Option<f64>), tsq: f64, ) -> (CutStatus, (f64, f64, f64))
The function calculates the updating of an ellipsoid with a single or parallel-cut (one of them is central-cut).
Arguments:
beta: Thebetaparameter is a tuple containing two values:f64andOption<f64>. The first value, denoted as_b0, is of typef64. The second value,beta1_opt, is of typeOption<f64>.tsq: Thetsqparameter is a reference to af64value.
Sourcepub fn calc_single_or_parallel_q(
&self,
beta: &(f64, Option<f64>),
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_single_or_parallel_q( &self, beta: &(f64, Option<f64>), tsq: f64, ) -> (CutStatus, (f64, f64, f64))
The function calculates the updating of an ellipsoid with a single or parallel-cut (discrete version).
Arguments:
beta: Thebetaparameter is a tuple containing two values:beta0andbeta1_opt.beta0is of typef64andbeta1_optis an optional value of typeOption<f64>.tsq: Thetsqparameter is a reference to af64value.
Sourcepub fn calc_parallel_bias_cut(
&self,
beta0: f64,
beta1: f64,
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_parallel_bias_cut( &self, beta0: f64, beta1: f64, tsq: f64, ) -> (CutStatus, (f64, f64, f64))
Parallel Deep Cut
§Examples:
use approx_eq::assert_approx_eq;
use ellalgo_rs::ell_calc::EllCalc;
use ellalgo_rs::cutting_plane::CutStatus;
let ell_calc = EllCalc::new(4);
let (status, _result) = ell_calc.calc_parallel_bias_cut(0.07, 0.03, 0.01);
assert_eq!(status, CutStatus::NoSoln);
let (status, (rho, sigma, delta)) = ell_calc.calc_parallel_bias_cut(0.0, 0.05, 0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.8);
assert_approx_eq!(rho, 0.02);
assert_approx_eq!(delta, 1.2);
let (status, (rho, sigma, delta)) = ell_calc.calc_parallel_bias_cut(0.05, 0.11, 0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.8);
assert_approx_eq!(rho, 0.06);
assert_approx_eq!(delta, 0.8);
let (status, (rho, sigma, delta)) = ell_calc.calc_parallel_bias_cut(0.01, 0.04, 0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.928);
assert_approx_eq!(rho, 0.0232);
assert_approx_eq!(delta, 1.232);Sourcepub fn calc_parallel_q(
&self,
beta0: f64,
beta1: f64,
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_parallel_q( &self, beta0: f64, beta1: f64, tsq: f64, ) -> (CutStatus, (f64, f64, f64))
Discrete Parallel Deep Cut
§Examples:
use approx_eq::assert_approx_eq;
use ellalgo_rs::ell_calc::EllCalc;
use ellalgo_rs::cutting_plane::CutStatus;
let ell_calc = EllCalc::new(4);
let (status, _result) = ell_calc.calc_parallel_q(-0.07, 0.07, 0.01);
assert_eq!(status, CutStatus::NoEffect);
let (status, _result) = ell_calc.calc_parallel_q(-0.04, 0.0625, 0.01);
assert_eq!(status, CutStatus::NoEffect);Sourcepub fn calc_parallel_central_cut(
&self,
beta1: f64,
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_parallel_central_cut( &self, beta1: f64, tsq: f64, ) -> (CutStatus, (f64, f64, f64))
Parallel Central Cut
§Examples:
use approx_eq::assert_approx_eq;
use ellalgo_rs::ell_calc::EllCalc;
use ellalgo_rs::cutting_plane::CutStatus;
let ell_calc = EllCalc::new(4);
let (status, (rho, sigma, delta)) = ell_calc.calc_parallel_central_cut(0.11, 0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.4);
assert_approx_eq!(rho, 0.02);
assert_approx_eq!(delta, 16.0 / 15.0);
let (status, (rho, sigma, delta)) = ell_calc.calc_parallel_central_cut(0.05, 0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.8);
assert_approx_eq!(rho, 0.02);
assert_approx_eq!(delta, 1.2);Sourcepub fn calc_bias_cut(&self, beta: f64, tsq: f64) -> (CutStatus, (f64, f64, f64))
pub fn calc_bias_cut(&self, beta: f64, tsq: f64) -> (CutStatus, (f64, f64, f64))
Deep Cut
§Examples:
use approx_eq::assert_approx_eq;
use ellalgo_rs::ell_calc::EllCalc;
use ellalgo_rs::cutting_plane::CutStatus;
let ell_calc = EllCalc::new(4);
let (status, _result) = ell_calc.calc_bias_cut(0.11, 0.01);
assert_eq!(status, CutStatus::NoSoln);
let (status, _result) = ell_calc.calc_bias_cut(0.0, 0.01);
assert_eq!(status, CutStatus::Success);
let (status, (rho, sigma, delta)) = ell_calc.calc_bias_cut(0.05, 0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.8);
assert_approx_eq!(rho, 0.06);
assert_approx_eq!(delta, 0.8);Sourcepub fn calc_bias_cut_q(
&self,
beta: f64,
tsq: f64,
) -> (CutStatus, (f64, f64, f64))
pub fn calc_bias_cut_q( &self, beta: f64, tsq: f64, ) -> (CutStatus, (f64, f64, f64))
Discrete Deep Cut
§Examples:
use approx_eq::assert_approx_eq;
use ellalgo_rs::ell_calc::EllCalc;
use ellalgo_rs::cutting_plane::CutStatus;
let ell_calc = EllCalc::new(4);
let (status, _result) = ell_calc.calc_bias_cut_q(-0.05, 0.01);
assert_eq!(status, CutStatus::NoEffect);Sourcepub fn calc_central_cut(&self, tsq: f64) -> (CutStatus, (f64, f64, f64))
pub fn calc_central_cut(&self, tsq: f64) -> (CutStatus, (f64, f64, f64))
Central Cut
§Examples:
use approx_eq::assert_approx_eq;
use ellalgo_rs::ell_calc::EllCalc;
use ellalgo_rs::cutting_plane::CutStatus;
let ell_calc = EllCalc::new(4);
let (status, (rho, sigma, delta)) = ell_calc.calc_central_cut(0.01);
assert_eq!(status, CutStatus::Success);
assert_approx_eq!(sigma, 0.4);
assert_approx_eq!(rho, 0.02);
assert_approx_eq!(delta, 16.0 / 15.0);