PDF version (NAG web site
, 64-bit version, 64-bit version)
NAG Toolbox: nag_glopt_nlp_multistart_sqp_lsq (e05us)
Purpose
nag_glopt_nlp_multistart_sqp_lsq (e05us) is designed to find the global minimum of an arbitrary smooth sum of squares function subject to constraints (which may include simple bounds on the variables, linear constraints and smooth nonlinear constraints) by generating a number of different starting points and performing a local search from each using sequential quadratic programming.
Syntax
[
x,
objf,
f,
fjac,
iter,
c,
cjac,
clamda,
istate,
iopts,
opts,
user,
info,
ifail] = e05us(
n,
ncnln,
a,
bl,
bu,
y,
confun,
objfun,
npts,
start,
repeat1,
nb,
iopts,
opts, 'm',
m, 'nclin',
nclin, 'user',
user)
[
x,
objf,
f,
fjac,
iter,
c,
cjac,
clamda,
istate,
iopts,
opts,
user,
info,
ifail] = nag_glopt_nlp_multistart_sqp_lsq(
n,
ncnln,
a,
bl,
bu,
y,
confun,
objfun,
npts,
start,
repeat1,
nb,
iopts,
opts, 'm',
m, 'nclin',
nclin, 'user',
user)
Before calling
nag_glopt_nlp_multistart_sqp_lsq (e05us), the optional parameter arrays
iopts and
opts
must
be initialized for use with
nag_glopt_nlp_multistart_sqp_lsq (e05us) by calling
nag_glopt_optset (e05zk) with
optstr set to
‘’.
Optional parameters may subsequently be specified by calling
nag_glopt_optset (e05zk) before the call to
nag_glopt_nlp_multistart_sqp_lsq (e05us).
Note: the interface to this routine has changed since earlier releases of the toolbox:
At Mark 24: |
user was added as parameter to start; r is no longer returned |
Description
The local minimization method is
nag_opt_lsq_gencon_deriv (e04us).
The problem is assumed to be stated in the following form:
where
(the
objective function) is a nonlinear function which can be represented as the sum of squares of
subfunctions
, the
are constant,
is an
by
constant linear constraint matrix, and
is an
element vector of nonlinear constraint functions. (The matrix
and the vector
may be empty.) The objective function and the constraint functions are assumed to be smooth, i.e., at least twice-continuously differentiable. (This function will usually solve
(1) if any isolated discontinuities are away from the solution.)
nag_glopt_nlp_multistart_sqp_lsq (e05us) solves a user-specified number of local optimization problems with different starting points. You may specify the starting points via the function
start. If a random number generator is used to generate the starting points then the argument
repeat1 allows you to specify whether a repeatable set of points are generated or whether different starting points are generated on different calls. The resulting local minima are ordered and the best
nb results returned in order of ascending values of the resulting objective function values at the minima. Thus the value returned in position
will be the best result obtained. If a sufficiently high number of different points are chosen then this is likely to be the global minimum.
References
Gill P E, Murray W and Wright M H (1981) Practical Optimization Academic Press
Hock W and Schittkowski K (1981) Test Examples for Nonlinear Programming Codes. Lecture Notes in Economics and Mathematical Systems 187 Springer–Verlag
Parameters
Compulsory Input Parameters
- 1:
– int64int32nag_int scalar
-
, the number of variables.
Constraint:
.
- 2:
– int64int32nag_int scalar
-
, the number of nonlinear constraints.
Constraint:
.
- 3:
– double array
-
The first dimension of the array
a must be at least
.
The second dimension of the array
a must be at least
if
, and at least
otherwise.
The matrix
of general linear constraints in
(1). That is, the
th row contains the coefficients of the
th general linear constraint, for
.
If
, the array
a is not referenced.
- 4:
– double array
- 5:
– double array
-
bl must contain the lower bounds and
bu the upper bounds for all the constraints in the following order. The first
elements of each array must contain the bounds on the variables, the next
elements the bounds for the general linear constraints (if any) and the next
elements the bounds for the general nonlinear constraints (if any). To specify a nonexistent lower bound (i.e.,
), set
, and to specify a nonexistent upper bound (i.e.,
), set
; the default value of
is
, but this may be changed by the optional parameter
Infinite Bound Size. To specify the
th constraint as an equality, set
, say, where
.
Constraints:
- , for ;
- if , .
- 6:
– double array
-
The coefficients of the constant vector of the objective function.
- 7:
– function handle or string containing name of m-file
-
confun must calculate the vector
of nonlinear constraint functions and (optionally) its Jacobian (
) for a specified
-element vector
.
If there are no nonlinear constraints (i.e.,
),
confun will never be called by
nag_glopt_nlp_multistart_sqp_lsq (e05us) and
confun may be the string
nag_opt_nlp1_dummy_confun (e04udm).
(
nag_opt_nlp1_dummy_confun (e04udm) is included in the NAG Toolbox.)
If there are nonlinear constraints, the first call to
confun will occur before the first call to
objfun.
[mode, c, cjsl, user] = confun(mode, ncnln, n, ldcjsl, needc, x, cjsl, nstate, user)
Input Parameters
- 1:
– int64int32nag_int scalar
-
Indicates which values must be assigned during each call of
confun. Only the following values need be assigned, for each value of
such that
:
- , the th nonlinear constraint.
- All available elements in the th row of cjsl.
- and all available elements in the th row of cjsl.
- 2:
– int64int32nag_int scalar
-
, the number of nonlinear constraints.
- 3:
– int64int32nag_int scalar
-
, the number of variables.
- 4:
– int64int32nag_int scalar
-
ldcjsl is the first dimension of the array
cjsl.
- 5:
– int64int32nag_int array
-
The indices of the elements of
c and/or
cjsl that must be evaluated by
confun. If
,
and/or the available elements of the
th row of
cjsl (see argument
mode) must be evaluated at
.
- 6:
– double array
-
, the vector of variables at which the constraint functions and/or the available elements of the constraint Jacobian are to be evaluated.
- 7:
– double array
-
The second dimension of the array must be at least .
cjsl may be regarded as a two-dimensional ‘slice’
of the three-dimensional
array
cjac
of
nag_glopt_nlp_multistart_sqp_lsq (e05us).
Unless
or
, the elements of
cjsl are set to special values which enable
nag_glopt_nlp_multistart_sqp_lsq (e05us) to detect whether they are changed by
confun.
- 8:
– int64int32nag_int scalar
-
If
then
nag_glopt_nlp_multistart_sqp_lsq (e05us) is calling
confun for the first time on the current local optimization problem. This argument setting allows you to save computation time if certain data must be read or calculated only once.
- 9:
– Any MATLAB object
confun is called from
nag_glopt_nlp_multistart_sqp_lsq (e05us) with the object supplied to
nag_glopt_nlp_multistart_sqp_lsq (e05us).
Output Parameters
- 1:
– int64int32nag_int scalar
-
May be set to a negative value if you wish to abandon the solution to the current local minimization problem. In this case nag_glopt_nlp_multistart_sqp_lsq (e05us) will move to the next local minimization problem.
- 2:
– double array
-
If
and
or
,
must contain the value of
. The remaining elements of
c, corresponding to the non-positive elements of
needc, need not be set.
- 3:
– double array
-
The second dimension of the array will be .
cjsl may be regarded as a two-dimensional ‘slice’
of the three-dimensional
array
cjac
of
nag_glopt_nlp_multistart_sqp_lsq (e05us).
If
and
or
, the
th row of
cjsl must contain the available elements of the vector
given by
where
is the partial derivative of the
th constraint with respect to the
th variable, evaluated at the point
. See also the argument
nstate. The remaining rows of
cjsl, corresponding to non-positive elements of
needc, need not be set.
If all elements of the constraint Jacobian are known (i.e.,
or
; note the default is
), any constant elements may be assigned to
cjsl one time only at the start of each local optimization. An element of
cjsl that is not subsequently assigned in
confun will retain its initial value throughout the local optimization. Constant elements may be loaded into
cjsl during the first call to
confun for the local optimization (signalled by the value
). The ability to preload constants is useful when many Jacobian elements are identically zero, in which case
cjsl may be initialized to zero and nonzero elements may be reset by
confun.
Note that constant nonzero elements do affect the values of the constraints. Thus, if
is set to a constant value, it need not be reset in subsequent calls to
confun, but the value
must nonetheless be added to
. For example, if
and
then the term
must be included in the definition of
.
It must be emphasized that, if
or
, unassigned elements of
cjsl are not treated as constant; they are estimated by finite differences, at nontrivial expense. If you do not supply a value for the optional parameter
Difference Interval, an interval for each element of
is computed automatically at the start of each local optimization. The automatic procedure can usually identify constant elements of
cjsl, which are then computed once only by finite differences.
- 4:
– Any MATLAB object
confun should be tested separately before being used in conjunction with
nag_glopt_nlp_multistart_sqp_lsq (e05us). See also the description of the optional parameter
Verify.
- 8:
– function handle or string containing name of m-file
-
objfun must calculate either the
th element of the vector
or all
elements of
and (optionally) its Jacobian (
) for a specified
-element vector
.
[mode, f, fjsl, user] = objfun(mode, m, n, ldfjsl, needfi, x, fjsl, nstate, user)
Input Parameters
- 1:
– int64int32nag_int scalar
-
Indicates which values must be assigned during each call of
objfun. Only the following values need be assigned:
- and , where
- .
- and
- f.
- and
- All available elements of fjsl.
- and
- f and all available elements of fjsl.
- 2:
– int64int32nag_int scalar
-
, the number of subfunctions.
- 3:
– int64int32nag_int scalar
-
, the number of variables.
- 4:
– int64int32nag_int scalar
-
ldfjsl is the first dimension of the array
fjsl.
- 5:
– int64int32nag_int scalar
-
If , only the th element of needs to be evaluated at ; the remaining elements need not be set. This can result in significant computational savings when .
- 6:
– double array
-
, the vector of variables at which the objective function and/or all available elements of its gradient are to be evaluated.
- 7:
– double array
-
The first dimension of the array
fjsl must be at least .
The second dimension of the array
fjsl must be at least
.
fjsl may be regarded as a two-dimensional ‘slice’ of the three-dimensional array
fjac of
nag_glopt_nlp_multistart_sqp_lsq (e05us).
Is set to a special value.
- 8:
– int64int32nag_int scalar
-
If
then
nag_glopt_nlp_multistart_sqp_lsq (e05us) is calling
objfun for the first time on the current local optimization problem. This argument setting allows you to save computation time if certain data must be read or calculated only once.
- 9:
– Any MATLAB object
objfun is called from
nag_glopt_nlp_multistart_sqp_lsq (e05us) with the object supplied to
nag_glopt_nlp_multistart_sqp_lsq (e05us).
Output Parameters
- 1:
– int64int32nag_int scalar
-
May be set to a negative value if you wish to abandon the solution to the current local minimization problem. In this case nag_glopt_nlp_multistart_sqp_lsq (e05us) will move to the next local minimization problem.
- 2:
– double array
-
If
and
,
must contain the value of
at
.
If or and ,
must contain the value of at , for .
- 3:
– double array
-
The first dimension of the array
fjsl will be .
The second dimension of the array
fjsl will be
.
fjsl may be regarded as a two-dimensional ‘slice’ of the three-dimensional array
fjac of
nag_glopt_nlp_multistart_sqp_lsq (e05us).
If
or
and
, the
th row of
fjsl must contain the available elements of the vector
given by
evaluated at the point
. See also the argument
nstate.
- 4:
– Any MATLAB object
objfun should be tested separately before being used in conjunction with
nag_glopt_nlp_multistart_sqp_lsq (e05us). See also the description of the optional parameter
Verify.
- 9:
– int64int32nag_int scalar
-
The number of different starting points to be generated and used. The more points used, the more likely that the best returned solution will be a global minimum.
Constraint:
.
- 10:
– function handle or string containing name of m-file
-
start must calculate the
npts starting points to be used by the local optimizer. If you do not wish to write a function specific to your problem then
nag_glopt_multistart_start_points (e05ucz) may be used as the actual argument.
nag_glopt_multistart_start_points (e05ucz) is supplied in the NAG Toolbox and uses the NAG quasi-random number generators to distribute starting points uniformly across the domain. It is affected by the value of
repeat1.
[quas, user, mode] = start(npts, quas, n, repeat1, bl, bu, user, mode)
Input Parameters
- 1:
– int64int32nag_int scalar
-
Indicates the number of starting points.
- 2:
– double array
-
All elements of
quas will have been set to zero, so only nonzero values need be set subsequently.
- 3:
– int64int32nag_int scalar
-
The number of variables.
- 4:
– logical scalar
-
Specifies whether a repeatable or non-repeatable sequence of points are to be generated.
- 5:
– double array
-
The lower bounds on the variables. These may be used to ensure that the starting points generated in some sense ‘cover’ the region, but there is no requirement that a starting point be feasible.
- 6:
– double array
-
The upper bounds on the variables. (See
bl.)
- 7:
– Any MATLAB object
start is called from
nag_glopt_nlp_multistart_sqp_lsq (e05us) with the object supplied to
nag_glopt_nlp_multistart_sqp_lsq (e05us).
- 8:
– int64int32nag_int scalar
-
Output Parameters
- 1:
– double array
-
Must contain the starting points for the
npts local minimizations, i.e.,
must contain the
th component of the
th starting point.
- 2:
– Any MATLAB object
- 3:
– int64int32nag_int scalar
-
If you set
mode to a negative value then
nag_glopt_nlp_multistart_sqp_lsq (e05us) will terminate immediately with
.
- 11:
– logical scalar
-
Is passed as an argument to
start and may be used to initialize a random number generator to a repeatable, or non-repeatable, sequence. See
Further Comments for more detail.
- 12:
– int64int32nag_int scalar
-
The number of solutions to be returned. The function saves up to
nb local minima ordered by increasing value of the final objective function. If the defining criterion for ‘best solution’ is only that the value of the objective function is as small as possible then
nb should be set to
. However, if you want to look at other solutions that may have desirable properties then setting
will produce
nb local minima, ordered by increasing value of their objective functions at the minima.
Constraint:
.
- 13:
– int64int32nag_int array
- 14:
– double array
-
The arrays
iopts and
opts must not be altered between calls to any of the functions
nag_glopt_nlp_multistart_sqp_lsq (e05us) and
nag_glopt_optset (e05zk).
Optional Input Parameters
- 1:
– int64int32nag_int scalar
-
Default:
the dimension of the array
y.
, the number of subfunctions associated with .
Constraint:
.
- 2:
– int64int32nag_int scalar
-
Default:
the first dimension of the array
a.
, the number of general linear constraints.
Constraint:
.
- 3:
– Any MATLAB object
user is not used by
nag_glopt_nlp_multistart_sqp_lsq (e05us), but is passed to
confun,
objfun and
start. Note that for large objects it may be more efficient to use a global variable which is accessible from the m-files than to use
user.
Output Parameters
- 1:
– double array
-
The first dimension of the array
x will be
.
The second dimension of the array
x will be
.
contains the final estimate of the th solution, for .
- 2:
– double array
-
contains the value of the objective function at the final iterate for the th solution.
- 3:
– double array
-
The second dimension of the array
f will be
.
contains the value of the th function at the final iterate, for ,
for the th solution, for .
- 4:
– double array
-
The last dimension of the array
fjac will be
.
For the
th returned solution, the Jacobian matrix of the functions
at the final iterate, i.e.,
contains the partial derivative of the
th function with respect to the
th variable, for
,
and
. (See also the discussion of argument
fjsl under
objfun.)
- 5:
– int64int32nag_int array
-
contains the number of major iterations performed to obtain the
th solution. If less than
nb solutions are returned then
contains the number of starting points that have resulted in a converged solution. If this is close to
npts then this might be indicative that fewer than
nb local minima exist.
- 6:
– double array
-
The first dimension of the array
c will be
.
The second dimension of the array
c will be
.
If
,
contains the value of the
th nonlinear constraint function
at the final iterate, for the
th solution, for
.
If
, the array
c is not referenced.
- 7:
– double array
-
The last dimension of the array
cjac will be
If
,
cjac contains the Jacobian matrices of the nonlinear constraint functions at the final iterate for each of the returned solutions, i.e.,
contains the partial derivative of the
th constraint function with respect to the
th variable, for
and
, for the
th solution. (See the discussion of argument
cjsl under
confun.)
If
, the array
cjac is not referenced.
- 8:
– double array
-
The first dimension of the array
clamda will be
.
The second dimension of the array
clamda will be
.
The values of the QP multipliers from the last QP subproblem solved for the th solution. should be non-negative if and non-positive if .
- 9:
– int64int32nag_int array
-
The first dimension of the array
istate will be
.
The second dimension of the array
istate will be
.
contains the status of the constraints in the QP working set for the
th solution. The significance of each possible value of
is as follows:
| Meaning |
| The constraint is satisfied to within the feasibility tolerance, but is not in the QP working set. |
| This inequality constraint is included in the QP working set at its lower bound. |
| This inequality constraint is included in the QP working set at its upper bound. |
| This constraint is included in the QP working set as an equality. This value of istate can occur only when . |
- 10:
– int64int32nag_int array
- 11:
– double array
-
- 12:
– Any MATLAB object
- 13:
– int64int32nag_int array
-
If
,
does not contain an error value returned by
nag_opt_lsq_gencon_deriv (e04us) .
If
on exit, then not all
nb solutions have been found, and
contains the number of solutions actually found.
- 14:
– int64int32nag_int scalar
unless the function detects an error (see
Error Indicators and Warnings).
Error Indicators and Warnings
Note: nag_glopt_nlp_multistart_sqp_lsq (e05us) may return useful information for one or more of the following detected errors or warnings.
Errors or warnings detected by the function:
Cases prefixed with W are classified as warnings and
do not generate an error of type NAG:error_n. See nag_issue_warnings.
-
An input value is incorrect. One or more of the following requirements are violated:
-
Constraint: .
-
Constraint: , for all .
-
Constraint: if , .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
Constraint: .
-
-
nag_glopt_nlp_multistart_sqp_lsq (e05us) has terminated without finding any solutions. The majority of calls to the local optimizer have failed to find a feasible point for the linear constraints and bounds, which means that either no feasible point exists for the given value of the optional parameter Linear Feasibility Tolerance (default value , where is the machine precision), or no feasible point could be found in the number of iterations specified by the optional parameter Minor Iteration Limit. You should check that there are no constraint redundancies. If the data for the constraints are accurate only to an absolute precision , you should ensure that the value of the optional parameter Linear Feasibility Tolerance is greater than . For example, if all elements of are of order unity and are accurate to only three decimal places, Linear Feasibility Tolerance should be at least .
No solution obtained. Linear constraints may be infeasible.
-
-
nag_glopt_nlp_multistart_sqp_lsq (e05us) has failed to find any solutions. The majority of local optimizations could not find a feasible point for the nonlinear constraints. The problem may have no feasible solution. This behaviour will occur if there is no feasible point for the nonlinear constraints. (However, there is no general test that can determine whether a feasible point exists for a set of nonlinear constraints.)
No solution obtained. Nonlinear constraints may be infeasible.
-
-
nag_glopt_nlp_multistart_sqp_lsq (e05us) has failed to find any solutions. The majority of local optimizations have failed because the limiting number of iterations have been reached.
No solution obtained. Many potential solutions reach iteration limit.
-
-
The user-supplied derivatives of the objective function and/or nonlinear constraints appear to be incorrect.
Large errors were found in the derivatives of the objective function and/or nonlinear constraints. This value of
ifail will occur if the verification process indicated that at least one gradient or Jacobian element had no correct figures. You should refer to or enable the printed output to determine which elements are suspected to be in error.
As a first-step, you should check that the code for the objective and constraint values is correct – for example, by computing the function at a point where the correct value is known. However, care should be taken that the chosen point fully tests the evaluation of the function. It is remarkable how often the values or are used to test function evaluation procedures, and how often the special properties of these numbers make the test meaningless.
Gradient checking will be ineffective if the objective function uses information computed by the constraints, since they are not necessarily computed before each function evaluation.
Errors in programming the function may be quite subtle in that the function value is ‘almost’ correct. For example, the function may not be accurate to full precision because of the inaccurate calculation of a subsidiary quantity, or the limited accuracy of data upon which the function depends. A common error on machines where numerical calculations are usually performed in double precision is to include even one single precision constant in the calculation of the function; since some compilers do not convert such constants to double precision, half the correct figures may be lost by such a seemingly trivial error.
- W
-
Only
solutions obtained.
Not all
nb solutions have been found.
contains the number actually found.
-
-
User terminated computation from
start procedure.
.
If nag_glopt_multistart_start_points (e05ucz) has been used as an actual argument for start then the message displayed, when or on entry to nag_glopt_nlp_multistart_sqp_lsq (e05us), will have the following meaning:
|
failure to allocate space, a smaller value of NPTS should be tried. |
|
an internal error has occurred. Please contact NAG for assistance. |
-
-
Failed to initialize optional parameter arrays.
-
An unexpected error has been triggered by this routine. Please
contact
NAG.
-
Your licence key may have expired or may not have been installed correctly.
-
Dynamic memory allocation failed.
Accuracy
If
on exit and the value of
, then the vector returned in the array
x for solution
is an estimate of the solution to an accuracy of approximately
Optimality Tolerance.
Further Comments
You should be wary of requesting much intermediate output from the local optimizer, since large volumes may be produced if
npts is large.
The auxiliary routine
nag_glopt_multistart_start_points (e05ucz)
makes use of the NAG quasi-random Sobol generator (
nag_rand_quasi_init (g05yl) and
nag_rand_quasi_uniform (g05ym)). If
nag_glopt_multistart_start_points (e05ucz)
is used as the actual argument for
start and
then a randomly chosen value for
iskip is used, otherwise
iskip is set to
. If
repeat1 is set to
false and the program is executed several times, each time producing the same best answer, then there is increased probability that this answer is a global minimum. However, if it is important that identical results be obtained on successive runs, then
repeat1 should be set to
true.
Description of the Printed Output
See
Description of Printed output in
nag_opt_lsq_gencon_deriv (e04us).
Example
This example is based on Problem 57 in
Hock and Schittkowski (1981) and involves the minimization of the sum of squares function
where
and
subject to the bounds
to the general linear constraint
and to the nonlinear constraint
The optimal solution (to five figures) is
and
. The nonlinear constraint is active at the solution.
Open in the MATLAB editor:
e05us_example
function e05us_example
fprintf('e05us example results\n\n');
npts = int64(1);
repeat = true;
nclin = int64(1);
ncnln = int64(1);
nb = int64(1);
n = int64(2);
bl = [0.4; -4.0; 1.0; 0.0];
bu = [1e25; 1e25; 1e25; 1e25];
a = [1, 1];
x = [0.4; 0];
y = [0.49; 0.49; 0.48; 0.47; 0.48; 0.47; 0.46; 0.46; 0.45; 0.43; 0.45; ...
0.43; 0.43; 0.44; 0.43; 0.43; 0.46; 0.45; 0.42; 0.42; 0.43; 0.41 ; ...
0.41; 0.40; 0.42; 0.40; 0.40; 0.41; 0.40; 0.41; 0.41; 0.40; 0.40 ; ...
0.40; 0.38; 0.41; 0.40; 0.40; 0.41; 0.38; 0.40; 0.40; 0.39; 0.39];
iopts = zeros(740, 1, 'int64');
opts = zeros(485, 1);
[iopts, opts, ifail] = e05zk(...
'Initialize = e05us', iopts, opts);
[iopts, opts, ifail] = e05zk(...
'List', iopts, opts);
[iopts, opts, ifail] = e05zk(...
'print level = 10', iopts, opts);
wstat = warning();
warning('OFF');
[x, objf, f, fjac, iter, c, cjac, clamda, istate, ...
iopts, opts, user, info, ifail] = ...
e05us(...
n, ncnln, a, bl, bu, y, @confun, @objfun, ...
npts, @start, repeat, nb, iopts, opts);
warning(wstat);
if ifail == 8
l = double(info(nb));
fprintf('\nOnly %d solutions found\n', info(nb));
else
l = double(nb);
end
l = min(l,3);
for i=1:l
fprintf('\nSolution number %d\n\n', i);
fprintf('e04us returned with ifail = %d\n\n', info(i));
fprintf(' Variable Istate Value Lagrange Multiplier\n');
for j=1:n
fprintf(' %3d%9d%19.6g%13.4g\n', j, istate(j,i), x(j,i), clamda(j,i));
end
if nclin > 0
ax = a*x(:,i);
fprintf('\n L Con Istate Value Lagrange Multiplier\n');
for k=n+1:n+nclin
j=k-n;
fprintf(' %3d%9d%19.6g%13.4g\n', j, istate(k,i), ax(j), clamda(k,i));
end
end
if ncnln > 0
fprintf('\n NL Con Istate Value Lagrange Multiplier\n');
for k=n+nclin+1:n+nclin +ncnln
j=k-n-nclin;
fprintf(' %3d%9d%19.6g%13.4g\n', j, istate(k,i), c(j,i), clamda(j,i));
end
end
fprintf('\nFinal objective value = %15.7g\n', objf(i));
fprintf('clamda: ');
disp(transpose(clamda(1:double(n+nclin +ncnln),i)));
fprintf('\n ------------------------------------------------------\n');
end
function [mode, c, cjsl, user] = confun(mode, ncnln, n, ldcjsl, ...
needc, x, cjsl, nstate, user)
c = zeros(ncnln, 1);
if (nstate == 1)
cjsl(1:double(ncnln),1:double(n)) = 0;
end
if ( needc(1) > 0 )
if (mode==0 || mode==2)
c(1) = -0.09 - x(1)*x(2) + 0.49*x(2);
end
if (mode==1 || mode==2)
cjsl(1,1) = -x(2);
cjsl(1,2) = -x(1) + 0.49;
end
end
function [mode, f, fjac, user] = objfun(mode, m, n, ldfj, needfi, x, fjac, ...
nstate, user)
a = [ 8; 8; 10; 10; 10; 10; 12; 12; 12; 12; 14;
14; 14; 16; 16; 16; 18; 18; 20; 20; 20; 22;
22; 22; 24; 24; 24; 26; 26; 26; 28; 28; 30;
30; 30; 32; 32; 34; 36; 36; 38; 38; 40; 42];
f = zeros(m, 1);
if needfi > 0
f(needfi) = x(1) + (0.49-x(1))*exp(-x(2)*(a(needfi)-8.0));
return;
end
temp = exp(-x(2)*(a-8.0));
if (mode==0 || mode==2)
f = x(1) + (0.49-x(1))*temp;
end
if (mode==1 || mode==2)
fjac(:,1) = 1.0 - temp;
fjac(:,2) = -(0.49-x(1)).*(a-8.0).*temp;
end
function [quas, mode, user] = start(npts, quas, n, repeat, bl, bu, mode, user)
quas(1, 1) = 0.4;
quas(2, 1) = 0.0;
e05us example results
Calls to E05ZKF
---------------
LIST
PRINT LEVEL = 10
*** E05USF
Parameters
----------
Linear constraints..... 1 Variables.............. 2
Nonlinear constraints.. 1 Subfunctions........... 44
Infinite bound size.... 1.00E+20 COLD start.............
Infinite step size..... 1.00E+20 EPS (machine precision) 1.11E-16
Step limit............. 2.00E+00 Hessian................ NO
Linear feasibility..... 1.05E-08 Crash tolerance........ 1.00E-02
Nonlinear feasibility.. 1.05E-08 Optimality tolerance... 3.26E-12
Line search tolerance.. 9.00E-01 Function precision..... 4.37E-15
Derivative level....... 3 Monitoring file........ -1
Verify level........... 0
Major iterations limit. 50 Major print level...... 10
Minor iterations limit. 50 Minor print level...... 0
J'J initial Hessian.... Reset frequency........ 2
Workspace provided is IWORK( 9), WORK( 306).
To solve problem we need IWORK( 9), WORK( 306).
Verification of the constraint gradients.
-----------------------------------------
The constraint Jacobian seems to be ok.
The largest relative error was 1.89E-08 in constraint 1
Verification of the objective gradients.
----------------------------------------
The objective Jacobian seems to be ok.
The largest relative error was 1.04E-08 in subfunction 3
Maj Mnr Step Merit Function Norm Gz Violtn Cond Hz
0 2 0.0E+00 2.224070E-02 8.5E-02 3.6E-02 1.0E+00
1 1 1.0E+00 1.455402E-02 1.5E-03 9.8E-03 1.0E+00
2 1 1.0E+00 1.436491E-02 4.9E-03 7.2E-04 1.0E+00
3 1 1.0E+00 1.427013E-02 2.9E-03 9.2E-06 1.0E+00
4 1 1.0E+00 1.422989E-02 1.6E-04 3.6E-05 1.0E+00
5 1 1.0E+00 1.422983E-02 5.4E-07 6.4E-08 1.0E+00
6 1 1.0E+00 1.422983E-02 3.4E-09 9.8E-13 1.0E+00
Exit from NP problem after 6 major iterations,
8 minor iterations.
Varbl State Value Lower Bound Upper Bound Lagr Mult Slack
V 1 FR 0.419953 0.400000 None . 1.9953E-02
V 2 FR 1.28485 -4.00000 None . 5.285
L Con State Value Lower Bound Upper Bound Lagr Mult Slack
L 1 FR 1.70480 1.00000 None . 0.7048
N Con State Value Lower Bound Upper Bound Lagr Mult Slack
N 1 LL -9.767742E-13 . None 3.3358E-02 -9.7677E-13
Exit E05USF - Optimal solution found.
Final objective value = 0.1422983E-01
Solution number 1
e04us returned with ifail = 0
Variable Istate Value Lagrange Multiplier
1 0 0.419953 0
2 0 1.28485 0
L Con Istate Value Lagrange Multiplier
1 0 1.7048 0
NL Con Istate Value Lagrange Multiplier
1 1 -9.76774e-13 0
Final objective value = 0.01422983
clamda: 0 0 0 0.0334
------------------------------------------------------
Algorithmic Details
See
Algorithmic Details in
nag_opt_lsq_gencon_deriv (e04us).
Optional Parameters
Several optional parameters in nag_glopt_nlp_multistart_sqp_lsq (e05us) define choices in the problem specification or the algorithm logic. In order to reduce the number of formal arguments of nag_glopt_nlp_multistart_sqp_lsq (e05us) these optional parameters have associated default values that are appropriate for most problems. Therefore you need only specify those optional parameters whose values are to be different from their default values.
Optional parameters may be specified by calling
nag_glopt_optset (e05zk) before a call to
nag_glopt_nlp_multistart_sqp_lsq (e05us). Before calling
nag_glopt_nlp_multistart_sqp_lsq (e05us), the optional parameter arrays
iopts and
opts
must
be initialized for use with
nag_glopt_nlp_multistart_sqp_lsq (e05us) by calling
nag_glopt_optset (e05zk) with
optstr set to ‘’.
All optional parameters not specified are set to their default values. Optional parameters specified are unaltered by nag_glopt_nlp_multistart_sqp_lsq (e05us) (unless they define invalid values) and so remain in effect for subsequent calls to nag_glopt_nlp_multistart_sqp_lsq (e05us).
See
Optional Parameters in
nag_opt_lsq_gencon_deriv (e04us) for full details.
The
Warm Start option of
nag_opt_lsq_gencon_deriv (e04us) is not a valid option for use with
nag_glopt_nlp_multistart_sqp_lsq (e05us).
nag_glopt_nlp_multistart_sqp_lsq (e05us) supports two options that are distinct from those of
nag_opt_lsq_gencon_deriv (e04us):
Punch Unit Default
This option allows you to send information arising from an appropriate setting of
Out_Level to be sent to
the Fortran unit number defined by
Punch Unit. If you wish this file to be different to the standard output unit (
) where other output is displayed then this file should be attached by calling
nag_file_open (x04ac) prior to calling
nag_glopt_nlp_multistart_sqp_lsq (e05us).
Out_Level Default
This option defines the amount of extra information to be sent to
the Fortran unit number defined by
Punch Unit. The possible choices for
are the following:
|
Meaning |
0 |
No extra output. |
1 |
Updated solutions only. This is useful during long runs to observe progress. |
2 |
Successful start points only. This is useful to save the starting points that gave rise to the final solution. |
3 |
Both updated solutions and successful start points. |
Description of Monitoring Information
See
Description of Monitoring Information in
nag_opt_lsq_gencon_deriv (e04us).
PDF version (NAG web site
, 64-bit version, 64-bit version)
© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2015