Macro Variable _OROPTMODEL_
The OPTMODEL procedure always creates and initializes a SAS macro variable called _OROPTMODEL_, which contains a character
string. The variable contains information about the execution of the most recently invoked solver.
Each keyword and value pair in _OROPTMODEL_ also appears in two other places: the PROC OPTMODEL automatic arrays _OROPTMODEL_NUM_ and _OROPTMODEL_STR_
; and the ODS tables ProblemSummary and SolutionSummary, which appear after a SOLVE statement, unless you set the PRINTLEVEL=
option to NONE. You can use these variables 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 MAXSOLNS= 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 time (in seconds) that the algorithm used for preprocessing. You can use the TIMETYPE=
option to select real time or CPU time.
-
SOLUTION_TIME
-
indicates the time (in seconds) that the algorithm used to perform iterations to solve the problem. You can use the TIMETYPE=
option to select real time or CPU time.
-
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).