<?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>E04NKF/E04NKA : 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/E04/e04nkf.pdf">E04NKF/E04NKA (PDF version)</a></div><div><a class="chap" href="e04conts.xml">E04 Chapter Contents</a></div><div><a class="chapint" href="e04intro.xml">E04 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/>E04NKF/E04NKA</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, to 
<a class="sec" href="#optparams">Section 11</a> for a detailed description of the specification of the optional parameters and to 
<a class="sec" href="#monitoring">Section 12</a> for a detailed description of the monitoring information produced by the routine</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="htmltoc" onclick="showLevel('tocspecification');"><span class="htmltocplus" id="tocspecificationplus">+</span><span class="htmltocminus" id="tocspecificationminus">&#8722;</span></span>
<a class="htmltoc" href="#specification">2&#160;&#160;<b>Specification</b></a>
<div class="htmltocitem" id="tocspecification">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#routFspec">2.1&#160;&#160;<b>Specification for E04NKF</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#routAspec">2.2&#160;&#160;<b>Specification for E04NKA</b></a>
</div>
</div>
</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="htmltoc" onclick="showLevel('tocfcomments');"><span class="htmltocplus" id="tocfcommentsplus">+</span><span class="htmltocminus" id="tocfcommentsminus">&#8722;</span></span>
<a class="htmltoc" href="#fcomments">8&#160;&#160;<b>Further Comments</b></a>
<div class="htmltocitem" id="tocfcomments">
<div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#fc-printedoutput">8.1&#160;&#160;<b>Description of the Printed Output</b></a>
</div>
</div>
</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="#algdetails1">10.1&#160;&#160;<b>Overview</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#algdetails2">10.2&#160;&#160;<b>Definition of the Working Set and Search Direction</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#ad-mainiteration">10.3&#160;&#160;<b>Main Iteration</b></a>
</div><div class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#algdetails4">10.4&#160;&#160;<b>Miscellaneous</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 class="htmltoc">
<span class="htmltocplus">&#160;&#160;&#160;</span>
<a class="htmltoc" href="#monitoring">12&#160;&#160;<b>Description of Monitoring Information</b></a>
</div>
</div>
</div><h2 class="standard"><a class="sec" name="purpose" id="purpose"/>1&#160;&#160;Purpose</h2>
<div class="paramtext">E04NKF/E04NKA solves sparse linear programming or quadratic programming problems.</div>
<div class="paramtext">E04NKA is a version of E04NKF that has additional parameters in order to make it safe for use in multithreaded applications (see <a class="sec" href="#parameters">Section 5</a>).  The initialization routine <a class="rout" href="../E04/e04wbf.xml">E04WBF</a> <b>must</b> have been called before calling E04NKA.</div><h2 class="standard"><a class="sec" name="specification" id="specification"/>2&#160;&#160;Specification</h2><h3 class="standard"><a class="sec" name="routFspec" id="routFspec"/>2.1&#160;&#160;Specification for E04NKF</h3>
<table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;E04NKF&#160;(</td><td class="tdfspec2"><a class="arg" href="#N">N</a>, <a class="arg" href="#M">M</a>, <a class="arg" href="#NNZ">NNZ</a>, <a class="arg" href="#IOBJ">IOBJ</a>, <a class="arg" href="#NCOLH">NCOLH</a>, <a class="arg" href="#QPHX">QPHX</a>, <a class="arg" href="#A">A</a>, <a class="arg" href="#HA">HA</a>, <a class="arg" href="#KA">KA</a>, <a class="arg" href="#BL">BL</a>, <a class="arg" href="#BU">BU</a>, <a class="arg" href="#START">START</a>, <a class="arg" href="#NAMES">NAMES</a>, <a class="arg" href="#NNAME">NNAME</a>, <a class="arg" href="#CRNAME">CRNAME</a>, <a class="arg" href="#NS">NS</a>, <a class="arg" href="#XS">XS</a>, <a class="arg" href="#ISTATE">ISTATE</a>, <a class="arg" href="#MINIZ">MINIZ</a>, <a class="arg" href="#MINZ">MINZ</a>, <a class="arg" href="#NINF">NINF</a>, <a class="arg" href="#SINF">SINF</a>, <a class="arg" href="#OBJ">OBJ</a>, <a class="arg" href="#CLAMDA">CLAMDA</a>, <a class="arg" href="#IZ">IZ</a>, <a class="arg" href="#LENIZ">LENIZ</a>, <a class="arg" href="#Z">Z</a>, <a class="arg" href="#LENZ">LENZ</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, M, NNZ, IOBJ, NCOLH, HA(NNZ), KA(N+1), NNAME, NS, ISTATE(N+M), MINIZ, MINZ, NINF, IZ(LENIZ), LENIZ, LENZ, IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">A(NNZ), BL(N+M), BU(N+M), XS(N+M), SINF, OBJ, CLAMDA(N+M), Z(LENZ)</td></tr><tr><td class="tdfspec1">CHARACTER*1</td><td class="tdfspec2">START</td></tr><tr><td class="tdfspec1">CHARACTER*8</td><td class="tdfspec2">NAMES(5), CRNAME(NNAME)</td></tr><tr><td class="tdfspec1">EXTERNAL</td><td class="tdfspec2">QPHX</td></tr></table><h3 class="standard"><a class="sec" name="routAspec" id="routAspec"/>2.2&#160;&#160;Specification for E04NKA</h3>
<table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;E04NKA&#160;(</td><td class="tdfspec2"><a class="arg" href="#N">N</a>, <a class="arg" href="#M">M</a>, <a class="arg" href="#NNZ">NNZ</a>, <a class="arg" href="#IOBJ">IOBJ</a>, <a class="arg" href="#NCOLH">NCOLH</a>, <a class="arg" href="#QPHX">QPHX</a>, <a class="arg" href="#A">A</a>, <a class="arg" href="#HA">HA</a>, <a class="arg" href="#KA">KA</a>, <a class="arg" href="#BL">BL</a>, <a class="arg" href="#BU">BU</a>, <a class="arg" href="#START">START</a>, <a class="arg" href="#NAMES">NAMES</a>, <a class="arg" href="#NNAME">NNAME</a>, <a class="arg" href="#CRNAME">CRNAME</a>, <a class="arg" href="#NS">NS</a>, <a class="arg" href="#XS">XS</a>, <a class="arg" href="#ISTATE">ISTATE</a>, <a class="arg" href="#MINIZ">MINIZ</a>, <a class="arg" href="#MINZ">MINZ</a>, <a class="arg" href="#NINF">NINF</a>, <a class="arg" href="#SINF">SINF</a>, <a class="arg" href="#OBJ">OBJ</a>, <a class="arg" href="#CLAMDA">CLAMDA</a>, <a class="arg" href="#IZ">IZ</a>, <a class="arg" href="#LENIZ">LENIZ</a>, <a class="arg" href="#Z">Z</a>, <a class="arg" href="#LENZ">LENZ</a>, <a class="arg" href="#IUSER">IUSER</a>, <a class="arg" href="#RUSER">RUSER</a>, <a class="arg" href="#LWSAV">LWSAV</a>, <a class="arg" href="#IWSAV">IWSAV</a>, <a class="arg" href="#RWSAV">RWSAV</a>, <a class="arg" href="#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">N, M, NNZ, IOBJ, NCOLH, HA(NNZ), KA(N+1), NNAME, NS, ISTATE(N+M), MINIZ, MINZ, NINF, IZ(LENIZ), LENIZ, LENZ, IUSER(*), IWSAV(380), IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">A(NNZ), BL(N+M), BU(N+M), XS(N+M), SINF, OBJ, CLAMDA(N+M), Z(LENZ), RUSER(*), RWSAV(285)</td></tr><tr><td class="tdfspec1">LOGICAL</td><td class="tdfspec2">LWSAV(20)</td></tr><tr><td class="tdfspec1">CHARACTER*1</td><td class="tdfspec2">START</td></tr><tr><td class="tdfspec1">CHARACTER*8</td><td class="tdfspec2">NAMES(5), CRNAME(NNAME)</td></tr><tr><td class="tdfspec1">EXTERNAL</td><td class="tdfspec2">QPHX</td></tr></table><div class="paramtext">Before calling E04NKA, or either of the option setting routines <a class="rout" href="../E04/e04nlf.xml">E04NLA</a> or <a class="rout" href="../E04/e04nmf.xml">E04NMA</a>, <a class="rout" href="../E04/e04wbf.xml">E04WBF</a> <b>must</b> be called.  The specification for <a class="rout" href="../E04/e04wbf.xml">E04WBF</a> is:</div><table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;E04WBF&#160;(</td><td class="tdfspec2"><a class="arg" href="../E04/e04wbf.xml#RNAME">RNAME</a>, <a class="arg" href="../E04/e04wbf.xml#CWSAV">CWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LCWSAV">LCWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LWSAV">LWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LLWSAV">LLWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#IWSAV">IWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LIWSAV">LIWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#RWSAV">RWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LRWSAV">LRWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#IFAIL">IFAIL</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">LCWSAV, LLWSAV, IWSAV(LIWSAV), LIWSAV, LRWSAV, IFAIL</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">RWSAV(LRWSAV)</td></tr><tr><td class="tdfspec1">LOGICAL</td><td class="tdfspec2">LWSAV(LLWSAV)</td></tr><tr><td class="tdfspec1">CHARACTER*6</td><td class="tdfspec2">RNAME</td></tr><tr><td class="tdfspec1">CHARACTER*80</td><td class="tdfspec2">CWSAV(LCWSAV)</td></tr></table><div class="paramtext"><a class="rout" href="../E04/e04wbf.xml">E04WBF</a> should be called with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../E04/e04wbf.xml#RNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">RNAME</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'E04NKA'</m:mtext></m:math>.  <a class="arg" href="../E04/e04wbf.xml#LCWSAV">LCWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LLWSAV">LLWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LIWSAV">LIWSAV</a> and <a class="arg" href="../E04/e04wbf.xml#LRWSAV">LRWSAV</a>, the declared lengths of <a class="arg" href="../E04/e04wbf.xml#CWSAV">CWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LWSAV">LWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#IWSAV">IWSAV</a> and <a class="arg" href="../E04/e04wbf.xml#RWSAV">RWSAV</a> respectively, must satisfy:
<ul class="listind"><li class="listind"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../E04/e04wbf.xml#LCWSAV"><m:mi mathcolor="#EE0000" mathvariant="bold">LCWSAV</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math></li><li class="listind"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../E04/e04wbf.xml#LLWSAV"><m:mi mathcolor="#EE0000" mathvariant="bold">LLWSAV</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>20</m:mn></m:math></li><li class="listind"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../E04/e04wbf.xml#LIWSAV"><m:mi mathcolor="#EE0000" mathvariant="bold">LIWSAV</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>380</m:mn></m:math></li><li class="listind"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="../E04/e04wbf.xml#LRWSAV"><m:mi mathcolor="#EE0000" mathvariant="bold">LRWSAV</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>285</m:mn></m:math></li></ul>
</div><div class="paramtext">The contents of the arrays <a class="arg" href="../E04/e04wbf.xml#CWSAV">CWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#LWSAV">LWSAV</a>, <a class="arg" href="../E04/e04wbf.xml#IWSAV">IWSAV</a> and <a class="arg" href="../E04/e04wbf.xml#RWSAV">RWSAV</a> <b>must not</b> be altered between calling routines <a class="rout" href="../E04/e04nkf.xml">E04NKA</a>, <a class="rout" href="../E04/e04nlf.xml">E04NLA</a>, <a class="rout" href="../E04/e04nmf.xml">E04NMA</a> and <a class="rout" href="../E04/e04wbf.xml">E04WBF</a>.</div><h2 class="standard"><a class="sec" name="description" id="description"/>3&#160;&#160;Description</h2>
<div class="paramtext">E04NKF/E04NKA is designed to solve a class of quadratic programming problems that are assumed to be stated in the following general form:

<div class="formula-eqn"><a name="eqn1" id="eqn1"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
 <m:munder>
  <m:mi mathvariant="normal">minimize</m:mi>
  <m:mrow><m:mi>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>x</m:mi></m:mfenced>
 <m:mtext>&#8195; subject to &#8195;</m:mtext>
 <m:mi>l</m:mi><m:mo>&#8804;</m:mo>
 <m:mfenced open="{" close="}" separators="">
  <m:mtable>
   <m:mtr>
    <m:mtd><m:mi>x</m:mi></m:mtd>
   </m:mtr><m:mtr>
    <m:mtd><m:mi>A</m:mi><m:mi>x</m:mi></m:mtd>
   </m:mtr>
  </m:mtable>
 </m:mfenced>
 <m:mo>&#8804;</m:mo><m:mi>u</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (1)
     </td></tr></table></div>

where <m:math><m:mi>x</m:mi></m:math>&#160;is a set of variables, <m:math><m:mi>A</m:mi></m:math>&#160;is an <m:math><m:mi>m</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;matrix and the objective function <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;may be specified in a variety of ways depending upon the particular problem to be solved.  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;may be used to specify an alternative problem in which <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is maximized.  The possible forms for <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;are listed in <a class="table" href="#table1">Table 1</a>, in which the prefixes FP, LP and QP stand for &#8216;feasible point&#8217;, &#8216;linear programming&#8217; and &#8216;quadratic programming&#8217; respectively, <m:math><m:mi>c</m:mi></m:math>&#160;is an <m:math><m:mi>n</m:mi></m:math>&#160;element vector and <m:math><m:mi>H</m:mi></m:math>&#160;is the <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:mi>n</m:mi></m:math>&#160;second-derivative matrix <m:math><m:msup><m:mo>&#8711;</m:mo><m:mn>2</m:mn></m:msup><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;(the <span class="italic">Hessian matrix</span>).</div><div class="paramtext">
<div class="tablediv"><a name="table1" id="table1"/><table class="frame-none">
  
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="left"><b>Problem type</b></td>
    <td class="libdoc" valign="top" align="left"><b>Objective function <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math></b></td>
    <td class="libdoc" valign="top" align="left"><b>Hessian matrix <m:math><m:mi>H</m:mi></m:math></b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">FP</td>
    <td class="libdoc" valign="top" align="left">Not applicable</td>
    <td class="libdoc" valign="top" align="left">Not applicable</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">LP</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:msup><m:mi>c</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>x</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left">Not applicable</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="left">QP</td>
    <td class="libdoc" valign="top" align="left"><m:math><m:msup><m:mi>c</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>x</m:mi><m:mo>+</m:mo><m:mfrac other="small"><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac><m:msup><m:mi>x</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>x</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left">Symmetric positive semi-definite</td>
   </tr>
  </tbody>
 </table><div class="caption"><b>Table 1</b><br/></div></div>
</div><div class="paramtext">For LP and QP problems, the unique global minimum value of <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is found.  For FP problems, <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is omitted and the routine attempts to find a feasible point for the set of constraints.  For QP problems, you must also provide a subroutine that computes <m:math><m:mi>H</m:mi><m:mi>x</m:mi></m:math>&#160;for any given vector <m:math><m:mi>x</m:mi></m:math>.  (<m:math><m:mi>H</m:mi></m:math>&#160;need not be stored explicitly.)  If <m:math><m:mi>H</m:mi></m:math>&#160;is the zero matrix, the routine will still solve the resulting LP problem; however, this can be accomplished more efficiently by setting <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCOLH"><m:mi mathcolor="#EE0000" mathvariant="bold">NCOLH</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;(see <a class="sec" href="#parameters">Section 5</a>).</div><div class="paramtext">The defining feature of a <span class="italic">convex</span> QP problem is that the matrix <m:math><m:mi>H</m:mi></m:math>&#160;must be <span class="italic">positive semi-definite</span>, i.e., it must satisfy <m:math><m:msup><m:mi>x</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>x</m:mi><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>&#160;for all <m:math><m:mi>x</m:mi></m:math>.  Otherwise, <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is said to be <span class="italic">nonconvex</span> and it may be more appropriate to call <a class="rout" href="../E04/e04ugf.xml">E04UGF/E04UGA</a> instead.</div><div class="paramtext">E04NKF/E04NKA is intended to solve large-scale linear and quadratic programming problems in which the constraint matrix <m:math><m:mi>A</m:mi></m:math>&#160;is <span class="italic">sparse</span> (i.e., when the number of zero elements is sufficiently large that it is worthwhile using algorithms which avoid computations and storage involving zero elements).  The routine also takes advantage of sparsity in <m:math><m:mi>c</m:mi></m:math>.  (Sparsity in <m:math><m:mi>H</m:mi></m:math>&#160;can be exploited in the subroutine that computes <m:math><m:mi>H</m:mi><m:mi>x</m:mi></m:math>.)  For problems in which <m:math><m:mi>A</m:mi></m:math>&#160;can be treated as a <span class="italic">dense</span> matrix, it is usually more efficient to use <a class="rout" href="../E04/e04mff.xml">E04MFF/E04MFA</a>, <a class="rout" href="../E04/e04ncf.xml">E04NCF/E04NCA</a> or <a class="rout" href="../E04/e04nff.xml">E04NFF/E04NFA</a>.</div><div class="paramtext">The upper and lower bounds on the <m:math><m:mi>m</m:mi></m:math>&#160;elements of <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>&#160;are said to define the <span class="italic">general constraints</span> of the problem.  Internally, E04NKF/E04NKA converts the general constraints to equalities by introducing a set of <span class="italic">slack variables</span> <m:math><m:mi>s</m:mi></m:math>, where <m:math><m:mi>s</m:mi><m:mo>=</m:mo><m:msup><m:mfenced separators=""><m:msub><m:mi>s</m:mi><m:mn>1</m:mn></m:msub><m:mo>,</m:mo><m:msub><m:mi>s</m:mi><m:mn>2</m:mn></m:msub><m:mo>,</m:mo><m:mo>&#8230;</m:mo><m:mo>,</m:mo><m:msub><m:mi>s</m:mi><m:mi>m</m:mi></m:msub></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>.  For example, the linear constraint <m:math><m:mn>5</m:mn><m:mo>&#8804;</m:mo><m:mn>2</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:mn>3</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:math>&#160;is replaced by <m:math><m:mn>2</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:mn>3</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>-</m:mo><m:msub><m:mi>s</m:mi><m:mn>1</m:mn></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, together with the bounded slack <m:math><m:mn>5</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>s</m:mi><m:mn>1</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>.  The problem defined by <a class="eqn" href="#eqn1">(1)</a> can therefore be re-written in the following equivalent 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>x</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>n</m:mi></m:msup><m:mo>,</m:mo><m:mi>s</m:mi><m:mo>&#8712;</m:mo><m:msup><m:mi>R</m:mi><m:mi>m</m:mi></m:msup></m:mrow></m:munder><m:mspace width="0.25em"/>
 <m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced>
 <m:mtext>&#8195; subject to &#8195;</m:mtext>
 <m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>, &#8195;</m:mtext><m:mi>l</m:mi><m:mo>&#8804;</m:mo><m:mfenced open="{" close="}" separators="">
 <m:mtable>
  <m:mtr>
   <m:mtd><m:mi>x</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>s</m:mi></m:mtd>
  </m:mtr>
 </m:mtable>
</m:mfenced>
<m:mo>&#8804;</m:mo><m:mi>u</m:mi><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

Since the slack variables <m:math><m:mi>s</m:mi></m:math>&#160;are subject to the same upper and lower bounds as the elements of <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>, the bounds on <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>&#160;and <m:math><m:mi>x</m:mi></m:math>&#160;can simply be thought of as bounds on the combined vector <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  (In order to indicate their special role in QP problems, the original variables <m:math><m:mi>x</m:mi></m:math>&#160;are sometimes known as &#8216;column variables&#8217;, and the slack variables <m:math><m:mi>s</m:mi></m:math>&#160;are known as &#8216;row variables&#8217;.)</div><div class="paramtext">Each LP or QP problem is solved using an <span class="italic">active-set</span> method.  This is an iterative procedure with two phases: a <span class="italic">feasibility phase</span>, in which the sum of infeasibilities is minimized to find a feasible point; and an <span class="italic">optimality phase</span>, in which <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;is minimized by constructing a sequence of iterations that lies within the feasible region.</div><div class="paramtext">A constraint is said to be <span class="italic">active</span> or <span class="italic">binding</span> at <m:math><m:mi>x</m:mi></m:math>&#160;if the associated element of either <m:math><m:mi>x</m:mi></m:math>&#160;or <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>&#160;is equal to one of its upper or lower bounds.  Since an active constraint in <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>&#160;has its associated slack variable at a bound, the status of both simple and general upper and lower bounds can be conveniently described in terms of the status of the variables <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  A variable is said to be <span class="italic">nonbasic</span> if it is temporarily fixed at its upper or lower bound.  It follows that regarding a general constraint as being <span class="italic">active</span> is equivalent to thinking of its associated slack as being <span class="italic">nonbasic</span>.</div><div class="paramtext">At each iteration of an active-set method, the constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;are (conceptually) partitioned into the form

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>B</m:mi><m:msub><m:mi>x</m:mi><m:mi>B</m:mi></m:msub><m:mo>+</m:mo><m:mi>S</m:mi><m:msub><m:mi>x</m:mi><m:mi>S</m:mi></m:msub><m:mo>+</m:mo><m:mi>N</m:mi><m:msub><m:mi>x</m:mi><m:mi>N</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>,</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

