The Decomposition Algorithm
Decomposition Algorithm Options in the PROC OPTMILP Statement or the SOLVE WITH MILP Statement in PROC OPTMODEL
To solve a mixed integer linear program, you can specify the decomposition algorithm in a SOLVE WITH MILP statement in the OPTMODEL procedure or in a PROC OPTMILP statement in the OPTMILP procedure. To control the overall decomposition algorithm, you can specify one or more of the MILP solver options shown in Table 2. (As the table indicates, you can specify some options only in the PROC OPTMILP statement.)
The options in Table 2 control the overall process flow for solving a mixed integer linear program; they are equivalent to the options that are used in the OPTMILP and OPTMODEL procedures with standard methods. These options are called main solver options in this chapter. They are described in detail in the section Syntax: MILP Solver and the section Syntax: OPTMILP Procedure.
Table 2: MILP Options in the PROC OPTMILP Statement or SOLVE WITH MILP Statement
| Description | option |
|---|---|
| Data Table Options (OPTMILP procedure only) | |
| Specifies the input data table | DATA= |
| Specifies the constraint activities output data table | DUALOUT= |
| Specifies whether the model is a maximization or minimization problem | OBJSENSE= |
| Specifies the primal solution input data table (warm start) | PRIMALIN= |
| Specifies the primal solution output data table | PRIMALOUT= |
| Presolve Option | |
| Specifies the type of presolve | PRESOLVER= |
| Control Options | |
| Specifies the stopping criterion based on an absolute objective gap | ABSOBJGAP= |
| Specifies the cutoff value for node removal | CUTOFF= |
| Emphasizes feasibility or optimality | EMPHASIS= |
| Specifies the maximum violation of variables and constraints | FEASTOL= |
| Specifies the maximum difference allowed between an integer variable’s value and an integer | INTTOL= |
| Specifies how frequently to print the node log | LOGFREQ= |
| Specifies the level of detail of solution progress to print in the log | LOGLEVEL= |
| Specifies the maximum number of nodes to process | MAXNODES= |
| Specifies the maximum number of solutions to find | MAXSOLS= |
| Specifies the time limit for the optimization process | MAXTIME= |
| Specifies the overall capacity for the number of active threads (per machine) | NTHREADS= |
| Specifies the tolerance to use in determining the optimality of nodes in the branch-and-bound tree | OPTTOL= |
| Uses the input primal solution (warm start) (OPTMODEL procedure only) | PRIMALIN |
| Enables or disables printing summary (OPTMILP procedure only) | PRINTLEVEL= |
| Specifies the probing level | PROBE= |
| Specifies the stopping criterion based on a relative objective gap | RELOBJGAP= |
| Specifies the scale of the problem matrix | SCALE= |
| Specifies the initial seed for the random number generator | SEED= |
| Specifies the stopping criterion based on a target objective value | TARGET= |
| Specifies whether time units are CPU time or real time | TIMETYPE= |
| Control Options (OPTMODEL procedure only) | |
| Specifies the maximum number of solutions to return from the pool | MAXPOOLSOLS= |
| Heuristics Option | |
| Specifies the primal heuristics level | HEURISTICS= |
| Search Options | |
| Specifies the restarting strategy | RESTARTS= |
| Specifies the number of iterations to perform on each variable for strong branching | STRONGITER= |
| Specifies the number of candidates for strong branching | STRONGLEN= |
| Specifies the level of symmetry detection | SYMMETRY= |
| Specifies the rule for selecting the branching variable | VARSEL= |
| Cut Options | |
| Specifies the cut level for all cuts | ALLCUTS= |
| Specifies the clique cut level | CUTCLIQUE= |
| Specifies the flow cover cut level | CUTFLOWCOVER= |
| Specifies the flow path cut level | CUTFLOWPATH= |
| Specifies the Gomory cut level | CUTGOMORY= |
| Specifies the generalized upper bound (GUB) cover cut level | CUTGUB= |
| Specifies the implied bounds cut level | CUTIMPLIED= |
| Specifies the knapsack cover cut level | CUTKNAPSACK= |
| Specifies the lift-and-project cut level | CUTLAP= |
| Specifies the mixed lifted 0-1 cut level | CUTMILIFTED= |
| Specifies the mixed integer rounding (MIR) cut level | CUTMIR= |
| Specifies the multicommodity network flow cut level | CUTMULTICOMMODITY= |
| Specifies the row multiplier factor for cuts | CUTSFACTOR= |
| Specifies the overall cut aggressiveness | CUTSTRATEGY= |
| Specifies the zero-half cut level | CUTZEROHALF= |
The HYBRID= option in the DECOMP statement indicates the processing mode for the root node of the branch-and-bound search tree. When HYBRID=TRUE, the root node is first processed using standard MILP techniques, as described in the section Details: MILP Solver. When HYBRID=FALSE, the root processing is done solely by the decomposition algorithm, and the following direct MILP options are ignored: CUTOFF=, EMPHASIS=, RESTARTS=, SEED=, TARGET=, and all the cut options.
The following search options, listed in Table 2, have a different interpretation or a different set of options from what is described in the MILP solver sections: