<?xml-stylesheet type="text/xsl" href="../styles/pmathml.xsl"?>
<!-- saved from url=(0014)about:internet -->
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:dsi="http://www.w3.org/1999/xlink" xmlns:m="http://www.w3.org/1998/Math/MathML" xml:space="preserve"><head><meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"/><title>E05JBF : NAG Library, Mark 22</title><link rel="stylesheet" href="../styles/libdoc.css" type="text/css"/><script type="text/javascript">
   function showLevel(_levelId){
    var thisLevel = document.getElementById(_levelId);
    var thisplus = document.getElementById( _levelId.concat('plus'));
    var thisminus = document.getElementById( _levelId.concat('minus'));
    if(thisLevel.style.display != "block"){
     thisLevel.style.display = "block";
     thisplus.style.display = "none";
     thisminus.style.display = "inline";
     }
    else{
     thisLevel.style.display = "none";
     thisminus.style.display = "none";
     thisplus.style.display = "inline";
     }
    }
  </script></head><body><hr/><div><a class="rout" href="../../pdf/E05/e05jbf.pdf">E05JBF (PDF version)</a></div><div><a class="chap" href="e05conts.xml">E05 Chapter Contents</a></div><div><a class="chapint" href="e05intro.xml">E05 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div><hr/><h1 class="libdoc">NAG Library Routine Document<br/><br/>E05JBF</h1><div class="paramtext"><div class="header"><b>Note:</b>&#160; before using this routine, please read the Users' Note for your implementation to check the interpretation of <span class="bitalic">bold italicised</span> terms and other implementation-dependent details.</div></div> <div class="paramtext"><b>Note:</b> <span class="italic">this routine uses</span> <b>optional parameters</b> <span class="italic">to define choices in the problem specification and in the details of the algorithm. If you wish to use</span> default <span class="italic">settings for all of the optional parameters, you need only read <a class="sec" href="#purpose">Sections 1</a> to <a class="sec" href="#example">9</a> of this document. If, however, you wish to reset some or all of the settings please refer to <a class="sec" href="#algdetails">Section 10</a> for a detailed description of the algorithm, and to <a class="sec" href="#optparams">Section 11</a> for a detailed description of the specification of the optional parameters</span>.</div><div class="htmltoc">
<h2 class="htmltoc"><span class="htmltochead" onclick="showLevel('htmltoc');"><span class="htmltocplus" id="htmltocplus">+</span><span class="htmltocminus" id="htmltocminus">&#8722;</span></span>&#160;Contents</h2>
<div class="htmltocitem" id="htmltoc">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#purpose">1&#160;&#160;<b>Purpose</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#specification">2&#160;&#160;<b>Specification</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#description">3&#160;&#160;<b>Description</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#references">4&#160;&#160;<b>References</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#parameters">5&#160;&#160;<b>Parameters</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#errors">6&#160;&#160;<b>Error Indicators and Warnings</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#accuracy">7&#160;&#160;<b>Accuracy</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fcomments">8&#160;&#160;<b>Further Comments</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocexample');"><span class="htmltocplus" id="tocexampleplus">+</span><span class="htmltocminus" id="tocexampleminus">&#8722;</span></span>
<a class="htmltoc" href="#example">9&#160;&#160;<b>Example</b></a>
<div class="htmltocitem" id="tocexample">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examtext">9.1&#160;&#160;<b>Program Text</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examdata">9.2&#160;&#160;<b>Program Data</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#examresults">9.3&#160;&#160;<b>Program Results</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocalgdetails');"><span class="htmltocplus" id="tocalgdetailsplus">+</span><span class="htmltocminus" id="tocalgdetailsminus">&#8722;</span></span>
<a class="htmltoc" href="#algdetails">10&#160;&#160;<b>Algorithmic Details</b></a>
<div class="htmltocitem" id="tocalgdetails">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#ad-initializationandsweeps">10.1&#160;&#160;<b>Initialization and Sweeps</b></a>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocad-splitting');"><span class="htmltocplus" id="tocad-splittingplus">+</span><span class="htmltocminus" id="tocad-splittingminus">&#8722;</span></span>
<a class="htmltoc" href="#ad-splitting">10.2&#160;&#160;<b>Splitting</b></a>
<div class="htmltocitem" id="tocad-splitting">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#splittingbyrank">10.2.1&#160;&#160;<b>Splitting by rank</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#splittingbyexpectedgain">10.2.2&#160;&#160;<b>Splitting by expected gain</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#ad-localsearch">10.3&#160;&#160;<b>Local Search</b></a>
</div>
</div>
</div><div class="htmltoc">
<span class="htmltoc" onclick="showLevel('tocoptparams');"><span class="htmltocplus" id="tocoptparamsplus">+</span><span class="htmltocminus" id="tocoptparamsminus">&#8722;</span></span>
<a class="htmltoc" href="#optparams">11&#160;&#160;<b>Optional Parameters</b></a>
<div class="htmltocitem" id="tocoptparams">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#op-checklist">11.1&#160;&#160;<b>Optional Parameter Checklist and Default Values</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#op-description">11.2&#160;&#160;<b>Description of the Optional Parameters</b></a>
</div>
</div>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="purpose" id="purpose"/>1&#160;&#160;Purpose</h2>
<div class="paramtext">E05JBF is designed to find the global minimum or maximum of an arbitrary function, subject to simple bound-constraints using a multi-level coordinate search method.  Derivatives are not required, but convergence is only guaranteed if the objective function is continuous in a neighbourhood of a global optimum. It is not intended for large problems.</div><div class="paramtext">The initialization routine <a class="rout" href="../E05/e05jaf.xml">E05JAF</a> <b>must</b> have been called before calling E05JBF.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2>
<table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;E05JBF&#160;(</td><td class="tdfspec2"><a class="arg" href="#N">N</a>, <a class="arg" href="#OBJFUN">OBJFUN</a>, <a class="arg" href="#IBOUND">IBOUND</a>, <a class="arg" href="#IINIT">IINIT</a>, <a class="arg" href="#BL">BL</a>, <a class="arg" href="#BU">BU</a>, <a class="arg" href="#SDLIST">SDLIST</a>, <a class="arg" href="#LIST">LIST</a>, <a class="arg" href="#NUMPTS">NUMPTS</a>, <a class="arg" href="#INITPT">INITPT</a>, <a class="arg" href="#MONIT">MONIT</a>, <a class="arg" href="#X">X</a>, <a class="arg" href="#OBJ">OBJ</a>, <a class="arg" href="#COMM">COMM</a>, <a class="arg" href="#LCOMM">LCOMM</a>, <a class="arg" href="#IUSER">IUSER</a>, <a class="arg" href="#RUSER">RUSER</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, IBOUND, IINIT, SDLIST, NUMPTS(N), INITPT(N), LCOMM, IUSER(*), IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">BL(N), BU(N), LIST(N,SDLIST), X(N), OBJ, COMM(LCOMM), RUSER(*)</td></tr><tr><td class="tdfspec1">EXTERNAL</td><td class="tdfspec2">OBJFUN, MONIT</td></tr></table><div class="paramtext"><a class="rout" href="../E05/e05jaf.xml">E05JAF</a> <b>must</b> be called before calling E05JBF, or any of the option-setting or option-getting 
routines <a class="rout" href="../E05/e05jcf.xml">E05JCF</a>, <a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a>, <a class="rout" href="../E05/e05jgf.xml">E05JGF</a>, <a class="rout" href="../E05/e05jhf.xml">E05JHF</a>, <a class="rout" href="../E05/e05jjf.xml">E05JJF</a>, <a class="rout" href="../E05/e05jkf.xml">E05JKF</a> or <a class="rout" href="../E05/e05jlf.xml">E05JLF</a>.

 
</div><div class="paramtext">The contents of 
the array <a class="arg" href="../E05/e05jaf.xml#COMM">COMM</a> 

and the value of the parameter <a class="arg" href="#N">N</a> <b>must not</b> be altered between calls of the 
routines <a class="rout" href="../E05/e05jaf.xml">E05JAF</a>, E05JBF, <a class="rout" href="../E05/e05jcf.xml">E05JCF</a>, <a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a>, <a class="rout" href="../E05/e05jgf.xml">E05JGF</a>, <a class="rout" href="../E05/e05jhf.xml">E05JHF</a>, <a class="rout" href="../E05/e05jjf.xml">E05JJF</a>, <a class="rout" href="../E05/e05jkf.xml">E05JKF</a> or <a class="rout" href="../E05/e05jlf.xml">E05JLF</a>.


</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">E05JBF is designed to solve modestly sized global optimization problems having simple bound-constraints only; it finds the global optimum of a nonlinear function subject to a set of bound constraints on the variables. Without loss of generality, the problem is assumed to be stated in the following form:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:munder>
  <m:mi mathvariant="normal">minimize</m:mi>
  <m:mrow><m:mi mathvariant="bold">x</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced>
 <m:mtext>&#8195; subject to &#8195;</m:mtext>
 <m:mi mathvariant="bold">l</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mi mathvariant="bold">x</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mi mathvariant="bold">u</m:mi>
 <m:mtext>&#8195; and &#8195;</m:mtext>
 <m:mi mathvariant="bold">l</m:mi><m:mo>&lt;</m:mo><m:mi mathvariant="bold">u</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced></m:math>&#160;(the <span class="italic">objective function</span>) is a nonlinear scalar function (assumed to be continuous in a neighbourhood of a global minimum), and the bound vectors are elements of <m:math><m:msup><m:mover><m:mi>R</m:mi><m:mo>-</m:mo></m:mover><m:mi>n</m:mi></m:msup></m:math>, where <m:math><m:mover><m:mi>R</m:mi><m:mo>-</m:mo></m:mover></m:math>&#160;denotes the extended reals <m:math><m:mi>R</m:mi><m:mo>&#8746;</m:mo><m:mfenced separators="" open="{" close="}"><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow><m:mo>,</m:mo><m:mi>&#8734;</m:mi></m:mfenced></m:math>. Relational operators between vectors are interpreted elementwise.</div><div class="paramtext">The optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_maximize"><m:mi mathcolor="#800080;" mathvariant="bold">Maximize</m:mi></m:maction></m:math>&#160;should be set if you wish to solve maximization, rather than minimization, problems.</div><div class="paramtext">If certain bounds are not present, the associated elements of <m:math><m:mi mathvariant="bold">l</m:mi></m:math>&#160;or <m:math><m:mi mathvariant="bold">u</m:mi></m:math>&#160;can be set to special values that will be treated as <m:math><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>&#160;or <m:math><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>. See the description of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_infiniteboundsize"><m:mi mathcolor="#800080;" mathvariant="bold">Infinite Bound Size</m:mi></m:maction></m:math>. Phrases in this document containing terms like &#8216;unbounded values&#8217; should be understood to be taken relative to this optional parameter.</div><div class="paramtext">A typical excerpt from a routine calling E05JBF is:
<pre class="verbatim">
CALL E05JAF (N, COMM, LCOMM, ...)
CALL E05JDF (OPTSTR, COMM, LCOMM, ...)
CALL E05JBF (N, OBJFUN, ...)
</pre>


where <a class="rout" href="../E05/e05jdf.xml">E05JDF</a> sets the optional parameter and value specified in <a class="arg" href="../E05/e05jdf.xml#OPTSTR">OPTSTR</a>.</div><div class="paramtext">The initialization routine <a class="rout" href="../E05/e05jaf.xml">E05JAF</a> does not need to be called before each invocation of E05JBF, so long as the problem size, <a class="arg" href="#N">N</a>, remains unchanged. You should be aware that a call to the initialization routine will reset each optional parameter to its default value, and, if you are using repeatable randomized initialization lists (see the description of the parameter <a class="arg" href="#IINIT">IINIT</a>), the random seed stored in
the array <a class="arg" href="../E05/e05jaf.xml#COMM">COMM</a> 
 
will be destroyed.</div><div class="paramtext">You must supply a subroutine that evaluates <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced></m:math>; derivatives are not required.</div><div class="paramtext">The method used by E05JBF is based on MCS, the Multi-level Coordinate Search method described in <a class="ref" href="#ref768">Huyer and Neumaier (1999)</a>, and the algorithm it uses is described in detail in <a class="sec" href="#algdetails">Section 10</a>.</div><h2 class="standard"><a class="sec" name="references" id="references"/>4&#160;&#160;References</h2><div class="paramtext"><a name="ref768" id="ref768"/>Huyer W and Neumaier A (1999)  Global Optimization by Multi-level Coordinate Search <i>Journal of Global Optimization</i> <b>14</b> 331&#8211;355 </div><h2 class="standard"><a class="sec" name="parameters" id="parameters"/>5&#160;&#160;Parameters</h2>
<dl><dt class="paramhead"><a name="N" id="N"/>1: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: 


<m:math><m:mi>n</m:mi></m:math>, the number of variables.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="OBJFUN" id="OBJFUN"/>2: &#160;&#160;&#8194; OBJFUN &#8211; SUBROUTINE, supplied by the user.<span class="pclass">External Procedure</span></dt><dd>
<div class="paramtext"><a class="arg" href="#OBJFUN">OBJFUN</a> must evaluate the objective function <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced></m:math>&#160;for a specified <m:math><m:mi>n</m:mi></m:math>-vector <m:math><m:mi mathvariant="bold">x</m:mi></m:math>.</div>
<div class="subprog">
<div class="paramtext">The specification of <a class="arg" href="#OBJFUN">OBJFUN</a> is:</div><table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;OBJFUN&#160;(</td><td class="tdfspec2"><a class="arg" href="../E05/e05jbf.xml#OBJFUN_N">N</a>, <a class="arg" href="../E05/e05jbf.xml#OBJFUN_X">X</a>, <a class="arg" href="../E05/e05jbf.xml#OBJFUN_F">F</a>, <a class="arg" href="../E05/e05jbf.xml#OBJFUN_NSTATE">NSTATE</a>, <a class="arg" href="../E05/e05jbf.xml#OBJFUN_IUSER">IUSER</a>, <a class="arg" href="../E05/e05jbf.xml#OBJFUN_RUSER">RUSER</a>, <a class="arg" href="../E05/e05jbf.xml#OBJFUN_INFORM">INFORM</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, NSTATE, IUSER(*), INFORM</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">X(N), F, RUSER(*)</td></tr></table>
<dl><dt class="paramhead"><a name="OBJFUN_N" id="OBJFUN_N"/>1: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:mi>n</m:mi></m:math>, the number of variables.</div>
</dd><dt class="paramhead"><a name="OBJFUN_X" id="OBJFUN_X"/>2: &#160;&#160;&#8194; X(<a class="arg" href="../E05/e05jbf.xml#OBJFUN_N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, the vector at which the objective function is to be evaluated.</div>
</dd><dt class="paramhead"><a name="OBJFUN_F" id="OBJFUN_F"/>3: &#160;&#160;&#8194; F &#8211; <span class="bitalic">double precision</span><span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>:  must be set to the value of the objective function at <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, unless you have specified termination of the current problem using <a class="arg" href="../E05/e05jbf.xml#OBJFUN_INFORM">INFORM</a>.</div>
</dd><dt class="paramhead"><a name="OBJFUN_NSTATE" id="OBJFUN_NSTATE"/>4: &#160;&#160;&#8194; NSTATE &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#OBJFUN_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>&#160;then E05JBF is calling <a class="arg" href="#OBJFUN">OBJFUN</a> for the first time. This parameter setting allows you to save computation time if certain data must be read or calculated only once.</div>
</dd><dt class="paramhead"><a name="OBJFUN_IUSER" id="OBJFUN_IUSER"/>5: &#160;&#160;&#8194; IUSER(<m:math><m:mo>*</m:mo></m:math>) &#8211; INTEGER array<span class="pclass">User Workspace</span></dt><dt class="multi-paramhead"><a name="OBJFUN_RUSER" id="OBJFUN_RUSER"/>6: &#160;&#160;&#8194; RUSER(<m:math><m:mo>*</m:mo></m:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">User Workspace</span></dt><dd>
<div class="paramtext"><a class="arg" href="#OBJFUN">OBJFUN</a> is called from E05JBF with the parameters <a class="arg" href="../E05/e05jbf.xml#OBJFUN_IUSER">IUSER</a> and <a class="arg" href="../E05/e05jbf.xml#OBJFUN_RUSER">RUSER</a> as supplied to E05JBF. You are free to use the arrays <a class="arg" href="../E05/e05jbf.xml#OBJFUN_IUSER">IUSER</a> and <a class="arg" href="../E05/e05jbf.xml#OBJFUN_RUSER">RUSER</a> to supply information to <a class="arg" href="#OBJFUN">OBJFUN</a>.</div>
</dd><dt class="paramhead"><a name="OBJFUN_INFORM" id="OBJFUN_INFORM"/>7: &#160;&#160;&#8194; INFORM &#8211; INTEGER<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: must be set to a value describing the action to be taken by the solver on return from <a class="arg" href="#OBJFUN">OBJFUN</a>.  Specifically, if the value is negative the solution of the current problem will terminate immediately; otherwise, computations will continue.</div>
</dd></dl>
</div>
<div class="paramtext"><a class="arg" href="#OBJFUN">OBJFUN</a> must be declared as EXTERNAL in the (sub)program from which E05JBF is called. Parameters denoted as <span class="italic">Input</span>  must <b>not</b>  be changed by this procedure.</div>
</dd><dt class="paramhead"><a name="IBOUND" id="IBOUND"/>3: &#160;&#160;&#8194; IBOUND &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: indicates whether the facility for dealing with bounds of special forms is to be used. <a class="arg" href="#IBOUND">IBOUND</a> must be set to one of the following values.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math></dt>
<dd>You will supply <m:math><m:mi mathvariant="bold">l</m:mi></m:math>&#160;and <m:math><m:mi mathvariant="bold">u</m:mi></m:math>&#160;individually.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>There are no bounds on <m:math><m:mi mathvariant="bold">x</m:mi></m:math>.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math></dt>
<dd>There are semi-infinite bounds <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mi mathvariant="bold">x</m:mi></m:math>.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math></dt>
<dd>There are constant bounds <m:math><m:mi mathvariant="bold">l</m:mi><m:mo>=</m:mo><m:msub><m:mi>&#8467;</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:mi mathvariant="bold">u</m:mi><m:mo>=</m:mo><m:msub><m:mi>u</m:mi><m:mn>1</m:mn></m:msub></m:math>.</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mn>1</m:mn></m:math>, <m:math><m:mn>2</m:mn></m:math>&#160;or <m:math><m:mn>3</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="IINIT" id="IINIT"/>4: &#160;&#160;&#8194; IINIT &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: selects which initialization method to use.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math></dt>
<dd>Simple initialization (boundary and midpoint), with <br/>
<m:math>
 <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>3</m:mn>
</m:math>, <m:math>
 <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>2</m:mn>
</m:math>&#160;and<br/> 
<m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi><m:mi>j</m:mi></m:mfenced></m:mrow>
 <m:mo>=</m:mo>
 <m:mfenced separators=""><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>,</m:mo><m:mrow>
   <m:mfenced separators="">
    <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow>
    <m:mo>+</m:mo>
    <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow>
   </m:mfenced>
   <m:mo>/</m:mo>
   <m:mn>2</m:mn>
  </m:mrow><m:mo>,</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:mfenced>
</m:math>,<br/> for <m:math>
 <m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction>
</m:math>&#160;and <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn></m:math>.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>Simple initialization (off-boundary and midpoint), with <br/>
<m:math>
 <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>3</m:mn>
</m:math>, <m:math>
 <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>2</m:mn>
</m:math>&#160;and<br/>
<m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi><m:mi>j</m:mi></m:mfenced></m:mrow>
 <m:mo>=</m:mo><m:mspace linebreak="newline"/>
 <m:mfenced separators=""><m:mrow>
   <m:mfenced separators="">
    <m:mn>5</m:mn><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>+</m:mo>
    <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:mfenced>
   <m:mo>/</m:mo>
   <m:mn>6</m:mn>
  </m:mrow><m:mo>,</m:mo><m:mrow>
   <m:mfenced separators="">
    <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow>
    <m:mo>+</m:mo>
    <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow>
   </m:mfenced>
   <m:mo>/</m:mo>
   <m:mn>2</m:mn>
  </m:mrow><m:mo>,</m:mo><m:mrow>
   <m:mfenced separators="">
    <m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow>
    <m:mo>+</m:mo>
    <m:mn>5</m:mn><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow>
   </m:mfenced>
   <m:mo>/</m:mo>
   <m:mn>6</m:mn>
  </m:mrow></m:mfenced>
</m:math>, <br/>
for <m:math>
 <m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction>
</m:math>&#160;and <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</m:mn></m:math>.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math></dt>
<dd>Initialization using linesearches.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math></dt>
<dd>You are providing your own initialization list.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>4</m:mn></m:math></dt>
<dd>Generate a random initialization list.</dd></dl>
<div class="paramtext">For more information on methods <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math>, <m:math><m:mn>3</m:mn></m:math>&#160;or <m:math><m:mn>4</m:mn></m:math>&#160;see <a class="sec" href="#ad-initializationandsweeps">Section 10.1</a>.</div>
<div class="paramtext">If &#8216;infinite&#8217; values (as determined by the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_infiniteboundsize"><m:mi mathcolor="#800080;" mathvariant="bold">Infinite Bound Size</m:mi></m:maction></m:math>) are detected by E05JBF when you are using a simple initialization method (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mn>1</m:mn></m:math>), a safeguarded initialization procedure will be attempted, to avoid overflow.</div>
</div>
<div class="paramtext"><i>Suggested value</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math></div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mn>1</m:mn></m:math>, <m:math><m:mn>2</m:mn></m:math>, <m:math><m:mn>3</m:mn></m:math>&#160;or <m:math><m:mn>4</m:mn></m:math>.
</div>
</dd><dt class="paramhead"><a name="BL" id="BL"/>5: &#160;&#160;&#8194; BL(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input/Output</span></dt><dt class="multi-paramhead"><a name="BU" id="BU"/>6: &#160;&#160;&#8194; BU(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction></m:math>&#160;is <m:math><m:mi mathvariant="bold">l</m:mi></m:math>, the array of lower bounds. <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction></m:math>&#160;is <m:math><m:mi mathvariant="bold">u</m:mi></m:math>, the array of upper bounds.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, you must set <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;to <m:math><m:msub><m:mi>&#8467;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;to <m:math><m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>. If a particular <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is to be unbounded below, the corresponding <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;should be set to <m:math><m:mo>-</m:mo><m:mi mathvariant="italic">infbnd</m:mi></m:math>, where <m:math><m:mi mathvariant="italic">infbnd</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_infiniteboundsize"><m:mi mathcolor="#800080;" mathvariant="bold">Infinite Bound Size</m:mi></m:maction></m:math>. Similarly, if a particular <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is to be unbounded above, the corresponding <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;should be set to <m:math><m:mi mathvariant="italic">infbnd</m:mi></m:math>.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>&#160;or <m:math><m:mn>2</m:mn></m:math>, arrays <a class="arg" href="#BL">BL</a> and <a class="arg" href="#BU">BU</a> need not be set on input.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math>, you must set <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;to <m:math><m:msub><m:mi>&#8467;</m:mi><m:mi>1</m:mi></m:msub></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>&#160;to <m:math><m:msub><m:mi>u</m:mi><m:mi>1</m:mi></m:msub></m:math>. The remaining elements of <a class="arg" href="#BL">BL</a> and <a class="arg" href="#BU">BU</a> will then be populated by these initial values.</div>
<div class="paramtext">Fixing a variable (that is, setting <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;for some <m:math><m:mi>i</m:mi></m:math>) is not permitted by E05JBF.</div>
</div>
<div class="paramtext"><i>On exit</i>: unless <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFeq1"><m:mn mathcolor="#003399" mathvariant="bold">1</m:mn></m:maction></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFeq2"><m:mn mathcolor="#003399" mathvariant="bold">2</m:mn></m:maction></m:math>&#160;on exit, <a class="arg" href="#BL">BL</a> and <a class="arg" href="#BU">BU</a> are the actual arrays of bounds used by E05JBF.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow><m:mo>&lt;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IBOUND"><m:mi mathcolor="#EE0000" mathvariant="bold">IBOUND</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>&lt;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math>;</li>
</ul> for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>.</div>
</dd><dt class="paramhead"><a name="SDLIST" id="SDLIST"/>7: &#160;&#160;&#8194; SDLIST &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the second dimension of the array <a class="arg" href="#LIST">LIST</a> 
<a class="arg" href="#SDLIST">SDLIST</a> is, 

at least, the maximum over <m:math><m:mi>i</m:mi></m:math>&#160;of the number of points in coordinate <m:math><m:mi>i</m:mi></m:math>&#160;at which to split according to the initialization list <a class="arg" href="#LIST">LIST</a>; that is, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mstyle displaystyle="true"><m:munder><m:mi mathvariant="normal">max</m:mi><m:mi>i</m:mi></m:munder></m:mstyle><m:mspace width="0.25em"/><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>.
<div class="paramtext">Internally, E05JBF uses <a class="arg" href="#LIST">LIST</a> to determine sets of points along each coordinate direction to which it fits quadratic interpolants. Since fitting a quadratic requires at least three distinct points, this puts a lower bound on <a class="arg" href="#SDLIST">SDLIST</a>. Furthermore, in the case of initialization by linesearches (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math>) internal storage considerations require that <a class="arg" href="#SDLIST">SDLIST</a> be at least <m:math><m:mn>192</m:mn></m:math>, but not all of this space may be used.</div>
</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>&#8800;</m:mo><m:mn>2</m:mn></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>3</m:mn></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>192</m:mn></m:math>;</li>
<li class="listcons">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mstyle displaystyle="true"><m:munder><m:mi mathvariant="normal">max</m:mi><m:mi>i</m:mi></m:munder></m:mstyle><m:mspace width="0.25em"/><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>.</li>
</ul></div>
</dd><dt class="paramhead"><a name="LIST" id="LIST"/>8: &#160;&#160;&#8194; LIST(<a class="arg" href="#N">N</a>,<a class="arg" href="#SDLIST">SDLIST</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input/Output</span></dt><dt class="multi-paramhead"><a name="NUMPTS" id="NUMPTS"/>9: &#160;&#160;&#8194; NUMPTS(<a class="arg" href="#N">N</a>) &#8211; INTEGER array<span class="pclass">Input/Output</span></dt><dt class="multi-paramhead"><a name="INITPT" id="INITPT"/>10: &#8194; INITPT(<a class="arg" href="#N">N</a>) &#8211; INTEGER array<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><i>On entry</i>: these three parameters need not be set on entry if you wish to use one of the preset initialization methods (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>&#8800;</m:mo><m:mn>3</m:mn></m:math>).
<div class="paramtext"><a class="arg" href="#LIST">LIST</a> is the &#8216;initialization list&#8217;: whenever a sub-box in the algorithm is split for the first time (either during the <span class="italic">initialization procedure</span> or later), for each coordinate <m:math><m:mi>i</m:mi></m:math>&#160;the split is done at the values <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi><m:mrow><m:mn>1</m:mn><m:mo>:</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:mrow></m:mfenced></m:mrow></m:math>, as well as at some adaptively chosen intermediate points.</div>
<div class="paramtext">You must designate a point stored in <a class="arg" href="#LIST">LIST</a> that you wish E05JBF to consider as an &#8216;initial point&#8217; for the purposes of the splitting procedure. Call this initial point <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>. The coordinates of <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;correspond to a set of indices <m:math><m:msub><m:mi>J</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>, such that <m:math><m:msubsup><m:mi mathvariant="bold">x</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;is stored in <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi><m:msub><m:mi>J</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:mrow></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>.  You must set <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:msub><m:mi>J</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>.</div>
<div class="paramtext">The array sections <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi><m:mrow><m:mn>1</m:mn><m:mo>:</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:mrow></m:mfenced></m:mrow></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>, must be in ascending order with each entry being distinct. In this context, &#8216;distinct&#8217; should be taken to mean relative to the safe-range parameter (see <a class="rout" href="../X02/x02amf.xml">X02AMF</a>).</div>
</div>
<div class="paramtext"><i>On exit</i>: unless <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFeq1"><m:mn mathcolor="#003399" mathvariant="bold">1</m:mn></m:maction></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFeq2"><m:mn mathcolor="#003399" mathvariant="bold">2</m:mn></m:maction></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFeq-999"><m:mn mathcolor="#003399" mathvariant="bold">-999</m:mn></m:maction></m:math>&#160;on exit, the actual initialization data used by E05JBF. If you wish to monitor the contents of <a class="arg" href="#LIST">LIST</a> you are advised to do so solely through <a class="arg" href="#MONIT">MONIT</a>, not through the output value here.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons"><m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction></m:math>,  for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>;</li>
<li class="listcons"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi><m:mrow><m:mn>1</m:mn><m:mo>:</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow></m:mrow></m:mfenced></m:mrow></m:math>&#160;is in ascending order with each entry being distinct,  for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>;</li>
<li class="listcons"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BL"><m:mi mathcolor="#EE0000" mathvariant="bold">BL</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#BU"><m:mi mathcolor="#EE0000" mathvariant="bold">BU</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow></m:math>,  for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math> and <m:math><m:mi mathvariant="italic">j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow></m:math>;</li>
<li class="listcons"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction></m:math>,  for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>;</li>
<li class="listcons"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">i</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mn>3</m:mn></m:math>,  for <m:math><m:mi mathvariant="italic">i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>.</li>
</ul></div>
</dd><dt class="paramhead"><a name="MONIT" id="MONIT"/>11: &#8194; MONIT &#8211; SUBROUTINE, supplied by the NAG Library or the user.<span class="pclass">External Procedure</span></dt><dd>
<div class="paramtext"><a class="arg" href="#MONIT">MONIT</a> may be used to monitor the optimization process. It is invoked upon every successful completion of the procedure in which a sub-box is considered for splitting. It will also be called just before E05JBF exits if that splitting procedure was not successful.</div>
<div class="paramtext">If no monitoring is required, <a class="arg" href="#MONIT">MONIT</a> may be
the dummy monitoring routine E05JBK supplied by the NAG Library.

</div> 
<div class="subprog">
<div class="paramtext">The specification of <a class="arg" href="#MONIT">MONIT</a> is:</div><table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;MONIT&#160;(</td><td class="tdfspec2"><a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_NCALL">NCALL</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_XBEST">XBEST</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_ICOUNT">ICOUNT</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_NINIT">NINIT</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_LIST">LIST</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_NUMPTS">NUMPTS</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_INITPT">INITPT</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_NBASKT">NBASKT</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_XBASKT">XBASKT</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_BOXL">BOXL</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_BOXU">BOXU</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_NSTATE">NSTATE</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_IUSER">IUSER</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_RUSER">RUSER</a>, <a class="arg" href="../E05/e05jbf.xml#MONIT_INFORM">INFORM</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, NCALL, ICOUNT(6), NINIT, NUMPTS(N), INITPT(N), NBASKT, NSTATE, IUSER(*), INFORM</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">XBEST(N), LIST(N,NINIT), XBASKT(N,NBASKT), BOXL(N), BOXU(N), RUSER(*)</td></tr></table>
<dl><dt class="paramhead"><a name="MONIT_N" id="MONIT_N"/>1: &#160;&#160;&#8194; N &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: <m:math><m:mi>n</m:mi></m:math>, the number of variables.</div>
</dd><dt class="paramhead"><a name="MONIT_NCALL" id="MONIT_NCALL"/>2: &#160;&#160;&#8194; NCALL &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the cumulative number of calls to <a class="arg" href="#OBJFUN">OBJFUN</a>.</div>
</dd><dt class="paramhead"><a name="MONIT_XBEST" id="MONIT_XBEST"/>3: &#160;&#160;&#8194; XBEST(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the current best point.</div>
</dd><dt class="paramhead"><a name="MONIT_ICOUNT" id="MONIT_ICOUNT"/>4: &#160;&#160;&#8194; ICOUNT(<m:math><m:mn>6</m:mn></m:math>) &#8211; INTEGER array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: an array of counters.

<dl>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_ICOUNT"><m:mi mathcolor="#EE0000" mathvariant="bold">ICOUNT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd><m:math><m:mi mathvariant="italic">nboxes</m:mi></m:math>, the current number of sub-boxes.</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_ICOUNT"><m:mi mathcolor="#EE0000" mathvariant="bold">ICOUNT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd><m:math><m:mi mathvariant="italic">ncloc</m:mi></m:math>, the cumulative number of calls to <a class="arg" href="#OBJFUN">OBJFUN</a> made in local searches.</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_ICOUNT"><m:mi mathcolor="#EE0000" mathvariant="bold">ICOUNT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>3</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd><m:math><m:mi mathvariant="italic">nloc</m:mi></m:math>, the cumulative number of points used as start points for local searches.</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_ICOUNT"><m:mi mathcolor="#EE0000" mathvariant="bold">ICOUNT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>4</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd><m:math><m:mi mathvariant="italic">nsweep</m:mi></m:math>, the cumulative number of sweeps through levels.</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_ICOUNT"><m:mi mathcolor="#EE0000" mathvariant="bold">ICOUNT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>5</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd><m:math><m:mi mathvariant="italic">m</m:mi></m:math>, the cumulative number of splits by initialization list.</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_ICOUNT"><m:mi mathcolor="#EE0000" mathvariant="bold">ICOUNT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>6</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd><m:math><m:mi mathvariant="italic">s</m:mi></m:math>, the current lowest level containing non-split boxes.</dd></dl>
</div>
</dd><dt class="paramhead"><a name="MONIT_NINIT" id="MONIT_NINIT"/>5: &#160;&#160;&#8194; NINIT &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the maximum over <m:math><m:mi>i</m:mi></m:math>&#160;of the number of points in coordinate <m:math><m:mi>i</m:mi></m:math>&#160;at which to split according to the initialization list <a class="arg" href="../E05/e05jbf.xml#MONIT_LIST">LIST</a>. See also the description of the parameter <a class="arg" href="../E05/e05jbf.xml#MONIT_NUMPTS">NUMPTS</a>.</div>
</dd><dt class="paramhead"><a name="MONIT_LIST" id="MONIT_LIST"/>6: &#160;&#160;&#8194; LIST(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>,<a class="arg" href="../E05/e05jbf.xml#MONIT_NINIT">NINIT</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the initialization list.</div>
</dd><dt class="paramhead"><a name="MONIT_NUMPTS" id="MONIT_NUMPTS"/>7: &#160;&#160;&#8194; NUMPTS(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>) &#8211; INTEGER array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the number of points in each coordinate at which to split according to the initialization list <a class="arg" href="../E05/e05jbf.xml#MONIT_LIST">LIST</a>.</div>
</dd><dt class="paramhead"><a name="MONIT_INITPT" id="MONIT_INITPT"/>8: &#160;&#160;&#8194; INITPT(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>) &#8211; INTEGER array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: a pointer to the &#8216;initial point&#8217; in <a class="arg" href="../E05/e05jbf.xml#MONIT_LIST">LIST</a>. Element <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;is the column index in <a class="arg" href="../E05/e05jbf.xml#MONIT_LIST">LIST</a> of the <m:math><m:mi>i</m:mi></m:math>th coordinate of the initial point.</div>
</dd><dt class="paramhead"><a name="MONIT_NBASKT" id="MONIT_NBASKT"/>9: &#160;&#160;&#8194; NBASKT &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the number of points in the &#8216;shopping basket&#8217; <a class="arg" href="../E05/e05jbf.xml#MONIT_XBASKT">XBASKT</a>.</div>
</dd><dt class="paramhead"><a name="MONIT_XBASKT" id="MONIT_XBASKT"/>10: &#8194; XBASKT(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>,<a class="arg" href="../E05/e05jbf.xml#MONIT_NBASKT">NBASKT</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the &#8216;shopping basket&#8217; of candidate minima. The <m:math><m:mi>j</m:mi></m:math>th candidate minimum has its <m:math><m:mi>i</m:mi></m:math>th coordinate stored in <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_XBASKT"><m:mi mathcolor="#EE0000" mathvariant="bold">XBASKT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mfenced separators=""><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced><m:mo>&#215;</m:mo><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>i</m:mi></m:mrow></m:mfenced></m:mrow></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_NBASKT"><m:mi mathcolor="#EE0000" mathvariant="bold">NBASKT</m:mi></m:maction></m:math></div>
</dd><dt class="paramhead"><a name="MONIT_BOXL" id="MONIT_BOXL"/>11: &#8194; BOXL(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the array of lower bounds of the current search box.</div>
</dd><dt class="paramhead"><a name="MONIT_BOXU" id="MONIT_BOXU"/>12: &#8194; BOXU(<a class="arg" href="../E05/e05jbf.xml#MONIT_N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the array of upper bounds of the current search box.</div>
</dd><dt class="paramhead"><a name="MONIT_NSTATE" id="MONIT_NSTATE"/>13: &#8194; NSTATE &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: is set by E05JBF to indicate at what stage of the minimization <a class="arg" href="#MONIT">MONIT</a> was called.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>This is the first time that <a class="arg" href="#MONIT">MONIT</a> has been called.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>-1</m:mn></m:math></dt>
<dd>This is the last time <a class="arg" href="#MONIT">MONIT</a> will be called.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math></dt>
<dd>This is the first <span class="italic">and</span> last time <a class="arg" href="#MONIT">MONIT</a> will be called.</dd></dl>
</div>
</dd><dt class="paramhead"><a name="MONIT_IUSER" id="MONIT_IUSER"/>14: &#8194; IUSER(<m:math><m:mo>*</m:mo></m:math>) &#8211; INTEGER array<span class="pclass">User Workspace</span></dt><dt class="multi-paramhead"><a name="MONIT_RUSER" id="MONIT_RUSER"/>15: &#8194; RUSER(<m:math><m:mo>*</m:mo></m:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">User Workspace</span></dt><dd>
<div class="paramtext"><a class="arg" href="#MONIT">MONIT</a> is called from E05JBF with the parameters <a class="arg" href="../E05/e05jbf.xml#MONIT_IUSER">IUSER</a> and <a class="arg" href="../E05/e05jbf.xml#MONIT_RUSER">RUSER</a> as supplied to E05JBF. You are free to use the arrays <a class="arg" href="../E05/e05jbf.xml#MONIT_IUSER">IUSER</a> and <a class="arg" href="../E05/e05jbf.xml#MONIT_RUSER">RUSER</a> to supply information to <a class="arg" href="#MONIT">MONIT</a>.</div>
</dd><dt class="paramhead"><a name="MONIT_INFORM" id="MONIT_INFORM"/>16: &#8194; INFORM &#8211; INTEGER<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: must be set to a value describing the action to be taken by the solver on return from <a class="arg" href="#MONIT">MONIT</a>. Specifically, if the value is negative the solution of the current problem will terminate immediately; otherwise, computations will continue.</div>
</dd></dl>
</div>
<div class="paramtext"><a class="arg" href="#MONIT">MONIT</a> must be declared as EXTERNAL in the (sub)program from which E05JBF is called. Parameters denoted as <span class="italic">Input</span>  must <b>not</b>  be changed by this procedure.</div>
</dd><dt class="paramhead"><a name="X" id="X"/>12: &#8194; X(<a class="arg" href="#N">N</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>, contains an estimate of the global optimum (see also <a class="sec" href="#accuracy">Section 7</a>).</div>
</dd><dt class="paramhead"><a name="OBJ" id="OBJ"/>13: &#8194; OBJ &#8211; <span class="bitalic">double precision</span><span class="pclass">Output</span></dt><dd>
<div class="paramtext"><i>On exit</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>, contains the function value at <a class="arg" href="#X">X</a>.
<div class="paramtext">If you request early termination of E05JBF using <a class="arg" href="../E05/e05jbf.xml#OBJFUN_INFORM">INFORM</a> in <a class="arg" href="#OBJFUN">OBJFUN</a> or the analogous <a class="arg" href="../E05/e05jbf.xml#MONIT_INFORM">INFORM</a> in <a class="arg" href="#MONIT">MONIT</a>, there is no guarantee that the function value at <a class="arg" href="#X">X</a> equals <a class="arg" href="#OBJ">OBJ</a>.</div>
</div>
</dd><dt class="paramhead"><a name="COMM" id="COMM"/>14: &#8194; COMM(<a class="arg" href="#LCOMM">LCOMM</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Communication Array</span></dt><dd><div class="paramtext"><i>On exit</i>: <a class="arg" href="#COMM">COMM</a> <b>must not</b> be altered between calls to any of the routines E05JBF, <a class="rout" href="../E05/e05jcf.xml">E05JCF</a>, <a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a>, <a class="rout" href="../E05/e05jgf.xml">E05JGF</a>, <a class="rout" href="../E05/e05jhf.xml">E05JHF</a>, <a class="rout" href="../E05/e05jjf.xml">E05JJF</a>, <a class="rout" href="../E05/e05jkf.xml">E05JKF</a> and <a class="rout" href="../E05/e05jlf.xml">E05JLF</a>.</div></dd><dt class="paramhead"><a name="LCOMM" id="LCOMM"/>15: &#8194; LCOMM &#8211; INTEGER<span class="pclass">Input</span></dt><dd>
<div class="paramtext"><i>On entry</i>: the dimension of the array <a class="arg" href="#COMM">COMM</a> as declared in the (sub)program from which E05JBF is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LCOMM"><m:mi mathcolor="#EE0000" mathvariant="bold">LCOMM</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>100</m:mn></m:math>.
</div>
 
