hide long namesshow long names
hide short namesshow short names
Integer type:  int32  int64  nag_int  show int32  show int32  show int64  show int64  show nag_int  show nag_int

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

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 ‘Initialize = e05usc’. 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:
Mark 24: user added as parameter to start, r no longer returned
.

Description

The local minimization method is (e04us). The problem is assumed to be stated in the following form:
m
minimize ​ ​F(x) = (1/2) (yifi(x)) 2  subject to  l(
x
ALx
c(x)
)
u,
xRn i = 1
minimize xRn ​ ​ F(x) = 12 i=1 m ( yi- fi (x) ) 2   subject to  l x ALx c(x) u,
(1)
where F(x)F(x) (the objective function) is a nonlinear function which can be represented as the sum of squares of mm subfunctions (y1f1(x)),(y2f2(x)),,(ymfm(x))(y1-f1(x)),(y2-f2(x)),,(ym-fm(x)), the yiyi are constant, ALAL is an nLnL by nn constant linear constraint matrix, and c(x)c(x) is an nNnN element vector of nonlinear constraint functions. (The matrix ALAL and the vector c(x)c(x) may be empty.) The objective function and the constraint functions are assumed to be smooth, i.e., at least twice-continuously differentiable. (The method of (e04us) 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 parameter 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 11 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:     n – int64int32nag_int scalar
nn, the number of variables.
Constraint: n > 0n>0.
2:     ncnln – int64int32nag_int scalar
nNnN, the number of nonlinear constraints.
Constraint: ncnln0ncnln0.
3:     a(lda, : :) – double array
The first dimension of the array a must be at least nclinnclin
The second dimension of the array must be at least nn if nclin > 0nclin>0, and at least 11 otherwise
The matrix ALAL of general linear constraints in (1). That is, the iith row contains the coefficients of the iith general linear constraint, for i = 1,2,,nclini=1,2,,nclin.
If nclin = 0nclin=0, the array a is not referenced.
4:     bl(n + nclin + ncnlnn+nclin+ncnln) – double array
5:     bu(n + nclin + ncnlnn+nclin+ncnln) – double array
bl must contain the lower bounds and bu the upper bounds for all the constraints in the following order. The first nn elements of each array must contain the bounds on the variables, the next nLnL elements the bounds for the general linear constraints (if any) and the next nNnN elements the bounds for the general nonlinear constraints (if any). To specify a nonexistent lower bound (i.e., lj = lj=-), set bl(j)bigbndblj-bigbnd, and to specify a nonexistent upper bound (i.e., uj = + uj=+), set bu(j)bigbndbujbigbnd; the default value of bigbndbigbnd is 10201020, but this may be changed by the optional parameter Infinite Bound Size. To specify the jjth constraint as an equality, set bl(j) = bu(j) = βblj=buj=β, say, where |β| < bigbnd|β|<bigbnd.
Constraints:
  • bl(j)bu(j)bljbuj, for j = 1,2,,n + nclin + ncnlnj=1,2,,n+nclin+ncnln;
  • if bl(j) = bu(j) = βblj=buj=β, |β| < bigbnd|β|<bigbnd.
6:     y(m) – double array
m, the dimension of the array, must satisfy the constraint m > 0m>0.
The coefficients of the constant vector yy of the objective function.
7:     confun – function handle or string containing name of m-file
confun must calculate the vector c(x)c(x) of nonlinear constraint functions and (optionally) its Jacobian ( = (c)/(x) = c x ) for a specified nn-element vector xx. If there are no nonlinear constraints (i.e., ncnln = 0ncnln=0), confun will never be called by nag_glopt_nlp_multistart_sqp_lsq (e05us) and confun may be the string '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:     mode – 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 ii such that needc(i) > 0needci>0:
mode = 0mode=0
c(i)ci, the iith nonlinear constraint.
mode = 1mode=1
All available elements in the iith row of cjsl.
mode = 2mode=2
c(i)ci and all available elements in the iith row of cjsl.
2:     ncnln – int64int32nag_int scalar
nNnN, the number of nonlinear constraints.
3:     n – int64int32nag_int scalar
nn, the number of variables.
4:     ldcjsl – int64int32nag_int scalar
ldcjsl is the first dimension of the array cjsl.
5:     needc(ncnln) – int64int32nag_int array
The indices of the elements of c and/or cjsl that must be evaluated by confun. If needc(i) > 0needci>0, c(i)ci and/or the available elements of the iith row of cjsl (see parameter mode) must be evaluated at xx.
6:     x(n) – double array
xx, the vector of variables at which the constraint functions and/or the available elements of the constraint Jacobian are to be evaluated.
7:     cjsl(ldcjsl, : :) – double array
The second dimension of the array must be at least nn
cjsl may be regarded as a two-dimensional ‘slice’ of the three-dimensional array cjac of nag_glopt_nlp_multistart_sqp_lsq (e05us).
Unless Derivative Level = 2Derivative Level=2 or 33, 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:     nstate – int64int32nag_int scalar
If nstate = 1nstate=1 then nag_glopt_nlp_multistart_sqp_lsq (e05us) is calling confun for the first time on the current local optimization problem. This parameter setting allows you to save computation time if certain data must be read or calculated only once.
9:     user – 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:     mode – 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:     c(ncnln) – double array
If needc(i) > 0needci>0 and mode = 0mode=0 or 22, c(i)ci must contain the value of ci(x)ci(x). The remaining elements of c, corresponding to the non-positive elements of needc, need not be set.
3:     cjsl(ldcjsl, : :) – double array
The second dimension of the array will be nn
cjsl may be regarded as a two-dimensional ‘slice’ of the three-dimensional array cjac of nag_glopt_nlp_multistart_sqp_lsq (e05us).
If needc(i) > 0needci>0 and mode = 1mode=1 or 22, the iith row of cjsl must contain the available elements of the vector cici given by
ci = ((ci)/(x1),(ci)/(x2),,(ci)/(xn))T,
ci=( ci x1 , ci x2 ,, ci xn )T,
where (ci)/(xj) ci xj is the partial derivative of the iith constraint with respect to the jjth variable, evaluated at the point xx. See also the parameter 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., Derivative Level = 2Derivative Level=2 or 33; note the default is Derivative Level = 3Derivative Level=3), 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 nstate = 1nstate=1). 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 cjsl(i,j)cjslij is set to a constant value, it need not be reset in subsequent calls to confun, but the value cjsl(i,j) × x(j)cjslij×xj must nonetheless be added to c(i)ci. For example, if cjsl(1,1) = 2cjsl11=2 and cjsl(1,2) = 5cjsl12=-5 then the term 2 × x(1)5 × x(2)2×x1-5×x2 must be included in the definition of c(1)c1.
It must be emphasized that, if Derivative Level = 0Derivative Level=0 or 11, 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 xx 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:     user – 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:     objfun – function handle or string containing name of m-file
objfun must calculate either the iith element of the vector f(x) = (f1(x),f2(x),,fm(x))T f(x) = (f1(x),f2(x),,fm(x))T  or all mm elements of f(x)f(x) and (optionally) its Jacobian ( = (f)/(x) = f x ) for a specified nn-element vector xx.
[mode, f, fjsl, user] = objfun(mode, m, n, ldfjsl, needfi, x, fjsl, nstate, user)

