 POSITIVE VARIABLES                                   
 flow(duga,m),                                        
 tranzit(N1,m),                                       
 vol(N1,m);                                           
 VARIABLES                                            
 power(N1,m),                                         
 obj;                                                 
 EQUATION                                          
 first(N1,m),                                         
 second(N1,m),                                        
 third_1(N1,m),                                       
 third_2(N1,m),                                       
 power_prod(n1,m),
 forth(N1,m),
 addition(N1,m),                                      
 ben;                                                 
*       MODEL DESCRIPTION BEGIN  *                    
 power_prod(n1,m)$V(N1)..                                                      
 power(N1,m)=e=9.81*time(m)/3600*kpd(n1)*                                      
 sum(duga$(conec_udp3(duga) and conec_ud(N1,duga)),flow(duga,m))/time(m)*      
   ((cc(N1)*                                                                   
  (0.5*(vol(N1,m)+vol(N1,m-1)$(ORD(M) gt 1)+v_BEG(N1)$(ORD(M) EQ 1)))**dd(N1)+ 
        hh(n1))-                                                               
                      (k_nba(n1)*                                              
sum(duga$(conec_udp3(duga) and conec_ud(N1,duga)),flow(duga,m))*               
sum(duga$(conec_udp3(duga) and conec_ud(N1,duga)),flow(duga,m))/               
time(m)/time(m)+          k_nbb(n1)*                                           
   sum(duga$(conec_udp3(duga) and conec_ud(N1,duga)),flow(duga,m))/time(m)+    
                       k_nbc(n1))          );                                  
forth(N1,m)$v(N1)..                                           
 sum(duga$conec_du(duga,N1), flow(duga,m))-      
 sum(duga$conec_ud(N1,duga), flow(duga,m))=e=    
 vol(N1,m)-vol(N1,m-1)$(ORD(M) gt 1)-            
v_BEG(N1)$(ORD(M) EQ 1)+                         
 (ee(m)*aa(N1))*(0.5*                             
 ((vol(N1,m)+vol(N1,m-1)$(ORD(M) gt 1)+          
 v_BEG(N1)$(ORD(M) EQ 1)))**bb(N1));              
first(N1,m)$k(N1)..                                           
 sum(duga$conec_ud(N1,duga), flow(duga,m))=e=                 
 sum(duga$conec_du(duga,N1), flow(duga,m));                   
second(N1,m)$i(N1)..                                          
  sum(duga$conec_ud(N1,duga), flow(duga,m))=e=                
 supl(N1,m)+ sum(duga$conec_du(duga,N1), flow(duga,m));   
third_1(N1,m)$r(N1)..                                         
       sum(duga$conec_ud(N1,duga), flow(duga,m))=e=           
       tranzit(N1,m)+ (sum(duga$conec_du(duga,N1),        
       flow(duga,m))-tranzit(N1,m))*ret(N1)+reb(n1);      
third_2(N1,m)$r(N1)..                                         
       sum(duga$conec_du(duga,N1),                            
       flow(duga,m))-tranzit(N1,m)=l=reqr(N1,m);              
addition(N1,m)$r(N1)..                                        
       sum(duga$conec_du(duga,N1),                            
       flow(duga,m))=g=tranzit(N1,m);                         
*************************************                         
ben.. obj=e= 
 sum(N1$r(N1), sum(m,(                                                    
 sqrt(1+  
  ((sum(duga$conec_du(duga,N1), flow(duga,m)))-tranzit(N1,m)) 
              /(1+reqr(N1,m))
  )
  )
  
))/card(r)/card(m)*P1 +                                                   
 
 
  sum(N1$rl(N1), sum(m,                                       
 (BACK(N1,M)*sum(duga$conec_du(duga,N1), flow(duga,m)) )                 
 /(0.01+reqm(N1,m))))/card(rl)/card(m)*P2 
                       +                             
  SUM(M$(ORD(M)=CARD(M)),sum(N1$v(N1),       
  (vol(N1,m)/(1+vol.up(N1,m)))))/card(v)* P3 
-P4 *                                                   
sum(m,(sum(n1$v(n1),((1+power(N1,m))
                    ) ) ) )                               
 
                       -              
 sum(m,sum(duga$(conec_udp3(duga)),( sqrt(    (1+ 
      (flow(duga,m)-flow(duga,m--1))/                
      (flow(duga,m)+flow(duga,m--1)+1)*          
      (flow(duga,m)-flow(duga,m--1))/                
      (flow(duga,m)+flow(duga,m--1)+1)           
            )) 
                           )                         
      ))/card(v)/card(m)*P5                          
   ;                                  
 
