Struct FuncEval

Source
pub struct FuncEval<T, H> { /* private fields */ }

Implementations§

Source§

impl<T, H> FuncEval<T, H>

Auto-generated by derive_getters::Getters.

Source

pub fn f(&self) -> &Floating

Get field f from instance of FuncEval.

Examples found in repository?
examples/quadratic.rs (line 38)
4fn main() {
5    // Setting up log verbosity and _
6    std::env::set_var("RUST_LOG", "debug");
7    let _ = Tracer::default().with_normal_stdout_layer().build();
8    // Setting up the oracle
9    let matrix = DMatrix::from_vec(2, 2, vec![1., 0., 0., 1.]);
10    let f_and_g = |x: &DVector<f64>| -> FuncEvalMultivariate {
11        let f = x.dot(&(&matrix * x));
12        let g = 2. * &matrix * x;
13        FuncEvalMultivariate::new(f, g)
14    };
15    // Setting up the line search
16    let mut ls = MoreThuente::default();
17    // Setting up the main solver, with its parameters and the initial guess
18    let tol = 1e-6;
19    let x0 = DVector::from_vec(vec![1., 1.]);
20    let mut solver = BFGS::new(tol, x0);
21    // Running the solver
22    let max_iter_solver = 100;
23    let max_iter_line_search = 10;
24    let callback = None;
25    solver
26        .minimize(
27            &mut ls,
28            f_and_g,
29            max_iter_solver,
30            max_iter_line_search,
31            callback,
32        )
33        .unwrap();
34    // Printing the result
35    let x = solver.x();
36    let eval = f_and_g(x);
37    println!("x: {:?}", x);
38    println!("f(x): {}", eval.f());
39    println!("g(x): {:?}", eval.g());
40    assert_eq!(eval.f(), &0.0);
41}
More examples
Hide additional examples
examples/quadratic_with_plots.rs (line 47)
6fn main() {
7    // Setting up log verbosity and _.
8    std::env::set_var("RUST_LOG", "debug");
9    let _ = Tracer::default().with_normal_stdout_layer().build();
10    // Setting up the oracle
11    let matrix = DMatrix::from_vec(2, 2, vec![100., 0., 0., 100.]);
12    let mut f_and_g = |x: &DVector<f64>| -> FuncEvalMultivariate {
13        let f = x.dot(&(&matrix * x));
14        let g = 2. * &matrix * x;
15        FuncEvalMultivariate::new(f, g)
16    };
17    // Setting up the line search
18    let armijo_factr = 1e-4;
19    let beta = 0.5; // (beta in (0, 1), ntice that beta = 0.5 corresponds to bisection)
20    let mut ls = BackTracking::new(armijo_factr, beta);
21    // Setting up the main solver, with its parameters and the initial guess
22    let tol = 1e-6;
23    let x0 = DVector::from_vec(vec![10., 10.]);
24    let mut solver = GradientDescent::new(tol, x0);
25    // We define a callback to store iterates and function evaluations
26    let mut iterates = vec![];
27    let mut solver_callback = |s: &GradientDescent| {
28        iterates.push(s.x().clone());
29    };
30    // Running the solver
31    let max_iter_solver = 100;
32    let max_iter_line_search = 10;
33
34    solver
35        .minimize(
36            &mut ls,
37            f_and_g,
38            max_iter_solver,
39            max_iter_line_search,
40            Some(&mut solver_callback),
41        )
42        .unwrap();
43    // Printing the result
44    let x = solver.x();
45    let eval = f_and_g(x);
46    println!("x: {:?}", x);
47    println!("f(x): {}", eval.f());
48    println!("g(x): {:?}", eval.g());
49
50    // Plotting the iterates
51    let n = 50;
52    let start = -5.0;
53    let end = 5.0;
54    let plotter = Plotter3d::new(start, end, start, end, n)
55        .append_plot(&mut f_and_g, "Objective function", 0.5)
56        .append_scatter_points(&mut f_and_g, &iterates, "Iterates")
57        .set_layout_size(1600, 1000);
58    plotter.build("quadratic.html");
59}
Source

pub fn g(&self) -> &T

Get field g from instance of FuncEval.

