3 #include "../common.hpp"
27 void setStepSize(
double alpha) noexcept { step_size = alpha; }
44 const bool timing = (this->
recorder_ !=
nullptr);
46 auto start_time = std::chrono::steady_clock::now();
49 for (_iters = 0; _iters < _max_iters; ++_iters) {
50 if (g.norm() < _tol)
break;
52 double alpha = step_size;
53 if (use_line_search) alpha = this->
line_search(x, -g, f, Gradient);
60 double elapsed_ms = 0.0;
62 auto now = std::chrono::steady_clock::now();
63 elapsed_ms = std::chrono::duration<double, std::milli>(now - start_time).count();
72 double step_size = 1e-2;
73 bool use_line_search =
true;
void reset()
Reset recorded size without releasing memory.
Definition: iteration_recorder.hpp:31
void record(int idx, double loss, double grad_norm, double time_ms=0.0)
Record a loss/grad/time entry at iteration index.
Definition: iteration_recorder.hpp:40
Base class for Full Batch Minimizers.
Definition: full_batch_minimizer.hpp:23
double _tol
Definition: full_batch_minimizer.hpp:109
double line_search(V x, V p, VecFun< V, double > &f, GradFun< V > &Gradient)
Backtracking Line Search satisfying Wolfe Conditions.
Definition: full_batch_minimizer.hpp:126
unsigned int _iters
Definition: full_batch_minimizer.hpp:108
::IterationRecorder< CpuBackend > * recorder_
Optional recorder for diagnostics.
Definition: full_batch_minimizer.hpp:110
unsigned int _max_iters
Definition: full_batch_minimizer.hpp:107
Standard Gradient Descent with optional Line Search.
Definition: gd.hpp:15
V solve(V x, VecFun< V, double > &f, GradFun< V > &Gradient) override
Run Gradient Descent.
Definition: gd.hpp:42
void setStepSize(double alpha) noexcept
Sets the constant step size.
Definition: gd.hpp:27
void useLineSearch(bool enable) noexcept
Enables or disables Line Search.
Definition: gd.hpp:33
std::function< T(T)> GradFun
Gradient function type alias (T -> T).
Definition: common.hpp:32
std::function< W(T)> VecFun
Objective function type alias (T -> W).
Definition: common.hpp:35