vol.lo(N1,m) =1;  
$INCLUDE 'd:\made_and_work\epic\zeraf\\cnstr'
MODEL EPIC /ALL/; 
solve EPIC using DNLP maximazing OBJ;          
PARAMETERS   rol,t1,t2,t3,t4,t5,nnn,leveln(n1,m)   ;   
nnn=  sum(N1$r(N1),sum(m$(reqr(N1,m)>1),((sum(duga$conec_du(duga,N1),1))))); 
t1=0;t2=0;t3=0;t4=0;t5=0;
leveln(n1,m)$v(n1) =                                                       
 (k_nba(n1)*sum(duga$conec_udp3(duga),flow.l(duga,m))*                     
sum(duga$conec_udp3(duga),flow.l(duga,m))/time(m)/time(m)+                 
 k_nbb(n1)*sum(duga$conec_udp3(duga),flow.l(duga,m))/time(m)+k_nbc(n1));   
t1=  0;            
t2=  sum(N1$r(N1),sum(m$(reqr(N1,m)>1),((sum(duga$conec_du(duga,N1),   
     flow.l(duga,m)))-tranzit.l(N1,m))                                 
     /(0.0001+reqr(N1,m))))/nnn;                                       
t3=  sum(N1$rl(N1),sum(m,                                       
     (BACK(N1,M)*sum(duga$conec_du(duga,N1), flow.l(duga,m)) )   
     /(0.01+reqm(N1,m))))/card(rl)/card(m);                      
t4=  SUM(M$(ORD(M)=CARD(M)),sum(N1$v(N1),                        
     (vol.l(N1,m)/(1+vol.up(N1,m)))))/card(v);     
 t5=sum(m,sum(duga$(conec_udp3(duga)),((sqrt(0.01+ 
      (flow.l(duga,m)-flow.l(duga,m--1))*                
      (flow.l(duga,m)-flow.l(duga,m--1))/                
      (flow.l(duga,m)+flow.l(duga,m--1)+0.001)/          
      (flow.l(duga,m)+flow.l(duga,m--1)+0.001)           )) 
                           )                         
      ))/card(v)/card(m);                          
 
rol=0;          
file res /d:\made_and_work\epic\zeraf\\river.new/   
put res;                                                                                   
 PUT obj.l:20:10;PUT " < obj function    ";PUT rol:20:10;PUT " < virtual water   ";PUT nnn:20:10;  
 PUT " < real user*month "; put /;                                                                 
 PUT card(duga):10:0   ," <number lines                ",t2:9:4," <2 task user    " ;  put /;     
 PUT card(r):10:0      ,"  <number users                ",t3:9:4," <3 task mouth   " ;  put /;     
 PUT card(rl):10:0     ,"  <number mouth                ",t4:9:4," <4 task filling " ;  put /;     
 PUT card(v):10:0      ,"  <number lakes                ",t5:9:4," <5 task stabl.  " ;  put /;     
 
       put "___________________________________________________________" ;  put /;         
