These files provide compatibility with commercial mathematical programming systems. The PUNCH file from a previous run may be used as an INSERT file for a later run on the same problem. It may also be possible to modify the INSERT file and/or problem and still obtain a useful advanced basis.
The standard MPS format has been slightly generalized to allow the saving and reloading of nonbasic solutions. It is illustrated in Figure 2. Apart from the first and last line, each entry has the following form:
|
Columns |
2-3 |
5-12 |
15-22 |
25-36 |
|
Contents |
Key |
Name1 |
Name2 |
Value |
The various keys are best defined in terms of the action they cause on input. It is assumed that the basis is initially set to be the full set of slack variables, and that column variables are initially at their smallest bound in absolute magnitude, or zero for free variables.
|
Key |
Action to be taken during INSERT |
|
XL |
Make variable Name1 basic and slack Name2 nonbasic at its lower bound. |
|
XU |
Make variable Name1 basic and slack Name2 nonbasic at its upper bound. |
|
LL |
Make variable Name1 nonbasic at its lower bound. |
|
UL |
Make variable Name1 nonbasic at its upper bound. |
|
SB |
Make variable Name1 superbasic at the specified Value. |
Note that Name1 may be a column name or a row name, but on XL and XU lines, Name2 must be a row name. In all cases, row names indicate the associated slack variable, and if Name1 is a nonlinear variable then its Value is recorded for possible use in defining the initial Jacobian matrix. The key SB is an addition to the standard MPS format to allow for nonbasic solutions.
Variables are output in natural order. For example, on the first XL or XU line, Name1 will be the first basic column and Name2 will be the first row whose slack is not basic.
LL lines are not output for nonbasic variables if the corresponding lower bound value is zero.
Before an INSERT file is read, column variables are made nonbasic at their smallest bound in absolute magnitude, and the slack variables are made basic.
Preferably an INSERT file should be an unmodified PUNCH file from an earlier run on the same problem. If some rows have been added to the problem, the INSERT file need not be altered. (The slacks for the new rows will be in the basis.)
Entries will be ignored if Name1 is already basic or superbasic. XL and XU lines will be ignored if Name2 is not basic.
SB lines may be added before the ENDATA line, to specify additional superbasic columns or slacks.
An SB line will not alter the status of Name1 if the Superbasics limit has been reached. However, the associated Value will be retained.