Input Parameters

1:     mode – int64int32nag_int scalar
Indicates which values must be assigned during each call of objfun. Only the following values need be assigned:
mode = 0mode=0 and needfi = ineedfi=i, where i > 0i>0
f(i)fi.
mode = 0mode=0 and needfi < 0needfi<0
f.
mode = 1mode=1 and needfi < 0needfi<0
All available elements of fjsl.
mode = 2mode=2 and needfi < 0needfi<0
f and all available elements of fjsl.
2:     m – int64int32nag_int scalar
mm, the number of subfunctions.
3:     n – int64int32nag_int scalar
nn, the number of variables.
4:     ldfjsl – int64int32nag_int scalar
ldfjsl is the first dimension of the array fjsl.
5:     needfi – int64int32nag_int scalar
If needfi = i > 0needfi=i>0, only the iith element of f(x)f(x) needs to be evaluated at xx; the remaining elements need not be set. This can result in significant computational savings when mnmn.
6:     x(n) – double array
xx, the vector of variables at which the objective function and/or all available elements of its gradient are to be evaluated.
7:     fjsl(ldfjsl, : :) – double array
The first dimension of the array fjsl must be at least
The second dimension of the array must be at least nn
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:     nstate – int64int32nag_int scalar
If nstate = 1nstate=1 then nag_glopt_nlp_multistart_sqp_lsq (e05us) is calling objfun for the first time on the current local optimization problem. This parameter setting allows you to save computation time if certain data must be read or calculated only once.
9:     user – 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:     mode – 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:     f(m) – double array
If mode = 0mode=0 and needfi = i > 0needfi=i>0, f(i)fi must contain the value of fifi at xx.
If mode = 0mode=0 or 22 and needfi < 0needfi<0, f(i)fi must contain the value of fifi at xx, for i = 1,2,,mi=1,2,,m.
3:     fjsl(ldfjsl, : :) – double array
The first dimension of the array fjsl will be
The second dimension of the array will be nn
fjsl may be regarded as a two-dimensional ‘slice’ of the three-dimensional array fjac of nag_glopt_nlp_multistart_sqp_lsq (e05us).
If mode = 1mode=1 or 22 and needfi < 0needfi<0, the iith row of fjsl must contain the available elements of the vector fifi given by
fi = (fi / x1,fi / x2,,fi / xn)T ,
fi = ( fi/ x1, fi/ x2 ,, fi/ xn )T ,
evaluated at the point xx. See also the parameter nstate.
4:     user – 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:     npts – 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: 1nbnpts1nbnpts.
10:   start – 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:     npts – int64int32nag_int scalar
Indicates the number of starting points.
2:     quas(n,npts) – double array
All elements of quas will have been set to zero, so only nonzero values need be set subsequently.
3:     n – int64int32nag_int scalar
The number of variables.
4:     repeat1 – logical scalar
Specifies whether a repeatable or non-repeatable sequence of points are to be generated.
5:     bl(n) – 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:     bu(n) – double array
The upper bounds on the variables. (See bl.)
7:     user – 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:     mode – int64int32nag_int scalar
mode will contain 00.

