The Mixed Integer Linear Programming Solver

Macro Variable _OROPTMODEL_

The OPTMODEL procedure defines a macro variable named _OROPTMODEL_. This variable contains a character string that indicates the status of the solver upon termination. The contents of the macro variable depend on which solver was invoked. For the MILP solver, the various terms of _OROPTMODEL_ are interpreted as follows.

STATUS

indicates the solver status at termination. It can take one of the following values:

OK

The solver terminated normally.

SYNTAX_ERROR

Syntax was used incorrectly.

DATA_ERROR

The input data was inconsistent.

OUT_OF_MEMORY

Insufficient memory was allocated to the solver.

IO_ERROR

A problem occurred in reading or writing data.

SEMANTIC_ERROR

An evaluation error, such as an invalid operand type, was found.

ERROR

The status cannot be classified into any of the preceding categories.

ALGORITHM

indicates the algorithm that produced the solution data in the macro variable. This term only appears when STATUS=OK. It can take one of the following values:

BAC

The branch-and-cut algorithm produced the solution data.

DECOMP

The decomposition algorithm produced the solution data.

SOLUTION_STATUS

indicates the solution status at termination. It can take one of the following values:

OPTIMAL

The solution is optimal.

OPTIMAL_AGAP

The solution is optimal within the absolute gap specified by the ABSOBJGAP= option.

OPTIMAL_RGAP

The solution is optimal within the relative gap specified by the RELOBJGAP= option.

OPTIMAL_COND

The solution is optimal, but some infeasibilities (primal, bound, or integer) exceed tolerances due to scaling or choice of small INTTOL= value.

TARGET

The solution is not worse than the target specified by the TARGET= option.

INFEASIBLE

The problem is infeasible.

UNBOUNDED

The problem is unbounded.

INFEASIBLE_OR_UNBOUNDED

The problem is infeasible or unbounded.

BAD_PROBLEM_TYPE

The problem type is unsupported by solver.

SOLUTION_LIM

The solver reached the maximum number of solutions specified by the MAXSOLS= option.

NODE_LIM_SOL

The solver reached the maximum number of nodes specified by the MAXNODES= option and found a solution.

NODE_LIM_NOSOL

The solver reached the maximum number of nodes specified by the MAXNODES= option and did not find a solution.

TIME_LIM_SOL

The solver reached the execution time limit specified by the MAXTIME= option and found a solution.

TIME_LIM_NOSOL

The solver reached the execution time limit specified by the MAXTIME= option and did not find a solution.

ABORT_SOL

The solver was stopped by user but still found a solution.

ABORT_NOSOL

The solver was stopped by user and did not find a solution.

OUTMEM_SOL

The solver ran out of memory but still found a solution.

OUTMEM_NOSOL

The solver ran out of memory and either did not find a solution or failed to output the solution due to insufficient memory.

FAIL_SOL

The solver stopped due to errors but still found a solution.

FAIL_NOSOL

The solver stopped due to errors and did not find a solution.

OBJECTIVE

indicates the objective value obtained by the solver at termination.

RELATIVE_GAP

specifies the relative gap between the best integer objective (BestInteger) and the objective of the best remaining node (BestBound) upon termination of the MILP solver. The relative gap is equal to

\[ \mid \mbox{BestInteger} - \mbox{BestBound}\mid / \left(\mbox{1E$-$10}~  + \mid \mbox{BestBound}\mid \right) \]
ABSOLUTE_GAP

specifies the absolute gap between the best integer objective (BestInteger) and the objective of the best remaining node (BestBound) upon termination of the MILP solver. The absolute gap is equal to $\mid \mbox{BestInteger} - \mbox{BestBound}\mid $.

PRIMAL_INFEASIBILITY

indicates the maximum (absolute) violation of the primal constraints by the solution.

BOUND_INFEASIBILITY

indicates the maximum (absolute) violation by the solution of the lower or upper bounds (or both).

INTEGER_INFEASIBILITY

indicates the maximum (absolute) violation of the integrality of integer variables returned by the MILP solver.

BEST_BOUND

specifies the best LP objective value of all unprocessed nodes on the branch-and-bound tree at the end of execution. A missing value indicates that the MILP solver has processed either all or none of the nodes on the branch-and-bound tree.

NODES

specifies the number of nodes enumerated by the MILP solver by using the branch-and-bound algorithm.

ITERATIONS

indicates the number of simplex iterations taken to solve the problem.

PRESOLVE_TIME

indicates the time (in seconds) used in preprocessing.

SOLUTION_TIME

indicates the time (in seconds) taken to solve the problem, including preprocessing time.

Note: The time reported in PRESOLVE_TIME and SOLUTION_TIME is either CPU time or real time. The type is determined by the TIMETYPE= option.

When SOLUTION_STATUS has a value of OPTIMAL, CONDITIONAL_OPTIMAL, ITERATION_LIMIT_REACHED, or TIME_LIMIT_REACHED, all terms of the _OROPTMODEL_ macro variable are present; for other values of SOLUTION_STATUS, some terms do not appear.