</dd><dt class="paramhead"><a name="IUSER" id="IUSER"/>16: &#8194; IUSER(<m:math><m:mo>*</m:mo></m:math>) &#8211; INTEGER array<span class="pclass">User Workspace</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the array <a class="arg" href="#IUSER">IUSER</a>
must be at least
<m:math><m:mn>1</m:mn></m:math>.</div>
<div class="paramtext"><a class="arg" href="#IUSER">IUSER</a> is not used by E05JBF, but is passed directly to the user-supplied subroutines <a class="arg" href="#OBJFUN">OBJFUN</a> and <a class="arg" href="#MONIT">MONIT</a>. It may be used to pass information to and from those routines.</div>
</dd><dt class="paramhead"><a name="RUSER" id="RUSER"/>17: &#8194; RUSER(<m:math><m:mo>*</m:mo></m:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">User Workspace</span></dt><dd>
<div class="paramtext"><b>Note:</b> the dimension of the array <a class="arg" href="#RUSER">RUSER</a>
must be at least
<m:math><m:mn>1</m:mn></m:math>.</div>
<div class="paramtext"><a class="arg" href="#RUSER">RUSER</a> is not used by E05JBF, but is passed directly to the user-supplied subroutines <a class="arg" href="#OBJFUN">OBJFUN</a> and <a class="arg" href="#MONIT">MONIT</a>. It may be used to pass information to and from those routines.</div>
</dd><dt class="paramhead"><a name="IFAIL" id="IFAIL"/>18: &#8194; IFAIL &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><i>On entry</i>: <a class="arg" href="#IFAIL">IFAIL</a> must be set to <m:math><m:mn>0</m:mn></m:math>, <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>1</m:mn></m:math>. If you are unfamiliar with this parameter you should refer to <a class="sec" href="../GENINT/essint.xml#library3">Section 3.3</a> in  the Essential Introduction for details.</div>
<div class="paramtext"><i>On exit</i>: <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;unless the routine detects an error (see <a class="sec" href="#errors">Section 6</a>). <div class="paramtext">For environments where it might be inappropriate to halt program execution when an error is detected, the value <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>1</m:mn></m:math>&#160;is recommended.  If the output of error messages is undesirable, then the value <m:math><m:mn>1</m:mn></m:math>&#160;is recommended.  Otherwise, if you are not familiar with this parameter, the recommended value is <m:math><m:mn>0</m:mn></m:math>.  <b>When the value <m:math><m:mrow><m:mo>-</m:mo><m:mn mathvariant="bold">1</m:mn></m:mrow><m:mtext>&#8203; or &#8203;</m:mtext><m:mn mathvariant="bold">1</m:mn></m:math>&#160;is used it is essential to test the value of <a class="arg" href="#IFAIL">IFAIL</a> on exit.</b></div></div><div class="paramtext">E05JBF returns with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;if your termination criterion has been met: either a target value has been found to the required relative error (as determined by the values of the optional parameters <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivevalue"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Value</m:mi></m:maction></m:math>, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectiveerror"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Error</m:mi></m:maction></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivesafeguard"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Safeguard</m:mi></m:maction></m:math>), or the best function value was static for the number of sweeps through levels given by the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_staticlimit"><m:mi mathcolor="#800080;" mathvariant="bold">Static Limit</m:mi></m:maction></m:math>. The latter criterion is the default.</div>
</dd></dl><h2 class="standard"><a class="sec" name="errors" id="errors"/>6&#160;&#160;Error Indicators and Warnings</h2>
<div class="paramtext">If on entry <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">-1</m:mn></m:maction></m:math>, explanatory error messages are output on the current error message unit (as defined by <a class="rout" href="../X04/x04aaf.xml">X04AAF</a>).</div><div class="paramtext">Errors or warnings detected by the routine:</div>
<dl class="ifail">
<dt class="errorhead"><a name="IFeq1" id="IFeq1"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>
<div class="paramtext">Either the initialization routine <a class="rout" href="../E05/e05jaf.xml">E05JAF</a> has not been called, <a class="arg" href="#LCOMM">LCOMM</a> is less than 100, or the value of <a class="arg" href="#N">N</a> has changed since the last call to <a class="rout" href="../E05/e05jaf.xml">E05JAF</a>.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq2" id="IFeq2"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math></dt>
<dd>
<div class="paramtext">An input parameter is invalid.  If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">-1</m:mn></m:maction></m:math>&#160;on entry, the output message provides more details of the invalid argument.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq3" id="IFeq3"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math></dt>
<dd>
<div class="paramtext">The initialization list contained infinities.</div> 
<div class="paramtext">Either the user-supplied initialization list contained infinite values, as determined by the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_infiniteboundsize"><m:mi mathcolor="#800080;" mathvariant="bold">Infinite Bound Size</m:mi></m:maction></m:math>, or a finite initialization list could not be computed internally. In the latter case you should consider reformulating the bounds on the problem, try providing your own initialization list, use the randomization option (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>4</m:mn></m:math>) or vary the value of <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_infiniteboundsize"><m:mi mathcolor="#800080;" mathvariant="bold">Infinite Bound Size</m:mi></m:maction></m:math>.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq4" id="IFeq4"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>4</m:mn></m:math></dt>
<dd>
<div class="paramtext">The division procedure completed but your target value could not be reached.</div>
<div class="paramtext">Despite every sub-box being processed <m:math><m:mi mathvariant="italic">smax</m:mi></m:math>&#160;times (where <m:math><m:mi mathvariant="italic">smax</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_splitslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Splits Limit</m:mi></m:maction></m:math>), the target value you provided via the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivevalue"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Value</m:mi></m:maction></m:math>&#160;could not be found to the tolerances given in the optional parameters <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectiveerror"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Error</m:mi></m:maction></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivesafeguard"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Safeguard</m:mi></m:maction></m:math>. You could try increasing <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_splitslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Splits Limit</m:mi></m:maction></m:math>&#160;or the objective tolerances.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq5" id="IFeq5"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>5</m:mn></m:math></dt>
<dd>
<div class="paramtext">The function evaluations limit was exceeded.</div>
<div class="paramtext">Approximately <m:math><m:mi mathvariant="italic">nf</m:mi></m:math>&#160;function calls (where <m:math><m:mi mathvariant="italic">nf</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_functionevaluationslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Function Evaluations Limit</m:mi></m:maction></m:math>) have been made without your chosen termination criterion being satisfied.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq6" id="IFeq6"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>6</m:mn></m:math></dt>
<dd>
<div class="paramtext">You terminated the solver.</div>
<div class="paramtext">You indicated that you wished to halt solution of the current problem by setting <a class="arg" href="../E05/e05jbf.xml#OBJFUN_INFORM">INFORM</a> in <a class="arg" href="#OBJFUN">OBJFUN</a> or <a class="arg" href="../E05/e05jbf.xml#MONIT_INFORM">INFORM</a> in <a class="arg" href="#MONIT">MONIT</a> to a negative value on exit. If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">-1</m:mn></m:maction></m:math>&#160;on entry to E05JBF, the output message provides more details of where the termination was requested.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq7" id="IFeq7"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>7</m:mn></m:math></dt>
<dd>
<div class="paramtext">No further progress could be made on your problem. Try rescaling the objective function, relaxing the bounds, or using a different initialization method.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq-999" id="IFeq-999"/><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:mn>-999</m:mn></m:math></dt>
<dd>
<div class="paramtext">Internal memory allocation failed.</div>
</dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#errors"><m:mn mathcolor="#003399" mathvariant="bold">0</m:mn></m:maction></m:math>&#160;on exit, then the vector returned in the array <a class="arg" href="#X">X</a> is an estimate of the solution <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;whose function value satisfies your termination criterion: the function value was static for <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_staticlimit"><m:mi mathcolor="#800080;" mathvariant="bold">Static Limit</m:mi></m:maction></m:math>&#160;sweeps through levels, or

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced>
 <m:mo>-</m:mo>
 <m:mi mathvariant="italic">objval</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mrow>
    <m:mi mathvariant="italic">objerr</m:mi>
    <m:mo>&#215;</m:mo>
    <m:mfenced open="|" close="|" separators=""><m:mi mathvariant="italic">objval</m:mi></m:mfenced>
   </m:mrow><m:mo>,</m:mo><m:mi mathvariant="italic">objsfg</m:mi></m:mfenced></m:mrow>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:mi mathvariant="italic">objval</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivevalue"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Value</m:mi></m:maction></m:math>, <m:math><m:mi mathvariant="italic">objerr</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectiveerror"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Error</m:mi></m:maction></m:math>, and <m:math><m:mi mathvariant="italic">objsfg</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivesafeguard"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Safeguard</m:mi></m:maction></m:math>.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">For each invocation of E05JBF, local workspace arrays of fixed length are allocated internally. The total size of these arrays amounts to <m:math><m:mn>10</m:mn><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>+</m:mo><m:mi mathvariant="italic">smax</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;INTEGER elements, where <m:math><m:mi mathvariant="italic">smax</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_splitslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Splits Limit</m:mi></m:maction></m:math>, and <m:math><m:mn>2</m:mn><m:maction actiontype="link" dsi:type="simple" dsi:href="#SDLIST"><m:mi mathcolor="#EE0000" mathvariant="bold">SDLIST</m:mi></m:maction><m:mo>+</m:mo><m:mn>18</m:mn><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>+</m:mo><m:mn>3</m:mn><m:msup><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mn>2</m:mn></m:msup><m:mo>+</m:mo><m:mn>1</m:mn></m:math>&#160;<span class="bitalic">double precision</span> elements. In addition, if you are using randomized initialization lists (see the description of the parameter <a class="arg" href="#IINIT">IINIT</a>), a further <m:math><m:mn>21</m:mn></m:math>&#160;INTEGER elements are allocated internally.</div><div class="paramtext">In order to keep track of the regions of the search space that have been visited while looking for a global optimum, E05JBF internally allocates arrays of increasing sizes depending on the difficulty of the problem. Two of the main factors that govern the amount allocated are the number of sub-boxes (call this quantity <m:math><m:mi mathvariant="italic">nboxes</m:mi></m:math>) and the number of points in the &#8216;shopping basket&#8217; (the parameter <a class="arg" href="../E05/e05jbf.xml#MONIT_NBASKT">NBASKT</a> on entry to <a class="arg" href="#MONIT">MONIT</a>). Safe, pessimistic upper bounds on these two quantities are so large as to be impractical. In fact, the worst-case number of sub-boxes for even the most simple initialization list (when <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_NINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">NINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>3</m:mn></m:math>&#160;on entry to <a class="arg" href="#MONIT">MONIT</a>) grows like <m:math><m:msup><m:mi>n</m:mi><m:mi>n</m:mi></m:msup></m:math>&#160;as <m:math><m:mi>n</m:mi></m:math>, the number of variables, increases. Thus E05JBF does not attempt to estimate in advance the final values of <m:math><m:mi mathvariant="italic">nboxes</m:mi></m:math>&#160;or <a class="arg" href="../E05/e05jbf.xml#MONIT_NBASKT">NBASKT</a> for a given problem. There are a total of <m:math><m:mn>5</m:mn></m:math>&#160;INTEGER arrays and <m:math><m:mn>4</m:mn><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#MONIT_NINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">NINIT</m:mi></m:maction></m:math>&#160;<span class="bitalic">double precision</span> arrays whose lengths depend on <m:math><m:mi mathvariant="italic">nboxes</m:mi></m:math>, and there are a total of <m:math><m:mn>2</m:mn></m:math>&#160;INTEGER arrays and <m:math><m:mn>3</m:mn><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>&#160;<span class="bitalic">double precision</span> arrays whose lengths depend on <a class="arg" href="../E05/e05jbf.xml#MONIT_NBASKT">NBASKT</a>. E05JBF makes a fixed initial guess that the maximum number of sub-boxes required will be <m:math><m:mn>10000</m:mn></m:math>&#160;and that the maximum number of points in the &#8216;shopping basket&#8217; will be <m:math><m:mn>1000</m:mn></m:math>. If ever a greater amount of sub-boxes or more room in the &#8216;shopping basket&#8217; is required, E05JBF performs reallocation, usually doubling the size of the inadequately-sized arrays. Clearly this process requires periods where the original array and its extension exist in memory simultaneously, so that the data within can be copied, which compounds the complexity of E05JBF's memory usage. It is possible (although not likely) that if your problem is particularly difficult to solve, or of a large size (hundreds of variables), you may run out of memory.</div><div class="paramtext">One array that could be dynamically resized by E05JBF is the &#8216;shopping basket&#8217; (<a class="arg" href="../E05/e05jbf.xml#MONIT_XBASKT">XBASKT</a> on entry to <a class="arg" href="#MONIT">MONIT</a>). If the initial attempt to allocate <m:math><m:mn>1000</m:mn><m:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>&#160;<span class="bitalic">double precision</span>s for this array fails, <a class="arg" href="#MONIT">MONIT</a> will not be called on exit from E05JBF.</div><div class="paramtext">E05JBF performs better if your problem is well-scaled. It is worth trying (by guesswork perhaps) to rescale the problem if necessary, as sensible scaling will reduce the difficulty of the optimization problem, so that E05JBF will take less computer time.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example finds the global minimum of the &#8216;peaks&#8217; function in two dimensions

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>F</m:mi><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>y</m:mi></m:mfenced>
 <m:mo>=</m:mo>
 <m:mn>3</m:mn>
 <m:msup>
  <m:mfenced separators="">
   <m:mn>1</m:mn><m:mo>-</m:mo><m:mi>x</m:mi>
  </m:mfenced>
  <m:mn>2</m:mn>
 </m:msup>
 <m:mrow><m:mi>exp</m:mi><m:mfenced separators="">
   <m:mo>-</m:mo>
   <m:msup>
    <m:mi>x</m:mi>
    <m:mn>2</m:mn>
   </m:msup>
   <m:mo>-</m:mo>
   <m:msup>
    <m:mfenced separators="">
     <m:mi>y</m:mi><m:mo>+</m:mo><m:mn>1</m:mn>
    </m:mfenced>
    <m:mn>2</m:mn>
   </m:msup>
  </m:mfenced></m:mrow>
 <m:mo>-</m:mo><m:mn>10</m:mn>
 <m:mfenced separators="">
  <m:mfrac>
   <m:mi>x</m:mi>
   <m:mn>5</m:mn>
  </m:mfrac>
  <m:mo>-</m:mo>
  <m:msup>
    <m:mi>x</m:mi>
    <m:mn>3</m:mn>
  </m:msup>
  <m:mo>-</m:mo>
  <m:msup>
    <m:mi>y</m:mi>
    <m:mn>5</m:mn>
  </m:msup>
 </m:mfenced>
 <m:mrow><m:mi>exp</m:mi><m:mfenced separators="">
   <m:mo>-</m:mo>
   <m:msup>
    <m:mi>x</m:mi>
    <m:mn>2</m:mn>
   </m:msup>
   <m:mo>-</m:mo>
   <m:msup>
    <m:mi>y</m:mi>
    <m:mn>2</m:mn>
   </m:msup>
  </m:mfenced></m:mrow>
 <m:mo>-</m:mo>
 <m:mrow>
  <m:mfrac>
    <m:mn>1</m:mn>
    <m:mn>3</m:mn>
  </m:mfrac>
  <m:mrow><m:mi>exp</m:mi><m:mfenced separators="">
    <m:mo>-</m:mo>
    <m:msup>
     <m:mfenced separators="">
      <m:mi>x</m:mi><m:mo>+</m:mo><m:mn>1</m:mn>
     </m:mfenced>
     <m:mn>2</m:mn>
    </m:msup>
    <m:mo>-</m:mo>
    <m:msup>
     <m:mi>y</m:mi>
     <m:mn>2</m:mn>
    </m:msup>
   </m:mfenced></m:mrow>
 </m:mrow>
</m:math></td><td class="formula2"/></tr></table></div>

on the box <m:math>
 <m:mfenced separators="" open="[" close="]"><m:mrow><m:mo>-</m:mo><m:mn>3</m:mn></m:mrow><m:mo>,</m:mo><m:mn>3</m:mn></m:mfenced>
 <m:mo>&#215;</m:mo>
 <m:mfenced separators="" open="[" close="]"><m:mrow><m:mo>-</m:mo><m:mn>3</m:mn></m:mrow><m:mo>,</m:mo><m:mn>3</m:mn></m:mfenced>
</m:math>.
</div><div class="paramtext">The function <m:math><m:mi>F</m:mi></m:math>&#160;has several local minima and one global minimum in the given box. The global minimum is approximately located at <m:math>
 <m:mfenced separators=""><m:mn>0.23</m:mn><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1.63</m:mn></m:mrow></m:mfenced>
</m:math>, where the function value is approximately <m:math><m:mrow><m:mo>-</m:mo><m:mn>6.55</m:mn></m:mrow></m:math>.</div><div class="paramtext">We use default values for all the optional parameters, and we instruct E05JBF to use the simple initialization list corresponding to <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>. In particular, this will set for us the initial point <m:math>
 <m:mfenced separators=""><m:mn>0</m:mn><m:mo>,</m:mo><m:mn>0</m:mn></m:mfenced>
</m:math>&#160;(see <a class="sec" href="#examresults">Section 9.3</a>).</div><h3 class="standard"><a class="sec" name="examtext" id="examtext"/>9.1&#160;&#160;Program Text</h3>
<p><a class="verbatimref" href="../../examples/source/e05jbfe.f">Program Text (e05jbfe.f)</a></p><h3 class="standard"><a class="sec" name="examdata" id="examdata"/>9.2&#160;&#160;Program Data</h3>
<p><a class="verbatimref" href="../../examples/data/e05jbfe.d">Program&#160;Data (e05jbfe.d)</a></p><h3 class="standard"><a class="sec" name="examresults" id="examresults"/>9.3&#160;&#160;Program Results</h3>
<p><a class="verbatimref" href="../../examples/baseresults/e05jbfe.r">Program Results (e05jbfe.r)</a></p><div class="figure"><a name="e05jbf-plot" id="e05jbf-plot"/><img src="../figures/e05jbf-plot.png" alt="Example Program Plot for e05jbf-plot"/></div><div class="paramtext"><b>Note:</b> <span class="italic">the remainder of this document is intended for more advanced users.  <a class="sec" href="#algdetails">Section 10</a> contains a detailed description of the algorithm. This information may be needed in order to understand <a class="sec" href="#optparams">Section 11</a>, which describes the optional parameters that can be set by calls to <a class="rout" href="../E05/e05jcf.xml">E05JCF</a>, <a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a> and/or <a class="rout" href="../E05/e05jgf.xml">E05JGF</a></span>.</div><h2 class="standard"><a class="sec" name="algdetails" id="algdetails"/>10&#160;&#160;Algorithmic Details</h2>
<div class="paramtext">Here we summarize the main features of the MCS algorithm used in E05JBF, and we introduce some terminology used in the description of the subroutine and its arguments.  The MCS algorithm is fully described in <a class="ref" href="#ref768">Huyer and Neumaier (1999)</a>.</div><h3 class="standard"><a class="sec" name="ad-initializationandsweeps" id="ad-initializationandsweeps"/>10.1&#160;&#160;Initialization and Sweeps</h3>
<div class="paramtext">Each sub-box is determined by a basepoint <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;and an <span class="italic">opposite point</span> <m:math><m:mi mathvariant="bold">y</m:mi></m:math>. We denote such a sub-box by <m:math><m:mi>B</m:mi><m:mfenced separators="" open="[" close="]"><m:mi mathvariant="bold">x</m:mi><m:mo>,</m:mo><m:mi mathvariant="bold">y</m:mi></m:mfenced></m:math>. The basepoint is allowed to belong to more than one sub-box, is usually a boundary point, and is often a vertex.</div><div class="paramtext">An <span class="italic">initialization procedure</span> produces an initial set of sub-boxes. Whenever a sub-box is split along a coordinate <m:math><m:mi>i</m:mi></m:math>&#160;for the first time (in the initialization procedure or later), the splitting is done at three or more user-defined values <m:math><m:msub><m:mfenced open="{" close="}" separators=""><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:mfenced><m:mi>j</m:mi></m:msub></m:math>&#160;at which  the objective function is sampled, and at some adaptively chosen intermediate points. At least four children are generated. More precisely, we assume that we are given

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>&#8467;</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>&#8804;</m:mo>
 <m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mn>1</m:mn></m:msubsup>
 <m:mo>&lt;</m:mo>
 <m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mn>2</m:mn></m:msubsup>
 <m:mo>&lt;</m:mo>
 <m:mo>&#8943;</m:mo>
 <m:mo>&lt;</m:mo>
 <m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:msubsup>
 <m:mo>&#8804;</m:mo>
 <m:msub><m:mi>u</m:mi><m:mi>i</m:mi></m:msub>
 <m:mtext>,&#8195;</m:mtext>
 <m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>&#8805;</m:mo>
 <m:mn>3</m:mn>
 <m:mtext>,&#8195; for &#8203;</m:mtext>
 <m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi>
