Getting Started: LP Problems (int0b)
/***************************************************************/
/* S A S S A M P L E L I B R A R Y */
/* */
/* NAME: INT0B */
/* TITLE: Getting Started: LP Problems (int0b) */
/* PRODUCT: OR */
/* SYSTEM: ALL */
/* KEYS: OR */
/* PROCS: INTPOINT */
/* DATA: */
/* */
/* SUPPORT: UPDATE: */
/* REF: */
/* MISC: 'Getting Started: LP Problems' example from */
/* Introduction to INTPOINT chapter */
/***************************************************************/
title 'Linear Programming Example';
title3 'Setting Up Condata = dcon1 For PROC INTPOINT';
data dcon1;
input _id_ $17.
a_light a_heavy brega naphthal naphthai
heatingo jet_1 jet_2
_type_ $ _rhs_;
datalines;
profit -175 -165 -205 0 0 0 300 300 max .
naphtha_l_conv .035 .030 .045 -1 0 0 0 0 eq 0
naphtha_i_conv .100 .075 .135 0 -1 0 0 0 eq 0
heating_o_conv .390 .300 .430 0 0 -1 0 0 eq 0
recipe_1 0 0 0 0 .3 .7 -1 0 eq 0
recipe_2 0 0 0 .2 0 .8 0 -1 eq 0
available 110 165 80 . . . . . upperbd .
;
proc intpoint
bytes=1000000
condata=dcon1
conout=solutn1;
run;
title3 'LP Optimum';
proc print data=solutn1;
var _name_ _objfn_ _upperbd _lowerbd _value_ _fcost_;
sum _fcost_;
run;
title3 'Setting Up Condata = scon2 For PROC INTPOINT';
data scon2;
format _type_ $8. _col_ $8. _row_ $16.;
input _type_ $ _col_ $ _row_ $ _coef_;
datalines;
max . profit .
eq . napha_l_conv .
eq . napha_i_conv .
eq . heating_oil_conv .
eq . recipe_1 .
eq . recipe_2 .
upperbd . available .
. a_light profit -175
. a_light napha_l_conv .035
. a_light napha_i_conv .100
. a_light heating_oil_conv .390
. a_light available 110
. a_heavy profit -165
. a_heavy napha_l_conv .030
. a_heavy napha_i_conv .075
. a_heavy heating_oil_conv .300
. a_heavy available 165
. brega profit -205
. brega napha_l_conv .045
. brega napha_i_conv .135
. brega heating_oil_conv .430
. brega available 80
. naphthal napha_l_conv -1
. naphthal recipe_2 .2
. naphthai napha_i_conv -1
. naphthai recipe_1 .3
. heatingo heating_oil_conv -1
. heatingo recipe_1 .7
. heatingo recipe_2 .8
. jet_1 profit 300
. jet_1 recipe_1 -1
. jet_2 profit 300
. jet_2 recipe_2 -1
;
proc intpoint
bytes=1000000
sparsecondata
condata=scon2
conout=solutn2;
run;
data vars3;
input _name_ $ profit available;
datalines;
a_heavy -165 165
a_light -175 110
brega -205 80
heatingo 0 .
jet_1 300 .
jet_2 300 .
naphthai 0 .
naphthal 0 .
;
data dcon3;
input _id_ $17.
a_light a_heavy brega naphthal naphthai
heatingo jet_1 jet_2
_type_ $ _rhs_;
datalines;
naphtha_l_conv .035 .030 .045 -1 0 0 0 0 eq 0
naphtha_i_conv .100 .075 .135 0 -1 0 0 0 eq 0
heating_o_conv .390 .300 .430 0 0 -1 0 0 eq 0
recipe_1 0 0 0 0 .3 .7 -1 0 eq 0
recipe_2 0 0 0 .2 0 .8 0 -1 eq 0
;
proc intpoint
maximize /* ***** necessary ***** */
bytes=1000000
arcdata=vars3
condata=dcon3
conout=solutn3;
objfn profit;
upperbd available;
run;
data vars4;
input _name_ $ profit available;
datalines;
a_heavy -165 165
a_light -175 110
brega -205 80
jet_1 300 .
jet_2 300 .
;
data dcon4;
input _id_ $17.
a_light a_heavy brega naphthal naphthai
heatingo jet_1 jet_2;
datalines;
naphtha_l_conv .035 .030 .045 -1 0 0 0 0
naphtha_i_conv .100 .075 .135 0 -1 0 0 0
heating_o_conv .390 .300 .430 0 0 -1 0 0
recipe_1 0 0 0 0 .3 .7 -1 0
recipe_2 0 0 0 .2 0 .8 0 -1
;
proc intpoint
maximize defcontype=eq
bytes=1000000
arcdata=vars3
condata=dcon3
conout=solutn3;
objfn profit;
upperbd available;
run;
data scon5;
format _type_ $8. _col_ $8. _row_ $16. ;
input _type_ $ _col_ $ _row_ $ _coef_;
datalines;
eq . napha_l_conv .
eq . napha_i_conv .
eq . heating_oil_conv .
eq . recipe_1 .
eq . recipe_2 .
. a_light napha_l_conv .035
. a_light napha_i_conv .100
. a_light heating_oil_conv .390
. a_heavy napha_l_conv .030
. a_heavy napha_i_conv .075
. a_heavy heating_oil_conv .300
. brega napha_l_conv .045
. brega napha_i_conv .135
. brega heating_oil_conv .430
. naphthal napha_l_conv -1
. naphthal recipe_2 .2
. naphthai napha_i_conv -1
. naphthai recipe_1 .3
. heatingo heating_oil_conv -1
. heatingo recipe_1 .7
. heatingo recipe_2 .8
. jet_1 recipe_1 -1
. jet_2 recipe_2 -1
;
proc intpoint
maximize
bytes=1000000
sparsecondata
arcdata=vars3 /* or arcdata=vars4 */
condata=scon5
conout=solutn5;
objfn profit;
upperbd available;
run;
data scon6;
input _col_ $ _row_&$16. _coef_;
datalines;
a_light napha_l_conv .035
a_light napha_i_conv .100
a_light heating_oil_conv .390
a_heavy napha_l_conv .030
a_heavy napha_i_conv .075
a_heavy heating_oil_conv .300
brega napha_l_conv .045
brega napha_i_conv .135
brega heating_oil_conv .430
naphthal napha_l_conv -1
naphthal recipe_2 .2
naphthai napha_i_conv -1
naphthai recipe_1 .3
heatingo heating_oil_conv -1
heatingo recipe_1 .7
heatingo recipe_2 .8
jet_1 recipe_1 -1
jet_2 recipe_2 -1
;
proc intpoint
maximize
bytes=1000000
defcontype=eq
sparsecondata
arcdata=vars4
condata=scon6
conout=solutn6;
objfn profit;
upperbd available;
run;
data cond1;
input m_e_ref1 m_e_ref2 thruput1 r1_gas thruput2 r2_gas
_type_ $ _rhs_;
datalines;
-2 . 1 . . . >= -15
. -2 . . 1 . GE -15
. . -3 4 . . EQ 0
. . . . -3 4 = 0
;
data cond1b;
input m_e_ref1 m_e_ref2 thruput1 r1_gas thruput2 r2_gas
_type_ $ _rhs_;
datalines;
63 81 200 . 220 . cost .
95 80 175 140 100 100 capac .
20 10 50 . 35 . lo .
-2 . 1 . . . >= -15
. -2 . . 1 . GE -15
. . -3 4 . . EQ 0
. . . . -3 4 = 0
;
data cond1c;
input _row_ $
m_e_ref1 m_e_ref2 thruput1 r1_gas thruput2 r2_gas
_type_ $ _rhs_;
datalines;
costrow 63 . . . . . . .
costrow . 81 200 . . . cost .
. . . . . 220 . cost .
caprow . . . . . . capac .
caprow 95 . 175 . 100 100 . .
caprow . 80 175 140 . . . .
lorow 20 10 50 . 35 . lo .
con1 -2 . 1 . . . . .
con1 . . . . . . >= -15
con2 . -2 . . 1 . GE -15
con3 . . -3 4 . . EQ 0
con4 . . . . -3 4 = 0
;
title 'Setting Up Condata = Cond2 for PROC INTPOINT';
data cond2;
input _column_ $ _row1 $ _coef1 _row2 $ _coef2 ;
datalines;
m_e_ref1 con1 -2 . .
m_e_ref2 con2 -2 . .
thruput1 con1 1 con3 -3
r1_gas . . con3 4
thruput2 con2 1 con4 -3
r2_gas . . con4 4
_type_ con1 1 con2 1
_type_ con3 0 con4 0
_rhs_ con1 -15 con2 -15
;
title 'Setting Up Condata = Cond3 for PROC INTPOINT';
data cond3;
input _column_ $ _row1 $ _coef1 _row2 $ _coef2 _type_ $ ;
datalines;
m_e_ref1 con1 -2 . . >=
m_e_ref2 con2 -2 . . .
thruput1 con1 1 con3 -3 .
r1_gas . . con3 4 .
thruput2 con2 1 con4 -3 .
r2_gas . . con4 4 .
. con3 . con4 . eq
. con1 -15 con2 -15 ge
;
title3 'Setting Up Arcdata = Arcd2 for PROC INTPOINT';
data arcd2;
input _from_&$11. _to_&$15. ;
datalines;
middle east refinery 1
middle east refinery 2
u.s.a. refinery 1
u.s.a. refinery 2
refinery 1 r1
refinery 2 r2
r1 ref1 gas
r1 ref1 diesel
r2 ref2 gas
r2 ref2 diesel
ref1 gas servstn1 gas
ref1 gas servstn2 gas
ref1 diesel servstn1 diesel
ref1 diesel servstn2 diesel
ref2 gas servstn1 gas
ref2 gas servstn2 gas
ref2 diesel servstn1 diesel
ref2 diesel servstn2 diesel
;
title 'Setting Up Condata = Cond4 for PROC INTPOINT';
data cond4;
input _column_&$27. _row1 $ _coef1 _row2 $ _coef2 _type_ $ ;
datalines;
. con1 -15 con2 -15 ge
. costrow . . . cost
. . . caprow . capac
middle east_refinery 1 con1 -2 . . .
middle east_refinery 2 con2 -2 . . .
refinery 1_r1 con1 1 con3 -3 .
r1_ref1 gas . . con3 4 =
refinery 2_r2 con2 1 con4 -3 .
r2_ref2 gas . . con4 4 eq
middle east_refinery 1 costrow 63 caprow 95 .
middle east_refinery 2 costrow 81 caprow 80 .
u.s.a._refinery 1 costrow 55 . . .
u.s.a._refinery 2 costrow 49 . . .
refinery 1_r1 costrow 200 caprow 175 .
refinery 2_r2 costrow 220 caprow 100 .
r1_ref1 gas . . caprow 140 .
r1_ref1 diesel . . caprow 75 .
r2_ref2 gas . . caprow 100 .
r2_ref2 diesel . . caprow 75 .
ref1 gas_servstn1 gas costrow 15 caprow 70 .
ref1 gas_servstn2 gas costrow 22 caprow 60 .
ref1 diesel_servstn1 diesel costrow 18 . . .
ref1 diesel_servstn2 diesel costrow 17 . . .
ref2 gas_servstn1 gas costrow 17 caprow 35 .
ref2 gas_servstn2 gas costrow 31 . . .
ref2 diesel_servstn1 diesel costrow 36 . . .
ref2 diesel_servstn2 diesel costrow 23 . . .
middle east_refinery 1 . 20 . . lo
middle east_refinery 2 . 10 . . lo
refinery 1_r1 . 50 . . lo
refinery 2_r2 . 35 . . lo
ref2 gas_servstn1 gas . 5 . . lo
;
title 'Setting Up Condata = Cond5 for PROC INTPOINT';
data cond5;
input _column_&$27. _row1 $ _coef1 _row2 $ _coef2 _type_ $ ;
datalines;
middle east_refinery 1 con1 -2 costrow 63 .
middle east_refinery 2 con2 -2 lorow 10 .
refinery 1_r1 . . con3 -3 =
r1_ref1 gas caprow 140 con3 4 .
refinery 2_r2 con2 1 con4 -3 .
r2_ref2 gas . . con4 4 eq
. CON1 -15 CON2 -15 GE
ref2 diesel_servstn1 diesel . 36 costrow . cost
. . . caprow . capac
. lorow . . . lo
middle east_refinery 1 caprow 95 lorow 20 .
middle east_refinery 2 caprow 80 costrow 81 .
u.s.a._refinery 1 . . . 55 cost
u.s.a._refinery 2 costrow 49 . . .
refinery 1_r1 con1 1 caprow 175 .
refinery 1_r1 lorow 50 costrow 200 .
refinery 2_r2 costrow 220 caprow 100 .
refinery 2_r2 . 35 . . lo
r1_ref1 diesel caprow2 75 . . capac
r2_ref2 gas . . caprow 100 .
r2_ref2 diesel caprow2 75 . . .
ref1 gas_servstn1 gas costrow 15 caprow 70 .
ref1 gas_servstn2 gas caprow2 60 costrow 22 .
ref1 diesel_servstn1 diesel . . costrow 18 .
ref1 diesel_servstn2 diesel costrow 17 . . .
ref2 gas_servstn1 gas costrow 17 lorow 5 .
ref2 gas_servstn1 gas . . caprow2 35 .
ref2 gas_servstn2 gas . 31 . . cost
ref2 diesel_servstn2 diesel . . costrow 23 .
;