Refinery Optimization: How to Run an Oil Refinery

Input Data

(View the complete code for this example.)

The following data sets and macro variables contain the input data that are used in this example:

data crude_data;
   input crude $ crude_ub;
   datalines;
crude1 20000
crude2 30000
;

data arc_data;
   input i $18. j $18. multiplier;
   datalines;
source            crude1            6
source            crude2            6
crude1            light_naphtha     0.1
crude1            medium_naphtha    0.2
crude1            heavy_naphtha     0.2
crude1            light_oil         0.12
crude1            heavy_oil         0.2
crude1            residuum          0.13
crude2            light_naphtha     0.15
crude2            medium_naphtha    0.25
crude2            heavy_naphtha     0.18
crude2            light_oil         0.08
crude2            heavy_oil         0.19
crude2            residuum          0.12
light_naphtha     regular_petrol    .
light_naphtha     premium_petrol    .
medium_naphtha    regular_petrol    .
medium_naphtha    premium_petrol    .
heavy_naphtha     regular_petrol    .
heavy_naphtha     premium_petrol    .
light_naphtha     reformed_gasoline 0.6
medium_naphtha    reformed_gasoline 0.52
heavy_naphtha     reformed_gasoline 0.45
light_oil         jet_fuel          .
light_oil         fuel_oil          .
heavy_oil         jet_fuel          .
heavy_oil         fuel_oil          .
light_oil         light_oil_cracked 2
light_oil_cracked cracked_oil       0.68
light_oil_cracked cracked_gasoline  0.28
heavy_oil         heavy_oil_cracked 2
heavy_oil_cracked cracked_oil       0.75
heavy_oil_cracked cracked_gasoline  0.2
cracked_oil       jet_fuel          .
cracked_oil       fuel_oil          .
reformed_gasoline regular_petrol    .
reformed_gasoline premium_petrol    .
cracked_gasoline  regular_petrol    .
cracked_gasoline  premium_petrol    .
residuum          lube_oil          0.5
residuum          jet_fuel          .
residuum          fuel_oil          .
;

data octane_data;
   input i $18. octane;
   datalines;
light_naphtha      90
medium_naphtha     80
heavy_naphtha      70
reformed_gasoline 115
cracked_gasoline  105
;

data petrol_data;
   input petrol $15. octane_lb;
   datalines;
regular_petrol 84
premium_petrol 94
;

data vapour_pressure_data;
   input oil $12. vapour_pressure;
   datalines;
light_oil   1.0
heavy_oil   0.6
cracked_oil 1.5
residuum    0.05
;

data fuel_oil_ratio_data;
   input oil $12. coefficient;
   datalines;
light_oil   10
cracked_oil  4
heavy_oil    3
residuum     1
;

data final_product_data;
   input product $15. profit;
   datalines;
premium_petrol 700
regular_petrol 600
jet_fuel       400
fuel_oil       350
lube_oil       150
;

%let vapour_pressure_ub = 1;
%let crude_total_ub = 45000;
%let naphtha_ub = 10000;
%let cracked_oil_ub = 8000;
%let lube_oil_lb = 500;
%let lube_oil_ub = 1000;
%let premium_ratio = 0.40;