</m:math></td><td class="formula2"/></tr></table></div>

and a vector <m:math><m:mi mathvariant="bold">p</m:mi></m:math>&#160;that, for each <m:math><m:mi>i</m:mi></m:math>, locates within <m:math><m:msub><m:mfenced open="{" close="}" separators=""><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:mfenced><m:mi>j</m:mi></m:msub></m:math>&#160;the <m:math><m:mi>i</m:mi></m:math>th coordinate of an <span class="italic">initial point</span> <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>0</m:mn></m:msup></m:math>; that is, if <m:math><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mn>0</m:mn></m:msubsup><m:mo>=</m:mo><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>&#160;for some <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:math>, then <m:math><m:msub><m:mi>p</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mi>j</m:mi></m:math>. A good guess for the global optimum can be used as <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>0</m:mn></m:msup></m:math>.</div><div class="paramtext">The initialization points and the vectors <m:math><m:mi mathvariant="bold">l</m:mi></m:math>&#160;and <m:math><m:mi mathvariant="bold">p</m:mi></m:math>&#160;are collectively called the <span class="italic">initialization list</span> (and sometimes we will refer to just the initialization points as &#8216;the initialization list&#8217;, whenever this causes no confusion). The initialization data may be input by you, or they can be set to sensible default values by E05JBF: if you provide them yourself, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#LIST"><m:mi mathcolor="#EE0000" mathvariant="bold">LIST</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;should contain <m:math><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NUMPTS"><m:mi mathcolor="#EE0000" mathvariant="bold">NUMPTS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;should contain <m:math><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:math>, and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;should contain <m:math><m:msub><m:mi>p</m:mi><m:mi>i</m:mi></m:msub></m:math>, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>&#160;and <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:math>; if you wish E05JBF to use one of its preset initialization methods, you could choose one of two simple, three-point methods (see <a class="fig" href="#E05JBF2">Figure 1</a>). If the list generated by one of these methods contains infinite values, attempts are made to generate a safeguarded list using the function <m:math><m:mi mathvariant="normal">subint</m:mi><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>y</m:mi></m:mfenced></m:math>&#160;(which is also used during the splitting procedure, and is described in <a class="sec" href="#ad-splitting">Section 10.2</a>). If infinite values persist, E05JBF exits with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFeq3"><m:mn mathcolor="#003399" mathvariant="bold">3</m:mn></m:maction></m:math>. There is also the option to generate an initialization list with the aid of linesearches (by setting <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn></m:math>). Starting with the absolutely smallest point in the root box, linesearches are made along each coordinate. For each coordinate, the local minimizers found by the linesearches are put into the initialization list. If there were fewer than three minimizers, they are augmented by close-by values. The final preset initialization option (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>4</m:mn></m:math>) generates a randomized list, so that independent multiple runs may be made if you suspect a global optimum has not been found. Each call to the initialization routine <a class="rout" href="../E05/e05jaf.xml">E05JAF</a> resets the initial-state vector for the Wichmann&#8211;Hill base-generator that is used. Depending on whether you set the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_repeatability"><m:mi mathcolor="#800080;" mathvariant="bold">Repeatability</m:mi></m:maction></m:math>&#160;to &#8216;ON&#8217; or &#8216;OFF&#8217;, the random seed is initialized to give a repeatable or non-repeatable sequence. Then, a random integer between <m:math><m:mn>3</m:mn></m:math>&#160;and <a class="arg" href="#SDLIST">SDLIST</a> is selected, which is then used to determine the number of points to be generated in each coordinate; that is, <a class="arg" href="#NUMPTS">NUMPTS</a> becomes a constant vector, set to this value. The components of <a class="arg" href="#LIST">LIST</a> are then generated, from a uniform distribution on the root box if the box is finite, or else in a safeguarded fashion if any bound is infinite. The array <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#INITPT"><m:mi mathcolor="#EE0000" mathvariant="bold">INITPT</m:mi></m:maction></m:math>&#160;is set to point to the best point in <a class="arg" href="#LIST">LIST</a>.</div><div class="paramtext">Given an initialization list (preset or otherwise), E05JBF evaluates <m:math><m:mi>F</m:mi></m:math>&#160;at <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>0</m:mn></m:msup></m:math>, and sets the initial estimate of the global minimum, <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>, to <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>0</m:mn></m:msup></m:math>. Then, for <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi></m:math>, the objective function <m:math><m:mi>F</m:mi></m:math>&#160;is evaluated at <m:math><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;points that agree with <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;in all but the <m:math><m:mi>i</m:mi></m:math>th coordinate. We obtain pairs <m:math>
 <m:mfenced separators=""><m:msup>
    <m:mover><m:mi mathvariant="bold">x</m:mi><m:mo>^</m:mo></m:mover>
    <m:mi>j</m:mi>
   </m:msup><m:mo>,</m:mo><m:msubsup><m:mi>f</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:mfenced>
</m:math>, for <m:math>
 <m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub>
</m:math>, with: <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup><m:mo>=</m:mo><m:msup><m:mover><m:mi mathvariant="bold">x</m:mi><m:mo>^</m:mo></m:mover><m:msub><m:mi>j</m:mi><m:mn>1</m:mn></m:msub></m:msup></m:math>, say; with, for <m:math><m:mi>j</m:mi><m:mo>&#8800;</m:mo><m:msub><m:mi>j</m:mi><m:mn>1</m:mn></m:msub></m:math>,

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msubsup><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mi>k</m:mi><m:mi>j</m:mi></m:msubsup>
 <m:mo>=</m:mo>
 <m:mfenced open="{" close="" separators=""> 
  <m:mtable columnalign="left"> 
   <m:mtr> 
    <m:mtd><m:msubsup><m:mi>x</m:mi><m:mi>k</m:mi><m:mo>*</m:mo></m:msubsup></m:mtd> 
    <m:mtd>
     <m:mtext>if &#8203;</m:mtext><m:mi>k</m:mi><m:mo>&#8800;</m:mo><m:mi>i</m:mi><m:mtext>;</m:mtext>
    </m:mtd> 
   </m:mtr> 
   <m:mtr> 
    <m:mtd><m:msubsup><m:mi>x</m:mi><m:mi>k</m:mi><m:mi>j</m:mi></m:msubsup></m:mtd> 
    <m:mtd><m:mtext>otherwise;</m:mtext></m:mtd>
   </m:mtr>
  </m:mtable> 
 </m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>
 
and with

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msubsup><m:mi>f</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup>
 <m:mo>=</m:mo>
 <m:mi>F</m:mi>
 <m:mfenced separators="">
  <m:msup>
   <m:mover><m:mi mathvariant="bold">x</m:mi><m:mo>^</m:mo></m:mover>
   <m:mi>j</m:mi>
  </m:msup>
 </m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The point having the smallest function value is renamed <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;and the procedure is repeated with the next coordinate.</div><div class="paramtext">Once E05JBF has a full set of initialization points and function values, it can generate an initial set of sub-boxes. Recall that the <span class="italic">root box</span> is <m:math><m:mi>B</m:mi><m:mfenced separators="" open="[" close="]"><m:mi mathvariant="bold">x</m:mi><m:mo>,</m:mo><m:mi mathvariant="bold">y</m:mi></m:mfenced><m:mo>=</m:mo><m:mfenced separators="" open="[" close="]"><m:mi mathvariant="bold">l</m:mi><m:mo>,</m:mo><m:mi mathvariant="bold">u</m:mi></m:mfenced></m:math>, having basepoint <m:math><m:mi mathvariant="bold">x</m:mi><m:mo>=</m:mo><m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>0</m:mn></m:msup></m:math>. The opposite point <m:math><m:mi mathvariant="bold">y</m:mi></m:math>&#160;is a corner of <m:math><m:mfenced separators="" open="[" close="]"><m:mi mathvariant="bold">l</m:mi><m:mo>,</m:mo><m:mi mathvariant="bold">u</m:mi></m:mfenced></m:math>&#160;farthest away from <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, in some sense. The point <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;need not be a vertex of <m:math><m:mfenced separators="" open="[" close="]"><m:mi mathvariant="bold">l</m:mi><m:mo>,</m:mo><m:mi mathvariant="bold">u</m:mi></m:mfenced></m:math>, and <m:math><m:mi mathvariant="bold">y</m:mi></m:math>&#160;is entitled to have infinite coordinates. We loop over each coordinate <m:math><m:mi>i</m:mi></m:math>, splitting the current box along coordinate <m:math><m:mi>i</m:mi></m:math>&#160;into <m:math><m:mn>2</m:mn><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:mn>2</m:mn></m:math>, <m:math><m:mn>2</m:mn><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;or <m:math><m:mn>2</m:mn><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;subintervals with exactly one of the <m:math><m:msubsup><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>&#160;as endpoints, depending on whether two, one or none of the <m:math><m:msubsup><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>&#160;are on the boundary. Thus, as well as splitting at <m:math><m:msubsup><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>, for <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mo>,</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:math>, we split at additional points <m:math><m:msubsup><m:mi>z</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>, for <m:math><m:mi>j</m:mi><m:mo>=</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub></m:math>. These additional <m:math><m:msubsup><m:mi>z</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>&#160;are such that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msubsup><m:mi>z</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup>
 <m:mo>=</m:mo>
 <m:msubsup>
  <m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover>
  <m:mi>i</m:mi>
  <m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow>
 </m:msubsup>
 <m:mo>+</m:mo>
 <m:msup><m:mi>q</m:mi><m:mi>m</m:mi></m:msup>
 <m:mfenced separators="">
  <m:msubsup>
   <m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover>
   <m:mi>i</m:mi>
   <m:mi>j</m:mi>
  </m:msubsup>
  <m:mo>-</m:mo>
  <m:msubsup>
   <m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover>
   <m:mi>i</m:mi>
   <m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow>
  </m:msubsup>
 </m:mfenced>
 <m:mtext>, &#8195;</m:mtext>
 <m:mi>j</m:mi><m:mo>=</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>
 
where <m:math><m:mi>q</m:mi></m:math>&#160;is the golden-section ratio <m:math><m:mfenced separators=""><m:msqrt><m:mn>5</m:mn></m:msqrt><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced><m:mo>/</m:mo><m:mn>2</m:mn></m:math>, and the exponent <m:math><m:mi>m</m:mi></m:math>&#160;takes the value <m:math><m:mn>1</m:mn></m:math>&#160;or <m:math><m:mn>2</m:mn></m:math>, chosen so that the sub-box with the smaller function value gets the larger fraction of the interval. Each child sub-box gets as basepoint the point obtained from <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;by changing <m:math><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mo>*</m:mo></m:msubsup></m:math>&#160;to the <m:math><m:msubsup><m:mi>x</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>&#160;that is a boundary point of the corresponding <m:math><m:mi>i</m:mi></m:math>th coordinate interval; this new basepoint therefore has function value <m:math><m:msubsup><m:mi>f</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>. The opposite point is derived from <m:math><m:mi mathvariant="bold">y</m:mi></m:math>&#160;by changing <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;to the other end of that interval.</div><div class="paramtext">E05JBF can now rank the coordinates based on an estimated variability of <m:math><m:mi>F</m:mi></m:math>. For each <m:math><m:mi>i</m:mi></m:math>&#160;we compute the union of the ranges of the quadratic interpolant through any three consecutive <m:math><m:msubsup><m:mover><m:mi>x</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup></m:math>, taking the difference between the upper and lower bounds obtained as a measure of the variability of <m:math><m:mi>F</m:mi></m:math>&#160;in coordinate <m:math><m:mi>i</m:mi></m:math>. A vector <m:math><m:mi mathvariant="bold">&#960;</m:mi></m:math>&#160;is populated in such a way that coordinate <m:math><m:mi>i</m:mi></m:math>&#160;has the <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>th highest estimated variability. For tiebreaks, when the <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>*</m:mo></m:msup></m:math>&#160;obtained after splitting coordinate <m:math><m:mi>i</m:mi></m:math>&#160;belongs to two sub-boxes, the one that contains the minimizer of the quadratic models is designated the current sub-box for coordinate <m:math><m:mi>i</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>.</div><div class="paramtext">Boxes are assigned levels in the following manner. The root box is given level <m:math><m:mn>1</m:mn></m:math>. When a sub-box of level <m:math><m:mi>s</m:mi></m:math>&#160;is split, the child with the smaller fraction of the golden-section split receives level <m:math><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:math>; all other children receive level <m:math><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>. The box with the better function value is given the larger fraction of the splitting interval and the smaller level because then it is more likely to be split again more quickly. We see that after the initialization procedure the first level is empty and the non-split boxes have levels <m:math><m:mn>2</m:mn><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:math>, so it is meaningful to choose <m:math><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;much larger than <m:math><m:mi>n</m:mi></m:math>. Note that the internal structure of E05JBF demands that <m:math><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;be at least <m:math><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>3</m:mn></m:math>.</div><div class="paramtext">Examples of initializations in two dimensions are given in <a class="fig" href="#E05JBF2">Figure 1</a>. In both cases the initial point is <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>0</m:mn></m:msup><m:mo>=</m:mo><m:mfenced separators=""><m:mi mathvariant="bold">l</m:mi><m:mo>+</m:mo><m:mi mathvariant="bold">u</m:mi></m:mfenced><m:mo>/</m:mo><m:mn>2</m:mn></m:math>; on the left the initialization points are

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>1</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mi mathvariant="bold">l</m:mi>
 <m:mtext>,&#8195;</m:mtext>
 <m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>2</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mfenced separators=""><m:mi mathvariant="bold">l</m:mi><m:mo>+</m:mo><m:mi mathvariant="bold">u</m:mi></m:mfenced>
 <m:mo>/</m:mo>
 <m:mn>2</m:mn>
 <m:mtext>,&#8195;</m:mtext>
 <m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>3</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mi mathvariant="bold">u</m:mi>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

