NAG Library Routine Document
e04mzf
(qpconvex1_sparse_mps)
1
Purpose
e04mzf reads data for a sparse linear programming or quadratic programming problem from an external file which is in standard or compatible MPSX input format.
2
Specification
Fortran Interface
Subroutine e04mzf ( 
infile,
maxn,
maxm,
maxnnz,
xbldef,
xbudef,
mpslst,
n,
m,
nnz,
iobj,
ncolh,
a,
ha,
ka,
bl,
bu,
start,
names,
nname,
crname,
xs,
istate,
ifail) 
Integer, Intent (In)  :: 
infile,
maxn,
maxm,
maxnnz  Integer, Intent (Inout)  :: 
ifail  Integer, Intent (Out)  :: 
n,
m,
nnz,
iobj,
ncolh,
ha(maxnnz),
ka(maxn+1),
nname,
istate(maxn+maxm)  Real (Kind=nag_wp), Intent (In)  :: 
xbldef,
xbudef  Real (Kind=nag_wp), Intent (Out)  :: 
a(maxnnz),
bl(maxn+maxm),
bu(maxn+maxm),
xs(maxn+maxm)  Logical, Intent (In)  :: 
mpslst  Character (1), Intent (Out)  :: 
start  Character (8), Intent (Inout)  :: 
names(5)  Character (8), Intent (Out)  :: 
crname(maxn+maxm) 

C Header Interface
#include nagmk26.h
void 
e04mzf_ (
const Integer *infile,
const Integer *maxn,
const Integer *maxm,
const Integer *maxnnz,
const double *xbldef,
const double *xbudef,
const logical *mpslst,
Integer *n,
Integer *m,
Integer *nnz,
Integer *iobj,
Integer *ncolh,
double a[],
Integer ha[],
Integer ka[],
double bl[],
double bu[],
char *start,
char names[],
Integer *nname,
char crname[],
double xs[],
Integer istate[],
Integer *ifail,
const Charlen length_start,
const Charlen length_names,
const Charlen length_crname) 

3
Description
e04mzf reads linear programming (LP) or quadratic programming (QP) problem data from an external file which is prepared in standard or compatible MPSX (see
IBM (1971)) input format and then initializes
$n$ (the number of variables),
$m$ (the number of general linear constraints), the
$m$ by
$n$ matrix
$A$, and the vectors
$l$,
$u$ and
$c$ (stored in row
iobj of
$A$) for use with
e04nkf, which is designed to solve problems of the form
For LP problems,
$H=0$. For QP problems, you must set
${\mathbf{ncolh}}>0$ (see
Section 5) and provide a subroutine to
e04nkf to compute
$Hx$ for any given vector
$x$. (This is illustrated in
Section 10.) The optional parameter
Maximize may be used to specify an alternative problem in which the objective function is maximized (see
Section 12.1 in
e04nkf/e04nka).
MPSX input format
The input file of data may only contain two types of lines:
1. 
Indicator lines (specifying the type of data which is to follow). 
2. 
Data lines (specifying the actual data). 
The input file must not contain any blank lines. Any characters beyond column 80 are ignored. Indicator lines must not contain leading blank characters (in other words they must begin in column 1). The following displays the order in which the indicator lines must appear in the file:
NAME 
usersupplied name 
ROWS 

data line(s) 
COLUMNS 

data line(s) 
RHS 

data line(s) 
RANGES 
(optional) 

data line(s) 
BOUNDS 
(optional) 

data line(s) 
ENDATA 
The ‘usersupplied name’ specifies a name for the problem and must occupy columns $15\u201322$. The name can either be blank or up to a maximum of $8$ characters.
A data line follows the same fixed format made up of fields defined below. The contents of the fields may have different significance depending upon the section of data in which they appear.

