A CCP Fuel Blending Example − The Solution

Solving the CCP model from the previous section, we find the following summary at the top of the solution report:

 Global optimal solution found.

 Objective value:                              33396.85

 Infeasibilities:                              0.000000

 Extended solver steps:                             621

 Total solver iterations:                         28081

 

 Stochastic Model Class:             CHANCE-CONSTRAINED

 Deteq Model Class:                                MILP

 

 Total scenarios/leaf nodes:                         20

 Total random variables:                              9

 

                                    Core          Deteq

 Total variables:                      8             48

 Nonlinear variables:                  0              0

 Integer variables:                    0             40

 

 Total constraints:                   18            248

 Nonlinear constraints:                0              0

 

 Total nonzeros:                      34           1262

 Nonlinear nonzeros:                   0              0

The solver found a globally optimal solution of approximately $33,397 in 621 branches and 28,801 iterations.  LINGO correctly identifies the model as CHANCE-CONSTRAINED. One interesting result is that the deterministic equivalent (deteq) generated by LINGO for solving the stochastic model was a mixed integer linear program (MILP).  This is of note because the core model is a pure linear program with no integer variables.  You can verify this further down on the line listing the integer variable counts of 0 in the core model and 40 in the deterministic equivalent.  Binary variables were added to the deteq to work as indicator variables indicating whether or not a particular CCP set is satisfied in a particular scenario.  Here, we have 2 sets and 20 scenarios resulting in 2 x 20 = 40 binary variables.

The remaining section of the summary report lists the sizes of the various components of the model.  The main thing to note here is the size of the deteq relative to the core model, which turns out to be considerably larger.  It is the dimensions of the deteq that are most relevant with respect to runtimes and any size limitations (e.g., variable limits) of your installation.  Note that a deteq will grow as you increase the sample size; on the one hand, a large samples size is nice for reducing sampling error, but, on the other hand, you will experience longer runtimes when increasing sample size.  Those interested in viewing the actual deteq can run the Solver|Generate|Explicit Deteq command.

Next up we have the CCP Sets Report:

 CCP Sets Report

 ---------------

 

                   Unsatisfied          Actual                Target

 Set Name/Members    Scenarios     Probability   Dir     Probability

 

      CCP_QUAL_UP            6       0.7000000    >=       0.7000000

R_QUP( OCT, REGU)

R_QUP( OCT, PREM)

R_QUP( VAP, REGU)

R_QUP( VAP, PREM)

R_QUP( VOL, REGU)

R_QUP( VOL, PREM)

 

      CCP_QUAL_DN            2       0.9000000    >=       0.9000000

R_QDN( OCT, REGU)

R_QDN( OCT, PREM)

R_QDN( VAP, REGU)

R_QDN( VAP, PREM)

R_QDN( VOL, REGU)

R_QDN( VOL, PREM)

The CCP Sets Report list the following information:

1.Set Name/Members - Each CCP set is listed by name immediately followed by the names of its member constraints.
2.Unsatisfied Scenarios - This reports on the number of scenarios where the CCP set was violated.
3.Actual Probability - This is the observed probability that a constraint set was satisfied in a particular scenario, and is computed for CCP set i as (TotalScenarios - UnsatisfiedScenariosForSeti) / TotalScenarios.
4.Dir - This is the direction of the CCP set, indicating whether the observed probability should be greater-than-or-equal-to or less-than-or-equal to the target probability.
5.Target - This column lists the target probability for the CCP set.

For this particular example, we see that the upper limits on quality were unsatisfied in a total of 6 out of 20 scenarios for an actual probability of .7, exactly matching the target probability.  The lower limits set was violated only twice for an actual probability of .9, again exactly matching the target.