while on the right the points are

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>1</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mfenced separators="">
  <m:mn>5</m:mn>
  <m:mi mathvariant="bold">l</m:mi>
  <m:mo>+</m:mo>
  <m:mi mathvariant="bold">u</m:mi>
 </m:mfenced>
 <m:mo>/</m:mo>
 <m:mn>6</m:mn>
 <m:mtext>,&#8195;</m:mtext>
 <m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>2</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mfenced separators="">
  <m:mi mathvariant="bold">l</m:mi>
  <m:mo>+</m:mo>
  <m:mi mathvariant="bold">u</m:mi>
 </m:mfenced>
 <m:mo>/</m:mo>
 <m:mn>2</m:mn>
 <m:mtext>,&#8195;</m:mtext>
 <m:msup><m:mi mathvariant="bold">x</m:mi><m:mn>3</m:mn></m:msup>
 <m:mo>=</m:mo>
 <m:mfenced separators="">
  <m:mi mathvariant="bold">l</m:mi>
  <m:mo>+</m:mo>
  <m:mn>5</m:mn>
  <m:mi mathvariant="bold">u</m:mi>
 </m:mfenced>
 <m:mo>/</m:mo>
 <m:mn>6</m:mn>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">In <a class="fig" href="#E05JBF2">Figure 1</a>, basepoints and levels after initialization are displayed. Note that these initialization lists correspond to <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, respectively.</div><div class="figure"><a name="E05JBF2" id="E05JBF2"/><img src="../figures/E05JBF2fl22.png" style="height: 22em" alt="Examples of the initialization procedure"/></div><div class="figure"><b>Figure 1: Examples of the initialization procedure</b></div><div class="paramtext">After initialization, a series of <span class="italic">sweeps</span> through levels is begun. A sweep is defined by three steps:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top">scan the list of non-split sub-boxes. Fill a <span class="italic">record list</span> <m:math><m:mi mathvariant="bold">b</m:mi></m:math>&#160;according to <m:math><m:msub><m:mi>b</m:mi><m:mi>s</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;if there is no box at level <m:math><m:mi>s</m:mi></m:math>, and with <m:math><m:msub><m:mi>b</m:mi><m:mi>s</m:mi></m:msub></m:math>&#160;pointing to a sub-box with the lowest function value among all sub-boxes with level <m:math><m:mi>s</m:mi></m:math>&#160;otherwise, for <m:math><m:mn>0</m:mn><m:mo>&lt;</m:mo><m:mi>s</m:mi><m:mo>&lt;</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top">the sub-box with label <m:math><m:msub><m:mi>b</m:mi><m:mi>s</m:mi></m:msub></m:math>&#160;is a candidate for splitting. If the sub-box is not to be split, according to the rules described in <a class="sec" href="#ad-splitting">Section 10.2</a>, increase its level by <m:math><m:mn>1</m:mn></m:math>&#160;and update <m:math><m:msub><m:mi>b</m:mi><m:mrow><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>&#160;if necessary. If the sub-box is split, mark it so, insert its children into the list of sub-boxes, and update <m:math><m:mi mathvariant="bold">b</m:mi></m:math>&#160;if any child with level <m:math><m:msup><m:mi>s</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;yields a strict improvement of <m:math><m:mi>F</m:mi></m:math>&#160;over those sub-boxes at level <m:math><m:msup><m:mi>s</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>;</td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(iii)</td>
<td valign="top">increment <m:math><m:mi>s</m:mi></m:math>&#160;by <m:math><m:mn>1</m:mn></m:math>. If <m:math><m:mi>s</m:mi><m:mo>=</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;then displaying monitoring information and start a new sweep; else if <m:math><m:msub><m:mi>b</m:mi><m:mi>s</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;then repeat this step; else display monitoring information and go to the previous step.</td>
</tr></table>
</div><div class="paramtext">Clearly, each sweep ends after at most <m:math><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub><m:mo>-</m:mo><m:mn>1</m:mn></m:math>&#160;visits of the third step.</div><h3 class="standard"><a class="sec" name="ad-splitting" id="ad-splitting"/>10.2&#160;&#160;Splitting</h3>
<div class="paramtext">Each sub-box is stored by E05JBF as a set of information about the history of the sub-box: the label of its parent, a label identifying which child of the parent it is, etc. Whenever a sub-box <m:math><m:mi>B</m:mi><m:mfenced separators="" open="[" close="]"><m:mi mathvariant="bold">x</m:mi><m:mo>,</m:mo><m:mi mathvariant="bold">y</m:mi></m:mfenced></m:math>&#160;of level <m:math><m:mi>s</m:mi><m:mo>&lt;</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;is a candidate for splitting, as described in <a class="sec" href="#ad-initializationandsweeps">Section 10.1</a>, we recover <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, <m:math><m:mi mathvariant="bold">y</m:mi></m:math>, and the number, <m:math><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub></m:math>, of times coordinate <m:math><m:mi>j</m:mi></m:math>&#160;has been split in the history of <m:math><m:mi>B</m:mi></m:math>. Sub-box <m:math><m:mi>B</m:mi></m:math>&#160;could be split in one of two ways.</div><table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top" style="padding-bottom:0.5em"><b>Splitting by rank</b>
<div class="paramtext">If <m:math>
 <m:mi>s</m:mi>
 <m:mo>&gt;</m:mo>
 <m:mn>2</m:mn><m:mi>n</m:mi>
 <m:mfenced separators="">
  <m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:mrow><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mrow>
 </m:mfenced>
</m:math>, the box is always split. The <span class="italic">splitting index</span> is set to a coordinate <m:math><m:mi>i</m:mi></m:math>&#160;such that <m:math><m:msub><m:mi>n</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub></m:mrow></m:math>.</div></td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top"><b>Splitting by expected gain</b>
<div class="paramtext">If <m:math>
 <m:mi>s</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mn>2</m:mn><m:mi>n</m:mi>
 <m:mfenced separators="">
  <m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:mrow><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mrow>
 </m:mfenced>
</m:math>, the sub-box could be split along a coordinate where a maximal gain in function value is expected. This gain is estimated according to a local separable quadratic model obtained by fitting to <m:math><m:mn>2</m:mn><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>&#160;function values. If the expected gain is too small the sub-box is not split at all, and its level is increased by <m:math><m:mn>1</m:mn></m:math>.</div></td>
</tr></table><div class="paramtext">Eventually, a sub-box that is not eligible for splitting by expected gain will reach level <m:math>
 <m:mn>2</m:mn><m:mi>n</m:mi>
 <m:mfenced separators="">
  <m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:mrow><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mrow>
 </m:mfenced>
 <m:mo>+</m:mo><m:mn>1</m:mn>
</m:math>&#160;and then be split by rank, as long as <m:math><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;is large enough. As <m:math><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub><m:mo>&#8594;</m:mo><m:mi>&#8734;</m:mi></m:math>, the rule for splitting by rank ensures that each coordinate is split arbitrarily often.</div><div class="paramtext">Before describing the details of each splitting method, we introduce the procedure for correctly handling splitting at adaptive points and for dealing with unbounded intervals. Suppose we want to split the <m:math><m:mi>i</m:mi></m:math>th coordinate interval <m:math><m:mi>&#9647;</m:mi><m:mfenced separators="" open="{" close="}"><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:math>, where we define <m:math><m:mi>&#9647;</m:mi><m:mfenced separators="" open="{" close="}"><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>=</m:mo><m:mfenced separators="" open="[" close="]"><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:mrow><m:mo>,</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:mrow></m:mfenced></m:math>, for <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8712;</m:mo><m:mi>R</m:mi></m:math>&#160;and <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8712;</m:mo><m:mover><m:mi>R</m:mi><m:mo>-</m:mo></m:mover></m:math>, and where <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;is the basepoint of the sub-box being considered. The descendants of the sub-box should shrink sufficiently fast, so we should not split too close to <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>. Moreover, if <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is large we want the new <span class="italic">splitting value</span> to <b>not</b> be too large, so we force it to belong to some smaller interval <m:math><m:mi>&#9647;</m:mi><m:mfenced separators="" open="{" close="}"><m:msup><m:mi>&#958;</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mo>,</m:mo><m:msup><m:mi>&#958;</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup></m:mfenced></m:math>, determined by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mi>&#958;</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup>
 <m:mo>=</m:mo>
 <m:mi mathvariant="normal">subint</m:mi>
 <m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mtext>,&#8195;</m:mtext>
 <m:msup><m:mi>&#958;</m:mi><m:mo>&#8242;</m:mo></m:msup>
 <m:mo>=</m:mo>
 <m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>+</m:mo>
 <m:mfenced separators="">
  <m:msup><m:mi>&#958;</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup>
  <m:mo>-</m:mo>
  <m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfenced>
 <m:mo>/</m:mo>
 <m:mn>10</m:mn>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where the function <m:math><m:mi mathvariant="normal">subint</m:mi></m:math>&#160;is defined by

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi mathvariant="normal">subint</m:mi>
 <m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>y</m:mi></m:mfenced>
 <m:mo>=</m:mo>
 <m:mfenced open="{" close="" separators=""> 
  <m:mtable columnalign="left"> 
   <m:mtr> 
    <m:mtd> 
     <m:mi mathvariant="normal">sign</m:mi><m:mfenced separators=""><m:mi>y</m:mi></m:mfenced> 
    </m:mtd> 
    <m:mtd>
     <m:mtext>if &#8203;</m:mtext>
     <m:mn>1000</m:mn><m:mfenced open="|" close="|" separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&lt;</m:mo><m:mn>1</m:mn>
     <m:mtext>&#8203; and &#8203;</m:mtext>
     <m:mfenced open="|" close="|" separators=""><m:mi>y</m:mi></m:mfenced><m:mo>&gt;</m:mo><m:mn>1000</m:mn>
     <m:mtext>;</m:mtext>
    </m:mtd> 
   </m:mtr> 
   <m:mtr> 
    <m:mtd> 
     <m:mn>10</m:mn><m:mi mathvariant="normal">sign</m:mi><m:mfenced separators=""><m:mi>y</m:mi></m:mfenced><m:mfenced open="|" close="|" separators=""><m:mi>x</m:mi></m:mfenced>
    </m:mtd> 
    <m:mtd>
     <m:mtext>if &#8203;</m:mtext>
     <m:mn>1000</m:mn><m:mfenced open="|" close="|" separators=""><m:mi>x</m:mi></m:mfenced><m:mo>&#8805;</m:mo><m:mn>1</m:mn>
     <m:mtext>&#8203; and &#8203;</m:mtext>
     <m:mfenced open="|" close="|" separators=""><m:mi>y</m:mi></m:mfenced><m:mo>&gt;</m:mo><m:mn>1000</m:mn><m:mfenced open="|" close="|" separators=""><m:mi>x</m:mi></m:mfenced>
     <m:mtext>;</m:mtext>
    </m:mtd>
   </m:mtr>
   <m:mtr>
    <m:mtd>
     <m:mi>y</m:mi>
    </m:mtd>
    <m:mtd> 
     <m:mtext>otherwise.</m:mtext> 
    </m:mtd>
   </m:mtr>
  </m:mtable> 
 </m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div></div><h4 class="standard"><a class="sec" name="splittingbyrank" id="splittingbyrank"/>10.2.1&#160;&#160;Splitting by rank</h4>
<div class="paramtext">Consider a sub-box <m:math><m:mi>B</m:mi></m:math>&#160;with level <m:math>
 <m:mi>s</m:mi>
 <m:mo>&gt;</m:mo>
 <m:mn>2</m:mn><m:mi>n</m:mi>
 <m:mfenced separators="">
  <m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:mrow><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mrow>
 </m:mfenced>
</m:math>. Although the sub-box has reached a high level, there is at least one coordinate along which it has not been split very often. Among the <m:math><m:mi>i</m:mi></m:math>&#160;such that <m:math>
 <m:msub><m:mi>n</m:mi><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub></m:mrow>
</m:math>&#160;for <m:math><m:mi>B</m:mi></m:math>, select the splitting index to be the coordinate with the lowest <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;(and hence highest variability rank). &#8216;Splitting by rank&#8217; refers to the ranking of the coordinates by <m:math><m:msub><m:mi>n</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>.</div><div class="paramtext">If <m:math><m:msub><m:mi>n</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, so that <m:math><m:mi>B</m:mi></m:math>&#160;has never been split along coordinate <m:math><m:mi>i</m:mi></m:math>, the splitting is done according to the initialization list and the adaptively chosen golden-section split points, as described in <a class="sec" href="#ad-initializationandsweeps">Section 10.1</a>. Also as covered there, new basepoints and opposite points are generated. The children having the smaller fraction of the golden-section split (that is, those with larger function values) are given level <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators="" open="{" close="}"><m:mrow><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:mfenced></m:mrow></m:math>. All other children are given level <m:math><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>.</div><div class="paramtext">Otherwise, <m:math><m:mi>B</m:mi></m:math>&#160;ranges between <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;in the <m:math><m:mi>i</m:mi></m:math>th coordinate direction. The splitting value is selected to be <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>+</m:mo><m:mn>2</m:mn><m:mfenced separators=""><m:mi mathvariant="normal">subint</m:mi><m:mfenced separators=""><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>-</m:mo><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:mfenced><m:mo>/</m:mo><m:mn>3</m:mn></m:math>; we are not attempting to split based on a large reduction in function value, merely in order to reduce the size of a large interval, so <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;may not be optimal. Sub-box <m:math><m:mi>B</m:mi></m:math>&#160;is split at <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the golden-section split point, producing three parts and requiring only one additional function evaluation, at the point <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>&#160;obtained from <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;by changing the <m:math><m:mi>i</m:mi></m:math>th coordinate to <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>. The child with the smaller fraction of the golden-section split is given level <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators="" open="{" close="}"><m:mrow><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:mfenced></m:mrow></m:math>, while the other two parts are given level <m:math><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>. Basepoints are assigned as follows: the basepoint of the first child is taken to be <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, and the basepoint of the second and third children is the point <m:math><m:msup><m:mi mathvariant="bold">x</m:mi><m:mo>&#8242;</m:mo></m:msup></m:math>. Opposite points are obtained by changing <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;to the other end of the <m:math><m:mi>i</m:mi></m:math>th coordinate-interval of the corresponding child.</div><h4 class="standard"><a class="sec" name="splittingbyexpectedgain" id="splittingbyexpectedgain"/>10.2.2&#160;&#160;Splitting by expected gain</h4>
<div class="paramtext">When a sub-box <m:math><m:mi>B</m:mi></m:math>&#160;has level <m:math>
 <m:mi>s</m:mi>
 <m:mo>&#8804;</m:mo>
 <m:mn>2</m:mn><m:mi>n</m:mi>
 <m:mfenced separators="">
  <m:mrow><m:mi>min</m:mi><m:mspace width="0.25em"/><m:mo>&#8289;</m:mo><m:mrow><m:msub><m:mi>n</m:mi><m:mi>j</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mrow>
 </m:mfenced>