Field 1 
Field 2 
Field 3 
Field 4 
Field 5 
Field 6 
Columns 
$2\u20133$ 
$5\u201312$ 
$15\u201322$ 
$25\u201336$ 
$40\u201347$ 
$50\u201361$ 
Contents 
Code 
Name 
Name 
Value 
Name 
Value 
The names and codes consist of ‘alphanumeric’ characters (i.e., a–z, A–Z, $0$–9, $+$, $$, *, blank ( ), :, $ or full stop (.) only) and the names must not contain leading blank characters. Values are read using Fortran format $\text{E12.0}$. This allows values to be entered in several equivalent forms. For example, $1.2345678$, $\text{1.2345678E+0}$, $\text{123.45678E\u22122}$ and $\text{12345678E\u221207}$ all represent the same number. It is safest to include an explicit decimal point.
Note that in order to ensure numeric values are interpreted as intended, they should be
rightjustified in the
$12$character field, with no trailing blanks. This is because in some situations trailing blanks may be interpreted as zeros and this can dramatically affect the interpretation of the value. This is relevant if the value contains an exponent, or if it contains neither an exponent nor an explicit decimal point. For example, the fields
%%%%1.23E2%
%%%%%%%123%%
may be interpreted as
$\text{1.23E\u221220}$ and
$12300$ respectively (where
% denotes a blank). The actual behaviour is systemdependent.
Comment lines are allowed in the data file. These must have an asterisk (*) in column 1 and any characters in columns 2–80. In any data line, a dollar sign ($) as the first character in Field 3 or 5 indicates that the information from that point through column 80 consists of comments.
Columns outside the six fields must be blank, except for columns 72–80, whose contents are ignored by the routine. These columns may be used to enter a sequence number. A nonblank character outside the predefined six fields and columns 72–80 is considered to be a major error (
${\mathbf{ifail}}={\mathbf{13}}$; see
Section 6), unless it is part of a comment.
ROWS Data Lines
These lines specify row (constraint) names and their inequality types (i.e.,
$=$,
$\ge $ or
$\le $).
Field 1: 
defines the constraint type. It may be in column 2 or column 3. 
N 
free row, that is no constraint. It may be used to define the objective row. 
G 
greater than or equal to (i.e., $\ge $). 
L 
less than or equal to (i.e., $\le $). 
E 
exactly equal to (i.e., $=$). 
Field 2: 
defines the row name. 
Row type
N stands for ‘Not binding’, also known as ‘Free’. It can be used to define the objective row. The objective row is a free row that specifies the vector
$c$ in the linear objective term
${c}^{\mathrm{T}}x$. It is taken to be the first free row, unless some other free row name is specified by the
names array (see
Section 5). Note that
$c$ is assumed to be zero if (for example) the line
%N%%DUMMYROW
(where
% denotes a blank) appears in the ROWS section of the MPSX data file, and the row name
DUMMYROW is omitted from the COLUMNS section.
COLUMNS Data Lines
These lines specify the names to be assigned to the variables (columns) in the general linear constraint matrix
$A$, and define, in terms of column vectors, the actual values of the corresponding matrix elements.
 Field 1: blank (ignored).
 Field 2: gives the name of the column associated with the elements specified in the following fields.
 Field 3: contains the name of a row.
 Field 4: used in conjunction with Field 3 contains the value of the matrix element.
 Field 5: is optional (may be used like Field 3).
 Field 6: is optional (may be used like Field 4).
