set MAT /m1*m5/; * materials set MATF(MAT) /m1,m2,m3,m5/; * materials set ACT /a1*a7/; * activities Table io[MAT,ACT] a1 a2 a3 a4 a5 a6 a7 m1 1 -1 1 -1 -1 -1 1 m2 -1 1 -1 1 1 -1 1 m3 1 -1 1 -1 -1 1 1 m4 -1 1 -1 1 1 1 -1 m5 1 -1 1 -1 -1 1 -1 ; * input-output coefficients Parameter cost[ACT] /a1 2 , a2 1 , a3 2 , a4 1 , a5 1 , a6 2 , a7 1 /; Parameter act_min[ACT] /a1 0 , a2 0 , a3 0 , a4 0 , a5 0 , a6 0 , a7 0 /; Parameter act_max[ACT] /a1 20 , a2 25 , a3 25 , a4 25 , a5 25 , a6 25 , a7 25 /; Parameter revenue[MAT] /m1 2 , m2 1 , m3 2 , m5 1 /; Parameter sell_min[MAT] /m1 0 , m2 0 , m3 0 , m5 0 /; Parameter sell_max[MAT] /m1 35 , m2 43 , m3 42 , m5 35 /; Variable X(act) ,sell(MAT) , Net_Profit ; Equation Eq_Balance_1(MAT) , Eq_Balance_2(MAT) , Def_obj ; Eq_Balance_1(MAT)$MATF(MAT).. sum{ACT, io[MAT,ACT] * X[ACT]} =e= sell[MAT]; Eq_Balance_2(MAT)$(not MATF(MAT)).. sum{ACT, io[MAT,ACT] * X[ACT]} =e= 0; Def_obj.. Net_Profit =e= sum{MAT$MATF(MAT), revenue[MAT] * sell[MAT]}- sum{ACT, cost[ACT] * X[ACT] }; X.lo(ACT) = act_min(ACT) ; X.up(ACT) = act_max(ACT) ; sell.lo(MAT)$MATF(MAT) = sell_min(MAT) ; sell.up(MAT)$MATF(MAT) = sell_max(MAT) ; * AMPL solution *sell.fx('m1') = 0; *sell.fx('m2') = 0; *sell.fx('m3') = 42; *sell.fx('m4') = 0; *X.fx('a1') = 0; *X.fx('a2') = 0; *X.fx('a3') = 0; *X.fx('a4') = 21; *X.fx('a5') = 21; Model iocol2 /all/; Solve iocol2 using nlp maximazing Net_Profit ; Display Net_Profit.l ;