where <m:math><m:msub><m:mi>x</m:mi><m:mi>N</m:mi></m:msub></m:math>&#160;consists of the nonbasic elements of <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;and the <span class="italic">basis matrix</span> <m:math><m:mi>B</m:mi></m:math>&#160;is square and nonsingular.  The elements of <m:math><m:msub><m:mi>x</m:mi><m:mi>B</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>x</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;are called the <span class="italic">basic</span> and <span class="italic">superbasic</span> variables respectively; with <m:math><m:msub><m:mi>x</m:mi><m:mi>N</m:mi></m:msub></m:math>&#160;they are a permutation of the elements of <m:math><m:mi>x</m:mi></m:math>&#160;and <m:math><m:mi>s</m:mi></m:math>.  At a QP solution, the basic and superbasic variables will lie somewhere between their upper or lower bounds, while the nonbasic variables will be equal to one of their bounds.  At each iteration, <m:math><m:msub><m:mi>x</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is regarded as a set of independent variables that are free to move in any desired direction, namely one that will improve the value of the objective function (or sum of infeasibilities).  The basic variables are then adjusted in order to ensure that <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;continues to satisfy <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  The number of superbasic variables (<m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;say) therefore indicates the number of degrees of freedom remaining after the constraints have been satisfied.  In broad terms, <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is a measure of <span class="italic">how nonlinear</span> the problem is.  In particular, <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;will always be zero for FP and LP problems.</div><div class="paramtext">If it appears that no improvement can be made with the current definition of <m:math><m:mi>B</m:mi></m:math>, <m:math><m:mi>S</m:mi></m:math>&#160;and <m:math><m:mi>N</m:mi></m:math>, a nonbasic variable is selected to be added to <m:math><m:mi>S</m:mi></m:math>, and the process is repeated with the value of <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;increased by one.  At all stages, if a basic or superbasic variable encounters one of its bounds, the variable is made nonbasic and the value of <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is decreased by one.</div><div class="paramtext">Associated with each of the <m:math><m:mi>m</m:mi></m:math>&#160;equality constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;is a <span class="italic">dual variable</span> <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>.  Similarly, each variable in <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;has an associated <span class="italic">reduced gradient</span> <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;(also known as a <span class="italic">reduced cost</span>).  The reduced gradients for the variables <m:math><m:mi>x</m:mi></m:math>&#160;are the quantities <m:math><m:mi>g</m:mi><m:mo>-</m:mo><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>&#960;</m:mi></m:math>, where <m:math><m:mi>g</m:mi></m:math>&#160;is the gradient of the QP objective function; and the reduced gradients for the slack variables <m:math><m:mi>s</m:mi></m:math>&#160;are the dual variables <m:math><m:mi>&#960;</m:mi></m:math>.  The QP subproblem is optimal if <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>&#160;for all nonbasic variables at their lower bounds, <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>&#160;for all nonbasic variables at their upper bounds and <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;for all superbasic variables.  In practice, an <span class="italic">approximate</span> QP solution is found by slightly relaxing these conditions on <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;(see the description of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_optimalitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Optimality Tolerance</m:mi></m:maction></m:math>).</div><div class="paramtext">The process of computing and comparing reduced gradients is known as <span class="italic">pricing</span> (a term first introduced in the context of the simplex method for linear programming).  To &#8216;price&#8217; a nonbasic variable <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;means that the reduced gradient <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;associated with the relevant active upper or lower bound on <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is computed via the formula <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>g</m:mi><m:mi>j</m:mi></m:msub><m:mo>-</m:mo><m:msup><m:mi>a</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>&#960;</m:mi></m:math>, where <m:math><m:msub><m:mi>a</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is the <m:math><m:mi>j</m:mi></m:math>th column of <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
</m:math>.  (The variable selected by such a process and the corresponding value of <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;(i.e., its reduced gradient) are the quantities <span class="mono">+S</span> and <span class="mono">dj</span> in the monitoring file output; see <a class="sec" href="#monitoring">Section 12</a>.)  If <m:math><m:mi>A</m:mi></m:math>&#160;has significantly more columns than rows (i.e., <m:math><m:mi>n</m:mi><m:mo>&#8811;</m:mo><m:mi>m</m:mi></m:math>), pricing can be computationally expensive.  In this case, a strategy known as <span class="italic">partial pricing</span> can be used to compute and compare only a subset of the <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>'s.</div><div class="paramtext">E04NKF/E04NKA is based on SQOPT, which is part of the SNOPT package described in <a class="ref" href="#ref658">Gill <span class="italic">et al.</span> (2002)</a>, which in turn utilizes routines from the MINOS package (see <a class="ref" href="#ref663">Murtagh and Saunders (1995)</a>).  It uses stable numerical methods throughout and includes a reliable basis package (for maintaining sparse <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factors of the basis matrix <m:math><m:mi>B</m:mi></m:math>), a practical anti-degeneracy procedure, efficient handling of linear constraints and bounds on the variables (by an active-set strategy), as well as automatic scaling of the constraints.  Further details can be found 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="ref662" id="ref662"/>Fourer R (1982)  Solving staircase linear programs by the simplex method <i>Math. Programming</i> <b>23</b> 274&#8211;313 </div>
<div class="paramtext"><a name="ref489" id="ref489"/>Gill P E and Murray W (1978)  Numerically stable methods for quadratic programming <i>Math. Programming</i> <b>14</b> 349&#8211;372 </div>
<div class="paramtext"><a name="ref658" id="ref658"/>Gill P E, Murray W and Saunders M A (2002)  <i>SNOPT: An SQP Algorithm for Large-scale Constrained Optimization</i> <b>12</b> 979&#8211;1006 SIAM J. Optim. </div>
<div class="paramtext"><a name="ref677" id="ref677"/>Gill P E, Murray W, Saunders M A and Wright M H (1987)  Maintaining <span class="italic">LU</span> factors of a general sparse matrix <i>Linear Algebra and its Applics.</i> <b>88/89</b> 239&#8211;270 </div>
<div class="paramtext"><a name="ref490" id="ref490"/>Gill P E, Murray W, Saunders M A and Wright M H (1989)  A practical anti-cycling procedure for linearly constrained optimization <i>Math. Programming</i> <b>45</b> 437&#8211;474 </div>
<div class="paramtext"><a name="ref491" id="ref491"/>Gill P E, Murray W, Saunders M A and Wright M H (1991)  Inertia-controlling methods for general quadratic programming <i>SIAM Rev.</i> <b>33</b> 1&#8211;36 </div>
<div class="paramtext"><a name="ref678" id="ref678"/>Hall J A J and McKinnon K I M (1996)  The Simplest Examples where the Simplex Method Cycles and Conditions where EXPAND Fails to Prevent Cycling <i>Report MS</i> 96&#8211;100 Department of Mathematics and Statistics, University of Edinburgh </div>
<div class="paramtext"><a name="ref663" id="ref663"/>Murtagh B A and Saunders M A (1995)  MINOS 5.4 Users' Guide <i>Report SOL 83-20R</i> Department of Operations Research, Stanford University </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 (excluding slacks).  This is the number of columns in the linear constraint matrix <m:math><m:mi>A</m:mi></m:math>.</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>&#8805;</m:mo><m:mn>1</m:mn></m:math>.
</div></dd><dt class="paramhead"><a name="M" id="M"/>2: &#160;&#160;&#8194; M &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:mi>m</m:mi></m:math>, the number of general linear constraints (or slacks).  This is the number of rows in <m:math><m:mi>A</m:mi></m:math>, including the free row (if any; see <a class="arg" href="#IOBJ">IOBJ</a>).</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>.
</div></dd><dt class="paramhead"><a name="NNZ" id="NNZ"/>3: &#160;&#160;&#8194; NNZ &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: 

the number of nonzero elements in <m:math><m:mi>A</m:mi></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNZ"><m:mi mathcolor="#EE0000" mathvariant="bold">NNZ</m:mi></m:maction><m:mo>&#8804;</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>&#215;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>.
</div></dd><dt class="paramhead"><a name="IOBJ" id="IOBJ"/>4: &#160;&#160;&#8194; IOBJ &#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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, row <a class="arg" href="#IOBJ">IOBJ</a> of <m:math><m:mi>A</m:mi></m:math>&#160;is a free row containing the nonzero elements of the vector <m:math><m:mi>c</m:mi></m:math>&#160;appearing in the linear objective term <m:math><m:msup><m:mi>c</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>x</m:mi></m:math>.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, there is no free row, i.e., the problem is either an FP problem (in which case <a class="arg" href="#IOBJ">IOBJ</a> must be set to zero), or a QP problem with <m:math><m:mi>c</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.</div>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>.
</div></dd><dt class="paramhead"><a name="NCOLH" id="NCOLH"/>5: &#160;&#160;&#8194; NCOLH &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:msub><m:mi>n</m:mi><m:mi>H</m:mi></m:msub></m:math>, the number of leading nonzero columns of the Hessian matrix <m:math><m:mi>H</m:mi></m:math>.  For FP and LP problems, <a class="arg" href="#NCOLH">NCOLH</a> must be set to zero.
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NCOLH"><m:mi mathcolor="#EE0000" mathvariant="bold">NCOLH</m:mi></m:maction><m:mo>&#8804;</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="QPHX" id="QPHX"/>6: &#160;&#160;&#8194; QPHX &#8211; SUBROUTINE, supplied by the NAG Library or the user.<span class="pclass">External Procedure</span></dt><dd><div class="paramtext">For QP problems, you must supply a version of <a class="arg" href="#QPHX">QPHX</a> to compute the matrix product <m:math><m:mi>H</m:mi><m:mi>x</m:mi></m:math>.  If <m:math><m:mi>H</m:mi></m:math>&#160;has zero rows and columns, it is most efficient to order the variables <m:math>
 <m:mi>x</m:mi><m:mo>=</m:mo>
 <m:msup><m:mfenced><m:mtable>
   <m:mtr><m:mtd><m:mi>y</m:mi></m:mtd><m:mtd><m:mi>z</m:mi></m:mtd></m:mtr>
  </m:mtable></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math>&#160;so that 
<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block"> 
 <m:mi>H</m:mi><m:mi>x</m:mi><m:mo>=</m:mo>
 <m:mfenced><m:mtable> 
  <m:mtr><m:mtd><m:msub><m:mi>H</m:mi><m:mn>1</m:mn></m:msub></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd></m:mtr>
  <m:mtr><m:mtd><m:mn>0</m:mn></m:mtd><m:mtd><m:mn>0</m:mn></m:mtd></m:mtr>
 </m:mtable></m:mfenced>
 <m:mfenced><m:mtable> 
  <m:mtr><m:mtd><m:mi>y</m:mi></m:mtd></m:mtr>
  <m:mtr><m:mtd><m:mi>z</m:mi></m:mtd></m:mtr> 
 </m:mtable></m:mfenced>
 <m:mo>=</m:mo>
 <m:mfenced><m:mtable> 
  <m:mtr><m:mtd><m:msub><m:mi>H</m:mi><m:mn>1</m:mn></m:msub><m:mi>y</m:mi></m:mtd></m:mtr>
  <m:mtr><m:mtd><m:mn>0</m:mn></m:mtd></m:mtr> 
 </m:mtable></m:mfenced>
 <m:mtext>,</m:mtext> 
</m:math></td><td class="formula2"/></tr></table></div>
 where the nonlinear variables <m:math><m:mi>y</m:mi></m:math>&#160;appear first as shown.  For FP and LP problems, <a class="arg" href="#QPHX">QPHX</a> will never be called by E04NKF/E04NKA and hence <a class="arg" href="#QPHX">QPHX</a> may be the dummy routine E04NKU/E54NKU.</div><div class="subprog">
<div class="paramtext">The specification of 
   <a class="arg" href="#QPHX">QPHX</a>
   for E04NKF is:</div><table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;QPHX&#160;(</td><td class="tdfspec2"><a class="arg" href="../E04/e04nkf.xml#QPHX_NSTATE">NSTATE</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_NCOLH">NCOLH</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_X">X</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_HX">HX</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">NSTATE, NCOLH</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">X(NCOLH), HX(NCOLH)</td></tr></table>
<div class="paramtext">The specification of 
   <a class="arg" href="#QPHX">QPHX</a>
   for E04NKA is:</div><table class="fspec"><tr><td class="tdfspec1">SUBROUTINE&#160;QPHX&#160;(</td><td class="tdfspec2"><a class="arg" href="../E04/e04nkf.xml#QPHX_NSTATE">NSTATE</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_NCOLH">NCOLH</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_X">X</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_HX">HX</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_IUSER">IUSER</a>, <a class="arg" href="../E04/e04nkf.xml#QPHX_RUSER">RUSER</a>)</td></tr><tr><td class="tdfspec1">INTEGER</td><td class="tdfspec2">NSTATE, NCOLH, IUSER(*)</td></tr><tr><td class="tdfspec1"><b><i>double&#160;precision</i></b></td><td class="tdfspec2">X(NCOLH), HX(NCOLH), RUSER(*)</td></tr></table>
<dl><dt class="paramhead"><a name="QPHX_NSTATE" id="QPHX_NSTATE"/>1: &#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="#QPHX_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, E04NKF/E04NKA is calling <a class="arg" href="#QPHX">QPHX</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 class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#QPHX_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>2</m:mn></m:math>, E04NKF/E04NKA is calling <a class="arg" href="#QPHX">QPHX</a> for the last time.  This parameter setting allows you to perform some additional computation on the final solution.  In general, the last call to <a class="arg" href="#QPHX">QPHX</a> is made with <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#QPHX_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>2</m:mn><m:mo>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#IFAIL"><m:mi mathcolor="#EE0000" mathvariant="bold">IFAIL</m:mi></m:maction></m:math>&#160;(see <a class="sec" href="#errors">Section 6</a>).</div>
<div class="paramtext">Otherwise, <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#QPHX_NSTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">NSTATE</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.</div>
</div></dd><dt class="paramhead"><a name="QPHX_NCOLH" id="QPHX_NCOLH"/>2: &#160;&#160;&#8194; NCOLH &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: this is the same parameter 
<a class="arg" href="../E04/e04nkf.xml#QPHX_NCOLH">NCOLH</a> 
as supplied to E04NKF/E04NKA.</div></dd><dt class="paramhead"><a name="QPHX_X" id="QPHX_X"/>3: &#160;&#160;&#8194; X(<a class="arg" href="../E04/e04nkf.xml#QPHX_NCOLH">NCOLH</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: the first <a class="arg" href="../E04/e04nkf.xml#QPHX_NCOLH">NCOLH</a> elements of the vector <m:math><m:mi>x</m:mi></m:math>.</div></dd><dt class="paramhead"><a name="QPHX_HX" id="QPHX_HX"/>4: &#160;&#160;&#8194; HX(<a class="arg" href="../E04/e04nkf.xml#QPHX_NCOLH">NCOLH</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the product <m:math><m:mi>H</m:mi><m:mi>x</m:mi></m:math>.</div></dd><dd class="note"><b>Note:</b> <span class="italic"> the following are additional parameters for specific use with E04NKA.  Users of E04NKF therefore need not read the remainder of this description</span>.</dd><dt class="paramhead"><a name="QPHX_IUSER" id="QPHX_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="QPHX_RUSER" id="QPHX_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="#QPHX">QPHX</a> is called from E04NKA with the parameters <a class="arg" href="../E04/e04nkf.xml#QPHX_IUSER">IUSER</a> and <a class="arg" href="../E04/e04nkf.xml#QPHX_RUSER">RUSER</a> as supplied to E04NKA.  You are free to use the arrays <a class="arg" href="../E04/e04nkf.xml#QPHX_IUSER">IUSER</a> and <a class="arg" href="../E04/e04nkf.xml#QPHX_RUSER">RUSER</a> to supply information to <a class="arg" href="#QPHX">QPHX</a>.</div></dd></dl>
</div>
<div class="paramtext"><a class="arg" href="#QPHX">QPHX</a> must be declared as EXTERNAL in the (sub)program from which E04NKF/E04NKA 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="A" id="A"/>7: &#160;&#160;&#8194; A(<a class="arg" href="#NNZ">NNZ</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: the nonzero elements of <m:math><m:mi>A</m:mi></m:math>, ordered by increasing column index.  Note that elements with the same row and column indices are not allowed.</div></dd><dt class="paramhead"><a name="HA" id="HA"/>8: &#160;&#160;&#8194; HA(<a class="arg" href="#NNZ">NNZ</a>) &#8211; INTEGER array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#HA"><m:mi mathcolor="#EE0000" mathvariant="bold">HA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></m:mfenced></m:mrow></m:math>&#160;must contain the row index of the nonzero element stored in <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#A"><m:mi mathcolor="#EE0000" mathvariant="bold">A</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>i</m:mi></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="#NNZ"><m:mi mathcolor="#EE0000" mathvariant="bold">NNZ</m:mi></m:maction></m:math>.  Note that the row indices for a column may be supplied in any order.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#HA"><m:mi mathcolor="#EE0000" mathvariant="bold">HA</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="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</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="#NNZ"><m:mi mathcolor="#EE0000" mathvariant="bold">NNZ</m:mi></m:maction></m:math>.</div></dd><dt class="paramhead"><a name="KA" id="KA"/>9: &#160;&#160;&#8194; KA(<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>+</m:mo><m:mn>1</m:mn></m:math>) &#8211; INTEGER array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;must contain the index in <a class="arg" href="#A">A</a> of the start of the <m:math><m:mi>j</m:mi></m:math>th column, 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:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>.  To specify the <m:math><m:mi>j</m:mi></m:math>th column as empty, set <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>j</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow></m:math>.  Note that the first and last elements of <a class="arg" href="#KA">KA</a> must be such that <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>1</m:mn></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><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>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNZ"><m:mi mathcolor="#EE0000" mathvariant="bold">NNZ</m:mi></m:maction><m:mo>+</m:mo><m:mn>1</m:mn></m:math>.</div><div class="paramtext"><i>Constraints</i>:
   <div class="paramtext"/><ul class="listcons">
<li class="listcons"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>1</m:mn></m:math>;</li>
<li class="listcons"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>,  for <m:math><m:mi mathvariant="italic">j</m:mi><m:mo>=</m:mo><m:mn>2</m:mn><m:mo>,</m:mo><m:mn>3</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="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><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>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNZ"><m:mi mathcolor="#EE0000" mathvariant="bold">NNZ</m:mi></m:maction><m:mo>+</m:mo><m:mn>1</m:mn></m:math>;</li>
<li class="listcons"><m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi mathvariant="italic">j</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:mfenced></m:mrow><m:mo>-</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#KA"><m:mi mathcolor="#EE0000" mathvariant="bold">KA</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>,  for <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: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="BL" id="BL"/>10: &#8194; BL(<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>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>) &#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>l</m:mi></m:math>, the lower bounds for all the variables and general constraints, in the following order.  The first <a class="arg" href="#N">N</a> elements of <a class="arg" href="#BL">BL</a> must contain the bounds on the variables <m:math><m:mi>x</m:mi></m:math>, and the next <a class="arg" href="#M">M</a> elements the bounds for the general linear constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>&#160;(or slacks <m:math><m:mi>s</m:mi></m:math>) and the free row (if any).  To specify a nonexistent lower bound (i.e., <m:math><m:msub><m:mi>l</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>), 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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mo>-</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>, where <m:math><m:mi mathvariant="italic">bigbnd</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>.  To specify the <m:math><m:mi>j</m:mi></m:math>th constraint as an <span class="italic">equality</span>, 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>j</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>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>&#946;</m:mi></m:math>, say, where <m:math><m:mfenced open="|" close="|" separators=""><m:mi>&#946;</m:mi></m:mfenced><m:mo>&lt;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.  Note that the lower bound corresponding to the free row must be set to <m:math><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>&#160;and stored in <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:mrow><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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>.</div><div class="paramtext"><i>Constraint</i>:
  
if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction><m:mo>&gt;</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:mrow><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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction></m:mrow></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mo>-</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math><div class="paramtext">(See also the description for <a class="arg" href="#BU">BU</a>.)</div></div></dd><dt class="paramhead"><a name="BU" id="BU"/>11: &#8194; BU(<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>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>) &#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>u</m:mi></m:math>, the upper bounds for all the variables and general constraints, in the following order.  The first <a class="arg" href="#N">N</a> elements of <a class="arg" href="#BU">BU</a> must contain the bounds on the variables <m:math><m:mi>x</m:mi></m:math>, and the next <a class="arg" href="#M">M</a> elements the bounds for the general linear constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi></m:math>&#160;(or slacks <m:math><m:mi>s</m:mi></m:math>) and the free row (if any).  To specify a nonexistent upper bound (i.e., <m:math><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>), set <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.  Note that the upper bound corresponding to the free row must be set to <m:math><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>&#160;and stored in <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:mrow><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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>.</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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <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:mrow><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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction></m:mrow></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></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">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">j</m:mi></m:mfenced></m:mrow></m:math>,  for <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="#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="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:mrow></m:math>;</li>
<li class="listcons">if <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>j</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>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mi>&#946;</m:mi></m:math>, <m:math><m:mfenced open="|" close="|" separators=""><m:mi>&#946;</m:mi></m:mfenced><m:mo>&lt;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.</li>
</ul></div></dd><dt class="paramhead"><a name="START" id="START"/>12: &#8194; START &#8211; CHARACTER*1<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: indicates how a starting basis is to be obtained.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math></dt>
<dd>An internal Crash procedure will be used to choose an initial basis matrix <m:math><m:mi>B</m:mi></m:math>.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math></dt>
<dd>A basis is already defined in <a class="arg" href="#ISTATE">ISTATE</a> (probably from a previous call).</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>&#160;or <m:math><m:mtext>'W'</m:mtext></m:math>.
</div></dd><dt class="paramhead"><a name="NAMES" id="NAMES"/>13: &#8194; NAMES(<m:math><m:mn>5</m:mn></m:math>) &#8211; CHARACTER*8 array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: a set of names associated with the so-called MPSX form of the problem, as follows: 

<dl>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NAMES"><m:mi mathcolor="#EE0000" mathvariant="bold">NAMES</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>1</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd>Must contain the name for the problem (or be blank).</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NAMES"><m:mi mathcolor="#EE0000" mathvariant="bold">NAMES</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>2</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd>Must contain the name for the free row (or be blank).</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NAMES"><m:mi mathcolor="#EE0000" mathvariant="bold">NAMES</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>3</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd>Must contain the name for the constraint right-hand side (or be blank).</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NAMES"><m:mi mathcolor="#EE0000" mathvariant="bold">NAMES</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>4</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd>Must contain the name for the ranges (or be blank).</dd>
<dt class="paramval"><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#NAMES"><m:mi mathcolor="#EE0000" mathvariant="bold">NAMES</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mn>5</m:mn></m:mfenced></m:mrow></m:math></dt>
<dd>Must contain the name for the bounds (or be blank).</dd></dl>
<div class="paramtext">(These names are used in the monitoring file output; see <a class="sec" href="#monitoring">Section 12</a>.)</div>
</div></dd><dt class="paramhead"><a name="NNAME" id="NNAME"/>14: &#8194; NNAME &#8211; INTEGER<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: 

