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.