| GSS | R Documentation |
Golden Section Search (GSS) is a useful algorithm for minimising a
continuous univariate function f(x) over an interval
\left[a,b\right] in instances where the first derivative
f'(x) is not easily obtainable, such as with loss functions
that need to be minimised under cross-validation to tune a
hyperparameter in a machine learning model. The method is described
by \insertCiteFox21;textualskedastic.
GSS(f, a, b, tol = 1e-08, maxitgss = 100L, ...)
f |
A function of one variable that returns a numeric value |
a |
A numeric of length 1 representing the lower endpoint of the search interval |
b |
A numeric of length 1 representing the upper endpoint of the
search interval; must be greater than |
tol |
A numeric of length 1 representing the tolerance used to determine when the search interval has been narrowed sufficiently for convergence |
maxitgss |
An integer of length 1 representing the maximum number of iterations to use in the search |
... |
Additional arguments to pass to |
This function is modelled after a MATLAB function written by \insertCiteZarnowiec22;textualskedastic. The method assumes that there is one local minimum in this interval. The solution produced is also an interval, the width of which can be made arbitrarily small by setting a tolerance value. Since the desired solution is a single point, the midpoint of the final interval can be taken as the best approximation to the solution.
The premise of the method is to shorten the interval
\left[a,b\right] by comparing the values of the function at two
test points, x_1 < x_2, where x_1 = a + r(b-a) and
x_2 = b - r(b-a), and r=(\sqrt{5}-1)/2\approx 0.618 is the
reciprocal of the golden ratio. One compares f(x_1) to f(x_2)
and updates the search interval \left[a,b\right] as follows:
If f(x_1)<f(x_2), the solution cannot lie in
\left[x_2,b\right];
thus, update the search interval to
\left[a_\mathrm{new},b_\mathrm{new}\right]=\left[a,x_2\right]
If f(x_1)>f(x_2), the solution cannot lie in
\left[a,x_1\right];
thus, update the search interval to
\left[a_\mathrm{new},b_\mathrm{new}\right]=\left[x_1,b\right]
One then chooses two new test points by replacing a and b with
a_\mathrm{new} and b_\mathrm{new} and recalculating x_1
and x_2 based on these new endpoints. One continues iterating in
this fashion until b-a< \tau, where \tau is the desired
tolerance.
A list object containing the following:
argmin, the argument of f that minimises f
funmin, the minimum value of f achieved at argmin
converged, a logical indicating whether the convergence tolerance
was satisfied
iterations, an integer indicating the number of search iterations
used
goldsect is similar to this function, but does
not allow the user to pass additional arguments to f
f <- function(x) (x - 1) ^ 2
GSS(f, a = 0, b = 2)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.