the number of column (i.e., variable) and row names supplied in <a class="arg" href="#CRNAME">CRNAME</a>.

<dl>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math></dt>
<dd>There are no names. Default names will be used in the printed output.</dd>
<dt class="paramval"><m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><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="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math></dt>
<dd>All names must be supplied.</dd></dl>
</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>&#160;or <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>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>.
</div></dd><dt class="paramhead"><a name="CRNAME" id="CRNAME"/>15: &#8194; CRNAME(<a class="arg" href="#NNAME">NNAME</a>) &#8211; CHARACTER*8 array<span class="pclass">Input</span></dt><dd><div class="paramtext"><i>On entry</i>: the optional column and row names, respectively.
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, <a class="arg" href="#CRNAME">CRNAME</a> is not referenced and the printed output will use default names for the columns and rows.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><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="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>, the first <a class="arg" href="#N">N</a> elements must contain the names for the columns and the next <a class="arg" href="#M">M</a> elements must contain the names for the rows.  Note that the name for the free row (if any) must be stored in <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">CRNAME</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><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="#IOBJ"><m:mi mathcolor="#EE0000" mathvariant="bold">IOBJ</m:mi></m:maction></m:mrow></m:mfenced></m:mrow></m:math>.</div>
</div></dd><dt class="paramhead"><a name="NS" id="NS"/>16: &#8194; NS &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><i>On entry</i>: <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>, the number of superbasics.  For QP problems, <a class="arg" href="#NS">NS</a> need not be specified if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>, but must retain its value from a previous call when <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math>.  For FP and LP problems, <a class="arg" href="#NS">NS</a> need not be initialized.</div>
<div class="paramtext"><i>On exit</i>: the final number of superbasics.  This will be zero for FP and LP problems.</div></dd><dt class="paramhead"><a name="XS" id="XS"/>17: &#8194; XS(<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>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><i>On entry</i>: the initial values of the variables and slacks <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  (See the description for <a class="arg" href="#ISTATE">ISTATE</a>.)</div>
<div class="paramtext"><i>On exit</i>: the final values of the variables and slacks <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.</div></dd><dt class="paramhead"><a name="ISTATE" id="ISTATE"/>18: &#8194; ISTATE(<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>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>) &#8211; INTEGER array<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><i>On entry</i>: if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>, the first <a class="arg" href="#N">N</a> elements of <a class="arg" href="#ISTATE">ISTATE</a> and <a class="arg" href="#XS">XS</a> must specify the initial states and values, respectively, of the variables <m:math><m:mi>x</m:mi></m:math>.  (The slacks <m:math><m:mi>s</m:mi></m:math>&#160;need not be initialized.) An internal Crash procedure is then used to select an initial basis matrix <m:math><m:mi>B</m:mi></m:math>.  The initial basis matrix will be triangular (neglecting certain small elements in each column).  It is chosen from various rows and columns of <m:math><m:mfenced><m:mtable> <m:mtr> <m:mtd><m:mi>A</m:mi></m:mtd> <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd> </m:mtr> </m:mtable></m:mfenced></m:math>.  Possible values for <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;are as follows: 
<div class="left-tablediv"><table class="frame-none"> 
 
 
<tbody>
<tr>
<td class="libdoc" valign="top" align="center"><b><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math></b></td>
<td class="libdoc" valign="top" align="left" style="width:NaNem;"><b>State of <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;during Crash procedure</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mn>1</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left" style="width:NaNem;">Eligible for the basis</td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>2</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left" style="width:NaNem;">Ignored</td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>3</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left" style="width:NaNem;">Eligible for the basis (given preference over <m:math><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mn>1</m:mn></m:math>)</td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>4</m:mn></m:math>&#160;or <m:math><m:mn>5</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left" style="width:NaNem;">Ignored</td>
</tr>
</tbody>
</table></div>
<div class="paramtext">If nothing special is known about the problem, or there is no wish to provide special information, you may set <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>0.0</m:mn></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:maction actiontype="link" dsi:type="simple" dsi:href="#N"><m:mi mathcolor="#EE0000" mathvariant="bold">N</m:mi></m:maction></m:math>.  All variables will then be eligible for the initial basis.  Less trivially, to say that the <m:math><m:mi>j</m:mi></m:math>th variable will probably be equal to one of its bounds, set <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>4</m:mn></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><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>j</m:mi></m:mfenced></m:mrow></m:math>&#160;or <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>5</m:mn></m:math>&#160;and <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</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>j</m:mi></m:mfenced></m:mrow></m:math>&#160;as appropriate.</div>
<div class="paramtext">Following the Crash procedure, variables for which <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>2</m:mn></m:math>&#160;are made superbasic.  Other variables not selected for the basis are then made nonbasic at the value <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;if <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>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>j</m:mi></m:mfenced></m:mrow></m:math>, or at the value <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>j</m:mi></m:mfenced></m:mrow></m:math>&#160;or <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>j</m:mi></m:mfenced></m:mrow></m:math>&#160;closest to <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math>, <a class="arg" href="#ISTATE">ISTATE</a> and <a class="arg" href="#XS">XS</a> must specify the initial states and values, respectively, of the variables and slacks <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  If E04NKF/E04NKA has been called previously with the same values of <a class="arg" href="#N">N</a> and <a class="arg" href="#M">M</a>, <a class="arg" href="#ISTATE">ISTATE</a> already contains satisfactory information.</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="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>, <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mn>5</m:mn></m:math>,  for <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: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">if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math>, <m:math><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi mathvariant="italic">j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mn>3</m:mn></m:math>,  for <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="#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="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:mrow></m:math>.</li>
</ul></div>
<div class="paramtext"><i>On exit</i>: the final states of the variables and slacks <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  The significance of each possible value of <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;is as follows: 
<div class="left-tablediv"><table class="frame-none"> 
 
 
 
<tbody>
<tr>
<td class="libdoc" valign="top" align="center"><b><m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math></b></td>
<td class="libdoc" valign="top" align="left"><b>State of variable <m:math><m:mi>j</m:mi></m:math></b></td>
<td class="libdoc" valign="top" align="left"><b>Normal value of <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math></b></td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>0</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left">Nonbasic</td>
<td class="libdoc" valign="top" align="left"><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>j</m:mi></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>1</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left">Nonbasic</td>
<td class="libdoc" valign="top" align="left"><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>j</m:mi></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>2</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left">Superbasic</td>
<td class="libdoc" valign="top" align="left">Between <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>j</m:mi></m:mfenced></m:mrow></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>j</m:mi></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="center"><m:math><m:mn>3</m:mn></m:math></td>
<td class="libdoc" valign="top" align="left">Basic</td>
<td class="libdoc" valign="top" align="left">Between <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>j</m:mi></m:mfenced></m:mrow></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>j</m:mi></m:mfenced></m:mrow></m:math></td>
</tr>
</tbody>
</table></div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NINF"><m:mi mathcolor="#EE0000" mathvariant="bold">NINF</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, basic and superbasic variables may be outside their bounds by as much as the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>.  Note that unless the <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;is specified, the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>&#160;applies to the variables of the scaled problem.  In this case, the variables of the original problem may be as much as <m:math><m:mn>0.1</m:mn></m:math>&#160;outside their bounds, but this is unlikely unless the problem is very badly scaled.</div>
<div class="paramtext">Very occasionally some nonbasic variables may be outside their bounds by as much as the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>, and there may be some nonbasic variables for which <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#XS"><m:mi mathcolor="#EE0000" mathvariant="bold">XS</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;lies strictly between its bounds.</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NINF"><m:mi mathcolor="#EE0000" mathvariant="bold">NINF</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, some basic and superbasic variables may be outside their bounds by an arbitrary amount (bounded by <a class="arg" href="#SINF">SINF</a> if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>).</div>
</div></dd><dt class="paramhead"><a name="MINIZ" id="MINIZ"/>19: &#8194; MINIZ &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the minimum value of <a class="arg" href="#LENIZ">LENIZ</a> required to start solving the problem.  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="#IFeq12"><m:mn mathcolor="#003399" mathvariant="bold">12</m:mn></m:maction></m:math>, E04NKF/E04NKA may be called again with <a class="arg" href="#LENIZ">LENIZ</a> suitably larger than <a class="arg" href="#MINIZ">MINIZ</a>.  (The bigger the better, since it is not certain how much workspace the basis factors need.)</div></dd><dt class="paramhead"><a name="MINZ" id="MINZ"/>20: &#8194; MINZ &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the minimum value of <a class="arg" href="#LENZ">LENZ</a> required to start solving the problem.  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="#IFeq13"><m:mn mathcolor="#003399" mathvariant="bold">13</m:mn></m:maction></m:math>, E04NKF/E04NKA may be called again with <a class="arg" href="#LENZ">LENZ</a> suitably larger than <a class="arg" href="#MINZ">MINZ</a>.  (The bigger the better, since it is not certain how much workspace the basis factors need.)</div></dd><dt class="paramhead"><a name="NINF" id="NINF"/>21: &#8194; NINF &#8211; INTEGER<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the number of infeasibilities.  This will be zero 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="#IFeq1"><m:mn mathcolor="#003399" mathvariant="bold">1</m:mn></m:maction></m:math>.</div></dd><dt class="paramhead"><a name="SINF" id="SINF"/>22: &#8194; SINF &#8211; <span class="bitalic">double precision</span><span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the sum of infeasibilities.  This will be zero if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NINF"><m:mi mathcolor="#EE0000" mathvariant="bold">NINF</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  (Note that E04NKF/E04NKA does <span class="italic">not</span> attempt to compute the minimum value of <a class="arg" href="#SINF">SINF</a> 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="#IFeq3"><m:mn mathcolor="#003399" mathvariant="bold">3</m:mn></m:maction></m:math>.)</div></dd><dt class="paramhead"><a name="OBJ" id="OBJ"/>23: &#8194; OBJ &#8211; <span class="bitalic">double precision</span><span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: the value of the objective function.  
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NINF"><m:mi mathcolor="#EE0000" mathvariant="bold">NINF</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#OBJ">OBJ</a> includes the quadratic objective term <m:math><m:mfrac><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac><m:msup><m:mi>x</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>x</m:mi></m:math>&#160;(if any).</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NINF"><m:mi mathcolor="#EE0000" mathvariant="bold">NINF</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <a class="arg" href="#OBJ">OBJ</a> is just the linear objective term <m:math><m:msup><m:mi>c</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>x</m:mi></m:math>&#160;(if any).</div>
<div class="paramtext">For FP problems, <a class="arg" href="#OBJ">OBJ</a> is set to zero.</div>
</div></dd><dt class="paramhead"><a name="CLAMDA" id="CLAMDA"/>24: &#8194; CLAMDA(<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>+</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Output</span></dt><dd><div class="paramtext"><i>On exit</i>: a set of Lagrange multipliers for the bounds on the variables and the general constraints.  More precisely, the first <a class="arg" href="#N">N</a> elements contain the multipliers (<span class="italic">reduced costs</span>) for the bounds on the variables, and the next <a class="arg" href="#M">M</a> elements contain the multipliers (<span class="italic">shadow prices</span>) for the general linear constraints.</div></dd><dt class="paramhead"><a name="IZ" id="IZ"/>25: &#8194; IZ(<a class="arg" href="#LENIZ">LENIZ</a>) &#8211; INTEGER array<span class="pclass">Workspace</span></dt><dt class="multi-paramhead"><a name="LENIZ" id="LENIZ"/>26: &#8194; LENIZ &#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="#IZ">IZ</a> as declared in the (sub)program from which E04NKF/E04NKA is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LENIZ"><m:mi mathcolor="#EE0000" mathvariant="bold">LENIZ</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>.
</div></dd><dt class="paramhead"><a name="Z" id="Z"/>27: &#8194; Z(<a class="arg" href="#LENZ">LENZ</a>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Workspace</span></dt><dt class="multi-paramhead"><a name="LENZ" id="LENZ"/>28: &#8194; LENZ &#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="#Z">Z</a> as declared in the (sub)program from which E04NKF/E04NKA is called.</div><div class="paramtext"><i>Constraint</i>:
  <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#LENZ"><m:mi mathcolor="#EE0000" mathvariant="bold">LENZ</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>.
</div>
<div class="paramtext">The amounts of workspace provided (i.e., <a class="arg" href="#LENIZ">LENIZ</a> and <a class="arg" href="#LENZ">LENZ</a>) and required (i.e., <a class="arg" href="#MINIZ">MINIZ</a> and <a class="arg" href="#MINZ">MINZ</a>) are (by default for E04NKF) output on the current advisory message unit <a class="arg" href="../X04/x04abf.xml#NADV">NADV</a> (as defined by <a class="rout" href="../X04/x04abf.xml">X04ABF</a>).  Since the minimum values of <a class="arg" href="#LENIZ">LENIZ</a> and <a class="arg" href="#LENZ">LENZ</a> required to start solving the problem are returned in <a class="arg" href="#MINIZ">MINIZ</a> and <a class="arg" href="#MINZ">MINZ</a>, respectively, you may prefer to obtain appropriate values from the output of a preliminary run with <a class="arg" href="#LENIZ">LENIZ</a> and <a class="arg" href="#LENZ">LENZ</a> set to <m:math><m:mn>1</m:mn></m:math>.  (E04NKF/E04NKA will then terminate 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="#IFeq12"><m:mn mathcolor="#003399" mathvariant="bold">12</m:mn></m:maction></m:math>.)</div></dd><dt class="paramhead"><a name="IFAIL" id="IFAIL"/>29: &#8194; IFAIL &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd>
<div class="paramtext"><b>Note:</b> <span class="italic">for E04NKA, <a class="arg" href="#IFAIL">IFAIL</a> does not occur in this position in the parameter list.  See the additional parameters described below</span>.</div><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, because for this routine the values of the output parameters may be useful even 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>&#8800;</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, the recommended value is <m:math><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></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>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">E04NKF/E04NKA 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 the reduced gradient (<span class="mono">Norm rg</span>; see <a class="sec" href="#fc-printedoutput">Section 8.1</a>) is negligible, the Lagrange multipliers (<span class="mono">Lagr Mult</span>; see <a class="sec" href="#fc-printedoutput">Section 8.1</a>) are optimal and <m:math><m:mi>x</m:mi></m:math>&#160;satisfies the constraints to the accuracy requested by the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup><m:mo>,</m:mo><m:msqrt><m:mi>&#949;</m:mi></m:msqrt></m:mfenced></m:mrow></m:math>, where <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>).</div>
</dd><dd class="note"><b>Note:</b> <span class="italic"> the following are additional parameters for specific use with E04NKA.  Users of E04NKF therefore need not read the remainder of this description</span>.</dd><dt class="paramhead"><a name="IUSER" id="IUSER"/>29: &#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 E04NKA, but is passed directly to <a class="arg" href="#QPHX">QPHX</a> and may be used to pass information to that routine.</div></dd><dt class="paramhead"><a name="RUSER" id="RUSER"/>30: &#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 E04NKA, but is passed directly to <a class="arg" href="#QPHX">QPHX</a> and may be used to pass information to that routine.</div></dd><dt class="paramhead"><a name="LWSAV" id="LWSAV"/>31: &#8194; LWSAV(<m:math><m:mn>20</m:mn></m:math>) &#8211; LOGICAL array<span class="pclass">Communication Array</span></dt><dt class="multi-paramhead"><a name="IWSAV" id="IWSAV"/>32: &#8194; IWSAV(<m:math><m:mn>380</m:mn></m:math>) &#8211; INTEGER array<span class="pclass">Communication Array</span></dt><dt class="multi-paramhead"><a name="RWSAV" id="RWSAV"/>33: &#8194; RWSAV(<m:math><m:mn>285</m:mn></m:math>) &#8211; <span class="bitalic">double precision</span> array<span class="pclass">Communication Array</span></dt><dd><div class="paramtext">The arrays <a class="arg" href="#LWSAV">LWSAV</a>, <a class="arg" href="#IWSAV">IWSAV</a> and <a class="arg" href="#RWSAV">RWSAV</a> <b>must not</b> be altered between calls to any of the routines E04NKA, <a class="rout" href="../E04/e04nlf.xml">E04NLA</a>, <a class="rout" href="../E04/e04nmf.xml">E04NMA</a> or <a class="rout" href="../E04/e04wbf.xml">E04WBF</a>.</div></dd><dt class="paramhead"><a name="IFAIL2" id="IFAIL2"/>34: &#8194; IFAIL &#8211; INTEGER<span class="pclass">Input/Output</span></dt><dd><div class="paramtext"><b>Note:</b> see the parameter description for <a class="arg" href="#IFAIL">IFAIL</a> above.</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"><b>Note:</b> E04NKF/E04NKA may return useful information for one or more of the following detected errors or warnings.</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">Weak solution found.  The final <m:math><m:mi>x</m:mi></m:math>&#160;is not unique, although <m:math><m:mi>x</m:mi></m:math>&#160;gives the global minimum value of the objective function.</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">The problem is unbounded (or badly scaled).  The objective function is not bounded below in the feasible region.</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 problem is infeasible.  The general constraints cannot all be satisfied simultaneously to within the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup><m:mo>,</m:mo><m:msqrt><m:mi>&#949;</m:mi></m:msqrt></m:mfenced></m:mrow></m:math>, where <m:math><m:mi>&#949;</m:mi></m:math>&#160;is the <span class="bitalic">machine precision</span>).</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">Too many iterations.  The value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_iterationlimit"><m:mi mathcolor="#800080;" mathvariant="bold">Iteration Limit</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>50</m:mn><m:mo>,</m:mo><m:mrow><m:mn>5</m:mn><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>m</m:mi></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math>) is too small.</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 reduced Hessian matrix <m:math><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>Z</m:mi></m:math>&#160;(see <a class="sec" href="#algdetails2">Section 10.2</a>) exceeds its assigned dimension.  The value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_superbasicslimit"><m:mi mathcolor="#800080;" mathvariant="bold">Superbasics Limit</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mrow><m:msub><m:mi>n</m:mi><m:mi>H</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:mrow></m:math>) is too small.</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">The Hessian matrix <m:math><m:mi>H</m:mi></m:math>&#160;appears to be indefinite.  This sometimes occurs because the values of the optional parameters <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_lufactortolerance"><m:mi mathcolor="#800080;" mathvariant="bold">LU Factor Tolerance</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mn>100.0</m:mn></m:math>) and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_luupdatetolerance"><m:mi mathcolor="#800080;" mathvariant="bold">LU Update Tolerance</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mn>10.0</m:mn></m:math>) are too large.  Check also that <a class="arg" href="#QPHX">QPHX</a> has been coded correctly and that all relevant elements of <m:math><m:mi>H</m:mi><m:mi>x</m:mi></m:math>&#160;have been assigned their correct values.</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">
An input parameter is invalid.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq8" id="IFeq8"/><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>8</m:mn></m:math></dt>
<dd>
<div class="paramtext">Numerical error in trying to satisfy the general constraints.  The basis is very ill-conditioned.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq9" id="IFeq9"/><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>9</m:mn></m:math></dt>
<dd>
<div class="paramtext">Not enough integer workspace for the basis factors.  Increase <a class="arg" href="#LENIZ">LENIZ</a> and rerun E04NKF/E04NKA.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq10" id="IFeq10"/><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>10</m:mn></m:math></dt>
<dd>
<div class="paramtext">Not enough real workspace for the basis factors.  Increase <a class="arg" href="#LENZ">LENZ</a> and rerun E04NKF/E04NKA.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq11" id="IFeq11"/><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>11</m:mn></m:math></dt>
<dd>
<div class="paramtext">The basis is singular after <m:math><m:mn>15</m:mn></m:math>&#160;attempts to factorize it (adding slacks where necessary).  Either the problem is badly scaled or the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_lufactortolerance"><m:mi mathcolor="#800080;" mathvariant="bold">LU Factor Tolerance</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mn>100.0</m:mn></m:math>) is too large.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq12" id="IFeq12"/><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>12</m:mn></m:math></dt>
<dd>
<div class="paramtext">Not enough integer workspace to start solving the problem.  Increase <a class="arg" href="#LENIZ">LENIZ</a> to at least <a class="arg" href="#MINIZ">MINIZ</a> and rerun E04NKF/E04NKA.</div>
</dd>
</dl><dl class="ifail">
<dt class="errorhead"><a name="IFeq13" id="IFeq13"/><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>13</m:mn></m:math></dt>
<dd>
<div class="paramtext">Not enough real workspace to start solving the problem.  Increase <a class="arg" href="#LENZ">LENZ</a> to at least <a class="arg" href="#MINZ">MINZ</a> and rerun E04NKF/E04NKA.</div>
</dd>
</dl><h2 class="standard"><a class="sec" name="accuracy" id="accuracy"/>7&#160;&#160;Accuracy</h2>
<div class="paramtext">E04NKF/E04NKA implements a numerically stable active-set strategy and returns solutions that are as accurate as the condition of the problem warrants on the machine.</div><h2 class="standard"><a class="sec" name="fcomments" id="fcomments"/>8&#160;&#160;Further Comments</h2>
<div class="paramtext">This section contains a description of the printed output.</div><h3 class="standard"><a class="sec" name="fc-printedoutput" id="fc-printedoutput"/>8.1&#160;&#160;Description of the Printed Output</h3>
<div class="paramtext">This section describes the intermediate printout and final printout produced by E04NKF/E04NKA.  The intermediate printout is a subset of the monitoring information produced by the routine at every iteration (see <a class="sec" href="#monitoring">Section 12</a>).  You can control the level of printed output (see the description of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction></m:math>).  Note that the intermediate printout and final printout are produced only if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>10</m:mn></m:math>&#160;(the default for E04NKF, by default no output is produced by E04NKA).</div><div class="paramtext">The following line of summary output (<m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>80</m:mn></m:math>&#160;characters) is produced at every iteration.  In all cases, the values of the quantities printed are those in effect <span class="italic">on</span>
<span class="italic">completion</span> of the given iteration.
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Itn</span></td>
<td valign="top">
is the iteration count.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Step</span></td>
<td valign="top">
is the step taken along the computed search direction.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Ninf</span></td>
<td valign="top">
is the number of violated constraints (infeasibilities).  This will be zero during the optimality phase.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Sinf</span>/<span class="mono">Objective</span></td>
<td valign="top">
is the value of the current objective function.  If <m:math><m:mi>x</m:mi></m:math>&#160;is not feasible, <span class="mono">Sinf</span> gives the sum of the magnitudes of constraint violations.  If <m:math><m:mi>x</m:mi></m:math>&#160;is feasible, <span class="mono">Objective</span> is the value of the objective function.  The output line for the final iteration of the feasibility phase (i.e., the first iteration for which <span class="mono">Ninf</span> is zero) will give the value of the true objective at the first feasible point.<div class="paramtext">During the optimality phase, the value of the objective function will be nonincreasing.  During the feasibility phase, the number of constraint infeasibilities will not increase until either a feasible point is found, or the optimality of the multipliers implies that no feasible point exists.</div>
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Norm rg</span></td>
<td valign="top">
is <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>d</m:mi><m:mi>S</m:mi></m:msub></m:mfenced></m:math>, the Euclidean norm of the reduced gradient (see <a class="sec" href="#ad-mainiteration">Section 10.3</a>).  During the optimality phase, this norm will be approximately zero after a unit step.  For FP and LP problems, <span class="mono">Norm rg</span> is not printed.
</td>
</tr></table>
</div><div class="paramtext">The final printout includes a listing of the status of every variable and constraint.</div><div class="paramtext">The following describes the printout for each variable.  A full stop (.)  is printed for any numerical value that is zero.
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Variable</span></td>
<td valign="top">
gives the name of the variable.  If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, a default name is assigned to the <m:math><m:mi>j</m:mi></m:math>th variable 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:mi>n</m:mi></m:math>.  If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#NNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">NNAME</m:mi></m:maction><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="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:math>, the name supplied in <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">CRNAME</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;is assigned to the <m:math><m:mi>j</m:mi></m:math>th variable.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">State</span></td>
<td valign="top">
gives the state of the variable (<span class="mono">LL</span> if nonbasic on its lower bound, <span class="mono">UL</span> if nonbasic on its upper bound, <span class="mono">EQ</span> if nonbasic and fixed, <span class="mono">FR</span> if nonbasic and strictly between its bounds, <span class="mono">BS</span> if basic and <span class="mono">SBS</span> if superbasic).

 <div class="paramtext">
