$if not set HOUR $abort --HOUR needs to be set $eval STARTHR (%HOUR%-1)*900+1 $eval ENDHR %HOUR%*900 sets h hour / %HOUR% / N sources/1*100/ T total number of time intervals/%STARTHR%*%ENDHR%/ r /1/; Scalar Ef Efficiency /0.9/, Beta /0.05 /, N_N Total Number of sources/100/, phi /0.1/, si /0.9/, zeta factor /0.1/, dt Time step/900/, TR /900/, MPdis /10/, eta /0.49/; alias(i,h); alias(j,N); alias(y,T); Parameter En(N,h), EnRes(N,T), MP(N,r), Mci(N,r), SOI(N,r), Av(N,h), AvRes(N,T), PP(N,h), Mx(N,h), Mn(N,h), PPRes(N,T), MxRes(N,T), MnRes(N,T), TOTPPRes(T,r), TOTMxRes(T,r), TOTMnRes(T,r), Sig(T,r), RegPerc(T,r), RegSig(T,r), IncDis(N,T), DisSig(T,r); $GDXIN OneDay.gdx $LOAD MP Mci En Av RegPerc $GDXIN $GDXIN outopt%HOUR%h.gdx $LOAD PP Mn Mx SOI $GDXIN Variables SOR(N,T), TOTsw(N), obj; Positive Variables F(N,T), AccF(N,T), AccF_t(N); Binary Variable x(N,T), SWON(N,T), SWOFF(N,T); Equations objective_e, S_e, C_22,C_23,C_24a, C_24b,C_25, C_26,C_28_1, C_28_2, C_31, C_32; *to convert the data for hours resoulution to the dispatching time interval resolution T (900 dispatching instances) loop((N,T,h),AvRes(N,T)$(ord(h)=ceil(ord(T)/TR))=Av(N,h)); loop((N,T,h),PPRes(N,T)$(ord(h)=ceil(ord(T)/TR))=PP(N,h)); loop((N,T,h),MxRes(N,T)$(ord(h)=ceil(ord(T)/TR))=Mx(N,h)); loop((N,T,h),MnRes(N,T)$(ord(h)=ceil(ord(T)/TR))=Mn(N,h)); loop((N,T,h),EnRes(N,T)$(ord(h)=ceil(ord(T)/TR))=En(N,h)); TOTPPRes(T,r)=sum((N),PPRes(N,T)); TOTMxRes(T,r)=sum((N),MxRes(N,T)); TOTMnRes(T,r)=sum((N),MnRes(N,T)); RegSig(T,r)=((TOTMxRes(T,r)*RegPerc(T,r)$(RegPerc(T,r)>0))+(TOTMnRes(T,r)*RegPerc(T,r)$(RegPerc(T,r)<0))); Sig(T,r)=RegSig(T,r)+TOTPPRes(T,r); IncDis(N,T)=PPRes(N,T)+(((MnRes(N,T)*RegSig(T,'1'))/TOTMnRes(T,'1'))$((RegSig(T,'1')<0)and(TOTMnRes(T,'1')>0)))+(((MxRes(N,T)*RegSig(T,'1'))/TOTMxRes(T,'1'))$((RegSig(T,'1')>0) and (TOTMxRes(T,'1')>0))); DisSig(T,r)$(Sig(T,r)<=MPdis)=ceil(Sig(T,r)/MPdis)*MPdis; DisSig(T,r)$(Sig(T,r)>MPdis)=floor(Sig(T,r)/MPdis)*MPdis; objective_e.. obj=E=(sum(N,TOTsw(N))+sum(N,AccF_t(N))); S_e(N).. TOTsw(N)=E=sum(T,SWON(N,T))+sum(T,SWOFF(N,T)); C_23(N,T)$(AvRes(N,T)=1).. SWON(N,T)=g=x(N,T)-x(N,T-1); C_22(N,T)$(AvRes(N,T)=1).. SWOFF(N,T)=g=x(N,T-1)-x(N,T); C_24a(N,T).. SOR(N,T)=L=Mci(N,'1'); C_24b(N,T).. SOR(N,T)=G=zeta*Mci(N,'1'); C_25(N,T).. SOR(N,T)=E=SOI(N,'1')$(ord(T)=1)+SOR(N,T-1)$(ord(T)>1)+(AvRes(N,T)*x(N,T)*MP(N,'1')/dt)-(EnRes(N,T)/dt); C_26(T).. sum(N,x(N,T)*MP(N,'1')*(AvRes(N,T)=1))=E=DisSig(T,'1'); C_28_1(N,T)$(AvRes(N,T)=1).. F(N,T)=G=((x(N,T)*MP(N,'1'))-IncDis(N,T))/max(IncDis(N,T),1); C_28_2(N,T)$(AvRes(N,T)=1).. F(N,T)=G=-((x(N,T)*MP(N,'1'))-IncDis(N,T))/max(IncDis(N,T),1); C_31(N,T)$(AvRes(N,T)=1).. AccF(N,T)=E=sum(y$(ord(y)<=ord(T)),F(N,T)); C_32(N,T)$(ord(T)=TR).. AccF_t(N)=E=AccF(N,T); Model dispatching /all/ ; solve dispatching using mip minimizing obj; Parameter SORPar(N,T); SORPar(N,T) = SOR.l(N,T); execute_unload 'inopth%HOUR%.gdx', AccF, TOTsw, SORPar=SOR, PPRes, MxRes, MnRes, TOTPPRes, TOTMxRes, TOTMnRes, EnRes, RegSig, Sig, IncDis, DisSig, AvRes;