After the CCP Sets Report LINGO generates the Stage 0 Solution:

 Stage 0 Solution

 ----------------

 

            Variable           Value

 USED( BUTANE, REGU)        536.1166

 USED( BUTANE, PREM)        401.7255

 USED( CATREF, REGU)        2053.043

 USED( CATREF, PREM)        1946.957

 USED( NAPTHA, REGU)        1410.840

 USED( NAPTHA, PREM)        569.2198

 

                 Row    Slack or Surplus

    R_RMLIM( BUTANE)        62.15789

    R_RMLIM( CATREF)        0.000000

    R_RMLIM( NAPTHA)        3019.940

The Stage 0 Solution lists the values for all the non-random variables and constraints.  These are all part of stage 0 and will not vary from one scenario the next, hence, their values are reported only once in the Stage 0 Solution.  Here we've reproduced a a fragment of the report showing the items of most interest: the amount of each raw material used in each finished product (USED) and the slack values on the raw material supply constraints (R_RMLIM).

After the Stage 0 Solution LINGO generates the Random Variable Distribution Report:

 Random Variable Distribution Report

 -----------------------------------

 

                           Sample        Sample

    Random Variable          Mean        StdDev      Distribution

 QLEV( BUTANE, OCT)      119.7697      4.981368      NORMAL,120,5

 QLEV( BUTANE, VAP)      59.94561      2.969037      NORMAL,60,3

 QLEV( BUTANE, VOL)      104.9087      6.133397      NORMAL,105,6

 QLEV( CATREF, OCT)      99.94025      2.124726      NORMAL,100,2

 QLEV( CATREF, VAP)      2.600531     0.1093538      NORMAL,2.6,0.11

 QLEV( CATREF, VOL)      2.999666     0.1257882      NORMAL,3,0.13

 QLEV( NAPTHA, OCT)      73.99625      3.077703      NORMAL,74,3

 QLEV( NAPTHA, VAP)      4.102662     0.1975493      NORMAL,4.1,0.2

 QLEV( NAPTHA, VOL)      12.00060     0.3970604      NORMAL,12,0.4

This report lists each of the random variables in the model, their sample mean and standard deviation, and their distribution type.

Finally, at the end of the report LINGO generates a individual reports for each of the scenarios.  For brevity, we reproduce the report just for the 12th scenario:

 Scenario: 12   Probability: 0.5000000E-01

 -----------------------------------------

 

    Random Variable           Value

 QLEV( BUTANE, OCT)        126.4475

 QLEV( BUTANE, VAP)        65.45897

 QLEV( BUTANE, VOL)        109.6616

 QLEV( CATREF, OCT)        100.5477

 QLEV( CATREF, VAP)        2.504830

 QLEV( CATREF, VOL)        3.098372

 QLEV( NAPTHA, OCT)        73.84414

 QLEV( NAPTHA, VAP)        4.081760

 QLEV( NAPTHA, VOL)        11.41373

            CCP Set          Status

        CCP_QUAL_UP     UNSATISFIED

        CCP_QUAL_DN       SATISFIED

                Row           Value

  R_QUP( OCT, REGU)        21598.34

  R_QDN( OCT, REGU)        18401.66

  R_QUP( OCT, PREM)        61555.49

  R_QDN( OCT, PREM)        11392.05

  R_QUP( VAP, REGU)       -1994.877

  R_QDN( VAP, REGU)        13994.88

  R_QUP( VAP, PREM)       -1399.827

  R_QDN( VAP, PREM)        10153.53

  R_QUP( VOL, REGU)        18744.58

  R_QDN( VOL, REGU)        13255.42

  R_QUP( VOL, PREM)        16364.39

  R_QDN( VOL, PREM)        6978.823

The scenario reports list the values for the random variables for the scenarios as well as the slack values of the CCP constraints.  An interesting feature of the scenario reports for a CCP is the middle section, where each CCP set is listed along with whether or not the set was satisfied in the scenario.  In this case, the upper limit quality constraints are listed as being unsatisfied, which is verified by the negative slacks on the row R_QUP( VAP, REGU) and R_QUP( VAP_PREM).  This then makes scenario 12 one of the 6 scenarios where the upper limit quality constraints were allowed to be violated.