Output Parameters

1:     quas(n,npts) – double array
Must contain the starting points for the npts local minimizations, i.e., quas(j,i)quasji must contain the jjth component of the iith starting point.
2:     user – Any MATLAB object
3:     mode – int64int32nag_int scalar
If you set mode to a negative value then nag_glopt_nlp_multistart_sqp_lsq (e05us) will terminate immediately with ifail = 9ifail=9.
11:   repeat1 – 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 Section [Further Comments] for more detail.
12:   nb – 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 11. However, if you want to look at other solutions that may have desirable properties then setting nb > 1nb>1 will produce nb local minima, ordered by increasing value of their objective functions at the minima.
Constraint: 1nbnpts1nbnpts.
13:   iopts(740740) – int64int32nag_int array
14:   opts(485485) – 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:     m – int64int32nag_int scalar
Default: The dimension of the array y.
mm, the number of subfunctions associated with F(x)F(x).
Constraint: m > 0m>0.
2:     nclin – int64int32nag_int scalar
Default: The first dimension of the array a.
nLnL, the number of general linear constraints.
Constraint: nclin0nclin0.
3:     user – 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.

Input Parameters Omitted from the MATLAB Interface

lda ldx ldfjac sdfjac ldc ldcjac sdcjac ldclda listat iuser ruser

Output Parameters

