Golden-section search

Last updated
Diagram of a golden-section search. The initial triplet of x values is {x1, x2, x3}. If f(x4) = f4a, the triplet {x1, x2, x4} is chosen for the next iteration. If f(x4) = f4b, the triplet {x2, x4, x3} is chosen. GoldenSectionSearch.png
Diagram of a golden-section search. The initial triplet of x values is {x1, x2, x3}. If f(x4) = f4a, the triplet {x1, x2, x4} is chosen for the next iteration. If f(x4) = f4b, the triplet {x2, x4, x3} is chosen.

The golden-section search is a technique for finding an extremum (minimum or maximum) of a function inside a specified interval. For a strictly unimodal function with an extremum inside the interval, it will find that extremum, while for an interval containing multiple extrema (possibly including the interval boundaries), it will converge to one of them. If the only extremum on the interval is on a boundary of the interval, it will converge to that boundary point. The method operates by successively narrowing the range of values on the specified interval, which makes it relatively slow, but very robust. The technique derives its name from the fact that the algorithm maintains the function values for four points whose three interval widths are in the ratio φ:1:φ, where φ is the golden ratio. These ratios are maintained for each iteration and are maximally efficient. Excepting boundary points, when searching for a minimum, the central point is always less than or equal to the outer points, assuring that a minimum is contained between the outer points. The converse is true when searching for a maximum. The algorithm is the limit of Fibonacci search (also described below) for many function evaluations. Fibonacci search and golden-section search were discovered by Kiefer (1953) (see also Avriel and Wilde (1966)).

Contents

Basic idea

The discussion here is posed in terms of searching for a minimum (searching for a maximum is similar) of a unimodal function. Unlike finding a zero, where two function evaluations with opposite sign are sufficient to bracket a root, when searching for a minimum, three values are necessary. The golden-section search is an efficient way to progressively reduce the interval locating the minimum. The key is to observe that regardless of how many points have been evaluated, the minimum lies within the interval defined by the two points adjacent to the point with the least value so far evaluated.

The diagram above illustrates a single step in the technique for finding a minimum. The functional values of are on the vertical axis, and the horizontal axis is the x parameter. The value of has already been evaluated at the three points: , , and . Since is smaller than either or , it is clear that a minimum lies inside the interval from to .

The next step in the minimization process is to "probe" the function by evaluating it at a new value of x, namely . It is most efficient to choose somewhere inside the largest interval, i.e. between and . From the diagram, it is clear that if the function yields , then a minimum lies between and , and the new triplet of points will be , , and . However, if the function yields the value , then a minimum lies between and , and the new triplet of points will be , , and . Thus, in either case, we can construct a new narrower search interval that is guaranteed to contain the function's minimum.

Probe point selection

From the diagram above, it is seen that the new search interval will be either between and with a length of a + c, or between and with a length of b. The golden-section search requires that these intervals be equal. If they are not, a run of "bad luck" could lead to the wider interval being used many times, thus slowing down the rate of convergence. To ensure that b = a + c, the algorithm should choose .

However, there still remains the question of where should be placed in relation to and . The golden-section search chooses the spacing between these points in such a way that these points have the same proportion of spacing as the subsequent triple or . By maintaining the same proportion of spacing throughout the algorithm, we avoid a situation in which is very close to or and guarantee that the interval width shrinks by the same constant proportion in each step.

Mathematically, to ensure that the spacing after evaluating is proportional to the spacing prior to that evaluation, if is and our new triplet of points is , , and , then we want

However, if is and our new triplet of points is , , and , then we want

Eliminating c from these two simultaneous equations yields

or

where φ is the golden ratio:

The appearance of the golden ratio in the proportional spacing of the evaluation points is how this search algorithm gets its name.

Termination condition

Any number of termination conditions may be applied, depending upon the application. The interval ΔX = X4X1 is a measure of the absolute error in the estimation of the minimum X and may be used to terminate the algorithm. The value of ΔX is reduced by a factor of r = φ − 1 for each iteration, so the number of iterations to reach an absolute error of ΔX is about ln(ΔXX0) / ln(r), where ΔX0 is the initial value of ΔX.

