set DEPT;
set SCEN;
set PROD;
var Produce{PROD} >= 0 ;
var OT_Produced{SCEN, PROD} >= 0 ;
var Promise{PROD} >= 0 ;
var OT_hours_bought{DEPT, SCEN} >= 0 ;
param price{PROD} ;
param OT_sell_price{PROD} ;
param prob{SCEN} ;
param cost_OT{DEPT} ;
param hours_spent{DEPT, PROD} ;
param initial_time {DEPT} ;
param time_decrease {DEPT, SCEN} ;
param Quota {DEPT} ;
maximize Profit: ( ( sum {k in PROD} Produce[k] * price[k] ) +
( sum {k in PROD, j in SCEN} OT_Produced[j, k] * OT_sell_price[k] * prob[j] ) ) -
( sum {j in SCEN, i in DEPT} prob[j] * cost_OT[i] * OT_hours_bought[i, j]) ;
subject to mise {j in SCEN, k in PROD}: Produce[k] * OT_Produced[j, k] <= Promise[k] ;
subject to Availability {i in DEPT, j in SCEN, k in PROD}: Promise[k] * hours_spent[i, k] <= initial_time[i] - time_decrease[i, j] + OT_hours_bought[i, j] ;
subject to Quota_on_time {i in DEPT, j in SCEN}: OT_hours_bought[i, j] <= Quota[i];
subject to Non_neg {k in PROD}: Promise[k] >= 0 ;