1:     x(ldx, : :) – double array
The first dimension of the array x will be nn
The second dimension of the array will be nbnb
ldxnldxn.
x(j,i)xji contains the final estimate of the iith solution, for j = 1,2,,nj=1,2,,n.
2:     objf(nb) – double array
objf(i)objfi contains the value of the objective function at the final iterate for the iith solution.
3:     f(m, : :) – double array
The second dimension of the array will be nbnb
F(j,i)Fji contains the value of the jjth function fjfj at the final iterate, for j = 1,2,,mj=1,2,,m, for the iith solution, for i = 1,2,,nbi=1,2,,nb.
4:     fjac(ldfjac,sdfjac, : :) – double array
Note: the last dimension of the array fjac must be at least nbnb.
ldfjacmldfjacm.
sdfjacnsdfjacn.
For the iith returned solution, the Jacobian matrix of the functions f1 , f2 ,, fm f1 , f2 ,, fm at the final iterate, i.e., fjac(k,j,i)fjackji contains the partial derivative of the kkth function with respect to the jjth variable, for k = 1,2,,mk=1,2,,m, j = 1,2,,nj=1,2,,n and i = 1,2,,nbi=1,2,,nb. (See also the discussion of parameter fjsl under objfun.)
5:     iter(nb) – int64int32nag_int array
iter(i)iteri contains the number of major iterations performed to obtain the iith solution. If less than nb solutions are returned then iter(nb)iternb 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:     c(ldc, : :) – double array
The first dimension of the array c will be ncnlnncnln
The second dimension of the array will be nbnb
ldcncnlnldcncnln.
If ncnln > 0ncnln>0, c(j,i)cji contains the value of the jjth nonlinear constraint function cjcj at the final iterate, for the iith solution, for j = 1,2,,ncnlnj=1,2,,ncnln.
If ncnln = 0ncnln=0, the array c is not referenced.
7:     cjac(ldcjac,sdcjac, : :) – double array
Note: the last dimension of the array cjac must be at least nbnb.
ldcjacncnlnldcjacncnln.
If ncnln > 0ncnln>0, cjac contains the Jacobian matrices of the nonlinear constraint functions at the final iterate for each of the returned solutions, i.e., cjac(k,j,i)cjackji contains the partial derivative of the kkth constraint function with respect to the jjth variable, for k = 1,2,,ncnlnk=1,2,,ncnln and j = 1,2,,nj=1,2,,n, for the iith solution. (See the discussion of parameter cjsl under confun.)
If ncnln = 0ncnln=0, the array cjac is not referenced.
8:     clamda(ldclda, : :) – double array
The first dimension of the array clamda will be n + nclin + ncnlnn+nclin+ncnln
The second dimension of the array will be nbnb
ldcldan + nclin + ncnlnldcldan+nclin+ncnln.
The values of the QP multipliers from the last QP subproblem solved for the iith solution. clamda(j,i)clamdaji should be non-negative if istate(j,i) = 1istateji=1 and non-positive if istate(j,i) = 2istateji=2.
9:     istate(listat, : :) – int64int32nag_int array
The first dimension of the array istate will be n + nclin + ncnlnn+nclin+ncnln
The second dimension of the array will be nbnb
listatn + nclin + ncnlnlistatn+nclin+ncnln.
istate(j,i)istateji contains the status of the constraints in the QP working set for the iith solution. The significance of each possible value of istate(j,i)istateji is as follows:
istate(j,i)istateji Meaning
0-0 The constraint is satisfied to within the feasibility tolerance, but is not in the QP working set.
1-1 This inequality constraint is included in the QP working set at its lower bound.
2-2 This inequality constraint is included in the QP working set at its upper bound.
3-3 This constraint is included in the QP working set as an equality. This value of istate can occur only when bl(j) = bu(j)blj=buj.
10:   iopts(740740) – int64int32nag_int array
11:   opts(485485) – double array
12:   user – Any MATLAB object
13:   info(nb) – int64int32nag_int array
If ifail > 0ifail>0, info(i)infoi contains an error value returned by nag_opt_lsq_gencon_deriv (e04us).
If ifail = 8ifail=8 on exit, then not all nb solutions have been found, and info(nb)infonb contains the number of solutions actually found.
14:   ifail – int64int32nag_int scalar
ifail = 0ifail=0 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.

  ifail = 1ifail=1
An input value is incorrect. One or more of the following requirements are violated:
  • Constraint: 1nbnpts1nbnpts.
  • Constraint: bl(i)bu(i)blibui, for all ii.
  • Constraint: if ncnln > 0ncnln>0, sdcjacnsdcjacn.
  • Constraint: ldanclinldanclin.
  • Constraint: ldcjacncnlnldcjacncnln.
  • Constraint: ldcldan + nclin + ncnlnldcldan+nclin+ncnln.
  • Constraint: ldcncnlnldcncnln.
  • Constraint: ldfjacmldfjacm.
  • Constraint: ldxnldxn.
  • Constraint: listatn + nclin + ncnlnlistatn+nclin+ncnln.
  • Constraint: m > 0m>0.
  • Constraint: n > 0n>0.
  • Constraint: nclin0nclin0.
  • Constraint: ncnln0ncnln0.
  • Constraint: sdfjacnsdfjacn.
  ifail = 2ifail=2
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 sqrt(macheps)macheps, where machepsmacheps 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 ALAL are of order unity and are accurate to only three decimal places, Linear Feasibility Tolerance should be at least 10310-3.
No solution obtained. Linear constraints may be infeasible.
  ifail = 3ifail=3
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.
  ifail = 4ifail=4
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.
  ifail = 7ifail=7