Note that only the nonzero elements of $A$ and $c$ need to be specified in the COLUMNS section, as any zero elements of $A$ are removed and any unspecified elements of $c$ are assumed to be zero. In addition, any nonzero elements in the $\mathit{j}$th column of $A$ must be grouped together before those in the $\left(\mathit{j}+1\right)$th column, for $\mathit{j}=1,2,\dots ,n1$. Nonzero elements within a column may however appear in any order.
RHS Data Lines
This section specifies the righthand side values of the general linear constraint matrix $A$ (if any). The lines specify the name to be given to the righthand side (RHS) vector along with the numerical values of the elements of the vector, which may appear in any order. The data lines have exactly the same format as the COLUMNS data lines, except that the column name is replaced by the RHS name. Only the nonzero elements need be specified. Note that this section may be empty, in which case the RHS vector is assumed to be zero.
RANGES Data Lines (optional)
Ranges are used for constraints of the form $l\le Ax\le u$, where both $l$ and $u$ are finite. The range of the constraint is $r=ul$. Either $l$ or $u$ must be specified in the RHS section and $r$ must be defined in this section. The data lines have exactly the same format as the COLUMNS data lines, except that the column name is replaced by the RANGES name.
BOUNDS Data Lines (optional)
These lines specify limits on the values of the variables (
$l$ and
$u$ in
$l\le x\le u$). If the variable is not specified in the bound set then it is automatically assumed to lie between default lower and upper bounds (usually
$0$ and
$+\infty $). Like an RHS column which is given a name, the set of variables in one bound set is also given a name.
Field 1: 
specifies the type of bound or defines the variable type. 
LO 
lower bound 
UP 
upper bound 
FX 
fixed variable 
FR 
free variable ($\infty $ to $+\infty $) 
MI 
lower bound is $\infty $ 
PL 
upper bound is $+\infty $. This is the default variable type. 
Field 2: 
identifies a name for the bound set. 
Field 3: 
identifies the column name of the variable belonging to this set. 
Field 4: 
identifies the value of the bound; this has a numerical value only in association with LO, UP, FX in Field 1, otherwise it is blank. 
Field 5: 
is blank and ignored. 
Field 6: 
is blank and ignored. 
Note that if RANGES and BOUNDS sections are both present, the RANGES section must appear first.
4
References
IBM (1971) MPSX – Mathematical programming system Program Number 5734 XM4 IBM Trade Corporation, New York
5
Arguments
 1: $\mathbf{infile}$ – IntegerInput

On entry: the unit number associated with the MPSX data file.
Constraint:
$0\le {\mathbf{infile}}\le 99$.
 2: $\mathbf{maxn}$ – IntegerInput

On entry: an upper limit for the number of variables in the problem.
Constraint:
${\mathbf{maxn}}\ge 1$.
 3: $\mathbf{maxm}$ – IntegerInput

On entry: an upper limit for the number of constraints (including the objective row) in the problem.
Constraint:
${\mathbf{maxm}}\ge 1$.
 4: $\mathbf{maxnnz}$ – IntegerInput

On entry: an upper limit for the number of nonzeros (including the objective row) in the problem.
Constraint:
${\mathbf{maxnnz}}\ge 1$.
 5: $\mathbf{xbldef}$ – Real (Kind=nag_wp)Input

On entry: the default lower bound to be used for the variables in the problem when none is specified in the BOUNDS section of the MPSX data file. For a standard LP or QP problem
xbldef would normally be set to zero.
 6: $\mathbf{xbudef}$ – Real (Kind=nag_wp)Input

On entry: the default upper bound to be used for the variables in the problem when none is specified in the BOUNDS section of the MPSX data file. For a standard LP or QP problem
xbudef would normally be set to ‘infinity’ (i.e.,
${\mathbf{xbudef}}\ge {10}^{20}$).
Constraint:
${\mathbf{xbudef}}\ge {\mathbf{xbldef}}$.
 7: $\mathbf{mpslst}$ – LogicalInput

On entry: if
${\mathbf{mpslst}}=\mathrm{.TRUE.}$, a listing of the input data is sent to the current advisory message unit (as defined by
x04abf). This can be useful for debugging the MPSX data file. If
${\mathbf{mpslst}}=\mathrm{.FALSE.}$, no listing is produced.
 8: $\mathbf{n}$ – IntegerOutput

On exit: $n$, the actual number of variables in the problem.
 9: $\mathbf{m}$ – IntegerOutput

On exit: $m$, the actual number of general linear constraints in the problem (including the objective row).
 10: $\mathbf{nnz}$ – IntegerOutput

On exit: the actual number of nonzeros in the problem (including the objective row).
 11: $\mathbf{iobj}$ – IntegerOutput

