The OPTMILP Option Tuner
Example 17.2 Tuning a Defined Set of Options for Multiple Problems
(View the complete code for this example.)
This example demonstrates how to specify a set of tuning options and tune them for multiple problems.
The following DATA step creates a PROBLEMS= data set named probs that contains the list of tuning problems. This data set is the same as in the section Getting Started: The OPTMILP Option Tuner.
data probs;
input name $1-8;
datalines;
a.air04
a.air05
;
The following DATA step creates an OPTIONVALUES= data set named optvals that is different from the default set, which is described in the section Default Set of Tuning Options:
data optvals;
input option $1-10 values $12-28 initial $30-32;
datalines;
cutclique -1, 0, 2 -1
cutgomory 1
heuristics
;
The optvals data set contains a nondefault list of tuning values for the CUTCLIQUE= option in addition to initial values for the CUTCLIQUE= and CUTGOMORY= options. The options for which sets of tuning values are not specified (in this case, the CUTGOMORY= and HEURISTICS= options) are tuned for all available values if the number of values is finite. The options for which initial values are not specified (in this case, the HEURISTICS= option) are tuned by using the default initial value.
The following statements call the OPTMILP option tuner and then print the ODS table TunerResults and the TUNEROUT= data set:
proc optmilp maxtime=300;
tuner problems=probs optionvalues=optvals optionmode=user
maxtime=1200 tunerout=out;
run;
title "Tuner Output";
proc print data=out(obs=16);
run;
The output is shown in Output 17.2.1.
Output 17.2.1: Multiple Problems with Specified Tuning Options: Output
| Tuner Results | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Config 0 | Config 1 | Config 2 | Config 3 | Config 4 | Config 5 | Config 6 | Config 7 | Config 8 | Config 9 | Config 10 | |
| cutclique | -1 | -1 | -1 | -1 | 0 | 2 | -1 | 2 | 2 | 2 | 2 |
| cutgomory | 1 | 1 | -1 | 0 | 2 | -1 | 2 | 0 | 1 | 2 | -1 |
| heuristics | -1 | 0 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 | 0 |
| Mean of Run Times | 17.73 | 12.7 | 13.19 | 13.8 | 14.96 | 15.44 | 22.71 | 23.21 | 23.44 | 23.94 | 24.24 |
| Sum of Run Times | 35.67 | 26.25 | 27.09 | 28.89 | 30.61 | 30.91 | 46.14 | 47.57 | 47.79 | 48.81 | 49.46 |
| Percentage Successful | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 | 100 |
| Tuner Output |
| Obs | RANK | PROBLEM | OBJSENSE | cutclique | cutgomory | heuristics | STATUS | SOLUTION_STATUS | OBJECTIVE | RELATIVE_GAP | ABSOLUTE_GAP | NODES | SOLUTION_TIME |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 0 | air04 | MIN | -1 | 1 | -1 | OK | OPTIMAL_RGAP | 56137 | .000058910 | 3.30682 | 195 | 15.92 |
| 2 | 0 | air05 | MIN | -1 | 1 | -1 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 533 | 19.74 |
| 3 | 1 | air04 | MIN | -1 | 1 | 0 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 181 | 16.41 |
| 4 | 1 | air05 | MIN | -1 | 1 | 0 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 241 | 9.83 |
| 5 | 2 | air04 | MIN | -1 | -1 | 0 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 181 | 16.63 |
| 6 | 2 | air05 | MIN | -1 | -1 | 0 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 241 | 10.46 |
| 7 | 3 | air04 | MIN | -1 | 0 | 0 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 285 | 18.71 |
| 8 | 3 | air05 | MIN | -1 | 0 | 0 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 241 | 10.17 |
| 9 | 4 | air04 | MIN | 0 | 2 | 1 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 115 | 12.09 |
| 10 | 4 | air05 | MIN | 0 | 2 | 1 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 460 | 18.52 |
| 11 | 5 | air04 | MIN | 2 | -1 | 2 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 80 | 14.80 |
| 12 | 5 | air05 | MIN | 2 | -1 | 2 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 365 | 16.11 |
| 13 | 6 | air04 | MIN | 2 | 1 | 2 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 80 | 14.64 |
| 14 | 6 | air05 | MIN | 2 | 1 | 2 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 365 | 16.30 |
| 15 | 7 | air04 | MIN | 2 | 2 | 2 | OK | OPTIMAL | 56137 | 0 | 0.00000 | 80 | 14.75 |
| 16 | 7 | air05 | MIN | 2 | 2 | 2 | OK | OPTIMAL | 26374 | 0 | 0.00000 | 365 | 16.20 |