#Sets
set k:= {1..5};
set t:= {1..5};
set p:= {1..3};
set m:= {1..2};
set f:= {1..2};
set e:= {1..2};
#Parameters
param Mmin{t};
param Mmax{t};
param Cgiro := 0;
param CT{f};
param alfa{t};
param beta{f,t};
param fi{t};
param gamma{t};
param Cest{e,p};
param L{f,t};
param H{e,p};
param Hs{e,p};
param DS{p,t};
param V{p,t};
param VC{p,t};
param I{e,p};
param Disp{m};
param M{m};
param A{t,p,k};
param CK{t,k};
param C{m,t};
#Variables
var X {k,t} binary;
var Mt {t} >=0;
var Mp {m,t} >=0;
var Mpp {f,t} >=0;
var Mppp {k,t} >=0;
var DISPq {m,t} >=0;
var Iq {p,e,t} >=0;
#OF
maximize total_revenue:
sum {i in t}
((sum {j in p}
(sum {x in k}
V[p,t] * A[t,p,k] * Mt[t]))-
(sum {z in m}
C[m,t]*Mp[m,t] +
sum {h in f}
L[f,t]*Mpp[f,t] +
sum {x in k}
CK[t,k]*Mppp[k,t] +
sum {j in p}
(sum {g in e}
H[e,p]*Iq[p,e,t]) +
sum {j in p}
(sum {g in e}
Hs[e,p]*I[p,e,T]))) ;
#Restrictions
#(2)
subject to inventory_balance {j in p, i in t}:
sum{g in e} I[p,e,t] = (sum{g in e} I[p,e,t-1]) + (sum{x in k} A[t,p,k] * Mt[t] - DS[p,t]) ;
#(3)
subject to small_bucket {i in t} :
sum{x in k} X[k,t] = 1 ;
#(4)
subject to compatibility :
sum{z in m} Mp[m,t] = sum{h in f} Mpp[f,t] = sum{x in k} Mppp = Mq[t] ;
#(5)
subject to sugarcane_availability {z in m, i in t} :
DISPq[m,t] = DISPq[m,t-1] - Mp[m,t-1] >= Mp[m,t] ;
#(6)
subject to utilization:
sum{z in m} DISPq[m,1] = sum{i in t} Mq[t] ;
#(7)
subject to capacity_crushed{i in t}:
Mmin[t] * (fi[t]/100) * (gamma[t]/100) <= Mq[t] <= Mmax[t] * (fi[t]/100) * (gamma[t]/100) ;
#(8)
subject to cash_flow{i in t} :
sum{j in p}(sum{x in k} VC[p,t] * A[t,p,k] * Mq[t]) + Cgiro >= ((sum{z in m} C[m,t] * Mp[m,t]) + (sum{h in f} L[f,t] * Mpp[f,t]) + (sum{x in k} CK[t,k] * Mppp[k,t]) + (sum{j in p}(sum{g in e} H[e,p] * Iq[p,e,t]))) ;
#(9)
# 1 = Farm
# 2 = Own
subject to sugarcane_supplied{i in t} :
Mp[1,t] + Mp[2,t] <= alfa[t] * Mq[t] ;
#(10)
subject to capacity_transported{h in f, i in t} :
Mpp[f,t] <= (beta[f,t]/100) * (gamma[t]/100)* CT[f] ;
#(11)
subject to inventory_capacity{j in p, g in e, i in t} :
Iq[p,e,t] <= Cest[e,p] ;
#(12)
subject to sugarcane_processed{x in k, i in t} :
Mppp[k,t] <= Mmax[t] ;
#(13)
subject to dom_M :
Mq[t] >= 0 ;
subject to dom_Mp :
Mp[m,t] >= 0 ;
subject to dom_Mpp :
Mpp[f,t] >= 0 ;
subject to dom_Mppp :
Mppp[k,t] >= 0 ;
subject to dom_Disp :
DISPq[m,t] >= 0 ;
subject to dom_I :
Iq[p,e,t] >= 0 ;
subject to dom_X{x in k, i in t}:
X[k,t] in {0,1}