! A blending model with a quadratic approximation (BlendOctaneQP.lng)
to the blending of octane in gasoline (Motor Octane Number);
! Keywords: Blending, Fuel, Gasoline, LINGO, MON, Motor Octane,
Nonlinear, Octane, Petroleum refining, Quadratic, Refinery ;
SETS:
! The table of Raw Materials;
rm: mon, cost, avail, x, f;
rxr( rm, rm) | &1 #lt# &2: q;
ENDSETS DATA:
! Desired Motor Octane Number (MON);
montarg = 90;
! Selling price of blended gasoline;
sprice = 140;
! The raw materials,
Alkylate, Light straight run, Reformate,
Heavy cat cracked, Light cat cracked, Butane;
rm = ALKY LSTR RFRM HCAT LCAT BUTN;
! Relative costs;
cost= 105 87 98 90 101 117;
! Availability;
avail= 70 590 110 150 160 80;
! Data based on:
Snee, R. "Developing Blending Models for Gasoline and Other Mixtures",
Technometrics, vol. 23, no. 2, 1981, pp. 119-130.
! Stand-alone MON;
mon= 105.4 81.6 91.4 83.5 88.0 101.6;
! Quadratic interaction terms between pairs of rm.
E.g. ALKY & HCAT together hurt (-17.0) MON, whereas
LSTR & LCAT together help (+6.8) MON;
q = -7.3 -2.5 -17.0 -7.2 0
-0.4 1.6 6.8 0
-3.8 1.3 0
0.5 0
0;
ENDDATA
! Variables:
batch = quantity blended in total,
x( j) = amount of rm( j) in blend,
f( j) = fraction of rm( j) in blend;
! Maximize Revenue minus cost;
MAX = sprice*batch - @SUM( rm(j): cost(j)*x(j));
! Amount blended;
batch = @SUM( rm( j): x( j));
@FOR( rm( j):
! Blend fractions;
f( j) = x(j)/batch;
! Raw material availabilities;
x( j) <= avail( j);
);
! The MON (Motor Octane) constraint;
@SUM( rm(j):
mon(j)*f(j)) ! Linear part;
+ @sum( rxr(i,j): q( i, j)*f( i)*f( j)) ! Quadratic adjustment;
>= montarg;
|