loop(m,put " time-step =  " ; put m.tl:4; put "      connections    LINES  ";              
  put /;                                                                                   
       put "__________________________________________________________" ;  put /;          
*loop(duga$DUGA1(DUGA),                          
loop(duga,                                      
put flow.l(duga,m):11:4;                        
loop(N1$conec_ud(N1,duga),put " ",N1.TL:4);     
put " ==>  ",                                    
loop(N1$conec_du(duga,N1),put " ",N1.TL:4);     
put "        ",duga.TL:8,"   ",                 
put /; );                                       
*loop(duga$(NOT DUGA1(DUGA)),                    
*put flow.l(duga,m):11:4;                        
*loop(N1$conec_ud(N1,duga),put " ",N1.TL:4);     
*put "==>  ",                                    
*loop(N1$conec_du(duga,N1),put " ",N1.TL:4);     
*put "        ",duga.TL:8,"   ",                 
*put /; );                                       
       put "_____________________________________________________" ;  put /;               
                 );                                                                        
                                                                                           
put "____________________________________________________________" ;  put /;               
put "                       USERS  ";put /;                                                
put "____________________________________________________________" ;  put /;               
loop(m,                                                                                    
put "  All-IN-flow   percentage   requirement   Transit   Return",
put "    USER        time = ",m.tl:8,                             
put /;                                                                                     
loop(N1$r(N1),                                                                             
put ((sum(duga$conec_du(duga,N1), flow.l(duga,m)))):13:4,                                  
put ((sum(duga$conec_du(duga,N1), flow.l(duga,m))-tranzit.l(N1,m))/                        
     (0.01+reqr(N1,m))):13:4,                                                              
      put (reqr(N1,m)):14:4,                                                               
      put (tranzit.l(N1,m)):10:4,                                                          
put ((sum(duga$conec_du(duga,N1),flow.l(duga,m))-tranzit.l(N1,m))*ret(N1)+reB(N1)):9:2,
put "  N1= ",N1.TL:8,"  !",      
put /;  );                       
put "___________________________________________________________" ;put /;);    
                                                                                  
put "____________________________________________________________" ;  put /;               
put "                      MOUTH   ";put /;                                                
put "____________________________________________________________" ;  put /;               
loop(m,                                                                                    
put "  All_IN_flow   percentage   requirement   Transit",                                  
put "      USER        time = ",m.tl:8,                                                    
put /;                                                                                     
loop(N1$rl(N1),                                                                            
put ((sum(duga$conec_du(duga,N1), flow.l(duga,m)))):13:4,                                  
put ((sum(duga$conec_du(duga,N1), flow.l(duga,m))-tranzit.l(N1,m))/                        
     (0.01+reqm(N1,m))):13:4,                                                              
      put (reqm(N1,m)):14:4,                                                               
      put (tranzit.l(N1,m)):10:4,                                                          
      put (BACK(N1,m)):3:0,                          
put "  N1= ",N1.TL:8,"     !",   
put /;  );                       
put "______________________" ;put /;);       
       PUT "========================================";    put /;                          
       PUT "   WATER BALANCE for all Reservoires    ";    put /;                          
       PUT "========================================";    put /;                          
loop(N1$(v(N1)),                                                                          
       PUT "========================================";    put /;                          
put v_BEG(N1):10:2;put " => start volume";PUT " WATER BALANCE FOR ",N1.tl," !" ;          
put /; PUT "========================================";    put /;                          
PUT "  in-flow   volume  out-flow  difference ";                                          
PUT "inten.evap.  av-surf.  evap.  LEVELV";                                               
PUT "   LEVELN   EL.mln.kVtH  time  !"; put /;                                            
       PUT "========================================";    put /;                          
loop(m,                                                                                   
put  sum(duga$conec_du(duga,N1), flow.l(duga,m)): 9:2,                                    
       vol.l(N1,m): 9:2,                                                                  
  sum(duga$conec_ud(N1,duga), flow.l(duga,m)):10:2,                                       
  (-sum(duga$conec_du(duga,N1), flow.l(duga,m))+                                          
  sum(duga$conec_ud(N1,duga), flow.l(duga,m))):10:2,                                      
    ee(m):11:4,                                                                           
 (      aa(N1) *(0.5* 
 ((vol.l(N1,m)+vol.l(N1,m-1)$(ORD(M) gt 1)+                                               
 v_BEG(N1)$(ORD(M) EQ 1)))**bb(N1))):10:2
 (ee(m)*aa(N1)*(0.5* 
 ((vol.l(N1,m)+vol.l(N1,m-1)$(ORD(M) gt 1)+                                               
 v_BEG(N1)$(ORD(M) EQ 1)))**bb(N1))):9:2,
                                                                                          
                                                                                          
  (cc(n1)*((0.5*(vol.l(N1,m)+vol.l(N1,m-1)$(ORD(M) gt 1)+                                              
  v_BEG(N1)$(ORD(M) EQ 1)))**dd(N1))+hh(n1)):9:2,                                          
  leveln(n1,m):9:2,         
  power.l(n1,m):9:2;
PUT "   time_step => ",PUT m.TL:6;                                                          
                                                                                          
      put /; ); );                                                                        
PUT "==============================================================";put /;               
PUT "   TABLE OF KOEFFICIENTS FOR RESERVOIRES";           put /;                          
PUT " S = a * W^b                 H = c * W^d +h          ";          put /;              
PUT " S - area;   W - volume;       H - Level;    h - level-of 0;  "; put /;              
PUT "             n - efficiency;   t - hours-in interval = ",cek:7;  put /;              
PUT "===============================================================";put /;              
                                                                 put /;                   
loop(N1$(v(N1)),                                                                          
put "  a = ",aa(N1):8:2," b = ",bb(N1):8:2,"    n = ",                                    
kpd(N1):8:2;                                                                              
put " RES-RE ",N1.TL:8;                                                                   
 put /; );                                                                                
       PUT "========================================"; put /;                             
loop(N1$(v(N1)),                                           
put "  c = ",cc(N1):8:2," d = ",dd(N1):8:2,"    h = ",      
hh(N1):8:2;                                                
put " RES-RE ",N1.TL:8;                                    
put /; );                                                  
PUT "========================================";put /;      
file dem /d:\made_and_work\epic\zeraf\\DEMO.new/   
put dem;                  
loop(N1$(v(N1)),                                           
 loop(m,put vol.l(n1,m):10:2,put "    ",                   
put  m.tl:10,put n1.tl:10, put /; ););                     
loop(duga,                          
 loop(m,put flow.l(duga,m):10:2,put "    ",                
put  m.tl:10,put duga.tl:10,put ord(duga):10,  put /;); ); 
loop(duga,                                                 
 loop(m,put flow.l(duga,m):10:2,put "    ",                
put  m.tl:10,put duga.tl:10,put ord(duga):10, put /;); );  