A key is sometimes printed before <span class="mono">State</span>.
 Note that unless the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mn>2</m:mn></m:math>) is specified, the tests for assigning a key are applied to the variables of the scaled problem.
 <table class="standard-100"><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">A</span></td>
<td valign="top">
<span class="italic">Alternative optimum possible</span>.  The variable is nonbasic, but its reduced gradient is essentially zero.  This means that if the variable were allowed to start moving away from its bound, there would be no change in the value of the objective function.  The values of the other free variables <span class="italic">might</span> change, giving a genuine alternative solution.  However, if there are any degenerate variables (labelled <span class="mono">D</span>), the actual change might prove to be zero, since one of them could encounter a bound immediately.  In either case, the values of the Lagrange multipliers <span class="italic">might</span> also change.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">D</span></td>
<td valign="top">
<span class="italic">Degenerate</span>.  The variable is basic or superbasic, but it is equal (or very close) to one of its bounds.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">I</span></td>
<td valign="top">
<span class="italic">Infeasible</span>.  The variable is basic or superbasic and is currently violating one of its bounds by more than the value of the <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">N</span></td>
<td valign="top">
<span class="italic">Not precisely optimal</span>.  The variable is nonbasic or superbasic.  If the value of the reduced gradient for the variable exceeds the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_optimalitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Optimality Tolerance</m:mi></m:maction></m:math>, the solution would not be declared optimal because the reduced gradient for the variable would not be considered negligible.
</td>
</tr></table>
 </div></td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Value</span></td>
<td valign="top">
is the value of the variable at the final iteration.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Lower Bound</span></td>
<td valign="top">
is the lower bound specified for the variable.  <span class="mono">None</span> indicates that <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mo>-</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Upper Bound</span></td>
<td valign="top">
is the upper bound specified for the variable.  <span class="mono">None</span> indicates that <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Lagr Mult</span></td>
<td valign="top">
is the Lagrange multiplier for the associated bound.  This will be zero if <span class="mono">State</span> is <span class="mono">FR</span>.  If <m:math><m:mi>x</m:mi></m:math>&#160;is optimal, the multiplier should be non-negative if <span class="mono">State</span> is <span class="mono">LL</span>, nonpositive if <span class="mono">State</span> is <span class="mono">UL</span> and zero if <span class="mono">State</span> is <span class="mono">BS</span> or <span class="mono">SBS</span>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Residual</span></td>
<td valign="top">
is the difference between the variable <span class="mono">Value</span> and the nearer of its (finite) bounds <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>j</m:mi></m:mfenced></m:mrow></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>j</m:mi></m:mfenced></m:mrow></m:math>.  A blank entry indicates that the associated variable is not bounded (i.e., <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mo>-</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>).
</td>
</tr></table>
</div><div class="paramtext">The meaning of the printout for linear constraints is the same as that given above for variables, with &#8216;variable&#8217; replaced by &#8216;constraint&#8217;, <m:math><m:mi>n</m:mi></m:math>&#160;replaced by <m:math><m:mi>m</m:mi></m:math>, <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">CRNAME</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow></m:math>&#160;replaced by <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#CRNAME"><m:mi mathcolor="#EE0000" mathvariant="bold">CRNAME</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mrow><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>j</m:mi></m:mrow></m:mfenced></m:mrow></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>j</m:mi></m:mfenced></m:mrow></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>j</m:mi></m:mfenced></m:mrow></m:math>&#160;are replaced by <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:mrow><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>j</m:mi></m:mrow></m:mfenced></m:mrow></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:mrow><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>j</m:mi></m:mrow></m:mfenced></m:mrow></m:math>&#160;respectively, and with the following change in the heading:
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Constrnt</span></td>
<td valign="top">
gives the name of the linear constraint.
</td>
</tr></table>
</div><div class="paramtext">Note that movement off a constraint (as opposed to a variable moving away from its bound) can be interpreted as allowing the entry in the <span class="mono">Residual</span> column to become positive.</div><div class="paramtext">Numerical values are output with a fixed number of digits; they are not guaranteed to be accurate to this precision.</div><h2 class="standard"><a class="sec" name="example" id="example"/>9&#160;&#160;Example</h2>
<div class="paramtext">This example minimizes the quadratic function <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mo>=</m:mo><m:msup><m:mi>c</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>x</m:mi><m:mo>+</m:mo><m:mfrac other="small"><m:mn>1</m:mn><m:mn>2</m:mn></m:mfrac><m:msup><m:mi>x</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>x</m:mi></m:math>, where

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>c</m:mi><m:mo>=</m:mo><m:msup><m:mfenced separators=""><m:mrow><m:mo>-</m:mo><m:mn>200.0</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>2000.0</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>2000.0</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>2000.0</m:mn></m:mrow><m:mo>,</m:mo><m:mrow><m:mo>-</m:mo><m:mn>2000.0</m:mn></m:mrow><m:mo>,</m:mo><m:mn>400.0</m:mn><m:mo>,</m:mo><m:mn>400.0</m:mn></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup>
</m:math></td><td class="formula2"/></tr></table></div><div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mi>H</m:mi><m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
   <m:mtd><m:mn>2</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math></td><td class="formula2"/></tr></table></div>

subject to the bounds

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mtable>
 <m:mtr>
  <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>200</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mn>2500</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mn>400</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>800</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mn>100</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>700</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mn>1500</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub><m:mphantom><m:mo>&#8804;</m:mo><m:mn>1500</m:mn></m:mphantom></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub><m:mphantom><m:mo>&#8804;</m:mo><m:mn>1500</m:mn></m:mphantom></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

and to the linear constraints

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:mtable>
 <m:mtr>
  <m:mtd><m:mphantom><m:mn>1500</m:mn><m:mo>&#8804;</m:mo> <m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo><m:mphantom><m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo><m:mphantom><m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo><m:mphantom><m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo><m:mphantom><m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo><m:mphantom><m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo><m:mphantom><m:mn>0.00</m:mn></m:mphantom><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub><m:mo>=</m:mo> <m:mn>2000</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>1500</m:mn><m:mo>&#8804;</m:mo></m:mphantom><m:mn>0.15</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.04</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.04</m:mn><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mphantom><m:mn>00</m:mn></m:mphantom><m:mn>60</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>1500</m:mn><m:mo>&#8804;</m:mo></m:mphantom><m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.05</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.08</m:mn><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.06</m:mn><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub> <m:mphantom><m:mo>+</m:mo> <m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub> </m:mphantom><m:mo>&#8804;</m:mo><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>100</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>1500</m:mn><m:mo>&#8804;</m:mo></m:mphantom><m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.04</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub> <m:mphantom><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub> </m:mphantom><m:mo>&#8804;</m:mo><m:mphantom><m:mn>00</m:mn></m:mphantom><m:mn>40</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>1500</m:mn><m:mo>&#8804;</m:mo></m:mphantom><m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub> <m:mphantom><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub></m:mphantom><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub> <m:mphantom><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub></m:mphantom><m:mo>&#8804;</m:mo><m:mphantom><m:mn>00</m:mn></m:mphantom><m:mn>30</m:mn></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mn>1500</m:mn><m:mo>&#8804;</m:mo> <m:mn>0.70</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.75</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.80</m:mn><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.75</m:mn><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.80</m:mn><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.97</m:mn><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub> <m:mphantom><m:mo>+</m:mo> <m:mn>0.03</m:mn><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub><m:mo>&#8804;</m:mo> <m:mn>2000</m:mn></m:mphantom></m:mtd>
 </m:mtr><m:mtr>
  <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>250</m:mn><m:mo>&#8804;</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>1</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.06</m:mn><m:msub><m:mi>x</m:mi><m:mn>2</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.08</m:mn><m:msub><m:mi>x</m:mi><m:mn>3</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.12</m:mn><m:msub><m:mi>x</m:mi><m:mn>4</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.02</m:mn><m:msub><m:mi>x</m:mi><m:mn>5</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.01</m:mn><m:msub><m:mi>x</m:mi><m:mn>6</m:mn></m:msub><m:mo>+</m:mo> <m:mn>0.97</m:mn><m:msub><m:mi>x</m:mi><m:mn>7</m:mn></m:msub><m:mo>&#8804;</m:mo><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>300</m:mn></m:mtd>
 </m:mtr>
</m:mtable>
</m:math></td><td class="formula2"/></tr></table></div>

The initial point, which is infeasible, is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msub><m:mi>x</m:mi><m:mn>0</m:mn></m:msub><m:mo>=</m:mo><m:msup><m:mfenced separators=""><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>0.0</m:mn></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

The optimal solution (to five figures) is

<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block">
<m:msup><m:mi>x</m:mi><m:mo>*</m:mo></m:msup><m:mo>=</m:mo><m:msup><m:mfenced separators=""><m:mn>0.0</m:mn><m:mo>,</m:mo><m:mn>349.40</m:mn><m:mo>,</m:mo><m:mn>648.85</m:mn><m:mo>,</m:mo><m:mn>172.85</m:mn><m:mo>,</m:mo><m:mn>407.52</m:mn><m:mo>,</m:mo><m:mn>271.36</m:mn><m:mo>,</m:mo><m:mn>150.02</m:mn></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mtext>.</m:mtext>
</m:math></td><td class="formula2"/></tr></table></div>

