The OPTLSO Procedure

Specifying and Returning Trial Points

You can use the following options to initialize PROC OPTLSO with user-specified points: CACHEIN=, FIRSTGEN=, and PRIMALIN=. You can use the following options to have trial points returned to you: CACHEOUT=, LASTGEN=, and PRIMALOUT=.

Both input and output point data sets have the following columns:

_SOL_

specifies the point’s unique solution tag.

_ID_

specifies the variable and (function) ID name.

_VALUE_

specifies the variable (function) value.

Input Data Sets

The following DATA step generates 30 random points for the initial population if the variables $x \in {\mathbb R}^{5}$ have bounds $-5 \le x_ i \le 10$:

data popin;
   low = -5.0;
   upp = 10.0;
   numpoints = 30;
   dim = 5;
   do _sol_=1 to numpoints;
      do i=1 to dim;
         _id_= compress("x" || put(i, 4.0));  
         _value_ = low + (upp-low)*ranuni(2);
         output;
      end;   
   end;
   keep _sol_ _id_ _value_;
run;

You can then use this data set as input for the OPTLSO procedure by using the FIRSTGEN= option.

Output Data Sets

PROC OPTLSO dynamically creates and reports on two metadata functions for you: the true objective (which is a combination of the FCMP objective and the linear and quadratic terms) and the maximum constraint violation. These functions are assigned the following function ID names (therefore, these names should not be used as variable, constraint, or function names):

_OBJ_

specifies the point’s objective.

_INF_

specifies the point’s maximum constraint violation.

Output data sets have additional rows that correspond to the problem’s FCMP functions. These rows must exist for the data set specified in the CACHEIN= option, but they should be omitted for the data sets specified in the FIRSTGEN= and PRIMALIN= options.

When you observe the solution output, it might be easier to compare points if they are listed as rows rather than as columns. SAS provides a variety of ways to transform the results for your purposes. For example, if you prefer that the rows of the data sets correspond to individual points, you can use the following statements to transpose the returned data set, where popout denotes the data set that is returned by PROC OPTLSO:

 
 proc transpose data=popout out=poprow (drop=_label_ _name_);
    by _sol_;
    var _value_;
    id _id_;  
 run;