Examples found in repository?
examples/quadratic.rs (line 39)
4fn main() {
5    // Setting up log verbosity and _
6    std::env::set_var("RUST_LOG", "debug");
7    let _ = Tracer::default().with_normal_stdout_layer().build();
8    // Setting up the oracle
9    let matrix = DMatrix::from_vec(2, 2, vec![1., 0., 0., 1.]);
10    let f_and_g = |x: &DVector<f64>| -> FuncEvalMultivariate {
11        let f = x.dot(&(&matrix * x));
12        let g = 2. * &matrix * x;
13        FuncEvalMultivariate::new(f, g)
14    };
15    // Setting up the line search
16    let mut ls = MoreThuente::default();
17    // Setting up the main solver, with its parameters and the initial guess
18    let tol = 1e-6;
19    let x0 = DVector::from_vec(vec![1., 1.]);
20    let mut solver = BFGS::new(tol, x0);
21    // Running the solver
22    let max_iter_solver = 100;
23    let max_iter_line_search = 10;
24    let callback = None;
25    solver
26        .minimize(
27            &mut ls,
28            f_and_g,
29            max_iter_solver,
30            max_iter_line_search,
31            callback,
32        )
33        .unwrap();
34    // Printing the result
35    let x = solver.x();
36    let eval = f_and_g(x);
37    println!("x: {:?}", x);
38    println!("f(x): {}", eval.f());
39    println!("g(x): {:?}", eval.g());
40    assert_eq!(eval.f(), &0.0);
41}
More examples
Hide additional examples
examples/quadratic_with_plots.rs (line 48)
6fn main() {
7    // Setting up log verbosity and _.
8    std::env::set_var("RUST_LOG", "debug");
9    let _ = Tracer::default().with_normal_stdout_layer().build();
10    // Setting up the oracle
11    let matrix = DMatrix::from_vec(2, 2, vec![100., 0., 0., 100.]);
12    let mut f_and_g = |x: &DVector<f64>| -> FuncEvalMultivariate {
13        let f = x.dot(&(&matrix * x));
14        let g = 2. * &matrix * x;
15        FuncEvalMultivariate::new(f, g)
16    };
17    // Setting up the line search
18    let armijo_factr = 1e-4;
19    let beta = 0.5; // (beta in (0, 1), ntice that beta = 0.5 corresponds to bisection)
20    let mut ls = BackTracking::new(armijo_factr, beta);
21    // Setting up the main solver, with its parameters and the initial guess
22    let tol = 1e-6;
23    let x0 = DVector::from_vec(vec![10., 10.]);
24    let mut solver = GradientDescent::new(tol, x0);
25    // We define a callback to store iterates and function evaluations
26    let mut iterates = vec![];
27    let mut solver_callback = |s: &GradientDescent| {
28        iterates.push(s.x().clone());
29    };
30    // Running the solver
31    let max_iter_solver = 100;
32    let max_iter_line_search = 10;
33
34    solver
35        .minimize(
36            &mut ls,
37            f_and_g,
38            max_iter_solver,
39            max_iter_line_search,
40            Some(&mut solver_callback),
41        )
42        .unwrap();
43    // Printing the result
44    let x = solver.x();
45    let eval = f_and_g(x);
46    println!("x: {:?}", x);
47    println!("f(x): {}", eval.f());
48    println!("g(x): {:?}", eval.g());
49
50    // Plotting the iterates
51    let n = 50;
52    let start = -5.0;
53    let end = 5.0;
54    let plotter = Plotter3d::new(start, end, start, end, n)
55        .append_plot(&mut f_and_g, "Objective function", 0.5)
56        .append_scatter_points(&mut f_and_g, &iterates, "Iterates")
57        .set_layout_size(1600, 1000);
58    plotter.build("quadratic.html");
59}
Source

pub fn hessian(&self) -> &Option<H>

Get field hessian from instance of FuncEval.

Source§

impl<T, H> FuncEval<T, H>

Source

pub fn new(f: Floating, g: T) -> Self

