test_opt, a FORTRAN90 code which defines test problems for the scalar function optimization problem.
The scalar function optimization problem is to find a value for the N-dimensional vector X which minimizes the value of the given scalar function F(X). The function F(X) is not usually defined as the sum of squares of other functions. The minimum function value is not guaranteed to be zero.
Any system of M nonlinear functions in N unknowns can be turned into a scalar optimization problem. One way to do this is to define the functional F(X) to be the sum of the squares of the original nonlinear functions. The minimizer of F will then minimize the sum of the squares of the residuals. Since this process involves squaring, it can be less accurate than dealing directly with the original nonlinear functions: that is to say, the derived optimization problem may be more convenient to solve, but might provide less accurate results than applying a nonlinear solver to the original system.
If a function F(X) is differentiable, then at an optimum, the gradient vector must vanish. Thus, it is also possible to start with an optimization problem involving F(X) and turn it into a problem in which we seek a zero of the nonlinear functions represented by the gradient of F. Of course, the gradient must be zero at a mininum, but the converse does not hold; thus unless we know more about F, it is not safe to try to replace the optimization problem by a nonlinear function solution.
For each test problem, routines are provided to evaluate the function, gradient vector, and hessian matrix. Routines are also provided to indicate the number of variables, the problem title, a suitable starting point, and a minimizing solution, if known.
The functions defined include:
The computer code and data files described and made available on this web page are distributed under the MIT license
test_opt is available in a FORTRAN90 version and a MATLAB version.
ASA047, a FORTRAN90 code which minimizes a scalar function of several variables using the Nelder-Mead algorithm.
BRENT, a FORTRAN90 code which contains Richard Brent's routines for finding the zero, local minimizer, or global minimizer of a scalar function of a scalar argument, without the use of derivative information.
COMPASS_SEARCH, a FORTRAN90 code which seeks the minimizer of a scalar function of several variables using compass search, a direct search algorithm that does not use derivatives.
DQED, a FORTRAN90 code which solves constrained least squares problems.
NL2SOL, a FORTRAN90 code which implements an adaptive nonlinear least-squares algorithm.
PRAXIS, a FORTRAN90 code which minimizes a scalar function of several variables.
TEST_NLS, a FORTRAN90 code which defines a number of problems for nonlinear least squares solvers.
TEST_NONLIN, a FORTRAN90 code which defines a number of problems for nonlinear equation solvers.
TEST_OPT_CON, a FORTRAN90 code which defines test problems for the minimization of a scalar function of several variables, with the search constrained to lie within a specified hyper-rectangle.
TEST_OPTIMIZATION, a FORTRAN90 code which defines test problems for the minimization of a scalar function of several variables, as described by Molga and Smutnicki.
TOMS611, a FORTRAN90 code which minimizes a scalar functional of multiple variables.