/***************************************************************/ /* */ /* S A S S A M P L E L I B R A R Y */ /* */ /* NAME: mpex01 */ /* TITLE: Food Manufacture 1 (mpex01) */ /* PRODUCT: OR */ /* SYSTEM: ALL */ /* KEYS: OR */ /* PROCS: OPTMODEL */ /* DATA: */ /* */ /* SUPPORT: UPDATE: */ /* REF: */ /* MISC: Example 01 from the Mathematical Programming */ /* Examples book. */ /* */ /***************************************************************/ data cost_data; input veg1-veg2 oil1-oil3; datalines; 110 120 130 110 115 130 130 110 90 115 110 140 130 100 95 120 110 120 120 125 100 120 150 110 105 90 100 140 80 135 ; data hardness_data; input oil $ hardness; datalines; veg1 8.8 veg2 6.1 oil1 2.0 oil2 4.2 oil3 5.0 ; %let revenue_per_ton = 150; %let veg_ub = 200; %let nonveg_ub = 250; %let store_ub = 1000; %let storage_cost_per_ton = 5; %let hardness_lb = 3; %let hardness_ub = 6; %let init_storage = 500; proc optmodel; setOILS; num hardness {OILS}; read data hardness_data into OILS=[oil] hardness; print hardness; set PERIODS; num cost {OILS, PERIODS}; read data cost_data into PERIODS=[_N_] {oil in OILS} ; print cost; /* tons of raw oil to buy per period */ var Buy {OILS, PERIODS} >= 0; var Use {OILS, PERIODS} >= 0; impvar Manufacture {period in PERIODS} = sum {oil in OILS} Use[oil,period]; num last_period = max {period in PERIODS} period; var Store {OILS, PERIODS union {0}} >= 0 = &hardness_lb * Manufacture[period]; con Hardness_lb_con {period in PERIODS}: sum {oil in OILS} hardness[oil] * Use[oil,period]