One bound constraint and four linear constraints are active at the solution.  Note that the Hessian matrix <m:math><m:mi>H</m:mi></m:math>&#160;is positive semi-definite.</div><h3 class="standard"><a class="sec" name="examtext" id="examtext"/>9.1&#160;&#160;Program Text</h3>
<div class="paramtext"><b>Note:</b> <span class="italic">the following programs illustrate the use of E04NKF and E04NKA</span>.</div><p><a class="verbatimref" href="../../examples/source/e04nkfe.f">Program Text (e04nkfe.f)</a></p><p><a class="verbatimref" href="../../examples/source/e04nkae.f">Program Text (e04nkae.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/e04nkfe.d">Program&#160;Data (e04nkfe.d)</a></p><p><a class="verbatimref" href="../../examples/data/e04nkae.d">Program&#160;Data (e04nkae.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/e04nkfe.r">Program Results (e04nkfe.r)</a></p><p><a class="verbatimref" href="../../examples/baseresults/e04nkae.r">Program Results (e04nkae.r)</a></p>
<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 which may be needed in order to understand <a class="sec" href="#optparams">Sections 11</a> and <a class="sec" href="#monitoring">12</a>.  <a class="sec" href="#optparams">Section 11</a> describes the optional parameters which may be set by calls to <a class="rout" href="../E04/e04nlf.xml">E04NLF/E04NLA</a> and/or <a class="rout" href="../E04/e04nmf.xml">E04NMF/E04NMA</a>.  <a class="sec" href="#monitoring">Section 12</a> describes the quantities which can be requested to monitor the course of the computation</span>.</div><h2 class="standard"><a class="sec" name="algdetails" id="algdetails"/>10&#160;&#160;Algorithmic Details</h2>
<div class="paramtext">This section contains a detailed description of the method used by E04NKF/E04NKA.</div><h3 class="standard"><a class="sec" name="algdetails1" id="algdetails1"/>10.1&#160;&#160;Overview</h3>
<div class="paramtext">E04NKF/E04NKA is based on an inertia-controlling method that maintains a Cholesky factorization of the reduced Hessian (see below).  The method is similar to that of <a class="ref" href="#ref489">Gill and Murray (1978)</a>, and is described in detail by <a class="ref" href="#ref491">Gill <span class="italic">et al.</span> (1991)</a>.  Here we briefly summarize the main features of the method.  Where possible, explicit reference is made to the names of variables that are parameters of the routine or appear in the printed output.</div><div class="paramtext">The method used has two distinct phases: finding an initial feasible point by minimizing the sum of infeasibilities (the <span class="italic">feasibility phase</span>), and minimizing the quadratic objective function within the feasible region (the <span class="italic">optimality phase</span>).  The computations in both phases are performed by the same subroutines.  The two-phase nature of the algorithm is reflected by changing the function being minimized from the sum of infeasibilities (the printed quantity <span class="mono">Sinf</span>; see <a class="sec" href="#monitoring">Section 12</a>) to the quadratic objective function (the printed quantity <span class="mono">Objective</span>; see <a class="sec" href="#monitoring">Section 12</a>).</div><div class="paramtext">In general, an iterative process is required to solve a quadratic program.  Given an iterate <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;in both the original variables <m:math><m:mi>x</m:mi></m:math>&#160;and the slack variables <m:math><m:mi>s</m:mi></m:math>, a new iterate <m:math><m:mfenced separators=""><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mo>,</m:mo><m:mover><m:mi>s</m:mi><m:mo>-</m:mo></m:mover></m:mfenced></m:math>&#160;is defined by

<div class="formula-eqn"><a name="eqn2" id="eqn2"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mover><m:mi>s</m:mi><m:mo>-</m:mo></m:mover></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>x</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>s</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
 <m:mo>+</m:mo><m:mi>&#945;</m:mi><m:mi>p</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (2)
     </td></tr></table></div>

where the <span class="italic">step length</span>
<m:math><m:mi>&#945;</m:mi></m:math>&#160;is a non-negative scalar (the printed quantity <span class="mono">Step</span>; see <a class="sec" href="#monitoring">Section 12</a>), and <m:math><m:mi>p</m:mi></m:math>&#160;is called the <span class="italic">search direction</span>.  (For simplicity, we shall consider a typical iteration and avoid reference to the index of the iteration.)  Once an iterate is feasible (i.e., satisfies the constraints), all subsequent iterates remain feasible.</div><h3 class="standard"><a class="sec" name="algdetails2" id="algdetails2"/>10.2&#160;&#160;Definition of the Working Set and Search Direction</h3>
<div class="paramtext">At each iterate <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>, a <span class="italic">working set</span> of constraints is defined to be a linearly independent subset of the constraints that are satisfied &#8216;exactly&#8217; (to within the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>).  The working set is the current prediction of the constraints that hold with equality at a solution of the LP or QP problem.  Let <m:math><m:msub><m:mi>m</m:mi><m:mi>W</m:mi></m:msub></m:math>&#160;denote the number of constraints in the working set (including bounds), and let <m:math><m:mi>W</m:mi></m:math>&#160;denote the associated <m:math><m:msub><m:mi>m</m:mi><m:mi>W</m:mi></m:msub></m:math>&#160;by <m:math><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>m</m:mi></m:mfenced></m:math>&#160;<span class="italic">working set matrix</span> consisting of the <m:math><m:msub><m:mi>m</m:mi><m:mi>W</m:mi></m:msub></m:math>&#160;gradients of the working set constraints.</div><div class="paramtext">The search direction is defined so that constraints in the working set remain <span class="italic">unaltered</span> for any value of the step length.  It follows that <m:math><m:mi>p</m:mi></m:math>&#160;must satisfy the identity

<div class="formula-eqn"><a name="eqn3" id="eqn3"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>W</m:mi><m:mi>p</m:mi><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>.</m:mtext>
</m:math></td><td class="formula-eqn2">
      (3)
     </td></tr></table></div>

This characterization allows <m:math><m:mi>p</m:mi></m:math>&#160;to be computed using any <m:math><m:mi>n</m:mi></m:math>&#160;by <m:math><m:msub><m:mi>n</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;full-rank matrix <m:math><m:mi>Z</m:mi></m:math>&#160;that spans the null space of <m:math><m:mi>W</m:mi></m:math>.  (Thus, <m:math><m:msub><m:mi>n</m:mi><m:mi>Z</m:mi></m:msub><m:mo>=</m:mo><m:mi>n</m:mi><m:mo>-</m:mo><m:msub><m:mi>m</m:mi><m:mi>W</m:mi></m:msub></m:math>&#160;and <m:math><m:mi>W</m:mi><m:mi>Z</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.)  The null space matrix <m:math><m:mi>Z</m:mi></m:math>&#160;is defined from a sparse <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization of part of <m:math><m:mi>W</m:mi></m:math>&#160;(see <a class="eqn" href="#eqn6">(6)</a> and <a class="eqn" href="#eqn7">(7)</a>).  The direction <m:math><m:mi>p</m:mi></m:math>&#160;will satisfy <a class="eqn" href="#eqn3">(3)</a> if

<div class="formula-eqn"><a name="eqn4" id="eqn4"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>p</m:mi><m:mo>=</m:mo><m:mi>Z</m:mi><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (4)
     </td></tr></table></div>

where <m:math><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is any <m:math><m:msub><m:mi>n</m:mi><m:mi>Z</m:mi></m:msub></m:math>-vector.</div><div class="paramtext">The working set contains the constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;and a subset of the upper and lower bounds on the variables <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  Since the gradient of a bound constraint <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8805;</m:mo><m:msub><m:mi>l</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;or <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8804;</m:mo><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is a vector of all zeros except for <m:math><m:mrow><m:mo>&#177;</m:mo><m:mn>1</m:mn></m:mrow></m:math>&#160;in position <m:math><m:mi>j</m:mi></m:math>, it follows that the working set matrix contains the rows of <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
</m:math>&#160;and the unit rows associated with the upper and lower bounds in the working set.</div><div class="paramtext">The working set matrix <m:math><m:mi>W</m:mi></m:math>&#160;can be represented in terms of a certain column partition of the matrix <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
</m:math>&#160;by (conceptually) partitioning the constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;so that

<div class="formula-eqn"><a name="eqn5" id="eqn5"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>B</m:mi><m:msub><m:mi>x</m:mi><m:mi>B</m:mi></m:msub><m:mo>+</m:mo><m:mi>S</m:mi><m:msub><m:mi>x</m:mi><m:mi>S</m:mi></m:msub><m:mo>+</m:mo><m:mi>N</m:mi><m:msub><m:mi>x</m:mi><m:mi>N</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (5)
     </td></tr></table></div>

where <m:math><m:mi>B</m:mi></m:math>&#160;is a square nonsingular basis and <m:math><m:msub><m:mi>x</m:mi><m:mi>B</m:mi></m:msub></m:math>, <m:math><m:msub><m:mi>x</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>x</m:mi><m:mi>N</m:mi></m:msub></m:math>&#160;are the basic, superbasic and nonbasic variables respectively.  The nonbasic variables are equal to their upper or lower bounds at <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>, and the superbasic variables are independent variables that are chosen to improve the value of the current objective function.  The number of superbasic variables is <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;(the printed quantity <span class="mono">Ns</span>; see <a class="sec" href="#monitoring">Section 12</a>).  Given values of <m:math><m:msub><m:mi>x</m:mi><m:mi>N</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>x</m:mi><m:mi>S</m:mi></m:msub></m:math>, the basic variables <m:math><m:msub><m:mi>x</m:mi><m:mi>B</m:mi></m:msub></m:math>&#160;are adjusted so that <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;satisfies <a class="eqn" href="#eqn5">(5)</a>.</div><div class="paramtext">If <m:math><m:mi>P</m:mi></m:math>&#160;is a permutation matrix such that <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
<m:mi>P</m:mi><m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
   <m:mtd><m:mi>S</m:mi></m:mtd>
   <m:mtd><m:mi>N</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
</m:math>, then <m:math><m:mi>W</m:mi></m:math>&#160;satisfies

<div class="formula-eqn"><a name="eqn6" id="eqn6"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block"><m:mi>W</m:mi><m:mi>P</m:mi><m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
   <m:mtd><m:mi>S</m:mi></m:mtd>
   <m:mtd><m:mi>N</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:mn>0</m:mn></m:mtd>
   <m:mtd><m:msub><m:mi>I</m:mi><m:mi>N</m:mi></m:msub></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (6)
     </td></tr></table></div>

where <m:math><m:msub><m:mi>I</m:mi><m:mi>N</m:mi></m:msub></m:math>&#160;is the identity matrix with the same number of columns as <m:math><m:mi>N</m:mi></m:math>.</div><div class="paramtext">The null space matrix <m:math><m:mi>Z</m:mi></m:math>&#160;is defined from a sparse <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization of part of <m:math><m:mi>W</m:mi></m:math>.  In particular, <m:math><m:mi>Z</m:mi></m:math>&#160;is maintained in &#8216;reduced gradient&#8217; form, using the LUSOL package (see <a class="ref" href="#ref491">Gill <span class="italic">et al.</span> (1991)</a>) to maintain sparse <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factors of the basis matrix <m:math><m:mi>B</m:mi></m:math>&#160;that alters as the working set <m:math><m:mi>W</m:mi></m:math>&#160;changes.  Given the permutation <m:math><m:mi>P</m:mi></m:math>, the null space basis is given by

<div class="formula-eqn"><a name="eqn7" id="eqn7"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>Z</m:mi><m:mo>=</m:mo><m:mi>P</m:mi>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mo>-</m:mo><m:msup><m:mi>B</m:mi><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msup><m:mi>S</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>I</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
<m:mtext>.</m:mtext>
</m:math></td><td class="formula-eqn2">
      (7)
     </td></tr></table></div>

This matrix is used only as an operator, i.e., it is never computed explicitly.  Products of the form <m:math><m:mi>Z</m:mi><m:mi>v</m:mi></m:math>&#160;and <m:math><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>g</m:mi></m:math>&#160;are obtained by solving with <m:math><m:mi>B</m:mi></m:math>&#160;or <m:math><m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>.  This choice of <m:math><m:mi>Z</m:mi></m:math>&#160;implies that <m:math><m:msub><m:mi>n</m:mi><m:mi>Z</m:mi></m:msub></m:math>, the number of &#8216;degrees of freedom&#8217; at <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>, is the same as <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>, the number of superbasic variables.</div><div class="paramtext">Let <m:math><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;denote the <span class="italic">reduced gradient</span> and <span class="italic">reduced Hessian</span> of the objective function:

<div class="formula-eqn"><a name="eqn8" id="eqn8"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>g</m:mi><m:mtext>&#8195; and &#8195;</m:mtext><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>Z</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (8)
     </td></tr></table></div>

where <m:math><m:mi>g</m:mi></m:math>&#160;is the objective gradient at <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>.  Roughly speaking, <m:math><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;describe the first and second derivatives of an <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub></m:math>-dimensional <span class="italic">unconstrained</span> problem for the calculation of <m:math><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>.  (The condition estimator of <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is the quantity <span class="mono">Cond Hz</span> in the monitoring file output; see <a class="sec" href="#monitoring">Section 12</a>.)</div><div class="paramtext">At each iteration, an upper triangular factor <m:math><m:mi>R</m:mi></m:math>&#160;is available such that <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub><m:mo>=</m:mo><m:msup><m:mi>R</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>R</m:mi></m:math>.  Normally, <m:math><m:mi>R</m:mi></m:math>&#160;is computed from <m:math><m:msup><m:mi>R</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>R</m:mi><m:mo>=</m:mo><m:msup><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>H</m:mi><m:mi>Z</m:mi></m:math>&#160;at the start of the optimality phase and then updated as the QP working set changes.  For efficiency, the dimension of <m:math><m:mi>R</m:mi></m:math>&#160;should not be excessive (say, <m:math><m:msub><m:mi>n</m:mi><m:mi>S</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mn>1000</m:mn></m:math>).  This is guaranteed if the number of nonlinear variables is &#8216;moderate&#8217;.</div><div class="paramtext">If the QP problem contains linear variables, <m:math><m:mi>H</m:mi></m:math>&#160;is positive semi-definite and <m:math><m:mi>R</m:mi></m:math>&#160;may be singular with at least one zero diagonal element.  However, an inertia-controlling strategy is used to ensure that only the last diagonal element of <m:math><m:mi>R</m:mi></m:math>&#160;can be zero.  (See <a class="ref" href="#ref491">Gill <span class="italic">et al.</span> (1991)</a> for a discussion of a similar strategy for indefinite quadratic programming.)</div><div class="paramtext">If the initial <m:math><m:mi>R</m:mi></m:math>&#160;is singular, enough variables are fixed at their current value to give a nonsingular <m:math><m:mi>R</m:mi></m:math>.  This is equivalent to including temporary bound constraints in the working set.  Thereafter, <m:math><m:mi>R</m:mi></m:math>&#160;can become singular only when a constraint is deleted from the working set (in which case no further constraints are deleted until <m:math><m:mi>R</m:mi></m:math>&#160;becomes nonsingular).</div><h3 class="standard"><a class="sec" name="ad-mainiteration" id="ad-mainiteration"/>10.3&#160;&#160;Main Iteration</h3>
<div class="paramtext">If the reduced gradient is zero, <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;is a constrained stationary point on the working set.  During the feasibility phase, the reduced gradient will usually be zero only at a vertex (although it may be zero elsewhere in the presence of constraint dependencies).  During the optimality phase, a zero reduced gradient implies that <m:math><m:mi>x</m:mi></m:math>&#160;minimizes the quadratic objective function when the constraints in the working set are treated as equalities.  At a constrained stationary point, Lagrange multipliers <m:math><m:mi>&#955;</m:mi></m:math>&#160;are defined from the equations

<div class="formula-eqn"><a name="eqn9" id="eqn9"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:msup><m:mi>W</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>&#955;</m:mi><m:mo>=</m:mo><m:mi>g</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced><m:mtext>.</m:mtext>
</m:math></td><td class="formula-eqn2">
      (9)
     </td></tr></table></div>

A Lagrange multiplier <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;corresponding to an inequality constraint in the working set is said to be <span class="italic">optimal</span> if <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mi>&#963;</m:mi></m:math>&#160;when the associated constraint is at its <span class="italic">upper bound</span>, or if <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8805;</m:mo><m:mo>-</m:mo><m:mi>&#963;</m:mi></m:math>&#160;when the associated constraint is at its <span class="italic">lower bound</span>, where <m:math><m:mi>&#963;</m:mi></m:math>&#160;depends on the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_optimalitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Optimality Tolerance</m:mi></m:maction></m:math>.  If a multiplier is nonoptimal, the objective function (either the true objective or the sum of infeasibilities) can be reduced by continuing the minimization with the corresponding constraint excluded from the working set.  (This step is sometimes referred to as &#8216;deleting&#8217; a constraint from the working set.)  If optimal multipliers occur during the feasibility phase but the sum of infeasibilities is nonzero, there is no feasible point and the routine terminates immediately 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>&#160;(see <a class="sec" href="#errors">Section 6</a>).</div><div class="paramtext">The special form <a class="eqn" href="#eqn6">(6)</a> of the working set allows the multiplier vector <m:math><m:mi>&#955;</m:mi></m:math>, the solution of <a class="eqn" href="#eqn9">(9)</a>, to be written in terms of the vector

<div class="formula-eqn"><a name="eqn10" id="eqn10"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:mi>d</m:mi><m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>g</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mn>0</m:mn></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
 <m:mo>-</m:mo><m:msup><m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>&#960;</m:mi><m:mo>=</m:mo>
 <m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>g</m:mi><m:mo>-</m:mo><m:msup><m:mi>A</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>&#960;</m:mi></m:mtd>
  </m:mtr><m:mtr>
   <m:mtd><m:mi>&#960;</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced>
 <m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (10)
     </td></tr></table></div>

where <m:math><m:mi>&#960;</m:mi></m:math>&#160;satisfies the equations <m:math><m:msup><m:mi>B</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>&#960;</m:mi><m:mo>=</m:mo><m:msub><m:mi>g</m:mi><m:mi>B</m:mi></m:msub></m:math>, and <m:math><m:msub><m:mi>g</m:mi><m:mi>B</m:mi></m:msub></m:math>&#160;denotes the basic elements of <m:math><m:mi>g</m:mi></m:math>.  The elements of <m:math><m:mi>&#960;</m:mi></m:math>&#160;are the Lagrange multipliers <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;associated with the equality constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  The vector <m:math><m:msub><m:mi>d</m:mi><m:mi>N</m:mi></m:msub></m:math>&#160;of nonbasic elements of <m:math><m:mi>d</m:mi></m:math>&#160;consists of the Lagrange multipliers <m:math><m:msub><m:mi>&#955;</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;associated with the upper and lower bound constraints in the working set.  The vector <m:math><m:msub><m:mi>d</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;of superbasic elements of <m:math><m:mi>d</m:mi></m:math>&#160;is the reduced gradient <m:math><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;in <a class="eqn" href="#eqn8">(8)</a>.  The vector <m:math><m:msub><m:mi>d</m:mi><m:mi>B</m:mi></m:msub></m:math>&#160;of basic elements of <m:math><m:mi>d</m:mi></m:math>&#160;is zero, by construction.  (The Euclidean norm of <m:math><m:msub><m:mi>d</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;and the final values of <m:math><m:msub><m:mi>d</m:mi><m:mi>S</m:mi></m:msub></m:math>, <m:math><m:mi>g</m:mi></m:math>&#160;and <m:math><m:mi>&#960;</m:mi></m:math>&#160;are the quantities <span class="mono">Norm rg</span>, <span class="mono">Reduced Gradnt</span>, <span class="mono">Obj Gradient</span> and <span class="mono">Dual Activity</span> in the monitoring file output; see <a class="sec" href="#monitoring">Section 12</a>.)</div><div class="paramtext">If the reduced gradient is not zero, Lagrange multipliers need not be computed and the search direction is given by <m:math><m:mi>p</m:mi><m:mo>=</m:mo><m:mi>Z</m:mi><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;(see <a class="eqn" href="#eqn7">(7)</a> and <a class="eqn" href="#eqn11">(11)</a>).  The step length is chosen to maintain feasibility with respect to the satisfied constraints.</div><div class="paramtext">There are two possible choices for <m:math><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>, depending on whether or not <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is singular.  If <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is nonsingular, <m:math><m:mi>R</m:mi></m:math>&#160;is nonsingular and <m:math><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;in <a class="eqn" href="#eqn4">(4)</a> is computed from the equations

<div class="formula-eqn"><a name="eqn11" id="eqn11"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:msup><m:mi>R</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:mi>R</m:mi><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub><m:mo>=</m:mo><m:mo>-</m:mo><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (11)
     </td></tr></table></div>

where <m:math><m:msub><m:mi>g</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is the reduced gradient at <m:math><m:mi>x</m:mi></m:math>.  In this case, <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced><m:mo>+</m:mo><m:mi>p</m:mi></m:math>&#160;is the minimizer of the objective function subject to the working set constraints being treated as equalities.  If <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced><m:mo>+</m:mo><m:mi>p</m:mi></m:math>&#160;is feasible, <m:math><m:mi>&#945;</m:mi></m:math>&#160;is defined to be unity.  In this case, the reduced gradient at <m:math><m:mfenced separators=""><m:mover><m:mi>x</m:mi><m:mo>-</m:mo></m:mover><m:mo>,</m:mo><m:mover><m:mi>s</m:mi><m:mo>-</m:mo></m:mover></m:mfenced></m:math>&#160;will be zero, and Lagrange multipliers are computed at the next iteration.  Otherwise, <m:math><m:mi>&#945;</m:mi></m:math>&#160;is set to <m:math><m:msub><m:mi>&#945;</m:mi><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:msub></m:math>, the step to the &#8216;nearest&#8217; constraint along <m:math><m:mi>p</m:mi></m:math>.  This constraint is then added to the working set at the next iteration.</div><div class="paramtext">If <m:math><m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is singular, then <m:math><m:mi>R</m:mi></m:math>&#160;must also be singular, and an inertia-controlling strategy is used to ensure that only the last diagonal element of <m:math><m:mi>R</m:mi></m:math>&#160;is zero.  (See <a class="ref" href="#ref491">Gill <span class="italic">et al.</span> (1991)</a> for a discussion of a similar strategy for indefinite quadratic programming.)  In this case, <m:math><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;satisfies

<div class="formula-eqn"><a name="eqn12" id="eqn12"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:msubsup><m:mi>p</m:mi><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
<m:msub><m:mi>H</m:mi><m:mi>Z</m:mi></m:msub>
<m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub><m:mo>=</m:mo><m:mn>0</m:mn>
<m:mtext>&#8195; and &#8195;</m:mtext>
<m:msubsup><m:mi>g</m:mi><m:mi>Z</m:mi><m:mi mathvariant="normal">T</m:mi></m:msubsup>
<m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mn>0</m:mn><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (12)
     </td></tr></table></div>

which allows the objective function to be reduced by any step of the form <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced><m:mo>+</m:mo><m:mi>&#945;</m:mi><m:mi>p</m:mi></m:math>,
where <m:math><m:mi>&#945;</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>.  The vector <m:math><m:mi>p</m:mi><m:mo>=</m:mo><m:mi>Z</m:mi><m:msub><m:mi>p</m:mi><m:mi>Z</m:mi></m:msub></m:math>&#160;is a direction of unbounded descent for the QP problem in the sense that the QP
objective is linear and decreases without bound along <m:math><m:mi>p</m:mi></m:math>.  If no finite step of the form <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced><m:mo>+</m:mo><m:mi>&#945;</m:mi><m:mi>p</m:mi></m:math>&#160;(where <m:math><m:mi>&#945;</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>) reaches a constraint not in the working set, the QP problem is unbounded and the routine terminates immediately 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="#IFeq2"><m:mn mathcolor="#003399" mathvariant="bold">2</m:mn></m:maction></m:math>&#160;(see <a class="sec" href="#errors">Section 6</a>).  Otherwise, <m:math><m:mi>&#945;</m:mi></m:math>&#160;is defined as the maximum feasible step along <m:math><m:mi>p</m:mi></m:math>&#160;and a constraint active at <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced><m:mo>+</m:mo><m:mi>&#945;</m:mi><m:mi>p</m:mi></m:math>&#160;is added to the working set for the next iteration.</div><h3 class="standard"><a class="sec" name="algdetails4" id="algdetails4"/>10.4&#160;&#160;Miscellaneous</h3>
<div class="paramtext">If the basis matrix is not chosen carefully, the condition of the null space matrix <m:math><m:mi>Z</m:mi></m:math>&#160;in <a class="eqn" href="#eqn7">(7)</a> could be arbitrarily high.  To guard against this, the routine implements a &#8216;basis repair&#8217; feature in which the LUSOL package (see <a class="ref" href="#ref491">Gill <span class="italic">et al.</span> (1991)</a>) is used to compute the rectangular factorization

<div class="formula-eqn"><a name="eqn13" id="eqn13"/><table class="formula-eqn"><tr><td class="formula-eqn"><m:math display="block">
<m:msup><m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
   <m:mtd><m:mi>S</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup><m:mo>=</m:mo><m:mi>L</m:mi><m:mi>U</m:mi><m:mtext>,</m:mtext>
</m:math></td><td class="formula-eqn2">
      (13)
     </td></tr></table></div>

returning just the permutation <m:math><m:mi>P</m:mi></m:math>&#160;that makes <m:math><m:mi>P</m:mi><m:mi>L</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;unit lower triangular.  The pivot tolerance is set to require <m:math><m:msub><m:mfenced open="|" close="|" separators=""><m:mi>P</m:mi><m:mi>L</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:mfenced><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:mo>&#8804;</m:mo><m:mn>2</m:mn></m:math>, and the permutation is used to define <m:math><m:mi>P</m:mi></m:math>&#160;in <a class="eqn" href="#eqn6">(6)</a>.  It can be shown that <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>Z</m:mi></m:mfenced></m:math>&#160;is likely to be little more than unity.  Hence, <m:math><m:mi>Z</m:mi></m:math>&#160;should be well-conditioned <span class="italic">regardless of the condition of</span>
<m:math><m:mi>W</m:mi></m:math>.  This feature is applied at the beginning of the optimality phase if a potential <m:math><m:mi>B</m:mi><m:mo>-</m:mo><m:mi>S</m:mi></m:math>&#160;ordering is known.</div><div class="paramtext">The EXPAND procedure (see <a class="ref" href="#ref490">Gill <span class="italic">et al.</span> (1989)</a>) is used to reduce the possibility of cycling at a point where the active constraints are nearly linearly dependent.  Although there is no absolute guarantee that cycling will not occur, the probability of cycling is extremely small (see <a class="ref" href="#ref678">Hall and McKinnon (1996)</a>).  The main feature of EXPAND is that the feasibility tolerance is increased at the start of every iteration.  This allows a positive step to be taken at every iteration, perhaps at the expense of violating the bounds on <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;by a small amount.</div><div class="paramtext">Suppose that the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>&#160;is <m:math><m:mi>&#948;</m:mi></m:math>.  Over a period of <m:math><m:mi>K</m:mi></m:math>&#160;iterations (where <m:math><m:mi>K</m:mi></m:math>&#160;is the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_expandfrequency"><m:mi mathcolor="#800080;" mathvariant="bold">Expand Frequency</m:mi></m:maction></m:math>), the feasibility tolerance actually used by the routine (i.e., the <span class="italic">working</span> feasibility tolerance) increases from <m:math><m:mn>0.5</m:mn><m:mi>&#948;</m:mi></m:math>&#160;to <m:math><m:mi>&#948;</m:mi></m:math>&#160;(in steps of <m:math><m:mn>0.5</m:mn><m:mi>&#948;</m:mi><m:mo>/</m:mo><m:mi>K</m:mi></m:math>).</div><div class="paramtext">At certain stages the following &#8216;resetting procedure&#8217; is used to remove small constraint infeasibilities.  First, all nonbasic variables are moved exactly onto their bounds.  A count is kept of the number of nontrivial adjustments made.  If the count is nonzero, the basic variables are recomputed.  Finally, the working feasibility tolerance is reinitialized to <m:math><m:mn>0.5</m:mn><m:mi>&#948;</m:mi></m:math>.</div><div class="paramtext">If a problem requires more than <m:math><m:mi>K</m:mi></m:math>&#160;iterations, the resetting procedure is invoked and a new cycle of iterations is started.  (The decision to resume the feasibility phase or optimality phase is based on comparing any constraint infeasibilities with <m:math><m:mi>&#948;</m:mi></m:math>.)</div><div class="paramtext">The resetting procedure is also invoked when the routine reaches an apparently optimal, infeasible or unbounded solution, unless this situation has already occurred twice.  If any nontrivial adjustments are made, iterations are continued.</div><div class="paramtext">The EXPAND procedure not only allows a positive step to be taken at every iteration, but also provides a potential <span class="italic">choice</span> of constraints to be added to the working set.  All constraints at a distance <m:math><m:mi>&#945;</m:mi></m:math>&#160;(where <m:math><m:mi>&#945;</m:mi><m:mo>&#8804;</m:mo><m:msub><m:mi>&#945;</m:mi><m:maction actiontype="link" dsi:type="simple" dsi:href="#M"><m:mi mathcolor="#EE0000" mathvariant="bold">M</m:mi></m:maction></m:msub></m:math>) along <m:math><m:mi>p</m:mi></m:math>&#160;from the current point are then viewed as acceptable candidates for inclusion in the working set.  The constraint whose normal makes the largest angle with the search direction is added to the working set.  This strategy helps keep the basis matrix <m:math><m:mi>B</m:mi></m:math>&#160;well-conditioned.</div><h2 class="standard"><a class="sec" name="optparams" id="optparams"/>11&#160;&#160;Optional Parameters</h2>
<div class="paramtext">Several optional parameters in E04NKF/E04NKA define choices in the problem specification or the algorithm logic.  In order to reduce the number of formal parameters of E04NKF/E04NKA 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 <span class="italic">all</span> 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 both, of the routines <a class="rout" href="../E04/e04nlf.xml">E04NLF/E04NLA</a> and <a class="rout" href="../E04/e04nmf.xml">E04NMF/E04NMA</a> before a call to E04NKF/E04NKA.</div><div class="paramtext"><a class="rout" href="../E04/e04nlf.xml">E04NLF/E04NLA</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 each intermediate line defining a single optional parameter.  For example,
<pre class="verbatim">
Begin
  Print Level = 5
End
</pre>
</div><div class="paramtext">The call
<pre class="verbatim">
 CALL E04NLF (IOPTNS, INFORM)
</pre>
can then be used to read the file on unit <a class="arg" href="../E04/e04nlf.xml#IOPTNS">IOPTNS</a>. <a class="arg" href="../E04/e04nlf.xml#INFORM">INFORM</a> will be zero on successful exit.  <a class="rout" href="../E04/e04nlf.xml">E04NLF/E04NLA</a> should be consulted for a full description of this method of supplying optional parameters.</div><div class="paramtext"><a class="rout" href="../E04/e04nmf.xml">E04NMF/E04NMA</a> can be called to supply options directly, one call being necessary for each optional parameter.  For example,
<pre class="verbatim">
 CALL E04NMF ('Print Level = 5')
</pre><a class="rout" href="../E04/e04nmf.xml">E04NMF/E04NMA</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.  Optional parameters specified by you are unaltered by E04NKF/E04NKA (unless they define invalid values) and so remain in effect for subsequent calls unless altered by you.</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 keyword, any essential optional qualifiers and the default value.  A definition for each option can be found in <a class="sec" href="#op-description">Section 11.2</a>, where the minimum abbreviation of each keyword is underlined (if no characters of an optional qualifier are underlined, the qualifier may be omitted), 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 <span class="bitalic">double precision</span> values required with certain options, the default value of an option is used whenever the condition <m:math><m:mfenced open="|" close="|" separators=""><m:mi>i</m:mi></m:mfenced><m:mo>&#8805;</m:mo><m:mn>100000000</m:mn></m:math>&#160;is satisfied and the number <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>).

</div><div class="left-tablediv"><table class="optparam"><tbody>
<tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><b>Optional Parameter</b></td><td class="libdoc" valign="top" align="left"><b>Default&#160;Value</b></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_checkfrequency">Check Frequency</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>60</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_crash_option">Crash Option</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>2</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_crashtolerance">Crash Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>0.1</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_defaults">Defaults </a></td>
<td class="libdoc" valign="top" align="left">&#160;</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_expandfrequency">Expand Frequency</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>10000</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_factoriz-frequency">Factorization Frequency</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_feasibilitytolerance">Feasibility Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup><m:mo>,</m:mo><m:msqrt><m:mi>&#949;</m:mi></m:msqrt></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_infiniteboundsize">Infinite Bound Size</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msup><m:mn>10</m:mn><m:mn>20</m:mn></m:msup></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_infinitestepsize">Infinite Step Size</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi mathvariant="italic">bigbnd</m:mi><m:mo>,</m:mo><m:msup><m:mn>10</m:mn><m:mn>20</m:mn></m:msup></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_iterationlimit">Iteration Limit</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>50</m:mn><m:mo>,</m:mo><m:mrow><m:mn>5</m:mn><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>m</m:mi></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_iters">Iters</a></td>
<td class="libdoc" valign="top" align="left"/>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_itns">Itns</a></td>
<td class="libdoc" valign="top" align="left"/>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_list">List</a></td>
<td class="libdoc" valign="top" align="left">Default for <m:math><m:mi mathvariant="normal">E04NKF</m:mi><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_list"><m:mi mathcolor="#800080;" mathvariant="bold">List</m:mi></m:maction></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_lufactortolerance">LU Factor Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100.0</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_lusingulartolerance">LU Singularity Tolerance</a></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:mn>0.67</m:mn></m:msup></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_luupdatetolerance">LU Update Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>10.0</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_maximize">Maximize</a></td>
<td class="libdoc" valign="top" align="left"/>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_minimize">Minimize</a></td>
<td class="libdoc" valign="top" align="left">Default</td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_monitoringfile">Monitoring File</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_nolist">Nolist</a></td>
<td class="libdoc" valign="top" align="left">Default for <m:math><m:mi mathvariant="normal">E04NKA</m:mi><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_nolist"><m:mi mathcolor="#800080;" mathvariant="bold">Nolist</m:mi></m:maction></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_optimalitytolerance">Optimality Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup><m:mo>,</m:mo><m:msqrt><m:mi>&#949;</m:mi></m:msqrt></m:mfenced></m:mrow></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_partialprice">Partial Price</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>10</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_pivottolerance">Pivot Tolerance</a></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:mn>0.67</m:mn></m:msup></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_printlevel">Print Level</a></td>
<td class="libdoc" valign="top" align="left">Default for E04NKF
<m:math><m:mtext/><m:mo>=</m:mo><m:mn>10</m:mn></m:math><br/>
Default for E04NKA
<m:math><m:mtext/><m:mo>=</m:mo><m:mn>0</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_ranktolerance">Rank Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100</m:mn><m:mi>&#949;</m:mi></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_scaleoption">Scale Option</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>2</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_scaletolerance">Scale Tolerance</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>0.9</m:mn></m:math></td>
</tr><tr>
<td class="libdoc" valign="top" align="left" style="width:19.5em;"><a class="optparam" href="../E04/e04nkf.xml#optparam_superbasicslimit">Superbasics Limit</a></td>
<td class="libdoc" valign="top" align="left">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mrow><m:msub><m:mi>n</m:mi><m:mi>H</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:mrow></m:math></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_checkfrequency" id="checkfrequency"/><b><span class="u">Ch</span>eck Frequency</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>60</m:mn></m:math></td></tr></table><div class="paramtext">Every <m:math><m:mi>i</m:mi></m:math>th iteration after the most recent basis factorization, a numerical test is made to see if the current solution <m:math><m:mfenced separators=""><m:mi>x</m:mi><m:mo>,</m:mo><m:mi>s</m:mi></m:mfenced></m:math>&#160;satisfies the linear constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.  If the largest element of the residual vector <m:math><m:mi>r</m:mi><m:mo>=</m:mo><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi></m:math>&#160;is judged to be too large, the current basis is refactorized and the basic variables recomputed to satisfy the constraints more accurately.  If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, the value <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>99999999</m:mn></m:math>&#160;is used and effectively no checks are made.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_crash_option" id="crash_option"/><b><span class="u">Cr</span>ash <span class="u">O</span>ption</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>2</m:mn></m:math></td></tr></table><div class="paramtext">Note that this option does not apply when <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math>&#160;(see <a class="sec" href="#parameters">Section 5</a>).</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>, an internal Crash procedure is used to select an initial basis from various rows and columns of the constraint matrix <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
</m:math>.  The value of <m:math><m:mi>i</m:mi></m:math>&#160;determines which rows and columns are initially eligible for the basis, and how many times the Crash procedure is called.  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, the all-slack basis <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mo>-</m:mo><m:mi>I</m:mi></m:math>&#160;is chosen.  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, the Crash procedure is called once (looking for a triangular basis in all rows and columns of the linear constraint matrix <m:math><m:mi>A</m:mi></m:math>).  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>2</m:mn></m:math>, the Crash procedure is called twice (looking at any <span class="italic">equality</span> constraints first followed by any <span class="italic">inequality</span> constraints).  If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mi>i</m:mi><m:mo>&gt;</m:mo><m:mn>2</m:mn></m:math>, the default value is used.</div>
<div class="paramtext">If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>2</m:mn></m:math>, certain slacks on inequality rows are selected for the basis first.  (If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>2</m:mn></m:math>, numerical values are used to exclude slacks that are close to a bound.)  The Crash procedure then makes several passes through the columns of <m:math><m:mi>A</m:mi></m:math>, searching for a basis matrix that is essentially triangular.  A column is assigned to &#8216;pivot&#8217; on a particular row if the column contains a suitably large element in a row that has not yet been assigned.  (The pivot elements ultimately form the diagonals of the triangular basis.)  For remaining unassigned rows, slack variables are inserted to complete the basis.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_crashtolerance" id="crashtolerance"/><b><span class="u">Cr</span>ash <span class="u">T</span>olerance</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>0.1</m:mn></m:math></td></tr></table><div class="paramtext">This value allows the Crash procedure to ignore certain &#8216;small&#8217; nonzero elements in the constraint matrix <m:math><m:mi>A</m:mi></m:math>&#160;while searching for a triangular basis.  For each column of <m:math><m:mi>A</m:mi></m:math>, if <m:math><m:msub><m:mi>a</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub></m:math>&#160;is the largest element in the column, other nonzeros in that column are ignored if they are less than (or equal to) <m:math><m:msub><m:mi>a</m:mi><m:mi mathvariant="normal">max</m:mi></m:msub><m:mo>&#215;</m:mo><m:mi>r</m:mi></m:math>.</div>
<div class="paramtext">When <m:math><m:mi>r</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, the basis obtained by the Crash procedure may not be strictly triangular, but it is likely to be nonsingular and almost triangular.  The intention is to obtain a starting basis with more column variables and fewer (arbitrary) slacks.  A feasible solution may be reached earlier for some problems.  If <m:math><m:mi>r</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mi>r</m:mi><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_defaults" id="defaults"/><b><span class="u">Defaults</span> </b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table><div class="paramtext">This special keyword may be used to reset all optional parameters to their default values.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_expandfrequency" id="expandfrequency"/><b><span class="u">Ex</span>pand Frequency</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>10000</m:mn></m:math></td></tr></table><div class="paramtext">This option is part of an anti-cycling procedure (see <a class="sec" href="#algdetails4">Section 10.4</a>) designed to allow progress even on highly degenerate problems.</div>
<div class="paramtext">For LP problems, the strategy is to force a positive step at every iteration, at the expense of violating the constraints by a small amount.  Suppose that the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>&#160;is <m:math><m:mi>&#948;</m:mi></m:math>.  Over a period of <m:math><m:mi>i</m:mi></m:math>&#160;iterations, the feasibility tolerance actually used by E04NKF/E04NKA (i.e., the <span class="italic">working</span> feasibility tolerance) increases from <m:math><m:mn>0.5</m:mn><m:mi>&#948;</m:mi></m:math>&#160;to <m:math><m:mi>&#948;</m:mi></m:math>&#160;(in steps of <m:math><m:mn>0.5</m:mn><m:mi>&#948;</m:mi><m:mo>/</m:mo><m:mi>i</m:mi></m:math>).</div>
<div class="paramtext">For QP problems, the same procedure is used for iterations in which there is only one superbasic variable.  (Cycling can only occur when the current solution is at a vertex of the feasible region.)  Thus, zero steps are allowed if there is more than one superbasic variable, but otherwise positive steps are enforced.</div>
<div class="paramtext">Increasing the value of <m:math><m:mi>i</m:mi></m:math>&#160;helps reduce the number of slightly infeasible nonbasic basic variables (most of which are eliminated during the resetting procedure).  However, it also diminishes the freedom to choose a large pivot element (see optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_pivottolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Pivot Tolerance</m:mi></m:maction></m:math>).</div>
<div class="paramtext">If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, the value <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>99999999</m:mn></m:math>&#160;is used and effectively no anti-cycling procedure is invoked.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_factoriz-frequency" id="factoriz-frequency"/><b><span class="u">Fa</span>ctorization Frequency</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100</m:mn></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>i</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, at most <m:math><m:mi>i</m:mi></m:math>&#160;basis changes will occur between factorizations of the basis matrix.  For LP problems, the basis factors are usually updated at every iteration.  For QP problems, fewer basis updates will occur as the solution is approached.  The number of iterations between basis factorizations will therefore increase.  During these iterations a test is made regularly according to the value of optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_checkfrequency"><m:mi mathcolor="#800080;" mathvariant="bold">Check Frequency</m:mi></m:maction></m:math>&#160;to ensure that the linear constraints <m:math><m:mi>A</m:mi><m:mi>x</m:mi><m:mo>-</m:mo><m:mi>s</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;are satisfied.  If necessary, the basis will be refactorized before the limit of <m:math><m:mi>i</m:mi></m:math>&#160;updates is reached.  If <m:math><m:mi>i</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_feasibilitytolerance" id="feasibilitytolerance"/><b><span class="u">Fe</span>asibility Tolerance</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup><m:mo>,</m:mo><m:msqrt><m:mi>&#949;</m:mi></m:msqrt></m:mfenced></m:mrow></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&#8805;</m:mo><m:mi>&#949;</m:mi></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;defines the maximum acceptable <span class="italic">absolute</span> violation in each constraint at a &#8216;feasible&#8217; point (including slack variables).  For example, if the variables and the coefficients in the linear constraints are of order unity, and the latter are correct to about five decimal digits, it would be appropriate to specify <m:math><m:mi>r</m:mi></m:math>&#160;as <m:math><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>5</m:mn></m:mrow></m:msup></m:math>.  If <m:math><m:mi>r</m:mi><m:mo>&lt;</m:mo><m:mi>&#949;</m:mi></m:math>, the default value is used.</div>
<div class="paramtext">E04NKF/E04NKA attempts to find a feasible solution before optimizing the objective function.  If the sum of infeasibilities cannot be reduced to zero, the problem is assumed to be <span class="italic">infeasible</span>.  Let <span class="mono">Sinf</span> be the corresponding sum of infeasibilities.  If <span class="mono">Sinf</span> is quite small, it may be appropriate to raise <m:math><m:mi>r</m:mi></m:math>&#160;by a factor of <m:math><m:mn>10</m:mn></m:math>&#160;or <m:math><m:mn>100</m:mn></m:math>.  Otherwise, some error in the data should be suspected.  Note that the routine does <span class="italic">not</span> attempt to find the minimum value of <span class="mono">Sinf</span>.</div>
<div class="paramtext">If the constraints and variables have been scaled (see <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction></m:math>), then feasibility is defined in terms of the scaled problem (since it is more likely to be meaningful).</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_infiniteboundsize" id="infiniteboundsize"/><b><span class="u">In</span>finite <span class="u">B</span>ound Size</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:msup><m:mn>10</m:mn><m:mn>20</m:mn></m:msup></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;defines the &#8216;infinite&#8217; bound <m:math><m:mi mathvariant="italic">bigbnd</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">bigbnd</m:mi></m:math>&#160;will be regarded as <m:math><m:mrow><m:mo>+</m:mo><m:mi>&#8734;</m:mi></m:mrow></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">bigbnd</m:mi></m:mrow></m:math>&#160;will be regarded as <m:math><m:mrow><m:mo>-</m:mo><m:mi>&#8734;</m:mi></m:mrow></m:math>).  If <m:math><m:mi>r</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_infinitestepsize" id="infinitestepsize"/><b><span class="u">In</span>finite <span class="u">St</span>ep Size</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi mathvariant="italic">bigbnd</m:mi><m:mo>,</m:mo><m:msup><m:mn>10</m:mn><m:mn>20</m:mn></m:msup></m:mfenced></m:mrow></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;specifies the magnitude of the change in variables that will be considered a step to an unbounded solution.  (Note that an unbounded solution can occur only when the Hessian is not positive-definite.)  If the change in <m:math><m:mi>x</m:mi></m:math>&#160;during an iteration would exceed the value of <m:math><m:mi>r</m:mi></m:math>, the objective function is considered to be unbounded below in the feasible region.  If <m:math><m:mi>r</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_iterationlimit" id="iterationlimit"/><b><span class="u">It</span>eration Limit</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>50</m:mn><m:mo>,</m:mo><m:mrow><m:mn>5</m:mn><m:mfenced separators=""><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>m</m:mi></m:mfenced></m:mrow></m:mfenced></m:mrow></m:math></td></tr></table>
<table class="multi-optparam"><tr><td class="optparam-left"><a name="optparam_iters" id="iters"/><b><span class="u">It</span>ers</b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table>
<table class="multi-optparam"><tr><td class="optparam-left"><a name="optparam_itns" id="itns"/><b><span class="u">It</span>ns</b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table><div class="paramtext">The value of <m:math><m:mi>i</m:mi></m:math>&#160;specifies the maximum number of iterations allowed before termination.  Setting <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;means that the workspace needed to start solving the problem will be computed and printed, but no iterations will be performed.  If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_list" id="list"/><b><span class="u">List</span></b></td><td class="optparam-center"/><td class="optparam-right">Default for <m:math><m:mi mathvariant="normal">E04NKF</m:mi><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_list"><m:mi mathcolor="#800080;" mathvariant="bold">List</m:mi></m:maction></m:math></td></tr></table>
<table class="multi-optparam"><tr><td class="optparam-left"><a name="optparam_nolist" id="nolist"/><b><span class="u">Nolist</span></b></td><td class="optparam-center"/><td class="optparam-right">Default for <m:math><m:mi mathvariant="normal">E04NKA</m:mi><m:mo>=</m:mo><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_nolist"><m:mi mathcolor="#800080;" mathvariant="bold">Nolist</m:mi></m:maction></m:math></td></tr></table><div class="paramtext">Normally each optional parameter specification is printed as it is supplied.  Optional parameter <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;may be used to suppress the printing and optional parameter <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;may be used to restore printing.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_lufactortolerance" id="lufactortolerance"/><b><span class="u">LU</span> <span class="u">F</span>actor Tolerance</b></td><td class="optparam-center"><i>r</i><sub>1</sub></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100.0</m:mn></m:math></td></tr></table>
<table class="multi-optparam"><tr><td class="optparam-left"><a name="optparam_luupdatetolerance" id="luupdatetolerance"/><b><span class="u">LU</span> <span class="u">U</span>pdate Tolerance</b></td><td class="optparam-center"><i>r</i><sub>2</sub></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>10.0</m:mn></m:math></td></tr></table><div class="paramtext">The values of <m:math><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>r</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;affect the stability and sparsity of the basis factorization <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:mi>U</m:mi></m:math>, during refactorization and updates respectively.  The lower triangular matrix <m:math><m:mi>L</m:mi></m:math>&#160;is a product of matrices of the form 
<div class="formula"><table class="formula"><tr><td class="formula"><m:math display="block"><m:mfenced><m:mtable> <m:mtr> <m:mtd><m:mn>1</m:mn></m:mtd> <m:mtd><m:mphantom><m:mn>0</m:mn></m:mphantom></m:mtd> </m:mtr><m:mtr> <m:mtd><m:mi>&#956;</m:mi></m:mtd> <m:mtd><m:mn>1</m:mn></m:mtd> </m:mtr> </m:mtable></m:mfenced></m:math></td><td class="formula2"/></tr></table></div>
 where the multipliers <m:math><m:mi>&#956;</m:mi></m:math>&#160;will satisfy <m:math><m:mfenced open="|" close="|" separators=""><m:mi>&#956;</m:mi></m:mfenced><m:mo>&#8804;</m:mo><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub></m:math>.  The default values of <m:math><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>r</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;usually strike a good compromise between stability and sparsity.  For large and relatively dense problems, setting <m:math><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;and <m:math><m:msub><m:mi>r</m:mi><m:mn>2</m:mn></m:msub></m:math>&#160;to <m:math><m:mn>25</m:mn></m:math>&#160;(say) may give a marked improvement in sparsity without impairing stability to a serious degree.</div>
<div class="paramtext">Note that for band matrices it may be necessary to set <m:math><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub></m:math>&#160;in the range <m:math><m:mn>1</m:mn><m:mo>&#8804;</m:mo><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub><m:mo>&lt;</m:mo><m:mn>2</m:mn></m:math>&#160;in order to achieve stability.  If <m:math><m:msub><m:mi>r</m:mi><m:mn>1</m:mn></m:msub><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:math>&#160;or <m:math><m:msub><m:mi>r</m:mi><m:mn>2</m:mn></m:msub><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_lusingulartolerance" id="lusingulartolerance"/><b><span class="u">LU</span> <span class="u">Si</span>ngularity Tolerance</b></td><td class="optparam-center"><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:mn>0.67</m:mn></m:msup></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;defines the singularity tolerance used to guard against ill-conditioned basis matrices.  Whenever the basis is refactorized, the diagonal elements of <m:math><m:mi>U</m:mi></m:math>&#160;are tested as follows.  If <m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>u</m:mi><m:mrow><m:mi>j</m:mi><m:mi>j</m:mi></m:mrow></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mi>r</m:mi></m:math>&#160;or <m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>u</m:mi><m:mrow><m:mi>j</m:mi><m:mi>j</m:mi></m:mrow></m:msub></m:mfenced><m:mo>&lt;</m:mo><m:mi>r</m:mi><m:mo>&#215;</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:mfenced open="|" close="|" separators=""><m:msub><m:mi>u</m:mi><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub></m:mfenced></m:math>, the <m:math><m:mi>j</m:mi></m:math>th column of the basis is replaced by the corresponding slack variable.  If <m:math><m:mi>r</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_minimize" id="minimize"/><b><span class="u">Mi</span>nimize</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><span class="u">Ma</span>ximize</b></td><td class="optparam-center"/><td class="optparam-right"/></tr></table><div class="paramtext">This option specifies the required direction of the optimization.  It applies to both linear and nonlinear terms (if any) in the objective function.  Note that if two problems are the same except that one minimizes <m:math><m:mi>f</m:mi><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>&#160;and the other maximizes <m:math><m:mrow><m:mo>-</m:mo><m:mi>f</m:mi></m:mrow><m:mfenced separators=""><m:mi>x</m:mi></m:mfenced></m:math>, their solutions will be the same but the signs of the dual variables <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and the reduced gradients <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;(see <a class="sec" href="#ad-mainiteration">Section 10.3</a>) will be reversed.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_monitoringfile" id="monitoringfile"/><b><span class="u">Mo</span>nitoring File</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>i</m:mi><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;(see <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction></m:math>), monitoring information produced by E04NKF/E04NKA is sent to a file with logical unit number <m:math><m:mi>i</m:mi></m:math>.  If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>&#160;and/or <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, the default value is used and hence no monitoring information is produced.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_optimalitytolerance" id="optimalitytolerance"/><b><span class="u">O</span>ptimality Tolerance</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:msup><m:mn>10</m:mn><m:mrow><m:mo>-</m:mo><m:mn>6</m:mn></m:mrow></m:msup><m:mo>,</m:mo><m:msqrt><m:mi>&#949;</m:mi></m:msqrt></m:mfenced></m:mrow></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&#8805;</m:mo><m:mi>&#949;</m:mi></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;is used to judge the size of the reduced gradients <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>g</m:mi><m:mi>j</m:mi></m:msub><m:mo>-</m:mo><m:msup><m:mi>&#960;</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup><m:msub><m:mi>a</m:mi><m:mi>j</m:mi></m:msub></m:math>.  By definition, the reduced gradients for basic variables are always zero.  Optimality is declared if the reduced gradients for any nonbasic variables at their lower or upper bounds satisfy <m:math><m:mrow><m:mo>-</m:mo><m:mi>r</m:mi></m:mrow><m:mo>&#215;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#960;</m:mi></m:mfenced></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8804;</m:mo><m:mi>r</m:mi><m:mo>&#215;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#960;</m:mi></m:mfenced></m:mfenced></m:mrow></m:math>, and if <m:math><m:mfenced open="|" close="|" separators=""><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:mfenced><m:mo>&#8804;</m:mo><m:mi>r</m:mi><m:mo>&#215;</m:mo><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mn>1</m:mn><m:mo>,</m:mo><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:mi>&#960;</m:mi></m:mfenced></m:mfenced></m:mrow></m:math>&#160;for any superbasic variables.  If <m:math><m:mi>r</m:mi><m:mo>&lt;</m:mo><m:mi>&#949;</m:mi></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_partialprice" id="partialprice"/><b><span class="u">Pa</span>rtial Price</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>10</m:mn></m:math></td></tr></table><div class="paramtext">Note that this option does not apply to QP problems.</div>
<div class="paramtext">This option is recommended for large FP or LP problems that have significantly more variables than constraints (i.e., <m:math><m:mi>n</m:mi><m:mo>&#8811;</m:mo><m:mi>m</m:mi></m:math>).  It reduces the work required for each pricing operation (i.e., when a nonbasic variable is selected to enter the basis).  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, all columns of the constraint matrix <m:math>
 <m:mfenced><m:mtable>
  <m:mtr>
    <m:mtd><m:mi>A</m:mi></m:mtd>
    <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd>
   </m:mtr>
 </m:mtable></m:mfenced>
</m:math>&#160;are searched.  If <m:math><m:mi>i</m:mi><m:mo>&gt;</m:mo><m:mn>1</m:mn></m:math>, <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mrow><m:mo>-</m:mo><m:mi>I</m:mi></m:mrow></m:math>&#160;are partitioned to give <m:math><m:mi>i</m:mi></m:math>&#160;roughly equal segments <m:math><m:msub><m:mi>A</m:mi><m:mi>j</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>K</m:mi><m:mi>j</m:mi></m:msub></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:mi>p</m:mi></m:math>&#160;(modulo <m:math><m:mi>p</m:mi></m:math>).  If the previous pricing search was successful on <m:math><m:msub><m:mi>A</m:mi><m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mo>,</m:mo><m:msub><m:mi>K</m:mi><m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>, the next search begins on the segments <m:math><m:msub><m:mi>A</m:mi><m:mi>j</m:mi></m:msub><m:mo>,</m:mo><m:msub><m:mi>K</m:mi><m:mi>j</m:mi></m:msub></m:math>.  If a reduced gradient is found that is larger than some dynamic tolerance, the variable with the largest such reduced gradient (of appropriate sign) is selected to enter the basis.  If nothing is found, the search continues on the next segments <m:math><m:msub><m:mi>A</m:mi><m:mrow><m:mi>j</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mo>,</m:mo><m:msub><m:mi>K</m:mi><m:mrow><m:mi>j</m:mi><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow></m:msub></m:math>, and so on.  If <m:math><m:mi>i</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_pivottolerance" id="pivottolerance"/><b><span class="u">Pi</span>vot Tolerance</b></td><td class="optparam-center"><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:mn>0.67</m:mn></m:msup></m:math></td></tr></table><div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;is used to prevent columns entering the basis if they would cause the basis to become almost singular.  If <m:math><m:mi>r</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_printlevel" id="printlevel"/><b><span class="u">Pr</span>int Level</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default for E04NKF
<m:math><m:mtext/><m:mo>=</m:mo><m:mn>10</m:mn></m:math><br/>
Default for E04NKA
<m:math><m:mtext/><m:mo>=</m:mo><m:mn>0</m:mn></m:math></td></tr></table><div class="paramtext">The value of <m:math><m:mi>i</m:mi></m:math>&#160;controls the amount of printout produced by E04NKF/E04NKA, as indicated below.  A detailed description of the printed output is given in <a class="sec" href="#fc-printedoutput">Section 8.1</a> (summary output at each iteration and the final solution) and <a class="sec" href="#monitoring">Section 12</a> (monitoring information at each iteration).  Note that the summary output will not exceed <m:math><m:mn>80</m:mn></m:math>&#160;characters per line and that the monitoring information will not exceed <m:math><m:mn>120</m:mn></m:math>&#160;characters per line.  If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div>
<div class="paramtext">The following printout is sent to the current advisory message unit (as defined by <a class="rout" href="../X04/x04abf.xml">X04ABF</a>):
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mi>i</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><b>Output</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mphantom><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">No output.</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mphantom><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:mphantom><m:mn>1</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">The final solution only.</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mphantom><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:mphantom><m:mn>5</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">One line of summary output for each iteration (no printout of the final solution).</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mtext/><m:mo>&#8805;</m:mo><m:mn>10</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">The final solution and one line of summary output for each iteration.</td>
   </tr>
  </tbody>
 </table></div>
</div>
<div class="paramtext">The following printout is sent to the logical unit number defined by the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>:
<div class="left-tablediv"><table class="frame-none">
  
  
  <tbody>
   <tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mi>i</m:mi></m:math></td>
    <td class="libdoc" valign="top" align="left"><b>Output</b></td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mphantom><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:mphantom><m:mn>0</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">No output.</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mphantom><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:mphantom><m:mn>1</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">The final solution only.</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mphantom><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:mphantom><m:mn>5</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">One long line of output for each iteration (no printout of the final solution).</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mtext/><m:mo>&#8805;</m:mo><m:mn>10</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">The final solution and one long line of output for each iteration.</td>
   </tr><tr>
    <td class="libdoc" valign="top" align="center"><m:math><m:mtext/><m:mo>&#8805;</m:mo><m:mn>20</m:mn></m:math></td>
    <td class="libdoc" valign="top" align="left">The final solution, one long line of output for each iteration, matrix statistics (initial status of rows and columns, number of elements, density, biggest and smallest elements, etc.), details of the scale factors resulting from the scaling procedure (if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn><m:mtext>&#8203; or &#8203;</m:mtext><m:mn>2</m:mn></m:math>&#160;(see the description of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction></m:math>), basis factorization statistics and details of the initial basis resulting from the Crash procedure (if <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>; see <a class="sec" href="#parameters">Section 5</a>).</td>
   </tr>
  </tbody>
 </table></div>
</div>
<div class="paramtext">If <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&gt;</m:mo><m:mn>0</m:mn></m:math>&#160;and the unit number defined by optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>&#160;is the same as that defined by <a class="rout" href="../X04/x04abf.xml">X04ABF</a>, then the summary output is suppressed.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_ranktolerance" id="ranktolerance"/><b><span class="u">R</span>ank <span class="u">T</span>olerance</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>100</m:mn><m:mi>&#949;</m:mi></m:math></td></tr></table><table class="optparam"><tr><td class="optparam-left"><a name="optparam_scaleoption" id="scaleoption"/><b><span class="u">Sc</span>ale <span class="u">O</span>ption</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>2</m:mn></m:math></td></tr></table><div class="paramtext">This option enables you to scale the variables and constraints using an iterative procedure due to <a class="ref" href="#ref662">Fourer (1982)</a>, which attempts to compute row scales <m:math><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;and column scales <m:math><m:msub><m:mi>c</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;such that the scaled matrix coefficients <m:math><m:msub><m:mover><m:mi>a</m:mi><m:mo>-</m:mo></m:mover><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:mo>=</m:mo><m:msub><m:mi>a</m:mi><m:mrow><m:mi>i</m:mi><m:mi>j</m:mi></m:mrow></m:msub><m:mo>&#215;</m:mo><m:mfenced separators=""><m:msub><m:mi>c</m:mi><m:mi>j</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi>r</m:mi><m:mi>i</m:mi></m:msub></m:mfenced></m:math>&#160;are as close as possible to unity.  This may improve the overall efficiency on some problems.  (The lower and upper bounds on the variables and slacks for the scaled problem are redefined as <m:math><m:msub><m:mover><m:mi>l</m:mi><m:mo>-</m:mo></m:mover><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>l</m:mi><m:mi>j</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi>c</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;and <m:math><m:msub><m:mover><m:mi>u</m:mi><m:mo>-</m:mo></m:mover><m:mi>j</m:mi></m:msub><m:mo>=</m:mo><m:msub><m:mi>u</m:mi><m:mi>j</m:mi></m:msub><m:mo>/</m:mo><m:msub><m:mi>c</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;respectively, where <m:math><m:msub><m:mi>c</m:mi><m:mi>j</m:mi></m:msub><m:mo>&#8801;</m:mo><m:msub><m:mi>r</m:mi><m:mrow><m:mi>j</m:mi><m:mo>-</m:mo><m:mi>n</m:mi></m:mrow></m:msub></m:math>&#160;if <m:math><m:mi>j</m:mi><m:mo>&gt;</m:mo><m:mi>n</m:mi></m:math>.)</div>
<div class="paramtext">If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>0</m:mn></m:math>, no scaling is performed.  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>1</m:mn></m:math>, all rows and columns of the constraint matrix <m:math><m:mi>A</m:mi></m:math>&#160;are scaled.  If <m:math><m:mi>i</m:mi><m:mo>=</m:mo><m:mn>2</m:mn></m:math>, an additional scaling is performed that may be helpful when the solution <m:math><m:mi>x</m:mi></m:math>&#160;is large; it takes into account columns of <m:math><m:mfenced><m:mtable> <m:mtr> <m:mtd><m:mi>A</m:mi></m:mtd> <m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd> </m:mtr> </m:mtable></m:mfenced></m:math>&#160;that are fixed or have positive lower bounds or negative upper bounds.  If <m:math><m:mi>i</m:mi><m:mo>&lt;</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mi>i</m:mi><m:mo>&gt;</m:mo><m:mn>2</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_scaletolerance" id="scaletolerance"/><b><span class="u">Sc</span>ale <span class="u">T</span>olerance</b></td><td class="optparam-center"><i>r</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mn>0.9</m:mn></m:math></td></tr></table><div class="paramtext">Note that this option does not apply when <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>.</div>
<div class="paramtext">If <m:math><m:mn>0</m:mn><m:mo>&lt;</m:mo><m:mi>r</m:mi><m:mo>&lt;</m:mo><m:mn>1</m:mn></m:math>, <m:math><m:mi>r</m:mi></m:math>&#160;is used to control the number of scaling passes to be made through the constraint matrix <m:math><m:mi>A</m:mi></m:math>.  At least <m:math><m:mn>3</m:mn></m:math>&#160;(and at most <m:math><m:mn>10</m:mn></m:math>) passes will be made.  More precisely, let <m:math><m:msub><m:mi>a</m:mi><m:mi>p</m:mi></m:msub></m:math>&#160;denote the largest column ratio (i.e., <m:math><m:mfrac><m:mrow><m:mtext>'biggest'</m:mtext><m:mtext>&#8203; element</m:mtext></m:mrow>
  <m:mrow><m:mtext>'smallest'</m:mtext><m:mtext>&#8203; element</m:mtext></m:mrow>
 </m:mfrac>
</m:math>&#160;in some sense) after the <m:math><m:mi>p</m:mi></m:math>th scaling pass through <m:math><m:mi>A</m:mi></m:math>.  The scaling procedure is terminated if <m:math><m:msub><m:mi>a</m:mi><m:mi>p</m:mi></m:msub><m:mo>&#8805;</m:mo><m:msub><m:mi>a</m:mi><m:mrow><m:mi>p</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mrow></m:msub><m:mo>&#215;</m:mo><m:mi>r</m:mi></m:math>&#160;for some <m:math><m:mi>p</m:mi><m:mo>&#8805;</m:mo><m:mn>3</m:mn></m:math>.  Thus, increasing the value of <m:math><m:mi>r</m:mi></m:math>&#160;from <m:math><m:mn>0.9</m:mn></m:math>&#160;to <m:math><m:mn>0.99</m:mn></m:math>&#160;(say) will probably increase the number of passes through <m:math><m:mi>A</m:mi></m:math>.</div>
<div class="paramtext">If <m:math><m:mi>r</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>&#160;or <m:math><m:mi>r</m:mi><m:mo>&#8805;</m:mo><m:mn>1</m:mn></m:math>, the default value is used.</div><table class="optparam"><tr><td class="optparam-left"><a name="optparam_superbasicslimit" id="superbasicslimit"/><b><span class="u">Su</span>perbasics Limit</b></td><td class="optparam-center"><i>i</i></td><td class="optparam-right">Default <m:math><m:mtext/><m:mo>=</m:mo><m:mrow><m:mi>min</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mrow><m:msub><m:mi>n</m:mi><m:mi>H</m:mi></m:msub><m:mo>+</m:mo><m:mn>1</m:mn></m:mrow><m:mo>,</m:mo><m:mi>n</m:mi></m:mfenced></m:mrow></m:math></td></tr></table><div class="paramtext">Note that this option does not apply to FP or LP problems.</div>
<div class="paramtext">The value of <m:math><m:mi>i</m:mi></m:math>&#160;specifies &#8216;how nonlinear&#8217; you expect the QP problem to be.  If <m:math><m:mi>i</m:mi><m:mo>&#8804;</m:mo><m:mn>0</m:mn></m:math>, the default value is used.</div><h2 class="standard"><a class="sec" name="monitoring" id="monitoring"/>12&#160;&#160;Description of Monitoring Information</h2>
<div class="paramtext">This section describes the intermediate printout and final printout which constitutes the monitoring information produced by E04NKF/E04NKA.  (See also the description of the optional parameters <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction></m:math>.)  You can control the level of printed output.</div><div class="paramtext">When <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>=</m:mo><m:mn>5</m:mn></m:math>&#160;or <m:math><m:mtext/><m:mo>&#8805;</m:mo><m:mn>10</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>, the following line of intermediate printout (<m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>120</m:mn></m:math>&#160;characters) is produced at every iteration on the unit number specified by optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>.  Unless stated otherwise, the values of the quantities printed are those in effect <span class="italic">on</span>
<span class="italic">completion</span> of the given iteration.
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Itn</span></td>
<td valign="top">
is the iteration count.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">pp</span></td>
<td valign="top">
is the partial price indicator.  The variable selected by the last pricing operation came from the <span class="mono">pp</span>th partition of <m:math><m:mi>A</m:mi></m:math>&#160;and <m:math><m:mrow><m:mo>-</m:mo><m:mi>I</m:mi></m:mrow></m:math>.  Note that <span class="mono">pp</span> is reset to zero whenever the basis is refactorized.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">dj</span></td>
<td valign="top">
is the value of the reduced gradient (or reduced cost) for the variable selected by the pricing operation at the start of the current iteration.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">+S</span></td>
<td valign="top">
is the variable selected by the pricing operation to be added to the superbasic set.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">-S</span></td>
<td valign="top">
is the variable chosen to leave the superbasic set.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">-BS</span></td>
<td valign="top">
is the variable removed from the basis (if any) to become nonbasic.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Step</span></td>
<td valign="top">
is the value of the step length <m:math><m:mi>&#945;</m:mi></m:math>&#160;taken along the current search direction <m:math><m:mi>p</m:mi></m:math>.  The variables <m:math><m:mi>x</m:mi></m:math>&#160;have just been changed to <m:math><m:mi>x</m:mi><m:mo>+</m:mo><m:mi>&#945;</m:mi><m:mi>p</m:mi></m:math>.  If a variable is made superbasic during the current iteration (i.e., <span class="mono">+S</span> is positive), <span class="mono">Step</span> will be the step to the nearest bound.  During the optimality phase, the step can be greater than unity only if the reduced Hessian is not positive-definite.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Pivot</span></td>
<td valign="top">
is the <m:math><m:mi>r</m:mi></m:math>th element of a vector <m:math><m:mi>y</m:mi></m:math>&#160;satisfying <m:math><m:mi>B</m:mi><m:mi>y</m:mi><m:mo>=</m:mo><m:msub><m:mi>a</m:mi><m:mi>q</m:mi></m:msub></m:math>&#160;whenever <m:math><m:msub><m:mi>a</m:mi><m:mi>q</m:mi></m:msub></m:math>&#160;(the <m:math><m:mi>q</m:mi></m:math>th column of the constraint matrix <m:math>
 <m:mfenced><m:mtable>
 <m:mtr><m:mtd><m:mi>A</m:mi></m:mtd><m:mtd><m:mo>-</m:mo><m:mi>I</m:mi></m:mtd></m:mtr></m:mtable></m:mfenced>
</m:math>) replaces the <m:math><m:mi>r</m:mi></m:math>th column of the basis matrix <m:math><m:mi>B</m:mi></m:math>.  Wherever possible, <span class="mono">Step</span> is chosen so as to avoid extremely small values of <span class="mono">Pivot</span> (since they may cause the basis to be nearly singular).  In extreme cases, it may be necessary to increase the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_pivottolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Pivot Tolerance</m:mi></m:maction></m:math>&#160;to exclude very small elements of <m:math><m:mi>y</m:mi></m:math>&#160;from consideration during the computation of <span class="mono">Step</span>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Ninf</span></td>
<td valign="top">
is the number of violated constraints (infeasibilities).  This will be zero during the optimality phase.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Sinf</span>/<span class="mono">Objective</span></td>
<td valign="top">
is the value of the current objective function.  If <m:math><m:mi>x</m:mi></m:math>&#160;is not feasible, <span class="mono">Sinf</span> gives the sum of the magnitudes of constraint violations.  If <m:math><m:mi>x</m:mi></m:math>&#160;is feasible, <span class="mono">Objective</span> is the value of the objective function.  The output line for the final iteration of the feasibility phase (i.e., the first iteration for which <span class="mono">Ninf</span> is zero) will give the value of the true objective at the first feasible point.<div class="paramtext">During the optimality phase, the value of the objective function will be nonincreasing.  During the feasibility phase, the number of constraint infeasibilities will not increase until either a feasible point is found, or the optimality of the multipliers implies that no feasible point exists.</div>
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">L</span></td>
<td valign="top">
is the number of nonzeros in the basis factor <m:math><m:mi>L</m:mi></m:math>.  Immediately after a basis factorization <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:mi>U</m:mi></m:math>, this entry contains <span class="mono">lenL</span>.  Further nonzeros are added to <span class="mono">L</span> when various columns of <m:math><m:mi>B</m:mi></m:math>&#160;are later replaced.  (Thus, <span class="mono">L</span> increases monotonically.)
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">U</span></td>
<td valign="top">
is the number of nonzeros in the basis factor <m:math><m:mi>U</m:mi></m:math>.  Immediately after a basis factorization <m:math><m:mi>B</m:mi><m:mo>=</m:mo><m:mi>L</m:mi><m:mi>U</m:mi></m:math>, this entry contains <span class="mono">lenU</span>.  As columns of <m:math><m:mi>B</m:mi></m:math>&#160;are replaced, the matrix <m:math><m:mi>U</m:mi></m:math>&#160;is maintained explicitly (in sparse form).  The value of <span class="mono">U</span> may fluctuate up or down; in general, it will tend to increase.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Ncp</span></td>
<td valign="top">
is the number of compressions required to recover workspace in the data structure for <m:math><m:mi>U</m:mi></m:math>.  This includes the number of compressions needed during the previous basis factorization.  Normally, <span class="mono">Ncp</span> should increase very slowly.  If it does not, increase <a class="arg" href="#LENIZ">LENIZ</a> and <a class="arg" href="#LENZ">LENZ</a> by at least <m:math><m:mi mathvariant="monospace">L</m:mi><m:mo>+</m:mo><m:mi mathvariant="monospace">U</m:mi></m:math>&#160;and rerun E04NKF/E04NKA (possibly using <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math>; see <a class="sec" href="#parameters">Section 5</a>).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Norm rg</span></td>
<td valign="top">
is <m:math><m:mfenced open="&#8214;" close="&#8214;" separators=""><m:msub><m:mi>d</m:mi><m:mi>S</m:mi></m:msub></m:mfenced></m:math>, the Euclidean norm of the reduced gradient (see <a class="sec" href="#ad-mainiteration">Section 10.3</a>).  During the optimality phase, this norm will be approximately zero after a unit step.  For FP and LP problems, <span class="mono">Norm rg</span> is not printed.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Ns</span></td>
<td valign="top">
is the current number of superbasic variables.  For FP and LP problems, <span class="mono">Ns</span> is not printed.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Cond Hz</span></td>
<td valign="top">
is a lower bound on the condition number of the reduced Hessian (see <a class="sec" href="#algdetails2">Section 10.2</a>).  The larger this number, the more difficult the problem.  For FP and LP <br/>problems, <span class="mono">Cond Hz</span> is not printed.
</td>
</tr></table>
</div><div class="paramtext">When <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>20</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>, the following lines of intermediate printout (<m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>120</m:mn></m:math>&#160;characters) are produced on the unit number specified by optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>&#160;whenever the matrix <m:math><m:mi>B</m:mi></m:math>&#160;or <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub><m:mo>=</m:mo><m:msup><m:mfenced><m:mtable>
  <m:mtr>
   <m:mtd><m:mi>B</m:mi></m:mtd>
   <m:mtd><m:mi>S</m:mi></m:mtd>
  </m:mtr>
 </m:mtable></m:mfenced><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;is factorized.  Gaussian elimination is used to compute an <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization of <m:math><m:mi>B</m:mi></m:math>&#160;or <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>, where <m:math><m:mi>P</m:mi><m:mi>L</m:mi><m:msup><m:mi>P</m:mi><m:mi mathvariant="normal">T</m:mi></m:msup></m:math>&#160;is a lower triangular matrix and <m:math><m:mi>P</m:mi><m:mi>U</m:mi><m:mi>Q</m:mi></m:math>&#160;is an upper triangular matrix for some permutation matrices <m:math><m:mi>P</m:mi></m:math>&#160;and <m:math><m:mi>Q</m:mi></m:math>.  The factorization is stabilized in the manner described under the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_lufactortolerance"><m:mi mathcolor="#800080;" mathvariant="bold">LU Factor Tolerance</m:mi></m:maction></m:math>&#160;(<m:math><m:mtext>default value</m:mtext><m:mo>=</m:mo><m:mn>100.0</m:mn></m:math>).
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Factorize</span></td>
<td valign="top">
is the factorization count.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Demand</span></td>
<td valign="top">
is a code giving the reason for the present factorization as follows:

 <table class="standard-100"><tr>
<td style="width:3.9em;" valign="baseline"><b>Code</b></td>
<td valign="top"><b>Meaning</b></td>
</tr><tr>
<td style="width:3.9em;" valign="baseline"><m:math><m:mphantom><m:mn>01</m:mn></m:mphantom><m:mn>0</m:mn></m:math></td>
<td valign="top">First <m:math><m:mi>L</m:mi><m:mi>U</m:mi></m:math>&#160;factorization.</td>
</tr><tr>
<td style="width:3.9em;" valign="baseline"><m:math><m:mphantom><m:mn>01</m:mn></m:mphantom><m:mn>1</m:mn></m:math></td>
<td valign="top">The number of updates reached the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_factoriz-frequency"><m:mi mathcolor="#800080;" mathvariant="bold">Factorization Frequency</m:mi></m:maction></m:math>.</td>
</tr><tr>
<td style="width:3.9em;" valign="baseline"><m:math><m:mphantom><m:mn>01</m:mn></m:mphantom><m:mn>2</m:mn></m:math></td>
<td valign="top">The number of nonzeros in the updated factors has increased significantly.</td>
</tr><tr>
<td style="width:3.9em;" valign="baseline"><m:math><m:mphantom><m:mn>01</m:mn></m:mphantom><m:mn>7</m:mn></m:math></td>
<td valign="top">Not enough storage to update factors.</td>
</tr><tr>
<td style="width:3.9em;" valign="baseline"><m:math><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>10</m:mn></m:math></td>
<td valign="top">Row residuals too large (see the description for the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_checkfrequency"><m:mi mathcolor="#800080;" mathvariant="bold">Check Frequency</m:mi></m:maction></m:math>).</td>
</tr><tr>
<td style="width:3.9em;" valign="baseline"><m:math><m:mphantom><m:mn>0</m:mn></m:mphantom><m:mn>11</m:mn></m:math></td>
<td valign="top">Ill-conditioning has caused inconsistent results.</td>
</tr></table></td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Iteration</span></td>
<td valign="top">
is the iteration count.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Nonlinear</span></td>
<td valign="top">
is the number of nonlinear variables in the current basis <m:math><m:mi>B</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Linear</span></td>
<td valign="top">
is the number of linear variables in <m:math><m:mi>B</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Slacks</span></td>
<td valign="top">
is the number of slack variables in <m:math><m:mi>B</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Elems</span></td>
<td valign="top">
is the number of nonzeros in <m:math><m:mi>B</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Density</span></td>
<td valign="top">
is the percentage nonzero density of <m:math><m:mi>B</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).  More precisely, <m:math><m:mi mathvariant="monospace">Density</m:mi><m:mo>=</m:mo><m:mn>100</m:mn><m:mo>&#215;</m:mo><m:mi mathvariant="monospace">Elems</m:mi><m:mo>/</m:mo><m:msup><m:mfenced separators=""><m:mi mathvariant="monospace">Nonlinear</m:mi><m:mo>+</m:mo><m:mi mathvariant="monospace">Linear</m:mi><m:mo>+</m:mo><m:mi mathvariant="monospace">Slacks</m:mi></m:mfenced><m:mn>2</m:mn></m:msup></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Compressns</span></td>
<td valign="top">
is the number of times the data structure holding the partially factorized matrix needed to be compressed, in order to recover unused workspace.  Ideally, it should be zero.  If it is more than <m:math><m:mn>3</m:mn></m:math>&#160;or <m:math><m:mn>4</m:mn></m:math>, increase <a class="arg" href="#LENIZ">LENIZ</a> and <a class="arg" href="#LENZ">LENZ</a> and rerun E04NKF/E04NKA (possibly using <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'W'</m:mtext></m:math>; see <a class="sec" href="#parameters">Section 5</a>).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Merit</span></td>
<td valign="top">
is the average Markowitz merit count for the elements chosen to be the diagonals of <m:math><m:mi>P</m:mi><m:mi>U</m:mi><m:mi>Q</m:mi></m:math>.  Each merit count is defined to be <m:math><m:mfenced separators=""><m:mi>c</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced><m:mfenced separators=""><m:mi>r</m:mi><m:mo>-</m:mo><m:mn>1</m:mn></m:mfenced></m:math>, where <m:math><m:mi>c</m:mi></m:math>&#160;and <m:math><m:mi>r</m:mi></m:math>&#160;are the number of nonzeros in the column and row containing the element at the time it is selected to be the next diagonal.  <span class="mono">Merit</span> is the average of <span class="mono">m</span> such quantities.  It gives an indication of how much work was required to preserve sparsity during the factorization.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">lenL</span></td>
<td valign="top">
is the number of nonzeros in <m:math><m:mi>L</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">lenU</span></td>
<td valign="top">
is the number of nonzeros in <m:math><m:mi>U</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Increase</span></td>
<td valign="top">
is the percentage increase in the number of nonzeros in <m:math><m:mi>L</m:mi></m:math>&#160;and <m:math><m:mi>U</m:mi></m:math>&#160;relative to the number of nonzeros in <m:math><m:mi>B</m:mi></m:math>.  More precisely, <m:math><m:mi mathvariant="monospace">Increase</m:mi><m:mo>=</m:mo><m:mn>100</m:mn><m:mo>&#215;</m:mo><m:mfenced separators=""><m:mi mathvariant="monospace">lenL</m:mi><m:mo>+</m:mo><m:mi mathvariant="monospace">lenU</m:mi><m:mo>-</m:mo><m:mspace linebreak="newline"/><m:mi mathvariant="monospace">Elems</m:mi></m:mfenced><m:mo>/</m:mo><m:mi mathvariant="monospace">Elems</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">m</span></td>
<td valign="top">
is the number of rows in the problem.  Note that <m:math><m:mi mathvariant="monospace">m</m:mi><m:mo>=</m:mo><m:mi mathvariant="monospace">Ut</m:mi><m:mo>+</m:mo><m:mi mathvariant="monospace">Lt</m:mi><m:mo>+</m:mo><m:mi mathvariant="monospace">bp</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Ut</span></td>
<td valign="top">
is the number of triangular rows of <m:math><m:mi>B</m:mi></m:math>&#160;at the top of <m:math><m:mi>U</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">d1</span></td>
<td valign="top">
is the number of columns remaining when the density of the basis matrix being factorized reached <m:math><m:mn>0.3</m:mn></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Lmax</span></td>
<td valign="top">
is the maximum subdiagonal element in the columns of <m:math><m:mi>L</m:mi></m:math>.  This will not exceed the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_lufactortolerance"><m:mi mathcolor="#800080;" mathvariant="bold">LU Factor Tolerance</m:mi></m:maction></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Bmax</span></td>
<td valign="top">
is the maximum nonzero element in <m:math><m:mi>B</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">BSmax</span></td>
<td valign="top">
is the maximum nonzero element in <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;(not printed if <m:math><m:mi>B</m:mi></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Umax</span></td>
<td valign="top">
is the maximum nonzero element in <m:math><m:mi>U</m:mi></m:math>, excluding elements of <m:math><m:mi>B</m:mi></m:math>&#160;that remain in <m:math><m:mi>U</m:mi></m:math>&#160;unchanged.  (For example, if a slack variable is in the basis, the corresponding row of <m:math><m:mi>B</m:mi></m:math>&#160;will become a row of <m:math><m:mi>U</m:mi></m:math>&#160;without modification.  Elements in such rows will not contribute to <span class="mono">Umax</span>.  If the basis is strictly triangular then <span class="italic">none</span> of the elements of <m:math><m:mi>B</m:mi></m:math>&#160;will contribute and <span class="mono">Umax</span> will be zero.)<div class="paramtext">Ideally, <span class="mono">Umax</span> should not be significantly larger than <span class="mono">Bmax</span>.  If it is several orders of magnitude larger, it may be advisable to reset the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_lufactortolerance"><m:mi mathcolor="#800080;" mathvariant="bold">LU Factor Tolerance</m:mi></m:maction></m:math>&#160;to some value nearer unity.</div><div class="paramtext"><span class="mono">Umax</span> is not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized.</div>
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Umin</span></td>
<td valign="top">
is the magnitude of the smallest diagonal element of <m:math><m:mi>P</m:mi><m:mi>U</m:mi><m:mi>Q</m:mi></m:math>&#160;(not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Growth</span></td>
<td valign="top">
is the value of the ratio <span class="mono">Umax</span>/<span class="mono">Bmax</span>, which should not be too large.<div class="paramtext">Providing <span class="mono">Lmax</span> is not large (say, <m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>10.0</m:mn></m:math>), the ratio <m:math><m:mrow><m:mi>max</m:mi><m:mspace width="0.125em"/><m:mfenced separators=""><m:mi mathvariant="monospace">Bmax</m:mi><m:mo>,</m:mo><m:mi mathvariant="monospace">Umax</m:mi></m:mfenced></m:mrow><m:mo>/</m:mo><m:mi mathvariant="monospace">Umin</m:mi></m:math>&#160;is an estimate of the condition number of <m:math><m:mi>B</m:mi></m:math>.  If this number is extremely large, the basis is nearly singular and some numerical difficulties might occur.  (However, an effort is made to avoid near-singularity by using slacks to replace columns of <m:math><m:mi>B</m:mi></m:math>&#160;that would have made <span class="mono">Umin</span> extremely small and the modified basis is refactorized.)</div><div class="paramtext"><span class="mono">Growth</span> is not printed if <m:math><m:msub><m:mi>B</m:mi><m:mi>S</m:mi></m:msub></m:math>&#160;is factorized.</div></td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Lt</span></td>
<td valign="top">
is the number of triangular columns of <m:math><m:mi>B</m:mi></m:math>&#160;at the left of <m:math><m:mi>L</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">bp</span></td>
<td valign="top">
is the size of the &#8216;bump&#8217; or block to be factorized nontrivially after the triangular rows and columns of <m:math><m:mi>B</m:mi></m:math>&#160;have been removed.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">d2</span></td>
<td valign="top">
is the number of columns remaining when the density of the basis matrix being factorized has reached <m:math><m:mn>0.6</m:mn></m:math>.
</td>
</tr></table>
</div><div class="paramtext">When <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>20</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>, the following lines of intermediate printout (<m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>80</m:mn></m:math>&#160;characters) are produced on the unit number specified by optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>&#160;whenever <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#START"><m:mi mathcolor="#EE0000" mathvariant="bold">START</m:mi></m:maction><m:mo>=</m:mo><m:mtext>'C'</m:mtext></m:math>&#160;(see <a class="sec" href="#parameters">Section 5</a>).  They refer to the number of columns selected by the Crash procedure during each of several passes through <m:math><m:mi>A</m:mi></m:math>, whilst searching for a triangular basis matrix.
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Slacks</span></td>
<td valign="top">
is the number of slacks selected initially.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Free cols</span></td>
<td valign="top">
is the number of free columns in the basis, including those whose bounds are rather far apart.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Preferred</span></td>
<td valign="top">
is the number of &#8216;preferred&#8217; columns in the basis (i.e., <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>3</m:mn></m:math>&#160;for some <m:math><m:mi>j</m:mi><m:mo>&#8804;</m:mo><m:mi>n</m:mi></m:math>).  It will be a subset of the columns for which <m:math><m:mrow><m:maction actiontype="link" dsi:type="simple" dsi:href="#ISTATE"><m:mi mathcolor="#EE0000" mathvariant="bold">ISTATE</m:mi></m:maction><m:mfenced separators="," open="(" close=")"><m:mi>j</m:mi></m:mfenced></m:mrow><m:mo>=</m:mo><m:mn>3</m:mn></m:math>&#160;was specified.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Unit</span></td>
<td valign="top">
is the number of unit columns in the basis.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Double</span></td>
<td valign="top">
is the number of double columns in the basis.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Triangle</span></td>
<td valign="top">
is the number of triangular columns in the basis.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Pad</span></td>
<td valign="top">
is the number of slacks used to pad the basis (to make it a nonsingular triangle).
</td>
</tr></table>
</div><div class="paramtext">When <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>20</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>, the following lines of intermediate printout (<m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>80</m:mn></m:math>&#160;characters) are produced on the unit number specified by optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>.  They refer to the elements of the <a class="arg" href="#NAMES">NAMES</a> array (see <a class="sec" href="#parameters">Section 5</a>).
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Name</span></td>
<td valign="top">
gives the name for the problem (blank if problem unnamed).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Status</span></td>
<td valign="top">
gives the exit status for the problem (i.e., <span class="mono">Optimal soln</span>, <span class="mono">Weak soln</span>, <span class="mono">Unbounded</span>, <span class="mono">Infeasible</span>, <span class="mono">Excess itns</span>, <span class="mono">Error condn</span> or <span class="mono">Feasble soln</span>) followed by details of the direction of the optimization (i.e., <span class="mono">(Min)</span> or <span class="mono">(Max)</span>).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Objective</span></td>
<td valign="top">
gives the name of the free row for the problem (blank if objective unnamed).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">RHS</span></td>
<td valign="top">
gives the name of the constraint right-hand side for the problem (blank if objective unnamed).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Ranges</span></td>
<td valign="top">
gives the name of the ranges for the problem (blank if objective unnamed).
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Bounds</span></td>
<td valign="top">
gives the name of the bounds for the problem (blank if objective unnamed).
</td>
</tr></table>
</div><div class="paramtext">When <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_printlevel"><m:mi mathcolor="#800080;" mathvariant="bold">Print Level</m:mi></m:maction><m:mo>=</m:mo><m:mn>1</m:mn></m:math>&#160;or <m:math><m:mtext/><m:mo>&#8805;</m:mo><m:mn>10</m:mn></m:math>&#160;and <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction><m:mo>&#8805;</m:mo><m:mn>0</m:mn></m:math>, the following lines of final printout (<m:math><m:mtext/><m:mo>&lt;</m:mo><m:mn>120</m:mn></m:math>&#160;characters) are produced on the unit number specified by optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_monitoringfile"><m:mi mathcolor="#800080;" mathvariant="bold">Monitoring File</m:mi></m:maction></m:math>.</div><div class="paramtext">Let <m:math><m:msub><m:mi>a</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;denote the <m:math><m:mi>j</m:mi></m:math>th column of <m:math><m:mi>A</m:mi></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:mi>n</m:mi></m:math>.  The following describes the printout for each column (or variable).  A full stop (.)  is printed for any numerical value that is zero.
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Number</span></td>
<td valign="top">
is the column number <m:math><m:mi>j</m:mi></m:math>.  (This is used internally to refer to <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;in the intermediate output.)
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Column</span></td>
<td valign="top">
gives the name of <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">State</span></td>
<td valign="top">
gives the state of the variable (<span class="mono">LL</span> if nonbasic on its lower bound, <span class="mono">UL</span> if nonbasic on its upper bound, <span class="mono">EQ</span> if nonbasic and fixed, <span class="mono">FR</span> if nonbasic and strictly between its bounds, <span class="mono">BS</span> if basic and <span class="mono">SBS</span> if superbasic).

 <div class="paramtext">

A key is sometimes printed before <span class="mono">State</span>.
 Note that unless the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;is specified, the tests for assigning a key are applied to the variables of the scaled problem.

 <table class="standard-100"><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">A</span></td>
<td valign="top">
<span class="italic">Alternative optimum possible</span>.  The variable is nonbasic, but its reduced gradient is essentially zero.  This means that if the variable were allowed to start moving away from its bound, there would be no change in the value of the objective function.  The values of the other free variables <span class="italic">might</span> change, giving a genuine alternative solution.  However, if there are any degenerate variables (labelled <span class="mono">D</span>), the actual change might prove to be zero, since one of them could encounter a bound immediately.  In either case, the values of the Lagrange multipliers <span class="italic">might</span> also change.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">D</span></td>
<td valign="top">
<span class="italic">Degenerate</span>.  The variable is basic or superbasic, but it is equal (or very close) to one of its bounds.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">I</span></td>
<td valign="top">
<span class="italic">Infeasible</span>.  The variable is basic or superbasic and is currently violating one of its bounds by more than the value of the <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">N</span></td>
<td valign="top">
<span class="italic">Not precisely optimal</span>.  The variable is nonbasic or superbasic.  If the value of the reduced gradient for the variable exceeds the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_optimalitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Optimality Tolerance</m:mi></m:maction></m:math>, the solution would not be declared optimal because the reduced gradient for the variable would not be considered negligible.
</td>
</tr></table>
 </div></td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Activity</span></td>
<td valign="top">
is the value of <m:math><m:msub><m:mi>x</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;at the final iterate.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Obj Gradient</span></td>
<td valign="top">
is the value of <m:math><m:msub><m:mi>g</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;at the final iterate.  For FP problems, <m:math><m:msub><m:mi>g</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is set to zero.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Lower Bound</span></td>
<td valign="top">
is the lower bound specified for the variable.  <span class="mono">None</span> indicates that <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mo>-</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Upper Bound</span></td>
<td valign="top">
is the upper bound specified for the variable.  <span class="mono">None</span> indicates that <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Reduced Gradnt</span></td>
<td valign="top">
is the value of <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;at the final iterate (see <a class="sec" href="#ad-mainiteration">Section 10.3</a>).  For FP problems, <m:math><m:msub><m:mi>d</m:mi><m:mi>j</m:mi></m:msub></m:math>&#160;is set to zero.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">m + j</span></td>
<td valign="top">
is the value of <m:math><m:mi>m</m:mi><m:mo>+</m:mo><m:mi>j</m:mi></m:math>.
</td>
</tr></table>
</div><div class="paramtext">Let <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;denote the <m:math><m:mi>i</m:mi></m:math>th row of <m:math><m:mi>A</m:mi></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>m</m:mi></m:math>.  The following describes the printout for each row (or constraint).  A full stop (.)  is printed for any numerical value that is zero.
<table class="standard-100"><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Number</span></td>
<td valign="top">
is the value of <m:math><m:mi>n</m:mi><m:mo>+</m:mo><m:mi>i</m:mi></m:math>.  (This is used internally to refer to <m:math><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;in the intermediate output.)
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Row</span></td>
<td valign="top">
gives the name of <m:math><m:msub><m:mi>&#957;</m:mi><m:mi>i</m:mi></m:msub></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">State</span></td>
<td valign="top">
gives the state of <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;(<span class="mono">LL</span> if active on its lower bound, <span class="mono">UL</span> if active on its upper bound, <span class="mono">EQ</span> if active and fixed, <span class="mono">BS</span> if inactive when <m:math><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is basic and <span class="mono">SBS</span> if inactive when <m:math><m:msub><m:mi>s</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is superbasic).

 <div class="paramtext">

A key is sometimes printed before <span class="mono">State</span>.
 Note that unless the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_scaleoption"><m:mi mathcolor="#800080;" mathvariant="bold">Scale Option</m:mi></m:maction><m:mo>=</m:mo><m:mn>0</m:mn></m:math>&#160;is specified, the tests for assigning a key are applied to the variables of the scaled problem.

 <table class="standard-100"><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">A</span></td>
<td valign="top">
<span class="italic">Alternative optimum possible</span>.  The variable is nonbasic, but its reduced gradient is essentially zero.  This means that if the variable were allowed to start moving away from its bound, there would be no change in the value of the objective function.  The values of the other free variables <span class="italic">might</span> change, giving a genuine alternative solution.  However, if there are any degenerate variables (labelled <span class="mono">D</span>), the actual change might prove to be zero, since one of them could encounter a bound immediately.  In either case, the values of the Lagrange multipliers <span class="italic">might</span> also change.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">D</span></td>
<td valign="top">
<span class="italic">Degenerate</span>.  The variable is basic or superbasic, but it is equal (or very close) to one of its bounds.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">I</span></td>
<td valign="top">
<span class="italic">Infeasible</span>.  The variable is basic or superbasic and is currently violating one of its bounds by more than the value of the <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_feasibilitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Feasibility Tolerance</m:mi></m:maction></m:math>.
</td>
</tr><tr>
<td style="width:3.0em;" valign="baseline"><span class="mono">N</span></td>
<td valign="top">
<span class="italic">Not precisely optimal</span>.  The variable is nonbasic or superbasic.  If the value of the reduced gradient for the variable exceeds the value of the optional parameter <m:math><m:maction actiontype="link" dsi:type="simple" dsi:href="#optparam_optimalitytolerance"><m:mi mathcolor="#800080;" mathvariant="bold">Optimality Tolerance</m:mi></m:maction></m:math>, the solution would not be declared optimal because the reduced gradient for the variable would not be considered negligible.
</td>
</tr></table>
 </div></td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Activity</span></td>
<td valign="top">
is the value of <m:math><m:msub><m:mi>v</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;at the final iterate.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Slack Activity</span></td>
<td valign="top">
is the value by which the row differs from its nearest bound.  (For the free row (if any), it is set to <span class="mono">Activity</span>.)
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Lower Bound</span></td>
<td valign="top">
is the lower bound specified for the variable.  <span class="mono">None</span> indicates that <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8804;</m:mo><m:mo>-</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Upper Bound</span></td>
<td valign="top">
is the upper bound specified for the variable.  <span class="mono">None</span> indicates that <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>j</m:mi></m:mfenced></m:mrow><m:mo>&#8805;</m:mo><m:mi mathvariant="italic">bigbnd</m:mi></m:math>.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">Dual Activity</span></td>
<td valign="top">
is the value of the dual variable <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;(the Lagrange multiplier for <m:math><m:msub><m:mi>&#957;</m:mi><m:mi>i</m:mi></m:msub></m:math>; see <a class="sec" href="#ad-mainiteration">Section 10.3</a>).  For FP problems, <m:math><m:msub><m:mi>&#960;</m:mi><m:mi>i</m:mi></m:msub></m:math>&#160;is set to zero.
</td>
</tr><tr>
<td style="width:10.2em;" valign="baseline"><span class="mono">i</span></td>
<td valign="top">
gives the index <m:math><m:mi>i</m:mi></m:math>&#160;of the <m:math><m:mi>i</m:mi></m:math>th row.
</td>
</tr></table>
</div><div class="paramtext">Numerical values are output with a fixed number of digits; they are not guaranteed to be accurate to this precision.</div>
<hr/><div><a class="rout" href="../../pdf/E04/e04nkf.pdf">E04NKF/E04NKA (PDF version)</a></div><div><a class="chap" href="e04conts.xml">E04 Chapter Contents</a></div><div><a class="chapint" href="e04intro.xml">E04 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>