</m:math>, we compute the optimal splitting index and splitting value from a local separable quadratic used as a simple local approximation of the objective function. To fit this curve, for each coordinate we need two additional points and their function values. Such data may be recoverable from the history of <m:math><m:mi>B</m:mi></m:math>: whenever the <m:math><m:mi>i</m:mi></m:math>th coordinate was split in the history of <m:math><m:mi>B</m:mi></m:math>, we obtained values that can be used for the current quadratic interpolation in coordinate <m:math><m:mi>i</m:mi></m:math>.</div><div class="paramtext">We loop over <m:math><m:mi>i</m:mi></m:math>; for each coordinate we pursue the history of <m:math><m:mi>B</m:mi></m:math>&#160;back to the root box, and we take the first two points and function values we find, since these are expected to be closest to the current basepoint <m:math><m:mi mathvariant="bold">x</m:mi></m:math>. If the current coordinate has not yet been split we use the initialization list. Then we generate a local separable model <m:math><m:mi>e</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">&#958;</m:mi></m:mfenced></m:math>&#160;for <m:math><m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">&#958;</m:mi></m:mfenced></m:math>&#160;by interpolation at <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;and the <m:math><m:mn>2</m:mn><m:mi>n</m:mi></m:math>&#160;additional points just collected:

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:mi>e</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">&#958;</m:mi></m:mfenced>
 <m:mo>=</m:mo>
 <m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced>
 <m:mo>+</m:mo>
 <m:munderover>
  <m:mo>&#8721;</m:mo>
  <m:mrow><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:mrow>
  <m:mi>n</m:mi>
 </m:munderover>
 <m:msub><m:mi>e</m:mi><m:mi>i</m:mi></m:msub>
 <m:mfenced separators=""><m:msub><m:mi>&#958;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">We define the <span class="italic">expected gain</span> <m:math><m:msub><m:mover><m:mi>e</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>&#160;in function value when we evaluate at a new point obtained by changing coordinate <m:math><m:mi>i</m:mi></m:math>&#160;in the basepoint, for each <m:math><m:mi>i</m:mi></m:math>, based on two cases:
<table class="standard-100"><tr>
<td style="width:2.1em;" valign="baseline">(i)</td>
<td valign="top" style="padding-bottom:0.5em"><m:math><m:msub><m:mi>n</m:mi><m:mi>i</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>. We compute the expected gain as

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mover><m:mi>e</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow>
   <m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mi>j</m:mi><m:mo>&#8804;</m:mo>
   <m:msub><m:mi>L</m:mi><m:mi>i</m:mi></m:msub>
  </m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:mfenced open="{" close="}" separators="">
  <m:msubsup><m:mi>f</m:mi><m:mi>i</m:mi><m:mi>j</m:mi></m:msubsup>
 </m:mfenced>
 <m:mo>-</m:mo>
 <m:msubsup>
  <m:mi>f</m:mi>
  <m:mi>i</m:mi>
  <m:msub><m:mi>p</m:mi><m:mi>i</m:mi></m:msub>
 </m:msubsup>
 <m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div><div class="paramtext">Again, we split according to the initialization list, with the new basepoints and opposite points being as before.</div></td>
</tr><tr>
<td style="width:2.1em;" valign="baseline">(ii)</td>
<td valign="top"><m:math><m:msub><m:mi>n</m:mi><m:mi>i</m:mi></m:msub><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>. Now, the <m:math><m:mi>i</m:mi></m:math>th component of our sub-box ranges from <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;to <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>. Using the quadratic partial correction function

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mi>e</m:mi><m:mi>i</m:mi></m:msub>
 <m:mfenced separators=""><m:msub><m:mi>&#958;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
 <m:mo>=</m:mo>
 <m:msub><m:mi>&#945;</m:mi><m:mi>i</m:mi></m:msub>
 <m:mfenced separators="">
  <m:msub><m:mi>&#958;</m:mi><m:mi>i</m:mi></m:msub>
  <m:mo>-</m:mo>
  <m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub>
 </m:mfenced>
 <m:mo>+</m:mo>
 <m:msub><m:mi>&#946;</m:mi><m:mi>i</m:mi></m:msub>
 <m:msup>
  <m:mfenced separators="">
    <m:msub><m:mi>&#958;</m:mi><m:mi>i</m:mi></m:msub>
    <m:mo>-</m:mo>
    <m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub>
   </m:mfenced>
  <m:mn>2</m:mn>
 </m:msup>
</m:math></td><td class="formula2"/></tr></table></div>

we can approximate the maximal gain expected when changing <m:math><m:msub><m:mi>x</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;only. We will choose the splitting value from <m:math><m:mi>&#9647;</m:mi><m:mfenced separators="" open="{" close="}"><m:msup><m:mi>&#958;</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mo>,</m:mo><m:msup><m:mi>&#958;</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup></m:mfenced></m:math>. We compute

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msub><m:mover><m:mi>e</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow>
   <m:msub><m:mi>&#958;</m:mi><m:mi>i</m:mi></m:msub>
   <m:mo>&#8712;</m:mo>
   <m:mi>&#9647;</m:mi>
   <m:mfenced separators="" open="{" close="}"><m:msup><m:mi>&#958;</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mo>,</m:mo><m:msup><m:mi>&#958;</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup></m:mfenced>
  </m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:msub><m:mi>e</m:mi><m:mi>i</m:mi></m:msub>
 <m:mfenced separators=""><m:msub><m:mi>&#958;</m:mi><m:mi>i</m:mi></m:msub></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

and call <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;the minimizer in <m:math><m:mi>&#9647;</m:mi><m:mfenced separators="" open="{" close="}"><m:msup><m:mi>&#958;</m:mi><m:mo>&#8242;</m:mo></m:msup><m:mo>,</m:mo><m:msup><m:mi>&#958;</m:mi><m:mrow><m:mo>&#8242;</m:mo><m:mo>&#8242;</m:mo></m:mrow></m:msup></m:mfenced></m:math>.
<div class="paramtext">If the expected best function value <m:math><m:msub><m:mi>f</m:mi><m:mi mathvariant="normal">exp</m:mi></m:msub></m:math>&#160;satisfies

<div class="formula-eqn"><a name="eqn1" id="eqn1"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
 <m:msub><m:mi>f</m:mi><m:mi mathvariant="normal">exp</m:mi></m:msub>
 <m:mo>=</m:mo>
 <m:mi>F</m:mi><m:mfenced separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced>
 <m:mo>+</m:mo>
 <m:munder>
  <m:mi mathvariant="normal">min</m:mi>
  <m:mrow><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mi>i</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi></m:mrow>
 </m:munder><m:mspace width="0.25em"/>
 <m:msub><m:mover><m:mi>e</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub>
 <m:mo>&lt;</m:mo>
 <m:msub><m:mi>f</m:mi><m:mi mathvariant="normal">best</m:mi></m:msub>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (1)
     </td></tr></table></div>

where <m:math><m:msub><m:mi>f</m:mi><m:mi mathvariant="normal">best</m:mi></m:msub></m:math>&#160;is the current best function value (including those function values obtained by local optimization), we expect the sub-box to contain a better point and so we split it, using as splitting index the component with minimal <m:math><m:msub><m:mover><m:mi>e</m:mi><m:mo>^</m:mo></m:mover><m:mi>i</m:mi></m:msub></m:math>. Equation <a class="eqn" href="#eqn1">(1)</a> prevents wasting function calls by avoiding splitting sub-boxes whose basepoints have bad function values. These sub-boxes will eventually be split by rank anyway.</div>
<div class="paramtext">We now have a splitting index and a splitting value <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>. The sub-box is split at <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;as long as <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8800;</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>, and at the golden-section split point; two or three children are produced. The larger fraction of the golden-section split receives level <m:math><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>, while the smaller fraction receives level <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators="" open="{" close="}"><m:mrow><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:mfenced></m:mrow></m:math>. If it is the case that <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub><m:mo>&#8800;</m:mo><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the third child is larger than the smaller of the two children from the golden-section split, the third child receives level <m:math><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:math>. Otherwise it is given the level <m:math><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators="" open="{" close="}"><m:mrow><m:mi>s</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mrow><m:mo>,</m:mo><m:msub><m:mi>s</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:mfenced></m:mrow></m:math>. The basepoint of the first child is set to <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, and the basepoint of the second (and third if it exists) is obtained by changing the <m:math><m:mi>i</m:mi></m:math>th coordinate of <m:math><m:mi mathvariant="bold">x</m:mi></m:math>&#160;to <m:math><m:msub><m:mi>z</m:mi><m:mi>i</m:mi></m:msub></m:math>. The opposite points are again derived by changing <m:math><m:msub><m:mi>y</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;to the other end of the <m:math><m:mi>i</m:mi></m:math>th coordinate interval of <m:math><m:mi>B</m:mi></m:math>.</div>
<div class="paramtext">If equation <a class="eqn" href="#eqn1">(1)</a> does not hold, we expect no improvement. We do not split, and we increase the level of <m:math><m:mi>B</m:mi></m:math>&#160;by <m:math><m:mn>1</m:mn></m:math>.</div></td>
</tr></table>
</div><h3 class="standard"><a class="sec" name="ad-localsearch" id="ad-localsearch"/>10.3&#160;&#160;Local Search</h3>
<div class="paramtext">The local optimization algorithm used by E05JBF uses linesearches along directions that are determined by minimizing quadratic models, all subject to bound constraints. Triples of vectors are computed using <span class="italic">coordinate searches</span> based on linesearches. These triples are used in <span class="italic">triple search</span> procedures to build local quadratic models for <m:math><m:mi>F</m:mi></m:math>. A trust-region-type approach to minimize these models is then carried out, and more information about the coordinate search and the triple search can be found in <a class="ref" href="#ref768">Huyer and Neumaier (1999)</a>.</div><div class="paramtext">The local search starts by looking for better points without being too local, by making a triple search using points found by a coordinate search. This yields a new point and function value, an approximation of the gradient of the objective, and an approximation of the Hessian of the objective. Then the quadratic model for <m:math><m:mi>F</m:mi></m:math>&#160;is minimized over a small box, with the solution to that minimization problem then being used as a linesearch direction to minimize the objective. A measure <m:math><m:mi>r</m:mi></m:math>&#160;is computed to quantify the predictive quality of the quadratic model.</div><div class="paramtext">The third stage is the checking of termination criteria. The local search will stop if more than <m:math><m:mi mathvariant="italic">loclim</m:mi></m:math>&#160;visits to this part of the local search have occurred, where <m:math><m:mi mathvariant="italic">loclim</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_localsearcheslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Local Searches Limit</m:mi></m:maction></m:math>. If that is not the case, it will stop if the limit on function calls has been exceeded (see the description of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_functionevaluationslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Function Evaluations Limit</m:mi></m:maction></m:math>). The final criterion checks if no improvement can be made to the function value, or whether the approximated gradient <m:math><m:mi mathvariant="bold">g</m:mi></m:math>&#160;is small, in the sense that

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
 <m:msup><m:mfenced open="|" close="|" separators=""><m:mi mathvariant="bold">g</m:mi></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
 <m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mfenced open="|" close="|" separators=""><m:mi mathvariant="bold">x</m:mi></m:mfenced><m:mo>,</m:mo><m:mfenced open="|" close="|" separators="">
    <m:msub>
     <m:mi mathvariant="bold">x</m:mi>
     <m:mi mathvariant="normal">old</m:mi>
    </m:msub>
   </m:mfenced></m:mfenced></m:mrow>
 <m:mo>&lt;</m:mo>
 <m:mi mathvariant="italic">loctol</m:mi>
 <m:mfenced separators=""><m:mi>f</m:mi><m:mo>-</m:mo><m:msub><m:mi>f</m:mi><m:mn>0</m:mn></m:msub></m:mfenced>
 <m:mtext>.</m:mtext> 
</m:math></td><td class="formula2"/></tr></table></div></div><div class="paramtext">The vector <m:math><m:msub><m:mi mathvariant="bold">x</m:mi><m:mi mathvariant="normal">old</m:mi></m:msub></m:math>&#160;is the best point at the start of the current loop in this iterative local-search procedure, the constant <m:math><m:mi mathvariant="italic">loctol</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_localsearchestolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Local Searches Tolerance</m:mi></m:maction></m:math>, <m:math><m:mi>f</m:mi></m:math>&#160;is the objective value at <m:math><m:mi mathvariant="bold">x</m:mi></m:math>, and <m:math><m:msub><m:mi>f</m:mi><m:mn>0</m:mn></m:msub></m:math>&#160;is the smallest function value found by the initialization procedure.</div><div class="paramtext">Next, E05JBF attempts to move away from the boundary, if any components of the current point lie there, using linesearches along the offending coordinates. Local searches are terminated if no improvement could be made.</div><div class="paramtext">The fifth stage carries out another triple search, but this time it does not use points from a coordinate search, rather points lying within the trust-region box are taken.</div><div class="paramtext">The final stage modifies the trust-region box to be bigger or smaller, depending on the quality of the quadratic model, minimizes the new quadratic model on that box, and does a linesearch in the direction of the minimizer. The value of <m:math><m:mi>r</m:mi></m:math>&#160;is updated using the new data, and then we go back to the third stage (checking of termination criteria).</div><div class="paramtext">The Hessians of the quadratic models generated by the local search may not be positive definite, so E05JBF uses the general nonlinear optimizer <a class="rout" href="../E04/e04vhf.xml">E04VHF</a> to minimize the models.</div><h2 class="standard"><a class="sec" name="optparams" id="optparams"/>11&#160;&#160;Optional Parameters</h2>
<div class="paramtext">Several optional parameters in E05JBF define choices in the problem specification or the algorithm logic.  In order to reduce the number of formal parameters of E05JBF these optional parameters have associated <span class="italic">default values</span> that are appropriate for most problems.  Therefore, you need only specify those optional parameters whose values are to be different from their default values.</div><div class="paramtext">The remainder of this section can be skipped if you wish to use the default values for all optional parameters.  A complete list of optional parameters and their default values is given in <a class="sec" href="#op-checklist">Section 11.1</a>.</div><div class="paramtext">Optional parameters may be specified by calling one, or more, of the routines <a class="rout" href="../E05/e05jcf.xml">E05JCF</a>, <a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a> and <a class="rout" href="../E05/e05jgf.xml">E05JGF</a> before a call to E05JBF.</div><div class="paramtext"><a class="rout" href="../E05/e05jcf.xml">E05JCF</a> reads options from an external options file, with <span class="mono">Begin</span> and <span class="mono">End</span> as the first and last lines respectively, and with each intermediate line defining a single optional parameter.  For example,
<pre class="verbatim">
 Begin
   Static Limit = 50
 End
</pre>
</div><div class="paramtext">The call
<pre class="verbatim">
 CALL E05JCF (IOPTS, COMM, LCOMM, IFAIL)
</pre>
 
can then be used to read the file on 
 unit <a class="arg" href="../E05/e05jcf.xml#IOPTS">IOPTS</a>.  <a class="arg" href="#IFAIL">IFAIL</a> will be zero 
 