User-supplied derivatives probably wrong.
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 x = 0x=0 or x = 1x=1 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 ifail = 8ifail=8
Only __ solutions obtained.
Not all nb solutions have been found. info(nb)infonb contains the number actually found.
  ifail = 9ifail=9
User terminated computation from start procedure.
  ifail = 10ifail=10
Failed to initialize optional parameter arrays.
  ifail = 999ifail=-999
Dynamic memory allocation failed.

Accuracy

If ifail = 0ifail=0 on exit and the value of info(i) = 0infoi=0, then the vector returned in the array x for solution ii 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 (see the description of start) and repeat1 = falserepeat1=false then a randomly chosen value for iskip is used, otherwise iskip is set to 100100. 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 Section [Description of Printed output] in (e04us).

Example

function nag_glopt_nlp_multistart_sqp_lsq_example
npts = int64(1);
repeat = true;
nclin = 1;
ncnln = 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];

  % Initialise nag_glopt_nlp_multistart_sqp_lsq
  [iopts, opts, ifail] = nag_glopt_optset( ...
                           'Initialize = nag_glopt_nlp_multistart_sqp_lsq', ...
                           zeros(740, 1,'int64'), zeros(485,1));
  [iopts, opts, ifail] = nag_glopt_optset('List', iopts, opts);
  [iopts, opts, ifail] = nag_glopt_optset('print level = 10', iopts, opts);

  % Solve the problem
  [x, objf, f, fjac, iter, c, cjac, clamda, istate, iopts, opts, user, ...
   info, ifail] = nag_glopt_nlp_multistart_sqp_lsq(n, int64(ncnln), a, ...
                        bl, bu, y, @confun, @objfun, ...
                        npts, @start, repeat, nb, iopts, opts);

  if ifail == 8
    l = double(info(nb));
    fprintf('\nOnly %d solutions found\n', info(nb));
  else
    l = double(nb);
  end

  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:double(n)
      fprintf(' %3d      %3d     %14.6g %12.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=double(n+1):double(n+nclin)
        j=k-n;
        fprintf(' %3d      %3d     %14.6g %12.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=double(n+nclin+1):double(n+nclin +ncnln)
        j=k-n-nclin;
        fprintf(' %3d      %3d     %14.6g %12.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)
    % First call to confun.  Set all Jacobian elements to zero.
    % Note that this will only work when 'Derivative Level = 3'
    % (the default).
     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)
  % Evaluate the subfunctions and their 1st derivatives.

  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;
 


 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


 ------------------------------------------------------

function e05us_example
npts = int64(1);
repeat = true;
nclin = 1;
ncnln = 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];

  % Initialise e05us
  [iopts, opts, ifail] = e05zk('Initialize = e05us', zeros(740, 1,'int64'), ...
                               zeros(485,1));
  [iopts, opts, ifail] = e05zk('List', iopts, opts);
  [iopts, opts, ifail] = e05zk('print level = 10', iopts, opts);

  % Solve the problem
  [x, objf, f, fjac, iter, c, cjac, clamda, istate, iopts, opts, user, ...
   info, ifail] = e05us(n, int64(ncnln), a, bl, bu, y, @confun, @objfun, ...
                        npts, @start, repeat, nb, iopts, opts);

  if ifail == 8
    l = double(info(nb));
    fprintf('\nOnly %d solutions found\n', info(nb));
  else
    l = double(nb);
  end

  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:double(n)
      fprintf(' %3d      %3d     %14.6g %12.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=double(n+1):double(n+nclin)
        j=k-n;
        fprintf(' %3d      %3d     %14.6g %12.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=double(n+nclin+1):double(n+nclin +ncnln)
        j=k-n-nclin;
        fprintf(' %3d      %3d     %14.6g %12.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)
    % First call to confun.  Set all Jacobian elements to zero.
    % Note that this will only work when 'Derivative Level = 3'
    % (the default).
     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)
  % Evaluate the subfunctions and their 1st derivatives.

  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;
 


 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 Section [Algorithmic Details] in (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 parameters 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 ‘Initialize = e05usc’.
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 Section [Optional Parameters] in (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).

Description of Monitoring Information

See Section [Description of Monitoring Information] in (e04us).

PDF version (NAG web site, 64-bit version, 64-bit version)
Chapter Contents
Chapter Introduction
NAG Toolbox

© The Numerical Algorithms Group Ltd, Oxford, UK. 2009–2013