The Constraint Programming Solver (Experimental)

Macro Variable _OROPTMODEL_

The OPTMODEL procedure always creates and initializes a SAS macro variable called _OROPTMODEL_, which contains a character string. After each PROC OPTMODEL run, you can examine this macro variable by specifying %put &_OROPTMODEL_; and check the execution of the most recently invoked solver from the value of the macro variable. You can also extract each keyword and value pair to obtain details about the solution. After the solver is called, the various keywords in the variable 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

The use of syntax is incorrect.

DATA_ERROR

The input data are inconsistent.

OUT_OF_MEMORY

Insufficient memory was allocated to the procedure.

IO_ERROR

A problem in reading or writing of data has occurred.

SEMANTIC_ERROR

An evaluation error, such as an invalid operand type, has occurred.

ERROR

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

SOLUTION_STATUS

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

ABORT_NOSOL

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

ABORT_SOL

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

ALL_SOLUTIONS

All solutions were found.

BAD_PROBLEM_TYPE

The problem type is not supported by the solver.

CONDITIONAL_OPTIMAL

The optimality of the solution cannot be proven.

ERROR

The algorithm encountered an error.

FAIL_NOSOL

The solver stopped because of errors and did not find a solution.

FAIL_SOL

The solver stopped because of errors but still found a solution.

INFEASIBLE

The problem is infeasible.

INTERRUPTED

The solver was interrupted by the system or the user before completing its work.

OK

The algorithm terminated normally.

OPTIMAL

The solution is optimal.

OUTMEM_NOSOL

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

OUTMEM_SOL

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

SOLUTION_LIM

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

TIME_LIM_NOSOL

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

TIME_LIM_SOL

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

UNBOUNDED

The problem is unbounded.

ALGORITHM

indicates the algorithm that produces the solution data in the macro variable. This term appears only when STATUS=OK. It can take only one value in the CLP solver: CLP, which indicates that the constraint satisfaction algorithm produced the solution data.

OBJECTIVE

indicates the objective value that the solver obtained at termination. If a problem does not have an explicit objective, the value of this keyword in the _OROPTMODEL_ macro variable is missing (.).

PRESOLVE_TIME

indicates the real time (in seconds) taken for preprocessing.

SOLUTION_TIME

indicates the real time (in seconds) taken by the algorithm to perform iterations to solve the problem.

SOLUTIONS_FOUND

indicates the number of solutions found, which might be 0 if the problem is infeasible. This keyword is always present in the solution status when you call the CLP solver. The value might not be the total number of solutions possible (for example, if the solver reached its time limit).