On exit: if
${\mathbf{iobj}}>0$, row
iobj of
$A$ is a free row containing the nonzero coefficients of the vector
$c$.
If ${\mathbf{iobj}}=0$, the coefficients of $c$ are assumed to be zero.
If
${\mathbf{iobj}}=1$, no such row was found and the routine terminates with
${\mathbf{ifail}}={\mathbf{4}}$ or
${\mathbf{5}}$ (see
Section 6).
 12: $\mathbf{ncolh}$ – IntegerOutput

On exit:
${\mathbf{ncolh}}=0$. For QP problems,
ncolh is the number of leading nonzero columns of the Hessian matrix
$H$ and must therefore be set
$\text{}>0$ before calling
e04nkf.
 13: $\mathbf{a}\left({\mathbf{maxnnz}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit: the nonzero elements of $A$, ordered by increasing column index.
 14: $\mathbf{ha}\left({\mathbf{maxnnz}}\right)$ – Integer arrayOutput

On exit: the row indices of the nonzero elements stored in
a.
 15: $\mathbf{ka}\left({\mathbf{maxn}}+1\right)$ – Integer arrayOutput

On exit: a set of pointers to the beginning of each column of
$A$. More precisely,
${\mathbf{ka}}\left(\mathit{i}\right)$ contains the index in
a of the start of the
$\mathit{i}$th column, for
$\mathit{i}=1,2,\dots ,{\mathbf{n}}$. Note that
${\mathbf{ka}}\left(1\right)=1$ and
${\mathbf{ka}}\left({\mathbf{n}}+1\right)={\mathbf{nnz}}+1$.
 16: $\mathbf{bl}\left({\mathbf{maxn}}+{\mathbf{maxm}}\right)$ – Real (Kind=nag_wp) arrayOutput
 17: $\mathbf{bu}\left({\mathbf{maxn}}+{\mathbf{maxm}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit:
bl contains the vector
$l$ (the lower bounds) and
bu contains the vector
$u$ (the upper bounds), for all the variables and constraints in the following order. The first
n elements of each array contain the bounds on the variables
$x$ and the next
m elements contain the bounds for the linear objective term
${c}^{\mathrm{T}}x$ and the general linear constraints
$Ax$ (if any). Note that an ‘infinite’ lower bound is indicated by
${\mathbf{bl}}\left(j\right)=\text{1.0E+20}$, an ‘infinite’ upper bound by
${\mathbf{bu}}\left(j\right)=\text{1.0E+20}$ and an equality constraint by
${\mathbf{bl}}\left(j\right)={\mathbf{bu}}\left(j\right)$. (The lower bound for
${c}^{\mathrm{T}}x$, stored in
${\mathbf{bl}}\left({\mathbf{n}}+{\mathbf{iobj}}\right)$, is set to
${\mathbf{xbudef}}$. The corresponding upper bound, stored in
${\mathbf{bu}}\left({\mathbf{n}}+{\mathbf{iobj}}\right)$, is set to
xbudef.)
Note that
e04mzf uses an ‘infinite’ bound size of
${10}^{20}$ in the definition of
$l$ and
$u$. In other words, any element of
$u$ greater than or equal to
${10}^{20}$ will be regarded as
$+\infty $ (and similarly any element of
$l$ less than or equal to
${10}^{20}$ will be regarded as
$\infty $). If this value is deemed to be ‘inappropriate’, you are recommended to reset the value of the optional parameter
Infinite Bound Size and make any necessary changes to
bl and/or
bu before calling
e04nkf.
 18: $\mathbf{start}$ – Character(1)Output

On exit:
${\mathbf{start}}=\text{'C'}$ and an internal Crash procedure will be used by
e04nkf to choose an initial basis.
 19: $\mathbf{names}\left(5\right)$ – Character(8) arrayInput/Output

On entry: a set of names associated with the MPSX form of the problem.
 ${\mathbf{names}}\left(1\right)$
 Must contain either the name of the problem or be blank.
 ${\mathbf{names}}\left(2\right)$
 Must contain either the name of the objective row or be blank (in which case the first objective free row is used).
 ${\mathbf{names}}\left(3\right)$
 Must contain either the name of the RHS set to be used or be blank (in which case the first RHS set is used).
 ${\mathbf{names}}\left(4\right)$
 Must contain either the name of the RANGE set to be used or be blank (in which case the first RANGE set (if any) is used).
 ${\mathbf{names}}\left(5\right)$
 Must contain either the name of the BOUNDS set to be used or be blank (in which case the first BOUNDS set (if any) is used).
On exit: a set of names associated with the problem as defined in the MPSX data file as follows:
 ${\mathbf{names}}\left(1\right)$
 Contains the name of the problem (or blank if none).
 ${\mathbf{names}}\left(2\right)$
 Contains the name of the objective row (or blank if none).
 ${\mathbf{names}}\left(3\right)$
 Contains the name of the RHS set (or blank if none).
 ${\mathbf{names}}\left(4\right)$
 Contains the name of the RANGE set (or blank if none).
 ${\mathbf{names}}\left(5\right)$
 Contains the name of the BOUNDS set (or blank if none).
 20: $\mathbf{nname}$ – IntegerOutput

On exit: $n+m$, the total number of variables and constraints in the problem.
 21: $\mathbf{crname}\left({\mathbf{maxn}}+{\mathbf{maxm}}\right)$ – Character(8) arrayOutput

On exit: the MPSX names of all the variables and constraints in the problem in the following order. The first
n elements contain the MPSX names for the variables and the next
m elements contain the MPSX names for the objective row and general linear constraints (if any). Note that the MPSX name for the objective row is stored in
${\mathbf{crname}}\left({\mathbf{n}}+{\mathbf{iobj}}\right)$.
 22: $\mathbf{xs}\left({\mathbf{maxn}}+{\mathbf{maxm}}\right)$ – Real (Kind=nag_wp) arrayOutput

On exit: a set of initial values for the variables and constraints in the problem. More precisely,
${\mathbf{xs}}\left(\mathit{j}\right)=\mathrm{min}\phantom{\rule{0.125em}{0ex}}\left(\mathrm{max}\phantom{\rule{0.125em}{0ex}}\left(0.0,{\mathbf{bl}}\left(\mathit{j}\right)\right),{\mathbf{bu}}\left(\mathit{j}\right)\right)$, for $\mathit{j}=1,2,\dots ,{\mathbf{nname}}$.
 23: $\mathbf{istate}\left({\mathbf{maxn}}+{\mathbf{maxm}}\right)$ – Integer arrayOutput

On exit: a set of initial states for the variables and constraints in the problem. More precisely,
${\mathbf{istate}}\left(\mathit{j}\right)=1$ if ${\mathbf{xs}}\left(\mathit{j}\right)={\mathbf{bu}}\left(\mathit{j}\right)$ and $0$ otherwise, for $\mathit{j}=1,2,\dots ,{\mathbf{nname}}$.
 24: $\mathbf{ifail}$ – IntegerInput/Output

On entry:
ifail must be set to
$0$,
$1\text{ or}1$. If you are unfamiliar with this argument you should refer to
Section 3.4 in How to Use the NAG Library and its Documentation for details.
For environments where it might be inappropriate to halt program execution when an error is detected, the value
$1\text{ or}1$ is recommended. If the output of error messages is undesirable, then the value
$1$ is recommended. Otherwise, if you are not familiar with this argument, the recommended value is
$0$.
When the value $\mathbf{1}\text{ or}\mathbf{1}$ is used it is essential to test the value of ifail on exit.
On exit:
${\mathbf{ifail}}={\mathbf{0}}$ unless the routine detects an error or a warning has been flagged (see
Section 6).
6
Error Indicators and Warnings
If on entry
${\mathbf{ifail}}=0$ or
$1$, explanatory error messages are output on the current error message unit (as defined by
x04aaf).
Errors or warnings detected by the routine:
 ${\mathbf{ifail}}=1$

There are too many rows present in the data file. Increase
maxm by at least
$\left({\mathbf{m}}{\mathbf{maxm}}\right)$ and rerun
e04mzf.
 ${\mathbf{ifail}}=2$

There are too many columns present in the data file. Increase
maxn by at least
$\left({\mathbf{n}}{\mathbf{maxn}}\right)$ and rerun
e04mzf.
 ${\mathbf{ifail}}=3$

There are too many nonzeros present in the data file. Increase
maxnnz by at least
$\left({\mathbf{nnz}}{\mathbf{maxnnz}}\right)$ and rerun
e04mzf.
 ${\mathbf{ifail}}=99$
An unexpected error has been triggered by this routine. Please
contact
NAG.
See
Section 3.9 in How to Use the NAG Library and its Documentation for further information.
 ${\mathbf{ifail}}=399$
Your licence key may have expired or may not have been installed correctly.
See
Section 3.8 in How to Use the NAG Library and its Documentation for further information.
 ${\mathbf{ifail}}=999$
Dynamic memory allocation failed.
See
Section 3.7 in How to Use the NAG Library and its Documentation for further information.
The following error exits (apart from
${\mathbf{ifail}}={\mathbf{17}}$) are caused by having either a corrupt or a nonstandard MPSX data file. Refer to
Section 3 for a detailed description of the MPSX format which can be read by
e04mzf. If
${\mathbf{mpslst}}=\mathrm{.TRUE.}$, the last line of printed output refers to the line in the MPSX data file which contains the reported error.
 ${\mathbf{ifail}}=4$

The objective row was not found. There must be at least one row in the ROWS section with row type N for the objective row.
 ${\mathbf{ifail}}=5$

An unknown objective row name was detected in the ROWS section.
 ${\mathbf{ifail}}=6$

There are no rows specified in the ROWS section.
 ${\mathbf{ifail}}=7$

An illegal constraint type was detected in the ROWS section. The constraint type must be either N, L, G or E.
 ${\mathbf{ifail}}=8$

An illegal row name was detected in the ROWS section. Names must be made up of ‘alphanumeric’ characters (see
Section 3) with no leading blanks.
 ${\mathbf{ifail}}=9$

An illegal column name was detected in the COLUMNS section. Names must be made up of ‘alphanumeric’ characters (see
Section 3) with no leading blanks.
 ${\mathbf{ifail}}=10$

An illegal bound type was detected in the BOUNDS section. The bound type must be either LO, UP, FX, FR, MI or PL.
 ${\mathbf{ifail}}=11$

An unknown column name was detected in the BOUNDS section. All the column names must be specified in the COLUMNS section.
 ${\mathbf{ifail}}=12$

The last line in the data file does not contain the ENDATA line indicator.
 ${\mathbf{ifail}}=13$

An illegal data line was detected in the file. This line is neither a comment line nor a valid data line.
 ${\mathbf{ifail}}=14$

An unknown row name was detected in COLUMNS, RHS or RANGES section. All the row names must be specified in the ROWS section.
 ${\mathbf{ifail}}=15$

There were no columns specified in the COLUMNS section.
 ${\mathbf{ifail}}=16$

The name of the RHS, RANGES or BOUNDS set to be used was not found in the data file.
 ${\mathbf{ifail}}=17$

On entry,  ${\mathbf{infile}}<0$, 
or  ${\mathbf{infile}}>99$, 
or  ${\mathbf{maxn}}<1$, 
or  ${\mathbf{maxm}}<1$, 
or  ${\mathbf{maxnnz}}<1$, 
or  ${\mathbf{xbldef}}>{\mathbf{xbudef}}$. 
7
Accuracy
Not applicable.
8
Parallelism and Performance
e04mzf is not threaded in any implementation.
None.
10
Example
This example solves the quadratic programming problem
where
The optimal solution (to five figures) is
Three bound constraints and two general linear constraints are active at the solution. Note that, although the Hessian matrix is positive semidefinite, the point
${x}^{*}$ is unique.
The MPSX representation of the problem is given in
Section 10.2.
10.1
Program Text
Program Text (e04mzfe.f90)
10.2
Program Data
Note: the MPSX data which is read by e04mzf begins with the second record of this data file; the first record is a caption which is read by the example program.
Program Options (e04mzfe.opt)
10.3
Program Results
Program Results (e04mzfe.r)