<?xml version="1.0" encoding="ISO-8859-1"?>
<chapter id="messages">
  <title>
  Messages
  </title>
  <para>
  Some of the more common messages and codes passed by CLP are listed in the
  tables below.  This is list is not meant to exhaustive.  The notation is as
  for printf from &quot;C&quot;:
  </para>
  <itemizedlist>
    <listitem>
    <simpara>
    <computeroutput>%s</computeroutput> is a string
    </simpara>
    </listitem>
    <listitem>
    <simpara>
    <computeroutput>%d</computeroutput> is an integer
    </simpara>
    </listitem>
    <listitem>
    <simpara>
    <computeroutput>%g</computeroutput> or <computeroutput>%f</computeroutput>
    is a floating point value
    </simpara>
    </listitem>
  </itemizedlist>

  <table frame="none" align="left">
  <title>
  COIN Messages passed at or above logging level 1
  </title>
  <tgroup cols="4" colsep="1" rowsep="1">
  <colspec colname="c1"/>
  <colspec colname="c2"/>
  <colspec colname="c3"/>
  <colspec colname="c4"/>
  <thead>
    <row>
      <entry align="center">
      Code
      </entry>
      <entry align="center">
      Area
      </entry>
      <entry>
      </entry>
      <entry align="left">
      Text and notes
      </entry>
    </row>
  </thead>
  <tbody>
    <row>
      <entry align="left">
      1
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>At line %d %s</computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      This just prints out NAME line, ROW line, etc
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      2
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>Problem %s has %d rows, %d columns and %d elements
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      This gives statistics after reading an MPS file
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      8
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>%s read with %d errors
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      This gives error statistics for file
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      505
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolved poblem not optimal, resolve after postsolve
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      This could be because it was not feasible or because of maximum 
      iterations.  If this message occurs then consider using primal clean up
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      506
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolve %d (%d) rows, %d (%d) columns and %d (%d) elements
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The first number is the number after presolve and the number
      in parentheses is amount of reduction
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      510
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolve is modifying %d integer bounds and re-presolving
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If presolve determines at the end that an integer variable have its bounds
      changed then it will repeat the entrire presolve
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      511
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      After Postsolve, objective %g, infeasibilities - dual %g (%d), 
      primal %g (%d)
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      This gives the state after postsolve - this gives the objective value 
      and the sum of dual and primal infeasibilities with the number of 
      infeasibilities in parentheses.  Hopefully these should be zero
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      512
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolved model was optimal, full model needs cleaning up
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If the numbers in previous message (511) were large then maybe we need to
      know, if small then that's life
      </simpara>
      </entry>
    </row>
  </tbody>
  </tgroup>
  </table>

  <table frame="none" align="left">
  <title>
  CLP Messages passed at or above logging level 1
  </title>
  <tgroup cols="4" colsep="1" rowsep="1">
  <colspec colname="c1"/>
  <colspec colname="c2"/>
  <colspec colname="c3"/>
  <colspec colname="c4"/>
  <thead>
    <row>
      <entry align="center">
      Code
      </entry>
      <entry align="center">
      Area
      </entry>
      <entry>
      </entry>
      <entry align="left">
      Text and notes
      </entry>
    </row>
  </thead>
  <tbody>
    <row>
    <row>
      <entry align="left">
      0
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Optimal - objective value %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The only message you want to see
      </simpara>
      </entry>
    </row>
      <entry align="left">
      1
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Primal infeasible - objective value %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      You may need to look at previous messages or use methods.  Such as
      sumPrimalInfeasibilities() to find cause
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      2
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Dual infeasible - objective value %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      You may need to look at previous messages or use methods.  Such as
      sumDualInfeasibilities() to find cause
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      3
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Stopped - objective value %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The algorithm stopped as requested by the user.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      4
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Stopped due to errors - objective value %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      Switch on log level 2 to see information on size of elements etc.  If they
      look reasonable then maybe we need to know.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      5
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      %d Obj %g Primal inf %g (%d) Dual inf %g (%d)
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      At each re-factorization this gives the number of iterations and the value
      of the objective function.  If there are primal infeasibilities then the
      sum and number are given and similarly for dual infeasibilities.
      (This is a simplified form of message.)
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      14
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Perturbing problem by %g % of %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      There is more to this message but if the user sees this then s/he has
      chosen to perturb the problem or the algorithm has decided to do so.
      If the numbers look too large the user may wish to think again.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      19
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      %d variables/rows fixed as scaled bounds too close
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If this occurs look carefully at your input data
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      24
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Matrix will be packed to eliminate small elements
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If this occurs the user should look carefully at data.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      26
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Matrix will be packed to eliminate %d duplicate elements
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If this occurs the user should look carefully at data.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      28
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Crash put %d variables in basis, %d dual infeasibilities
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      29
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      End of values pass after %d iterations
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      ??? If primal(1) or dual(1) the a sweep through model is made and this
      signals end of pass.
      </simpara>
      </entry>
    </row>

  </tbody>
  </tgroup>
  </table>

  <table frame="none" align="left">
  <title>
  COIN Messages passed at or above logging level 0
  </title>
  <tgroup cols="4" colsep="1" rowsep="1">
  <colspec colname="c1"/>
  <colspec colname="c2"/>
  <colspec colname="c3"/>
  <colspec colname="c4"/>
  <thead>
    <row>
      <entry align="center">
      Code
      </entry>
      <entry align="center">
      Area
      </entry>
      <entry>
      </entry>
      <entry align="left">
      Text and notes
      </entry>
    </row>
  </thead>
  <tbody>
    <row>
      <entry align="left">
      3001
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Illegal value for %s of %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      String will be &quot;infinity&quot; if setInfinity passed bad value,
      or &quot;default integer bound&quot; if setDefaultBound passed bad value.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      3002
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Bad image at line %d &lt; %s &gt;
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      This gives line number and the offending line
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      3003
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Duplicate objective at line %d &lt; %s &gt;
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      An objective row appears twice in one column
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      3004
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Duplicate row %s at line %d %s
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The named row appears twice in one column.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      3005
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      No match for row %s at line %d &lt; %s &gt;
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The named row did not appear in ROWS section.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      3006
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      No match for column at line %d &lt; %s &gt;
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The named column (in BOUNDS section) did not appear in COLUMNS section.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6001
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Unable to open mps input file %s
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6002
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Unknown image %s at line %d of file %s
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The Mps reader could not make sense of the image file specified.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6003
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Consider the possibility of a compressed file which zlib is unable to read.
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      Some .gz files can not be read by zlib.  Using gunzip and then gzip
      normally cures problem. 
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6004
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      EOF on file %s
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The Mps reader did not find expected section marker.      
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6005
      </entry>
      <entry align="center">
      MPSREAD
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Returning as too many errors
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      The reader has put out 100 messages and is giving up.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      507
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolve determined that the problem is infeasible with tolerance of %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If you want you can try with a larger tolerance
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      508
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolve thinks problem is unbounded
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      Perhaps the user should maximize if initially minimizing or vice versa.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      509
      </entry>
      <entry align="center">
      PRESOLVE
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Presolve thinks problem is infeasible AND unbounded???
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      If you get this message we want to know
      </simpara>
      </entry>
    </row>
  </tbody>
  </tgroup>
  </table>

  <table frame="none" align="left">
  <title>
  CLP Messages passed at or above logging level 0
  </title>
  <tgroup cols="4" colsep="1" rowsep="1">
  <colspec colname="c1"/>
  <colspec colname="c2"/>
  <colspec colname="c3"/>
  <colspec colname="c4"/>
  <thead>
    <row>
      <entry align="center">
      Code
      </entry>
      <entry align="center">
      Area
      </entry>
      <entry>
      </entry>
      <entry align="left">
      Text and notes
      </entry>
    </row>
  </thead>
  <tbody>
    <row>
      <entry align="left">
      3002
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Not solving empty problem - %d rows, %d columns and %d elements
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      Test problem size before solving.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6002
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      %d bad bound pairs or bad objectives were found
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      Either the value in the objective was too large or a lower bound was
      greater than an upper bound.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6003
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Matrix has %d large values, first at column %d, row %d is %g
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      Some of the values in matrix are ridiculous.
      </simpara>
      </entry>
    </row>
    <row>
      <entry align="left">
      6004
      </entry>
      <entry align="center">
      SIMPLEX
      </entry>
      <entry>
      </entry>
      <entry align="left">
      <computeroutput>
      Can't get out of loop ...
      </computeroutput>
      </entry>
    </row>
    <row>
      <entry namest="c1" nameend="c3">
      </entry>
      <entry align="left">
      <simpara>
      
      </simpara>
      </entry>
    </row>
  </tbody>
  </tgroup>
  </table>
  <para>
  There are also messages available at log level 2 (the most likely useful relate
  to scaling), and will be addressed in a future version of this User Guide.
  </para>
</chapter>