Because smooth functions are flat (their first derivative is close to zero) near a minimum, attention must be paid not to expect too great an accuracy in locating the minimum. The termination condition provided in the book Numerical Recipes in C is based on testing the gaps among , , and , terminating when within the relative accuracy bounds

where is a tolerance parameter of the algorithm, and is the absolute value of . The check is based on the bracket size relative to its central value, because that relative error in is approximately proportional to the squared absolute error in in typical cases. For that same reason, the Numerical Recipes text recommends that , where is the required absolute precision of .

Algorithm

Note! The examples here describe an algorithm that is for finding the minimum of a function. For maximum, the comparison operators need to be reversed.

Iterative algorithm

Diagram of the golden section search for a minimum. The initial interval enclosed by X1 and X4 is divided into three intervals, and f[X] is evaluated at each of the four Xi. The two intervals containing the minimum of f(Xi) are then selected, and a third interval and functional value are calculated, and the process is repeated until termination conditions are met. The three interval widths are always in the ratio c:cr:c where r = ph - 1 = 0.618... and c = 1 - r = 0.382..., ph being the golden ratio. This choice of interval ratios is the only one that allows the ratios to be maintained during an iteration. Diagram of a golden section search.jpg
Diagram of the golden section search for a minimum. The initial interval enclosed by X1 and X4 is divided into three intervals, and f[X] is evaluated at each of the four Xi. The two intervals containing the minimum of f(Xi) are then selected, and a third interval and functional value are calculated, and the process is repeated until termination conditions are met. The three interval widths are always in the ratio c:cr:c where r = φ − 1 = 0.618... and c = 1 − r = 0.382..., φ being the golden ratio. This choice of interval ratios is the only one that allows the ratios to be maintained during an iteration.
  1. Specify the function to be minimized, , the interval to be searched as {X1,X4}, and their functional values F1 and F4.
  2. Calculate an interior point and its functional value F2. The two interval lengths are in the ratio c : r or r : c where r = φ − 1; and c = 1 − r, with φ being the golden ratio.
  3. Using the triplet, determine if convergence criteria are fulfilled. If they are, estimate the X at the minimum from that triplet and return.
  4. From the triplet, calculate the other interior point and its functional value. The three intervals will be in the ratio .
  5. The three points for the next iteration will be the one where F is a minimum, and the two points closest to it in X.
  6. Go to step 3.
"""Python program for golden section search.  This implementationdoes not reuse function evaluations and assumes the minimum is cor d (not on the edges at a or b)"""importmathinvphi=(math.sqrt(5)-1)/2# 1 / phidefgss(f,a,b,tolerance=1e-5):"""    Golden-section search    to find the minimum of f on [a,b]    * f: a strictly unimodal function on [a,b]    Example:    >>> def f(x): return (x - 2) ** 2    >>> x = gss(f, 1, 5)    >>> print(f"{x:.5f}")    2.00000    """whileb-a>tolerance:c=b-(b-a)*invphid=a+(b-a)*invphiiff(c)<f(d):b=delse:# f(c) > f(d) to find the maximuma=creturn(b+a)/2
// a and c define range to search// func(x) returns value of function at x to be minimizedfunctiongoldenSection(a,c,func){functionsplit(x1,x2){returnx1+0.6180339887498949*(x2-x1);}varb=split(a,c);varbv=func(b);while(a!=c){varx=split(a,b);varxv=func(x);if(xv<bv){bv=xv;c=b;b=x;}else{a=c;c=x;}}returnb;}functiontest(x){return-Math.sin(x);}console.log(goldenSection(0,3,test));// prints PI/2
"""Python program for golden section search.  This implementationdoes not reuse function evaluations and assumes the minimum is cor d (not on the edges at a or b)"""importmathinvphi=(math.sqrt(5)-1)/2# 1 / phiinvphi2=(3-math.sqrt(5))/2# 1 / phi^2defgss(f,a,b,tolerance=1e-5):"""    Golden-section search.    Given a function f with a single local minimum in    the interval [a,b], gss returns a subset interval    [c,d] that contains the minimum with d-c <= tolerance.    Example:    >>> def f(x): return (x - 2) ** 2    >>> print(*gss(f, a=1, b=5, tolerance=1e-5))    1.9999959837979107 2.0000050911830893    """a,b=min(a,b),max(a,b)h=b-aifh<=tolerance:return(a,b)# Required steps to achieve tolerancen=int(math.ceil(math.log(tolerance/h)/math.log(invphi)))c,d=a+invphi2*h,a+invphi*hyc,yd=f(c),f(d)for_inrange(n-1):h*=invphiifyc<yd:b,d=d,cyd=ycc=a+invphi2*hyc=f(c)else:# yc > yd to find the maximuma,c=c,dyc=ydd=a+invphi*hyd=f(d)return(a,d)ifyc<ydelse(c,b)