Examples found in repository?
examples/quadratic.rs (line 13)
4fn main() {
5    // Setting up log verbosity and _
6    std::env::set_var("RUST_LOG", "debug");
7    let _ = Tracer::default().with_normal_stdout_layer().build();
8    // Setting up the oracle
9    let matrix = DMatrix::from_vec(2, 2, vec![1., 0., 0., 1.]);
10    let f_and_g = |x: &DVector<f64>| -> FuncEvalMultivariate {
11        let f = x.dot(&(&matrix * x));
12        let g = 2. * &matrix * x;
13        FuncEvalMultivariate::new(f, g)
14    };
15    // Setting up the line search
16    let mut ls = MoreThuente::default();
17    // Setting up the main solver, with its parameters and the initial guess
18    let tol = 1e-6;
19    let x0 = DVector::from_vec(vec![1., 1.]);
20    let mut solver = BFGS::new(tol, x0);
21    // Running the solver
22    let max_iter_solver = 100;
23    let max_iter_line_search = 10;
24    let callback = None;
25    solver
26        .minimize(
27            &mut ls,
28            f_and_g,
29            max_iter_solver,
30            max_iter_line_search,
31            callback,
32        )
33        .unwrap();
34    // Printing the result
35    let x = solver.x();
36    let eval = f_and_g(x);
37    println!("x: {:?}", x);
38    println!("f(x): {}", eval.f());
39    println!("g(x): {:?}", eval.g());
40    assert_eq!(eval.f(), &0.0);
41}
More examples
Hide additional examples
examples/quadratic_with_plots.rs (line 15)
6fn main() {
7    // Setting up log verbosity and _.
8    std::env::set_var("RUST_LOG", "debug");
9    let _ = Tracer::default().with_normal_stdout_layer().build();
10    // Setting up the oracle
11    let matrix = DMatrix::from_vec(2, 2, vec![100., 0., 0., 100.]);
12    let mut f_and_g = |x: &DVector<f64>| -> FuncEvalMultivariate {
13        let f = x.dot(&(&matrix * x));
14        let g = 2. * &matrix * x;
15        FuncEvalMultivariate::new(f, g)
16    };
17    // Setting up the line search
18    let armijo_factr = 1e-4;
19    let beta = 0.5; // (beta in (0, 1), ntice that beta = 0.5 corresponds to bisection)
20    let mut ls = BackTracking::new(armijo_factr, beta);
21    // Setting up the main solver, with its parameters and the initial guess
22    let tol = 1e-6;
23    let x0 = DVector::from_vec(vec![10., 10.]);
24    let mut solver = GradientDescent::new(tol, x0);
25    // We define a callback to store iterates and function evaluations
26    let mut iterates = vec![];
27    let mut solver_callback = |s: &GradientDescent| {
28        iterates.push(s.x().clone());
29    };
30    // Running the solver
31    let max_iter_solver = 100;
32    let max_iter_line_search = 10;
33
34    solver
35        .minimize(
36            &mut ls,
37            f_and_g,
38            max_iter_solver,
39            max_iter_line_search,
40            Some(&mut solver_callback),
41        )
42        .unwrap();
43    // Printing the result
44    let x = solver.x();
45    let eval = f_and_g(x);
46    println!("x: {:?}", x);
47    println!("f(x): {}", eval.f());
48    println!("g(x): {:?}", eval.g());
49
50    // Plotting the iterates
51    let n = 50;
52    let start = -5.0;
53    let end = 5.0;
54    let plotter = Plotter3d::new(start, end, start, end, n)
55        .append_plot(&mut f_and_g, "Objective function", 0.5)
56        .append_scatter_points(&mut f_and_g, &iterates, "Iterates")
57        .set_layout_size(1600, 1000);
58    plotter.build("quadratic.html");
59}
Source§

impl FuncEval<Matrix<f64, Dyn, Const<1>, VecStorage<f64, Dyn, Const<1>>>, Matrix<f64, Dyn, Dyn, VecStorage<f64, Dyn, Dyn>>>

Source

pub fn with_hessian(self, hessian: DMatrix<Floating>) -> Self

Source

pub fn take_hessian(&mut self) -> DMatrix<Floating>

Trait Implementations§

Source§

impl<T: Debug, H: Debug> Debug for FuncEval<T, H>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T, H> Freeze for FuncEval<T, H>
where T: Freeze, H: Freeze,

§

impl<T, H> RefUnwindSafe for FuncEval<T, H>

§

impl<T, H> Send for FuncEval<T, H>
where T: Send, H: Send,

§

impl<T, H> Sync for FuncEval<T, H>
where T: Sync, H: Sync,

§

impl<T, H> Unpin for FuncEval<T, H>
where T: Unpin, H: Unpin,

§

impl<T, H> UnwindSafe for FuncEval<T, H>
where T: UnwindSafe, H: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<SS, SP> SupersetOf<SS> for SP
where SS: SubsetOf<SP>,

Source§

fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more
Source§

fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).
Source§

fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.
Source§

fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more