naginterfaces.library.mip.ilp_​mpsx

naginterfaces.library.mip.ilp_mpsx(infile, maxn, maxm, optim, xbldef, xbudef, maxdpt, msglvl, liwork, lrwork, comm, io_manager=None)[source]

ilp_mpsx solves linear or integer programming problems specified in MPSX input format. It is not intended for large sparse problems.

For full information please refer to the NAG Library document for h02bf

https://www.nag.com/numeric/nl/nagdoc_29.3/flhtml/h/h02bff.html

Parameters
infileint

The unit number (see unit_from_fileobj()) associated with the MPSX data file.

maxnint

An upper limit for the number of variables in the problem.

maxmint

An upper limit for the number of constraints (including the objective) in the problem.

optimstr, length 3

Specifies the direction of the optimization. must be set to ‘MIN’ for minimization and to ‘MAX’ for maximization.

xbldeffloat

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 IP problem would normally be set to zero.

xbudeffloat

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 IP problem would normally be set to ‘infinity’ (i.e., ).

maxdptint

For an IP problem, must specify the maximum depth of the branch and bound tree.

msglvlint

The amount of printout produced by opt.lp_solve or ilp_dense(), as indicated below. For a description of the printed output see Further Comments or Description of Printed Output for ilp_dense (as appropriate). All output is written to the file object associated with the advisory I/O unit (see FileObjManager).

For an LP problem (opt.lp_solve):

Value

Definition

No output.

The final solution only.

One line of output for each iteration (no printout of the final solution).

The final solution and one line of output for each iteration.

For an IP problem (ilp_dense()):

Value

Definition

No output.

The final IP solution only.

One line of output for each node investigated and the final IP solution.

The original LP solution (first node) with dummy names for the rows and columns, one line of output for each node investigated and the final IP solution with MPSX names for the rows and columns.

liworkint

The dimension of the array .

lrworkint

The dimension of the array .

commdict, communication object, modified in place

Communication structure.

This argument must have been initialized by a prior call to opt.nlp1_init with .

io_managerFileObjManager, optional

Manager for I/O in this routine.

Returns
nint

, the actual number of variables in the problem.

mint

, the actual number of general linear constraints in the problem.

xfloat, ndarray, shape

The solution to the problem, stored in . is the value of the variable whose MPSX name is stored in , for .

crnamestr, length 8, ndarray, shape

The first elements contain the MPSX names for the variables in the problem.

iworkint, ndarray, shape

The first () elements contain ISTATE (the status of the constraints in the working set at the solution). Further details can be found in Parameters for opt.lp_solve and Parameters for ilp_info (as appropriate).

rworkfloat, ndarray, shape

The first () elements contain BL (the lower bounds), the next () elements contain BU (the upper bounds) and the next () elements contain CLAMDA (the Lagrange-multipliers). Further details can be found in Parameters for opt.lp_solve and Parameters for ilp_info (as appropriate). Note that for an IP problem the contents of BL and BU may not be the same as those originally specified in the MPSX data file and/or via the arguments and .

Raises
NagValueError
(errno )

Either and/or are too small or the MPSX data file is nonstandard and/or corrupt.

(errno )

The LP solution is unbounded.

(errno )

The LP does not have a feasible solution.

(errno )

Iteration limit reached without finding a solution.

(errno )

On entry, not enough real workspace to solve problem: must be at least .

(errno )

On entry, not enough integer workspace to solve problem: must be at least .

(errno )

On entry, .

Constraint: .

(errno )

On entry, not enough real workspace to read data file: .

(errno )

On entry, not enough integer workspace to read data file: .

(errno )

On entry, .

Constraint: or .

(errno )

On entry, and .

Constraint: .

(errno )

On entry, .

Constraint: .

(errno )

On entry, .

Constraint: .

(errno )

On entry, .

Constraint: .

(errno )

A serious error has occurred. Check all function calls and array dimensions.

(errno )

Increase and rerun ilp_mpsx.

(errno )

is too small to solve the problem: .

(errno )

The IP solution returned is the best solution for the number of nodes investigated in the branch and bound tree.

(errno )

No feasible solution was found for the number of nodes investigated in the branch and bound tree.

(errno )

Not enough workspace to solve problem.

Warns
NagAlgorithmicWarning
(errno )

Weak LP solution.

(errno )

The problem does not have a feasible integer solution.

(errno )

Search of a branch was terminated due to iteration limit.

Notes

No equivalent traditional C interface for this routine exists in the NAG Library.

ilp_mpsx solves Linear Programming (LP) or integer programming (IP) problems specified in MPSX (see IBM (1971)) input format. It calls either opt.lp_solve (to solve an LP problem) or ilp_dense() and ilp_info() (to solve an IP problem); these functions are designed to solve problems of the form

where is an -element vector and is an matrix (i.e., there are variables and general linear constraints). ilp_dense() is used if at least one of the variables is restricted to take an integer value at the optimum solution. The document for ilp_mpsx_convert() should be consulted for a detailed description of the MPSX format.

In the MPSX data file the first free row, that is a row defined with the row type , is taken as the objective row. Similarly, if there are more than one RHS, RANGES or BOUNDS sets, then the first set is used for the optimization. ilp_mpsx also prints the solution to the problem using the row and column names specified in the MPSX data file (by calling ilp_print()).

References

IBM, 1971, MPSX – Mathematical programming system, Program Number 5734 XM4, IBM Trade Corporation, New York