on successful exit.  <a class="rout" href="../E05/e05jcf.xml">E05JCF</a> should be consulted for a full description of this method of supplying optional parameters.</div><div class="paramtext"><a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a> or <a class="rout" href="../E05/e05jgf.xml">E05JGF</a> can be called to supply options directly, one call being necessary for each optional parameter.  <a class="rout" href="../E05/e05jdf.xml">E05JDF</a>, <a class="rout" href="../E05/e05jef.xml">E05JEF</a>, <a class="rout" href="../E05/e05jff.xml">E05JFF</a> or <a class="rout" href="../E05/e05jgf.xml">E05JGF</a> should be consulted for a full description of this method of supplying optional parameters.</div><div class="paramtext">All optional parameters not specified by you are set to their default values. Valid values of optional parameters specified by you are unaltered by E05JBF and so remain in effect for subsequent calls to E05JBF, unless you explicitly change them.</div><h3 class="standard"><a class="sec" name="op-checklist" id="op-checklist"/>11.1&#160;&#160;Optional Parameter Checklist and Default Values</h3>
<div class="paramtext">The following list gives the valid options.  For each option, we give the keywords, the symbolic name, the default value, and the allowed range.  A definition for each option can be found in <a class="sec" href="#op-description">Section 11.2</a>, where the letter <m:math><m:mi>a</m:mi></m:math>&#160;denotes an option that takes an &#8216;ON&#8217; or &#8216;OFF&#8217; value and the letters <m:math><m:mi>i</m:mi></m:math>&#160;and <m:math><m:mi>r</m:mi></m:math>&#160;denote integer and real values required with certain options, respectively. Option names are case-insensitive and must be provided in full; abbreviations are not recognized. The symbol <m:math><m:mi>&#949;</m:mi></m:math>&#160;is a generic notation for <span class="bitalic">machine precision</span> (see <a class="rout" href="../X02/x02ajf.xml">X02AJF</a>), the symbol <m:math><m:msub><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;stands for the largest positive model number (see <a class="rout" href="../X02/x02alf.xml">X02ALF</a>), and the symbol <m:math><m:mi>d</m:mi></m:math>&#160;stands for the maximum number of decimal digits that can be represented (see <a class="rout" href="../X02/x02bef.xml">X02BEF</a>).</div><div class="left-tablediv"><table class="optparam"><tbody>
<tr>
<td class="libdoc" valign="top" align="left"><b>Optional Parameter</b></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><b>Symbolic&#160;Name</b></td>
<td class="libdoc" valign="top" align="left"><b>Default&#160;Value</b></td>
<td class="libdoc" valign="top" align="left"><b>Allowed&#160;Range</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_defaults">Defaults</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;">&#160;</td>
<td class="libdoc" valign="top" align="left">&#160;</td>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_functionevaluationslimit">Function Evaluations Limit</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">nf</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100</m:mn><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">nf</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_infiniteboundsize">Infinite Bound Size</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">infbnd</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msubsup><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>4</m:mn></m:mfrac></m:msubsup></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:msubsup><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>4</m:mn></m:mfrac></m:msubsup><m:mo>&#8804;</m:mo><m:mi mathvariant="italic">infbnd</m:mi><m:mo>&#8804;</m:mo><m:msubsup><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac></m:msubsup></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_list">List</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;">&#160;</td>
<td class="libdoc" valign="top" align="left"/>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_localsearches">Local Searches</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">lcsrch</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mtext>'ON'</m:mtext></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">lcsrch</m:mi><m:mo>=</m:mo><m:mtext>'ON'</m:mtext><m:mtext>&#8203; or &#8203;</m:mtext><m:mtext>'OFF'</m:mtext></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_localsearcheslimit">Local Searches Limit</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">loclim</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>50</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">loclim</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_localsearchestolerance">Local Searches Tolerance</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">loctol</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">loctol</m:mi><m:mo>&#8805;</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_maximize">Maximize</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;">&#160;</td>
<td class="libdoc" valign="top" align="left"/>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_minimize">Minimize</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;">&#160;</td>
<td class="libdoc" valign="top" align="left">Default</td>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_nolist">Nolist</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;">&#160;</td>
<td class="libdoc" valign="top" align="left">Default</td>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_repeatability">Repeatability</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">repeat</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mtext>'OFF'</m:mtext></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">repeat</m:mi><m:mo>=</m:mo><m:mtext>'ON'</m:mtext><m:mtext>&#8203; or &#8203;</m:mtext><m:mtext>'OFF'</m:mtext></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_splitslimit">Splits Limit</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">smax</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mfenced open="&#8970;" close="&#8971;" separators=""><m:mi>d</m:mi><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mfenced><m:mo>/</m:mo><m:mn>3</m:mn></m:mfenced></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">smax</m:mi><m:mo>&gt;</m:mo><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_staticlimit">Static Limit</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">stclim</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>3</m:mn><m:mi>n</m:mi></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">stclim</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_targetobjectiveerror">Target Objective Error</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">objerr</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msup><m:mi>&#949;</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>4</m:mn></m:mfrac></m:msup></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">objerr</m:mi><m:mo>&#8805;</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_targetobjectivesafeguard">Target Objective Safeguard</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">objsfg</span></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msup><m:mi>&#949;</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac></m:msup></m:math></td>
<td class="libdoc" valign="top" align="left">
<m:math><m:mi mathvariant="italic">objsfg</m:mi><m:mo>&#8805;</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left"><a class="optparam" href="../E05/e05jbf.xml#optparam_targetobjectivevalue">Target Objective Value</a></td>
<td class="libdoc" valign="top" align="left" style="width:4.5em;"><span class="italic">objval</span></td>
<td class="libdoc" valign="top" align="left">&#160;</td>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr>
</tbody>
</table></div><h3 class="standard"><a class="sec" name="op-description" id="op-description"/>11.2&#160;&#160;Description of the Optional Parameters</h3><table class="optparam"><tr><td class="optparam-left"><a name="optparam_defaults" id="defaults"/><b>Defaults</b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table><div class="paramtext">This special keyword is used to reset all optional parameters to their default values.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_functionevaluationslimit" id="functionevaluationslimit"/><b>Function Evaluations Limit</b></td><td class="optparam-center">(<span class="italic">nf</span>)
    &#8195;
   <i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100</m:mn><m:msup><m:mi>n</m:mi><m:mn>2</m:mn></m:msup></m:math></td></tr></table><div class="paramtext">This puts an approximate limit on the number of function calls allowed. The total number of calls made is checked at the top of an internal iteration loop, so it is possible that a few calls more than <m:math><m:mi mathvariant="italic">nf</m:mi></m:math>&#160;may be made.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">nf</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_infiniteboundsize" id="infiniteboundsize"/><b>Infinite Bound Size</b></td><td class="optparam-center">(<span class="italic">infbnd</span>)
    &#8195;
   <i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msubsup><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>4</m:mn></m:mfrac></m:msubsup></m:math></td></tr></table><div class="paramtext">This defines the &#8216;infinite&#8217; bound <m:math><m:mi mathvariant="italic">infbnd</m:mi></m:math>&#160;in the definition of the problem constraints.  Any upper bound greater than or equal to <m:math><m:mi mathvariant="italic">infbnd</m:mi></m:math>&#160;will be regarded as <m:math><m:mo>&#8734;</m:mo></m:math>&#160;(and similarly any lower bound less than or equal to <m:math><m:mrow><m:mo>-</m:mo><m:mi mathvariant="italic">infbnd</m:mi></m:mrow></m:math>&#160;will be regarded as <m:math><m:mo>-</m:mo><m:mo>&#8734;</m:mo></m:math>).</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:msubsup><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>4</m:mn></m:mfrac></m:msubsup><m:mo>&#8804;</m:mo><m:mi mathvariant="italic">infbnd</m:mi><m:mo>&#8804;</m:mo><m:msubsup><m:mi>r</m:mi><m:mi mathvariant="normal">max</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac></m:msubsup></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_localsearches" id="localsearches"/><b>Local Searches</b></td><td class="optparam-center">(<span class="italic">lcsrch</span>)
    &#8195;
   <i>a</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mtext>'ON'</m:mtext></m:math></td></tr></table><div class="paramtext">If you want to try to accelerate convergence of E05JBF by starting local searches from candidate minima, you will require <m:math><m:mi mathvariant="italic">lcsrch</m:mi></m:math>&#160;to be &#8216;ON&#8217;.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">lcsrch</m:mi><m:mo>=</m:mo><m:mtext>'ON'</m:mtext><m:mtext>&#8203; or &#8203;</m:mtext><m:mtext>'OFF'</m:mtext></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_localsearcheslimit" id="localsearcheslimit"/><b>Local Searches Limit</b></td><td class="optparam-center">(<span class="italic">loclim</span>)
    &#8195;
   <i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>50</m:mn></m:math></td></tr></table><div class="paramtext">This defines the maximal number of iterations to be used in the trust-region loop of the local-search procedure.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">loclim</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_localsearchestolerance" id="localsearchestolerance"/><b>Local Searches Tolerance</b></td><td class="optparam-center">(<span class="italic">loctol</span>)
    &#8195;
   <i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math></td></tr></table><div class="paramtext">The value of <m:math><m:mi mathvariant="italic">loctol</m:mi></m:math>&#160;is the multiplier used during local searches as a stopping criterion for when the approximated gradient is small, in the sense described in <a class="sec" href="#ad-localsearch">Section 10.3</a>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">loctol</m:mi><m:mo>&#8805;</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_minimize" id="minimize"/><b>Minimize</b></td><td class="optparam-center"/><td class="optparam-right">Default</td></tr></table>
<table class="multi-optparam"><tr><td class="optparam-left"><a name="optparam_maximize" id="maximize"/><b>Maximize</b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table><div class="paramtext">These keywords specify the required direction of optimization.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_nolist" id="nolist"/><b>Nolist</b></td><td class="optparam-center"/><td class="optparam-right">Default</td></tr></table>
<table class="multi-optparam"><tr><td class="optparam-left"><a name="optparam_list" id="list"/><b>List</b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table><div class="paramtext">These options control the echoing of each optional parameter specification as it is supplied. <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_list"><m:mi mathcolor="#800080;" mathvariant="bold">List</m:mi></m:maction></m:math>&#160;turns printing on, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_nolist"><m:mi mathcolor="#800080;" mathvariant="bold">Nolist</m:mi></m:maction></m:math>&#160;turns printing off.  The output is sent to 
the current advisory message unit (as defined by <a class="rout" href="../X04/x04abf.xml">X04ABF</a>).

</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_repeatability" id="repeatability"/><b>Repeatability</b></td><td class="optparam-center">(<span class="italic">repeat</span>)
    &#8195;
   <i>a</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mtext>'OFF'</m:mtext></m:math></td></tr></table><div class="paramtext">For use with random initialization lists (<m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IINIT"><m:mi mathcolor="#EE0000" mathvariant="bold">IINIT</m:mi></m:maction><m:mo>=</m:mo><m:mn>4</m:mn></m:math>). When set to &#8216;ON&#8217;, an internally-initialized random seed is stored in 
the array <a class="arg" href="../E05/e05jaf.xml#COMM">COMM</a> 

for use in subsequent calls to E05JBF.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">repeat</m:mi><m:mo>=</m:mo><m:mtext>'ON'</m:mtext><m:mtext>&#8203; or &#8203;</m:mtext><m:mtext>'OFF'</m:mtext></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_splitslimit" id="splitslimit"/><b>Splits Limit</b></td><td class="optparam-center">(<span class="italic">smax</span>)
    &#8195;
   <i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mfenced open="&#8970;" close="&#8971;" separators=""><m:mi>d</m:mi><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:mfenced><m:mo>/</m:mo><m:mn>3</m:mn></m:mfenced></m:math></td></tr></table><div class="paramtext">Along with the initialization list <a class="arg" href="#LIST">LIST</a>, this defines a limit on the number of times the root box will be split along any single coordinate direction. If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_localsearches"><m:mi mathcolor="#800080;" mathvariant="bold">Local Searches</m:mi></m:maction></m:math>&#160;is &#8216;OFF&#8217; you may find the default value to be too small.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">smax</m:mi><m:mo>&gt;</m:mo><m:mi>n</m:mi><m:mo>+</m:mo><m:mn>2</m:mn></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_staticlimit" id="staticlimit"/><b>Static Limit</b></td><td class="optparam-center">(<span class="italic">stclim</span>)
    &#8195;
   <i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>3</m:mn><m:mi>n</m:mi></m:math></td></tr></table><div class="paramtext">As the default termination criterion, computation stops when the best function value is static for <m:math><m:mi mathvariant="italic">stclim</m:mi></m:math>&#160;sweeps through levels. This parameter is ignored if you have specified a target value to reach in <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivevalue"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Value</m:mi></m:maction></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">stclim</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_targetobjectiveerror" id="targetobjectiveerror"/><b>Target Objective Error</b></td><td class="optparam-center">(<span class="italic">objerr</span>)
    &#8195;
   <i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msup><m:mi>&#949;</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>4</m:mn></m:mfrac></m:msup></m:math></td></tr></table><div class="paramtext">If you have given a target objective value to reach in <m:math><m:mi mathvariant="italic">objval</m:mi></m:math>&#160;(the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivevalue"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Value</m:mi></m:maction></m:math>), <m:math><m:mi mathvariant="italic">objerr</m:mi></m:math>&#160;sets your desired relative error (from above if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_minimize"><m:mi mathcolor="#800080;" mathvariant="bold">Minimize</m:mi></m:maction></m:math>&#160;is set, from below if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_maximize"><m:mi mathcolor="#800080;" mathvariant="bold">Maximize</m:mi></m:maction></m:math>&#160;is set) between <a class="arg" href="#OBJ">OBJ</a> and <m:math><m:mi mathvariant="italic">objval</m:mi></m:math>, as described in <a class="sec" href="#accuracy">Section 7</a>. See also the description of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivesafeguard"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Safeguard</m:mi></m:maction></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">objerr</m:mi><m:mo>&#8805;</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_targetobjectivesafeguard" id="targetobjectivesafeguard"/><b>Target Objective Safeguard</b></td><td class="optparam-center">(<span class="italic">objsfg</span>)
    &#8195;
   <i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msup><m:mi>&#949;</m:mi><m:mfrac><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac></m:msup></m:math></td></tr></table><div class="paramtext">If you have given a target objective value to reach in <m:math><m:mi mathvariant="italic">objval</m:mi></m:math>&#160;(the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_targetobjectivevalue"><m:mi mathcolor="#800080;" mathvariant="bold">Target Objective Value</m:mi></m:maction></m:math>), <m:math><m:mi mathvariant="italic">objsfg</m:mi></m:math>&#160;sets your desired safeguarded termination tolerance, for when <m:math><m:mi mathvariant="italic">objval</m:mi></m:math>&#160;is close to zero.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mi mathvariant="italic">objsfg</m:mi><m:mo>&#8805;</m:mo><m:mn>2</m:mn><m:mi>&#949;</m:mi></m:math>.
</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_targetobjectivevalue" id="targetobjectivevalue"/><b>Target Objective Value</b></td><td class="optparam-center">(<span class="italic">objval</span>)
    &#8195;
   <i>r</i></td><td class="optparam-right"/></tr></table><div class="paramtext">This parameter may be set if you wish E05JBF to use a specific value as the target function value to reach during the optimization. Setting <m:math><m:mi mathvariant="italic">objval</m:mi></m:math>&#160;overrides the default termination criterion determined by the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_staticlimit"><m:mi mathcolor="#800080;" mathvariant="bold">Static Limit</m:mi></m:maction></m:math>.</div><hr/><div><a class="rout" href="../../pdf/E05/e05jbf.pdf">E05JBF (PDF version)</a></div><div><a class="chap" href="e05conts.xml">E05 Chapter Contents</a></div><div><a class="chapint" href="e05intro.xml">E05 Chapter Introduction</a></div>
<div><a class="htmltoc" href="../FRONTMATTER/manconts.xml">NAG Library Manual</a></div>
<div><hr/><a class="genint" href="../FRONTMATTER/copyright.xml">&#169; The Numerical Algorithms Group Ltd, Oxford, UK. 2009</a></div></body></html>
