Aspen SCM‎ > ‎SCM Planning‎ > ‎

5. Policies

The policy chain has two purposes:
  • to suppress the generation of rows and columns for combinations of values of the indexing sets for which the row or column is not required;
  • to specify the “rim” of the matrix.
The first purpose is achieved by having the entry in the TABL column of ROWS or COLS resolve to something that is not in the POL set, e.g. a blank. This happens implicitly where the entry in the TABL column is a multi-dimensional incidence table and GEN loops over its entries, setting the indexes of the table to the values specified for each line of the table.

Where multi-dimensional incidence tables are being used as column policies, they can establish values for sets which index rows. In this way they can suppress loops which would otherwise occur when generating rows. This is particularly likely to happen where the set which indexes the row is closely related to the set which indexes the column; see Families of Sets and the No-match Flag below.

The second purpose is achieved through the entries in the POL set and the table POLI(POL,HPO). The POL set lists both row policies and column policies. The set HPO is oriented towards columns and consists of MIN, MAX, and CST. There is usually a dummy policy which acts as a sub-heading to separate the row policies from the column policies. Do not assume that this has any practical effect: if you use the same characters as the Code of a row policy and a column policy, GEN will use whichever appears first for both rows and columns.

For column policies the data in POLI are as follows:
  • MIN: either a lower bound on columns with this policy or the variable type. If it is a lower bound it may be a number, e.g. 1, or the name of table whose value is resolved as with entries in COEF. The following variable types can be specified instead of an explicit lower bound:
  • BV: binary variable (takes the value 0 or 1; leave the MAX column blank);
  • FR: free variable (lower bound –infinity; upper bound +infinity);
  • FX: fixed variable (fixed at value specified in MAX column);
  • MI: minus infinity (lower bound –infinity; upper bound 0);
  • S1: variable in a Special Ordered Set of type 1, i.e. only one of the variables in the set can take a non-zero value (lower bound 0; upper bound specified in the MAX column);
  • S2: variable in a Special Ordered Set of type 2, i.e. at most two adjacent variables in the set can take non-zero values (lower bound 0; upper bound specified in the MAX column);
  • SC: semi-continuous (variable takes the value 0 or any value from a semi-continuous lower bound specified in the MAX column to a maximum value which, depending on LP code, you may have to specify in the generated POLX table)
  • SI: semi-integer variable (implementation depends on LP code);
  • UI: upper integer (lower bound 0; integer variable with maximum value specified in the MAX column)
  • UP: upper bound as stated (lower bound 0; upper bound as specified in the MAX column with blank or 0 applied as an upper bound of zero);
  • MAX: generally an upper bound on columns with this policy. Where certain variable types have been specified in the MIN column, the entry in the MAX column has some other meaning specific to that variable type. If a lower bound has been specified in MIN and MAX is left blank or is zero, what happens depends on the setting of the control parameter CLPS(ZUPB,1). By default, the upper bound is taken as +infinity, i.e. no upper bound. If you wish to apply upper bounds of zero, you need to set CLPS(ZUPB,1) = YES or use the UP or MI variable types.
  • CST: this is the cost to be used in the objective function. It can be a number, the name of a table, a non-linear function in NLF or a constant in CON. If it is left blank, zero is assumed.
For row policies the data in POLI are:
  • MIN: sense of the row. This can be:
  • E: equality row;
  • L: less than or equal row;
  • G: greater than or equal row;
  • MAX: the right hand side of the row. This may be a number or the name of a table. If it is left blank, zero is assumed.
  • CST: leave blank
You can configure the policy chain for a generic row or column so that it points to different policies for different values of the indexes. This is particularly common with multi-time-period models, where the right-hand-side for material balance constraints for the first time period handles opening stocks but these are absent from subsequent time periods.

It is useful to have some standard policies for the commonest types of row and column:

 POS    Columns which are ≥ 0 and with zero cost
   Binary variables with zero cost
 EQ_0 E
 0  Rows which = 0
 EQ_1 E 1  Rows which = 1
 LT_0 L 0  Rows which are ≤ 1
 GT_0 G
 0  Rows which are ≥ 0

These can be particularly useful when developing a model as you can use them as proxies before you have worked out exactly what you want to use as the policy.

Back                                Next