pub struct FuncEval<T, H> { /* private fields */ }Implementations§
Source§impl<T, H> FuncEval<T, H>
Auto-generated by derive_getters::Getters.
impl<T, H> FuncEval<T, H>
Auto-generated by derive_getters::Getters.
Sourcepub fn f(&self) -> &Floating
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
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}Sourcepub fn g(&self) -> &T
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
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§impl<T, H> FuncEval<T, H>
impl<T, H> FuncEval<T, H>
Sourcepub fn new(f: Floating, g: T) -> Self
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
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}Trait Implementations§
Auto Trait Implementations§
impl<T, H> Freeze for FuncEval<T, H>
impl<T, H> RefUnwindSafe for FuncEval<T, H>where
T: RefUnwindSafe,
H: RefUnwindSafe,
impl<T, H> Send for FuncEval<T, H>
impl<T, H> Sync for FuncEval<T, H>
impl<T, H> Unpin for FuncEval<T, H>
impl<T, H> UnwindSafe for FuncEval<T, H>where
T: UnwindSafe,
H: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
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
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
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.