Recursive algorithm

publicclassGoldenSectionSearch{publicstaticfinaldoubleinvphi=(Math.sqrt(5.0)-1)/2.0;publicstaticfinaldoubleinvphi2=(3-Math.sqrt(5.0))/2.0;publicinterfaceFunction{doubleof(doublex);}// Returns subinterval of [a,b] containing minimum of fpublicstaticdouble[]gss(Functionf,doublea,doubleb,doubletol){returngss(f,a,b,tol,b-a,true,0,0,true,0,0);}privatestaticdouble[]gss(Functionf,doublea,doubleb,doubletol,doubleh,booleannoC,doublec,doublefc,booleannoD,doubled,doublefd){if(Math.abs(h)<=tol){returnnewdouble[]{a,b};}if(noC){c=a+invphi2*h;fc=f.of(c);}if(noD){d=a+invphi*h;fd=f.of(d);}if(fc<fd){// fc > fd to find the maximumreturngss(f,a,d,tol,h*invphi,true,0,0,false,c,fc);}else{returngss(f,c,b,tol,h*invphi,false,d,fd,true,0,0);}}publicstaticvoidmain(String[]args){Functionf=(x)->Math.pow(x-2,2);doublea=1;doubleb=5;doubletol=1e-5;double[]ans=gss(f,a,b,tol);System.out.println("["+ans[0]+","+ans[1]+"]");// [1.9999959837979107,2.0000050911830893]}}
importmathinvphi=(math.sqrt(5)-1)/2# 1 / phiinvphi2=(3-math.sqrt(5))/2# 1 / phi^2defgssrec(f,a,b,tol=1e-5,h=None,c=None,d=None,fc=None,fd=None):"""Golden-section search, recursive.    Given a function f with a single local minimum in    the interval [a, b], gss returns a subset interval    [c, d] that contains the minimum with d-c <= tol.    Example:    >>> f = lambda x: (x - 2) ** 2    >>> a = 1    >>> b = 5    >>> tol = 1e-5    >>> (c, d) = gssrec(f, a, b, tol)    >>> print (c, d)    1.9999959837979107 2.0000050911830893    """(a,b)=(min(a,b),max(a,b))ifhisNone:h=b-aifh<=tol:return(a,b)ifcisNone:c=a+invphi2*hifdisNone:d=a+invphi*hiffcisNone:fc=f(c)iffdisNone:fd=f(d)iffc<fd:# fc > fd to find the maximumreturngssrec(f,a,d,tol,h*invphi,c=None,fc=None,d=c,fd=fc)else:returngssrec(f,c,b,tol,h*invphi,c=d,fc=fd,d=None,fd=None)

A very similar algorithm can also be used to find the extremum (minimum or maximum) of a sequence of values that has a single local minimum or local maximum. In order to approximate the probe positions of golden section search while probing only integer sequence indices, the variant of the algorithm for this case typically maintains a bracketing of the solution in which the length of the bracketed interval is a Fibonacci number. For this reason, the sequence variant of golden section search is often called Fibonacci search .

Fibonacci search was first devised by Kiefer (1953) as a minimax search for the maximum (minimum) of a unimodal function in an interval.

Bisection method

The Bisection method is a similar algorithm for finding a zero of a function. Note that, for bracketing a zero, only two points are needed, rather than three. The interval ratio decreases by 2 in each step, rather than by the golden ratio.

See also

Related Research Articles

<span class="mw-page-title-main">AVL tree</span> Self-balancing binary search tree

In computer science, an AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Lookup, insertion, and deletion all take O(log n) time in both the average and worst cases, where is the number of nodes in the tree prior to the operation. Insertions and deletions may require the tree to be rebalanced by one or more tree rotations.

<span class="mw-page-title-main">Golden ratio</span> Number, approximately 1.618

In mathematics, two quantities are in the golden ratio if their ratio is the same as the ratio of their sum to the larger of the two quantities. Expressed algebraically, for quantities and with , is in a golden ratio to if

<span class="mw-page-title-main">Logarithm</span> Mathematical function, inverse of an exponential function

In mathematics, the logarithm to baseb is the inverse function of exponentiation with base b. That means that the logarithm of a number x to the base b is the exponent to which b must be raised to produce x. For example, since 1000 = 103, the logarithm base  of 1000 is 3, or log10 (1000) = 3. The logarithm of x to base b is denoted as logb (x), or without parentheses, logbx. When the base is clear from the context or is irrelevant it is sometimes written log x.

In mathematics, the mean value theorem states, roughly, that for a given planar arc between two endpoints, there is at least one point at which the tangent to the arc is parallel to the secant through its endpoints. It is one of the most important results in real analysis. This theorem is used to prove statements about a function on an interval starting from local hypotheses about derivatives at points of the interval.

<span class="mw-page-title-main">Normal distribution</span> Probability distribution

In probability theory and statistics, a normal distribution or Gaussian distribution is a type of continuous probability distribution for a real-valued random variable. The general form of its probability density function is The parameter is the mean or expectation of the distribution, while the parameter is the variance. The standard deviation of the distribution is (sigma). A random variable with a Gaussian distribution is said to be normally distributed, and is called a normal deviate.

<span class="mw-page-title-main">Haar wavelet</span> First known wavelet basis

In mathematics, the Haar wavelet is a sequence of rescaled "square-shaped" functions which together form a wavelet family or basis. Wavelet analysis is similar to Fourier analysis in that it allows a target function over an interval to be represented in terms of an orthonormal basis. The Haar sequence is now recognised as the first known wavelet basis and is extensively used as a teaching example.

The calculus of variations is a field of mathematical analysis that uses variations, which are small changes in functions and functionals, to find maxima and minima of functionals: mappings from a set of functions to the real numbers. Functionals are often expressed as definite integrals involving functions and their derivatives. Functions that maximize or minimize functionals may be found using the Euler–Lagrange equation of the calculus of variations.

In calculus, integration by substitution, also known as u-substitution, reverse chain rule or change of variables, is a method for evaluating integrals and antiderivatives. It is the counterpart to the chain rule for differentiation, and can loosely be thought of as using the chain rule "backwards."

<span class="mw-page-title-main">Multiplicative inverse</span> Number which when multiplied by x equals 1

In mathematics, a multiplicative inverse or reciprocal for a number x, denoted by 1/x or x−1, is a number which when multiplied by x yields the multiplicative identity, 1. The multiplicative inverse of a fraction a/b is b/a. For the multiplicative inverse of a real number, divide 1 by the number. For example, the reciprocal of 5 is one fifth (1/5 or 0.2), and the reciprocal of 0.25 is 1 divided by 0.25, or 4. The reciprocal function, the function f(x) that maps x to 1/x, is one of the simplest examples of a function which is its own inverse (an involution).

<span class="mw-page-title-main">Mertens function</span> Summatory function of the Möbius function

In number theory, the Mertens function is defined for all positive integers n as

Branch and bound is a method for solving optimization problems by breaking them down into smaller sub-problems and using a bounding function to eliminate sub-problems that cannot contain the optimal solution. It is an algorithm design paradigm for discrete and combinatorial optimization problems, as well as mathematical optimization. A branch-and-bound algorithm consists of a systematic enumeration of candidate solutions by means of state space search: the set of candidate solutions is thought of as forming a rooted tree with the full set at the root. The algorithm explores branches of this tree, which represent subsets of the solution set. Before enumerating the candidate solutions of a branch, the branch is checked against upper and lower estimated bounds on the optimal solution, and is discarded if it cannot produce a better solution than the best one found so far by the algorithm.

In mathematics, a low-discrepancy sequence is a sequence with the property that for all values of , its subsequence has a low discrepancy.

<span class="mw-page-title-main">Secant method</span> Root-finding method

In numerical analysis, the secant method is a root-finding algorithm that uses a succession of roots of secant lines to better approximate a root of a function f. The secant method can be thought of as a finite-difference approximation of Newton's method, so it is considered a quasi-Newton method. Historically, it is as an evolution of the method of false position, which predates Newton's method by over 3000 years.

<span class="mw-page-title-main">Bisection method</span> Algorithm for finding a zero of a function

In mathematics, the bisection method is a root-finding method that applies to any continuous function for which one knows two values with opposite signs. The method consists of repeatedly bisecting the interval defined by these values and then selecting the subinterval in which the function changes sign, and therefore must contain a root. It is a very simple and robust method, but it is also relatively slow. Because of this, it is often used to obtain a rough approximation to a solution which is then used as a starting point for more rapidly converging methods. The method is also called the interval halving method, the binary search method, or the dichotomy method.

In mathematics, the regula falsi, method of false position, or false position method is a very old method for solving an equation with one unknown; this method, in modified form, is still in use. In simple terms, the method is the trial and error technique of using test ("false") values for the variable and then adjusting the test value according to the outcome. This is sometimes also referred to as "guess and check". Versions of the method predate the advent of algebra and the use of equations.

The TPK algorithm is a simple program introduced by Donald Knuth and Luis Trabb Pardo to illustrate the evolution of computer programming languages. In their 1977 work "The Early Development of Programming Languages", Trabb Pardo and Knuth introduced a small program that involved arrays, indexing, mathematical functions, subroutines, I/O, conditionals and iteration. They then wrote implementations of the algorithm in several early programming languages to show how such concepts were expressed.

<span class="mw-page-title-main">Gauss–Newton algorithm</span> Mathematical algorithm

The Gauss–Newton algorithm is used to solve non-linear least squares problems, which is equivalent to minimizing a sum of squared function values. It is an extension of Newton's method for finding a minimum of a non-linear function. Since a sum of squares must be nonnegative, the algorithm can be viewed as using Newton's method to iteratively approximate zeroes of the components of the sum, and thus minimizing the sum. In this sense, the algorithm is also an effective method for solving overdetermined systems of equations. It has the advantage that second derivatives, which can be challenging to compute, are not required.

In optimization, line search is a basic iterative approach to find a local minimum of an objective function . It first finds a descent direction along which the objective function will be reduced, and then computes a step size that determines how far should move along that direction. The descent direction can be computed by various methods, such as gradient descent or quasi-Newton method. The step size can be determined either exactly or inexactly.

<span class="mw-page-title-main">Multiple integral</span> Generalization of definite integrals to functions of multiple variables

In mathematics (specifically multivariable calculus), a multiple integral is a definite integral of a function of several real variables, for instance, f(x, y) or f(x, y, z).

In mathematics, the ATS theorem is the theorem on the approximation of a trigonometric sum by a shorter one. The application of the ATS theorem in certain problems of mathematical and theoretical physics can be very helpful.

References