Minimization by Hooke-Jeeves Direct Search

TOMS178 is a C++ library which uses the Hooke-Jeeves direct search algorithm to seek the minimizing point of a function F(X) of several variables, by Arthur Kaupe.

The Hooke_Jeeves algorithm does not required the function F(X) to be differentiable. It does not even require the function to be continuous, although it should probably only be "weakly discontinuous", like a step function, with finitely many well-separated jumps. In any case, the algorithm only examines function values, never derivatives, remembers the location of the best value encountered, and seeks to improve this value by a clever pattern search.

The user supplies a quantity rho, between 0 and 1, which controls how cautious or daring the search is, as well as a routine to evaluate the function, and a few input parameters.

A C version of the algorithm, as written by Mark Johnson, is available at


The computer code and data files described and made available on this web page are distributed under the GNU LGPL license.


TOMS178 is available in a C version and a C++ version and a FORTRAN77 version and a FORTRAN90 version and a MATLAB version and a Python version.

Related Data and Programs:

ASA047, a C++ library which minimizes a scalar function of several variables using the Nelder-Mead algorithm.

COMPASS_SEARCH, a C++ library which seeks the minimizer of a scalar function of several variables using compass search, a direct search algorithm that does not use derivatives.

MINPACK, a C++ library which solves systems of nonlinear equations, or the least squares minimization of the residual of a set of linear or nonlinear equations.


Original Algol version by Arthur Kaupe; C++ version by John Burkardt.


Source Code:

Examples and Tests:

List of Routines:

You can go up one level to the C++ source codes.

Last revised on 12 February 2008.