Error 790 Symbolx D_discretev dimension mismatch

Dear GAMS experts,

I am trying to compile the code bellow, but the error message " 790 Symbolx D_discretev dimension mismatch" appears. I’ve cheked the dimentions of D_discretev and s_Demanda, but I did not find the problem. So, please, help me to handle it.

$Title Modelo - Dissertação - Daniel Sebastião da Silva - Rede de Distribuição de Água usando Programação Estocástica

Set

t 'estágios-(anos)' /2024*2030/

st(t) 'primeiro estágio' /2024/

s2t(t) 'estágios futuros' /2025*2030/





nd 'nós da rede de distribuição de água' /supply, reservatorioSOB, reservatorioITA, simples1*simples5, IPNiloCoelho, IPSalitre, IP1, IP2, IP3,IP4, ID1, ID2, ID3,
         AH1, AH2, AH3, PISFNorteIP,PISFNorteAH, PISFLesteIP, PISFLesteAH, Piscicultura, outlet/;
 

      
Set
nsu(nd) 'oferta' /supply/
nr(nd) 'reservatórios' /reservatorioSOB, reservatorioITA/
nrs(nd) 'reservatório de Sobradinho' /reservatorioSOB/
nsi(nd) 'simples' /simples1*simples5/
nip(nd) 'irrigação perimetro' /IPNiloCoelho, IPSalitre, IP1, IP2, IP3, IP4/
nid(nd) 'irrigação difusa' /ID1, ID2, ID3/
nah(nd) 'abastecimento humano' /AH1, AH2, AH3/
npisf(nd) 'PISF' /PISFNorteIP, PISFNorteAH, PISFLesteIP, PISFLesteAH /
npisfnorte(nd) 'PISF-Eixo Norte' /PISFNorteIP, PISFNorteAH/
npisfleste(nd) 'PISF-Eixo Leste' /PISFLesteIP, PISFLesteAH/
npisc(nd) 'psicultura' /Piscicultura/
nus(nd) 'uso' /IPNiloCoelho, IPSalitre, IP1, IP2, IP3, IP4, ID1, ID2, ID3, AH1, AH2, AH3, PISFNorteIP, PISFNorteAH, PISFLesteIP, PISFLesteAH,
              Piscicultura/;
Set
nsubm(nus) 'Submedio do Rio São Franscisco' /IPNiloCoelho, IPSalitre, IP1, IP2, IP3, IP4, ID1, ID2, ID3, AH1, AH2, AH3, Piscicultura/;
       
Set
ss 'cenários' /seco, normal, chuvoso/
scen 'cenários EMP' /s1*s729/;


Alias (nd, nd1);

Set nd_from_nd1 (nd, nd1) no n pega agua de n1
/reservatorioSOB.supply, simples1.reservatorioSOB, IPNiloCoelho.simples1, IPSalitre.simples1, simples2.simples1, simples2.IPNiloCoelho, simples2.IPSalitre,
ID1.simples2, AH1.simples2, simples3.simples2, simples3.ID1, simples3.AH1, IP1.simples3, simples4.simples3, simples4.IP1, AH2.simples4, IP2.simples4, ID2.simples4,
PISFNorteIP.simples4, PISFNorteAH.simples4, reservatorioITA.simples4, reservatorioITA.AH2, reservatorioITA.IP2, reservatorioITA.ID2, reservatorioITA.PISFNorteIP,
reservatorioITA.PISFNorteAH, AH3.reservatorioITA, ID3.reservatorioITA, IP3.reservatorioITA, PISFLesteIP.reservatorioITA, PISFLesteAH.reservatorioITA, simples5.reservatorioITA,
simples5.AH3, simples5.ID3, simples5.IP3, simples5.PISFLesteIP, simples5.PISFLesteAH, Piscicultura.simples5, IP4.simples5, outlet.simples5/;

Set nd_to_nd1 (nd, nd1) no n entrega para o no uso
/simples1.IPNiloCoelho, simples1.IPSalitre, simples2.ID1, simples2.AH1, simples3.IP1, simples4.ID2, simples4.AH2, simples4.IP2, simples4.PISFNorteIP, simples4.PISFNorteAH,
reservatorioITA.AH3, reservatorioITA.ID3, reservatorioITA.IP3, reservatorioITA.PISFLesteIP, reservatorioITA.PISFLesteAH, simples5.IP4, simples5.Piscicultura, simples5.outlet/;

Parameters

prob(ss) 'probabilidade em cada cenário de demanda'
/seco    0.25
normal  0.50
chuvoso 0.25/
 
 
p(t) 'Preço de venda por unidade de água em m³ ao usuário - Financeiro'
/2024 0.485
 2025 0.510
 2026 0.530
 2027 0.550
 2028 0.569
 2029 0.588
 2030 0.609/
 
Lambida(t) 'Preço de venda por unidade de água em m³ ao usuário - Economico'
 /2024 0.134 
 2025 0.141
 2026 0.144
 2027 0.148
 2028 0.152
 2029 0.155
 2030 0.159/
 
c(t) 'Custo de fornecimento por unidade de água em m³ para o usuário'
 /2024 0.0474
 2025 0.0497
 2026 0.0517
 2027 0.0535
 2028 0.0554
 2029 0.0573
 2030 0.0595/
 
co(nsubm) 'Custo de fornecimento por unidade de água em m³ para o usuário'
/IPNiloCoelho 0.0497
 IPSalitre    0.0200
 IP1          0.0200
 IP2          0.0200
 IP3          0.0064
 IP4          0.0093
 ID1          0.0084
 ID2          0.0023
 ID3          0.0034
 AH1          0.0023
 AH2          0.0034
 AH3          0.0045
 Piscicultura 0.0034/

S_ini(nd) 'armazenamento do reservatório de Sobradinho (milhões de m3) no final do ano de 2024'
/reservatorioSOB 23477850000/;

Scalar

alfa 'coeficiente do preço financeiro ' /0.8/
gama 'coeficiente do preço economico' /0.2/
Limite_Norte 'valor máximo que xnorte pode assumir de acordo com a outorga' /510105600/
Limite_Leste 'valor máximo que xleste pode assumir de acordo com a outorga' /311040000/;

Table
O(nd,t) 'oferta de água em no cenário normal em m³'
                   2024       2025        2026        2027        2028         2029         2030
supply           2963952000  2981388066  2998824132  3007848066  3016872000  3025284132  3033696264;

Table
D(nd,t) 'demanda por água no cenário normal em m³'
                 2024        2025        2026        2027        2028        2029        2030     
IPNiloCoelho   24737507    23941164    24028207    24138851    24249495    24482393    24715292   
IPSalitre      84932539    78939304    79190283    79398541    79606800    80235696    80864592
IP1           706406520   651703011   646438377   651703011   656967644   665559802   674151960
IP2           237300014   235777142   237300014   239315822   241331630   243055901   244780173   
IP3           120165792   119383128   120165792   121343421   122521050   122552002   122582953
IP4            94376980    92350325    92975105    93676043    94376980    95225231    96073481 
ID1           353203260   325851505   323219189   325851506   328483822   332779901   337075980 
ID2           118650007   117888571   118650007   119657911   120665815   121527951   122390087
ID3            60082896    59691564    60082896    60671711    61260525    61276001    61291477    
AH1            41299227    37965026    38058976    38388540    38718103    39039940    39361778
AH2             6958894     6613166     6644826     6677423     6710019     6740894     6771769 
AH3             5074618     4860000     4879596     4899502     4919409     4938538     4957667
PISFNorteIP    87569567    87569567    88254666    89580407    91055304    91889560    93304840
PISFNorteAH   519052201   487608805   490731592   493868136   497004680   499742278   502479876
PISFLesteIP     1921113     1889459     1895962     1908538     1921113     1940591     1960068
PISFLesteAH   302396100   281697099   283665503   285649286   287633068   289463069   291293070
Piscicultura    7816016     8442904     8386645     8330386     8274126     8215858     8157589
;

Table
Demanda(nus,ss,t) 'demanda por água e cada cenário em m³'
                        2024        2025        2026        2027        2028        2029        2030
IPNiloCoelho. seco       24737507    25544744    25651191    25789174    27548291    26175065    26692442     
IPNiloCoelho. normal     24737507    23941164    24028207    24138851    24249495    24482393    24715292   
IPNiloCoelho. chuvoso    24737507    22058633    22245029    22245029    22245029    22431424    22431424     
IPSalitre. seco          84932539    85093334    86248881    88496107    90454179    91320571    93638606
IPSalitre. normal        84932539    78939304    79190283    79398541    79606800    80235696    80864592
IPSalitre. chuvoso       84932539    72168911    72342365    72342365    72342365    72515818    72515818
IP1. seco               706406520   706406520   716198681   734678421   750343371   757320743   775773685
IP1. normal             706406520   651703011   646438377   651703011   656967644   665559802   674151960
IP1. chuvoso            706406520   611469607   639382025   639382025   639382025   646438377   646438377
IP2. seco               237300014   251164225   253300489   256820271   258263132   258322474   266440248
IP2. normal             237300014   235777142   237300014   239315822   241331630   243055901   244780173  
IP2. chuvoso            237300014   221337835   222774956   222774956   222774956   224212078   224212078
IP3. seco               120165792   125223298   125693322   126216272   127047312   127825427   130328134
IP3. normal             120165792   119383128   120165792   121343421   122521050   122552002   122582953
IP3. chuvoso            120165792   111480382   111771381   111771381   111771381   112062379   112062379
IP4. seco                94376980    97080295    97325153    98233910    99646435   100395058   102199838
IP4. normal              94376980    92350325    92975105    93676043    94376980    95225231    96073481
IP4. chuvoso             94376980    84405124    85317694    85317694    85317694    86230263    86230263
ID1. seco               353203260   353203260   358099341   367339211   375171686   378660372   387886843  
ID1. normal             353203260   325851505   323219189   325851506   328483822   332779901   337075980 
ID1. chuvoso            353203260   305734804   319691013   319691013   319691013   323219189   323219189
ID2. seco               118650007   125582112   126650245   128410136   129131566   129161237   133220124
ID2. normal             118650007   117888571   118650007   119657911   120665815   121527951   122390087
ID2. chuvoso            118650007   110668918   111387478   111387478   111387478   112106039   112106039
ID3. seco                60082896    62611649    62846661    63108136    63523656    63912714    65164067
ID3. normal              60082896    59691564    60082896    60671711    61260525    61276001    61291477   
ID3. chuvoso             60082896    55740191    55885691    55885691    55885691    56031190    56031189  
AH1. seco                41299227    41299227    41623295    42120986    42468605    42642600    42990962
AH1. normal              41299227    37965026    38058976    38388540    38718103    39039940    39361778
AH1. chuvoso             41299227    35607450    35902808    35902808    35902808    36198166    36198166 
AH2. seco                 6958894     6958894     6990707     7049131     7102665     7129589     7183126
AH2. normal               6958894     6613166     6644826     6677423     6710019     6740894     6771769 
AH2. chuvoso              6958894     6199025     6240082     6240082     6240082     6281140     6281140
AH3. seco                 5074618     5074618     5094213     5132316     5169485     5188148     5225161
AH3. normal               5074618     4860000     4879596     4899502     4919409     4938538     4957667
AH3. chuvoso              5074618     4543362     4577420     4577420     4577420     4611479     4611479
PISFNorteIP. seco        87569567   116028900   108669784   108669784   108669784   101310667   101310667
PISFNorteIP. normal      87569567    87569567    88254666    89580407    91055304    91889560    93304840
PISFNorteIP. chuvoso     87569567    85244408    84811386    85244408    85677430    85244408    85677430
PISFNorteAH. seco       519052201   519052201   521840241   526728480   530942638   533056596   537302853
PISFNorteAH. normal     519052201   487608805   490731592   493868136   497004680   499742278   502479876
PISFNorteAH. chuvoso    519052201   452883862   456593169   456593169   456593169   460302475   460302475
PISFLesteIP. seco         1921113     2020700     2034088     2059240     2080024     2089045     2117576
PISFLesteIP. normal       1921113     1889459     1895962     1908538     1921113     1940591     1960068
PISFLesteIP. chuvoso      1921113     1779066     1790829     1790829     1790829     1802592     1802592
PISFLesteAH. seco       302396100   302396100   304272235   307632363   310608036   312099718   315083080
PISFLesteAH. normal     302396100   281697099   283665503   285649286   287633068   289463069   291293070
PISFLesteAH. chuvoso    302396100   259306501   261613225   261613225   261613225   263919948   263919948
Piscicultura. seco        7816016     9829293     9710746     9710746     9710746     9592200     9592200
Piscicultura. normal      7816016     8442904     8386645     8330386     8274126     8215858     8157589
Piscicultura. chuvoso     7816016     7816016     7759756     7647238     7534719     7478460     7361923;
;

Table
Oferta(nd,ss,t) 'oferta de água em cada cenário em m³'
                     2025        2026        2027        2028         2029         2030
supply.seco        2191968000  2196396000  2196396000  2196396000  2200824000  2200824000
supply.normal      2981388066  2998824132  3007848066  3016872000  3025284132  3033696264
supply.chuvoso     4931928000  4681044000  4681044000  4681044000  4430160000  4430160000;


Parameter D_Discrete(nus,ss, t) 'Discrete realizations of D(nus, t) per scenario';

Parameter O_Discrete(nsu,ss, t) 'Discrete realizations of O(nus, t) per scenario';


Loop((nus, t, ss),
    If (ord(t) > 0,   
        D_Discrete(nus,ss,t) = Demanda(nus, ss, t);
    );
);

Loop((nsu, t, ss),
    If (ord(t) > 0,   
        O_Discrete(nsu,ss,t) = Oferta(nsu, ss, t);
    );
);

display D_Discrete, O_Discrete;

Parameters 
D_discretev(nus,scen,t)   'demanda discreta para nós nus'
O_discretev(nsu,scen,t)   'demanda discreta para nós nus'
;

Positive Variables
xnorte(t)     'Quantidade de m³ comprados para o Eixo Norte nos estágios futuros'
xleste(t)     'Quantidade de m³ comprados para o Eixo Leste nos estágios futuros'
y(nd,t)       'Quantidade de água vendida em cada cenário em m³'
R(nd,t)       'liberacao de agua'
Q(nd,t)       'entrada de agua em cada no'
S(nd,t)       'volume do reservatorio';


Variables
z 'Lucro total';

Equations
obj                           'Função objetivo: Maximizar lucro esperado'
rest_xnorte(t)                'restrição do valor máximo de xnorte nos estágios futuros'
rest_xnortestg1               'restrição do valor máximo de xnorte no primeiro estágio'
rest_xleste(t)                'restrição do valor máximo de xnorte nos estágios futuros'
rest_xlestestg1               'restrição do valor máximo de xnorte no primeiro estágio'
demand_rest(nus,t)            'm³ vendidos <= Demanda'
demand_rest1(nus,t)              'm³ vendidos <= Demanda (primeiro estágio)' 
totalcompradoNorte_rest(nd,t) 'm³ vendidos do eixo norte <= m³ comprados do eixo norte'
totalcompradoLeste_rest(nd,t) 'm³ vendidos do eixo leste <= m³ comprados do eixo leste'
Eq_ns(nd,t)                   'nos simples'
Eq_nsu(nd,t)                  'nos oferta'
Eq_nsu1(nsu)                  'nos oferta (primeiro estágio)'
Eq_nrs(nd,t)                  'no reservatorio'
Q_nos(nd,t)                   'quantidades que entram em cada no'
;



* Função objetivo
obj.. z =e= sum(t, sum(npisf, y(npisf,t)$s2t(t))*(alfa*p(t) + gama*Lambida(t)) 
                 - c(t)*(xnorte(t)+xleste(t)) ) ;
*                - sum(nsubm, D_Discretev(nsubm,t) $ s2t(t) - y(nsubm,t) $ s2t(t) * co(nsubm) ) );

*Restrição do valor máximo que xnorte pode assumir no primeiro estágio
rest_xnortestg1..          xnorte('2024') =l= Limite_Norte;

*Restrição do valor máximo que xnorte pode assumir nos estágios futuros
rest_xnorte(t)$(s2t(t))..  xnorte(t) =l= Limite_Norte;

*Restrição do valor máximo que xleste pode assumir no primeiro estágio
rest_xlestestg1..          xleste('2024') =l= Limite_Leste;

*Restrição do valor máximo que xleste pode assumir
rest_xleste(t)..           xleste(t) =l= Limite_Leste;


demand_rest1(nus,t)..         y(nus,'2024') =l= D(nus, '2024');  
demand_rest(nus,t)$(s2t(t)).. y(nus,t) =l= sum(scen, D_discretev(nus,scen,t));

*****
* Restrição: m³ vendidos <= Demanda (primeiro estágio)
**demand_rest1(nus,t)..             y(nus,'2024') =l= sum(ss, prob(ss) * D_Discrete(nus, '2024', ss)); 

* Restrição: m³ vendidos <= Demanda (anos futuros)
**demand_rest(nus,t)$(s2t(t)).. y(nus,t) =l= sum(ss, prob(ss) * D_Discrete(nus, t, ss));
******

* Restrição Eixo Norte: m³ vendidos <= m³ comprados
totalcompradoNorte_rest(nd,t)$(npisfnorte(nd)).. sum(npisfnorte, y(npisfnorte,t)) =l= xnorte(t);

* Restrição Eixo Leste: m³ vendidos <= m³ comprados
totalcompradoLeste_rest(nd,t)$(npisfleste(nd)).. sum(npisfleste, y(npisfleste,t)) =l= xleste(t);

* Equações de rede
Q_nos(nd,t)$(s2t(t))..       Q(nd,t) =e= sum(nd1$(nd_from_nd1(nd,nd1)),R(nd1,t))- sum(nd1$(nd_to_nd1(nd,nd1)),y(nd1,t));

Eq_ns(nd,s2t)$(nsi(nd))..    R(nd,s2t) =e= Q(nd,s2t);

Eq_nsu1(nsu)..               R(nsu,'2024') =e= O(nsu,'2024');
Eq_nsu(nsu,t)$(s2t(t))..     R(nsu,t) =e= sum(scen, O_discretev(nsu,scen,t));

Eq_nrs(nd,s2t)$(nrs(nd)).. S(nd,s2t) =e= S_ini(nd)$(ord(s2t) eq 1) + S(nd,s2t-1)$(ord(s2t) gt 1) + Q(nd,s2t) - R(nd,s2t);

Model rededissertacao /all/;
*$exit


* Step 1: Generate random values between 0 and 1
Parameters
rand(nus, scen, t) "Random uniform values (0,1)"
rand2(nsu, scen, t) "Random uniform values (0,1)"  ;

Loop((nus, scen, t),
    rand(nus, scen, t) = Uniform(0,1);
    rand2(nsu, scen, t) = Uniform(0,1);
);

* Step 2: Assign demand values based on probability ranges
Loop((nus, scen, t),
    D_discretev(nus, scen, t) = D_Discrete(nus, 'normal', t);   

    If (rand(nus, scen, t) <= 0.25,
        D_discretev(nus, scen, t) = D_Discrete(nus, 'seco', t);
    );

    If ((rand(nus, scen, t) > 0.25) and (rand(nus, scen, t) <= 0.75),
        D_discretev(nus, scen, t) = D_Discrete(nus, 'normal', t);
    );

    If (rand(nus, scen, t) > 0.75,
        D_discretev(nus, scen, t) = D_Discrete(nus, 'chuvoso', t);
    );
);

Loop((nsu, scen, t),
    O_discretev(nsu, scen, t) = O_Discrete(nsu, 'normal', t);   

    If (rand2(nsu,scen, t) <= 0.25,
        O_discretev(nsu, scen, t) = O_Discrete(nsu, 'seco', t);
    );

    If ((rand2(nsu, scen, t) > 0.25) and (rand2(nsu,scen, t) <= 0.75),
        O_discretev(nsu, scen, t) = O_Discrete(nsu, 'normal', t);
    );

    If (rand2(nsu, scen, t) > 0.75,
        O_discretev(nsu, scen, t) = O_Discrete(nsu, 'chuvoso', t);
    );
);

*$exit
file emp / 'emp.info' /; put emp '* problem %gams.i%'/;

Loop((nsu, scen, t), 
    Put emp / 'randvar' ' '  O_discretev.tn(nsu, scen, t) ' ' 'discrete' 1 ' ' O_discretev(nsu, scen, t);
);

Loop((nus, scen, t), 
    Put emp ' ' / 'randvar' ' '  D_discretev.tn(nus, scen, t) ' ' 'discrete' 1 ' ' D_discretev(nus, scen, t);
);

put emp /;


** First stage
loop(t$st(t), 
    put emp / 'stage ' t.tl:0 ' ' xnorte.tn(t) ' ' xleste.tn(t) ' ' 
        loop(nus, put emp demand_rest1.tn(nus, t) ' ' ) 
        loop(nsu, put emp Eq_nsu1.tn(nsu) ' ' )  
        loop(nd, put emp y.tn(nd, t) ' ' R.tn(nd, t) ' ' Q.tn(nd, t) ' ' S.tn(nd, t) ' '  ) 
);
put emp "rest_xnortestg1 rest_xlestestg1" /;

**Multistage
loop(t$s2t(t), 
    put emp / 'stage ' t.tl:0 ' ' xnorte.tn(t) ' ' xleste.tn(t) ' ' rest_xnorte.tn(t) ' ' rest_xleste.tn(t) ' '  
*        loop(nus, put emp demand_rest.tn(nus, t) ' ' )  
        loop(nd, 
            put emp totalcompradoNorte_rest.tn(nd, t) ' ' 
                totalcompradoLeste_rest.tn(nd, t) ' ' 
                Eq_ns.tn(nd, t) ' ' 
                Eq_nsu.tn(nd, t) ' ' 
                Eq_nrs.tn(nd, t) ' ' 
                Q_nos.tn(nd, t) ' ' 
                y.tn(nd, t) ' ' 
                R.tn(nd, t) ' ' 
                Q.tn(nd, t) ' ' 
                S.tn(nd, t) put emp / 
        ) 
);


PutClose;

Parameters
*     scenario_map(scen, t, ss) 'mapeamento de cenários para cada período'
     s_Demanda(nus,scen,t)  "Realização da demanda por cenário"
     s_Oferta(nsu,scen,t)   "Realização da oferta por cenário"
     s_xnorte(scen,t)       "Quantidade de m³ comprados para o Eixo Norte por cenário"
     s_xleste(scen,t)       "Quantidade de m³ comprados para o Eixo Leste por cenário"
     s_y(scen,nd,t)         "Quantidade de água vendida em m³ por cenário"
     s_R(scen,nd,t)         "Liberação de água por cenário"
     s_Q(scen,nd,t)         "Entrada de água em cada nó por cenário"
     s_S(scen,nd,t)         "Volume do reservatório por cenário"
     s_rep(scen,*)          "Probabilidade de cada cenário";
;

*display D_Discrete, s_Demanda;
*$exit
*

Set dict /
     scen           .scenario .' ' 
     D_Discretev    .randvar    .s_Demanda
     O_Discretev    .randvar    .s_Oferta
     xnorte         .level    .s_xnorte
     xleste         .level    .s_xleste
     y              .level    .s_y
     R              .level    .s_R
     Q              .level    .s_Q
     S              .level    .s_S
     ' '            .opt      .s_rep
/;
*put /; 

putclose emp;

option emp = de;
Option LP = cplex;
option resLim = 20600;
option limrow = 1000, limcol = 1000;

execute 'type emp.info';
execute 'dir > directory_list.txt';
execute 'copy emp.info C:\GAMS\emp.info';
*abort$[not fileexist('emp.info')];
solve rededissertacao max z using emp scenario dict;
display Demanda, Oferta, scen, rand,rand2, D_discretev, O_discretev;
*$exit

The error in the lst file reads as follows.

 440  solve rededissertacao max z using emp scenario dict;
****                                                     $790,257
**** 257  Solve statement not checked because of previous errors
**** 790  Symbol dimension mismatch
**** The following EMP errors were detected in model rededissertacao:
**** 790 Symbolx D_discretev dimension mismatch

Your dictionary looks as follows

Set dict /
     scen           .scenario .' ' 
     D_Discretev    .randvar    .s_Demanda
     O_Discretev    .randvar    .s_Oferta
     xnorte         .level    .s_xnorte
     xleste         .level    .s_xleste
     y              .level    .s_y
     R              .level    .s_R
     Q              .level    .s_Q
     S              .level    .s_S
     ' '            .opt      .s_rep
/;

So the set scen defines your scenarios. That means that the symbols on the right should contain scen as index while the symbols on the left should not.

See e.g. xnorte(t) and s_xnorte(scen,t). This looks good. Your model contains xnorte(t) and its level value will be stored in parameter s_xnorte(scen,t) for the different scenarios.

In contrast, look at D_discretev(nus,scen,t) and s_Demanda(nus,scen,t). Both symbols have the scenario index scen. That doesn’t work. I suggest taking a look at the examples and explanations in the EMP-SP documentation.

Dear Dr. Fred,

Thank you for your comments. Following your suggestion I made some adjustments to the script. Now, the error is that " 788 Symbol D_weighted in dimension one in scenario dictionary has no data". The new version of the code is below:

If you could, please, help me with this question.

Best regards!

$Title Modelo - Dissertação - Daniel Sebastião da Silva - Rede de Distribuição de Água usando Programação Estocástica

Set

t 'estágios-(anos)' /2024*2030/

st(t) 'primeiro estágio' /2024/

s2t(t) 'estágios futuros' /2025*2030/





nd 'nós da rede de distribuição de água' /supply, reservatorioSOB, reservatorioITA, simples1*simples5, IPNiloCoelho, IPSalitre, IP1, IP2, IP3,IP4, ID1, ID2, ID3,
         AH1, AH2, AH3, PISFNorteIP,PISFNorteAH, PISFLesteIP, PISFLesteAH, Piscicultura, outlet/;
 

      
Set
nsu(nd) 'oferta' /supply/
nr(nd) 'reservatórios' /reservatorioSOB, reservatorioITA/
nrs(nd) 'reservatório de Sobradinho' /reservatorioSOB/
nsi(nd) 'simples' /simples1*simples5/
nip(nd) 'irrigação perimetro' /IPNiloCoelho, IPSalitre, IP1, IP2, IP3, IP4/
nid(nd) 'irrigação difusa' /ID1, ID2, ID3/
nah(nd) 'abastecimento humano' /AH1, AH2, AH3/
npisf(nd) 'PISF' /PISFNorteIP, PISFNorteAH, PISFLesteIP, PISFLesteAH /
npisfnorte(nd) 'PISF-Eixo Norte' /PISFNorteIP, PISFNorteAH/
npisfleste(nd) 'PISF-Eixo Leste' /PISFLesteIP, PISFLesteAH/
npisc(nd) 'psicultura' /Piscicultura/
nus(nd) 'uso' /IPNiloCoelho, IPSalitre, IP1, IP2, IP3, IP4, ID1, ID2, ID3, AH1, AH2, AH3, PISFNorteIP, PISFNorteAH, PISFLesteIP, PISFLesteAH,
              Piscicultura/;
Set
nd_sub 'nd - nsu - npisfnorte - npisfleste'
nd_sub2 'nd - nsi -  nsu'
nd_sub3 'nd - nsi -  nsu'
nd_sub4 'nd - nsu'
nd_sub5 'nd - nus'
;              

nd_sub(nd) = nd(nd) - nsu(nd) - npisfnorte(nd) - npisfleste(nd);
nd_sub2(nd) = nd(nd) - nsu(nd)- nsi(nd) ;
nd_sub3(nd) = nd(nd) - nrs(nd);
nd_sub4(nd) = nd(nd) - nsu(nd);
nd_sub5(nd) = nd(nd) - nus(nd);
 
Set
nsubm(nus) 'Submedio do Rio São Franscisco' /IPNiloCoelho, IPSalitre, IP1, IP2, IP3, IP4, ID1, ID2, ID3, AH1, AH2, AH3, Piscicultura/;
       
Set
ss 'cenários' /seco, normal, chuvoso/
;

display nd, nd_sub;

*$exit
Alias (nd, nd1);

Set nd_from_nd1 (nd, nd1) no n pega agua de n1
/reservatorioSOB.supply, simples1.reservatorioSOB, IPNiloCoelho.simples1, IPSalitre.simples1, simples2.simples1, simples2.IPNiloCoelho, simples2.IPSalitre,
ID1.simples2, AH1.simples2, simples3.simples2, simples3.ID1, simples3.AH1, IP1.simples3, simples4.simples3, simples4.IP1, AH2.simples4, IP2.simples4, ID2.simples4,
PISFNorteIP.simples4, PISFNorteAH.simples4, reservatorioITA.simples4, reservatorioITA.AH2, reservatorioITA.IP2, reservatorioITA.ID2, reservatorioITA.PISFNorteIP,
reservatorioITA.PISFNorteAH, AH3.reservatorioITA, ID3.reservatorioITA, IP3.reservatorioITA, PISFLesteIP.reservatorioITA, PISFLesteAH.reservatorioITA, simples5.reservatorioITA,
simples5.AH3, simples5.ID3, simples5.IP3, simples5.PISFLesteIP, simples5.PISFLesteAH, Piscicultura.simples5, IP4.simples5, outlet.simples5/;

Set nd_to_nd1 (nd, nd1) no n entrega para o no uso
/simples1.IPNiloCoelho, simples1.IPSalitre, simples2.ID1, simples2.AH1, simples3.IP1, simples4.ID2, simples4.AH2, simples4.IP2, simples4.PISFNorteIP, simples4.PISFNorteAH,
reservatorioITA.AH3, reservatorioITA.ID3, reservatorioITA.IP3, reservatorioITA.PISFLesteIP, reservatorioITA.PISFLesteAH, simples5.IP4, simples5.Piscicultura, simples5.outlet/;

Parameters

prob(ss) 'probabilidade em cada cenário de demanda'
/seco    0.25
normal  0.50
chuvoso 0.25/
 
 
p(t) 'Preço de venda por unidade de água em m³ ao usuário - Financeiro'
/2024 0.485
 2025 0.510
 2026 0.530
 2027 0.550
 2028 0.569
 2029 0.588
 2030 0.609/
 
Lambida(t) 'Preço de venda por unidade de água em m³ ao usuário - Economico'
 /2024 0.134 
 2025 0.141
 2026 0.144
 2027 0.148
 2028 0.152
 2029 0.155
 2030 0.159/
 
c(t) 'Custo de fornecimento por unidade de água em m³ para o usuário'
 /2024 0.0474
 2025 0.0497
 2026 0.0517
 2027 0.0535
 2028 0.0554
 2029 0.0573
 2030 0.0595/
 
co(nsubm) 'Custo de fornecimento por unidade de água em m³ para o usuário'
/IPNiloCoelho 0.0497
 IPSalitre    0.0200
 IP1          0.0200
 IP2          0.0200
 IP3          0.0064
 IP4          0.0093
 ID1          0.0084
 ID2          0.0023
 ID3          0.0034
 AH1          0.0023
 AH2          0.0034
 AH3          0.0045
 Piscicultura 0.0034/
 
y_init(nd)
/
supply               0
reservatorioSOB      0
reservatorioITA      0
simples1             0
simples2             0
simples3             0 
simples4             0
simples5             0
IPNiloCoelho     23854121
IPSalitre        78688325
IP1             656967644
IP2             234254270
IP3             118600463
IP4              91725545
ID1              11927061
ID2              39344163
ID3             656967644
AH1              37871077
AH2               6581505
AH3               4840405
PISFNorteIP      25673983
PISFNorteAH     484486017
PISFLesteIP      31311305
PISFLesteAH     279728695
Piscicultura      7816016
outlet               0/

Q_init(nd)
/
supply               0
reservatorioSOB 2469996000
reservatorioITA   50339350
simples1          14155424
simples2          58867210
simples3         117734420
simples4          86508700
simples5          15729496
IPNiloCoelho      71627175
IPSalitre        110734420
IP1              656967644
IP2              234254270
IP3              118600463
IP4               91725545
ID1               11927061
ID2               39344163
ID3              656967644
AH1               37871077
AH2                6581505
AH3                4840405
PISFNorteIP       25673983
PISFNorteAH      484486017
PISFLesteIP       31311305
PISFLesteAH      279728695
Piscicultura       7816016
outlet               0/


R_init(nd)
/
supply           2469996000  
reservatorioSOB 15659725950
reservatorioITA   716271750
simples1           14155424
simples2           58867210
simples3          117734420
simples4           86508700
simples5           15729496
IPNiloCoelho             0
IPSalitre                0
IP1                      0
IP2                      0
IP3                      0
IP4                      0
ID1                      0
ID2                      0
ID3                      0
AH1                      0
AH2                      0
AH3                      0
PISFNorteIP              0
PISFNorteAH              0
PISFLesteIP              0
PISFLesteAH              0
Piscicultura             0
outlet                   0/

S_ini(nd) 'armazenamento do reservatório de Sobradinho (milhões de m3) no final do ano de 2024'
/reservatorioSOB 23477850000/;


Scalar

alfa 'coeficiente do preço financeiro ' /0.8/
gama 'coeficiente do preço economico' /0.2/
Limite_Norte 'valor máximo que xnorte pode assumir de acordo com a outorga' /510.105600/
Limite_Leste 'valor máximo que xleste pode assumir de acordo com a outorga' /3110.40000/
scalefactor  'fator de inflação' /1000000/;

Table
O(nd,t) 'oferta de água em no cenário normal em m³'
                   2024       2025        2026        2027        2028         2029         2030
supply           2963952000  2981388066  2998824132  3007848066  3016872000  3025284132  3033696264;

O(nd,t) = O(nd,t)/scalefactor;

Table
D(nd,t) 'demanda por água no cenário normal em m³'
                 2024        2025        2026        2027        2028        2029        2030     
IPNiloCoelho   24737507    23941164    24028207    24138851    24249495    24482393    24715292   
IPSalitre      84932539    78939304    79190283    79398541    79606800    80235696    80864592
IP1           706406520   651703011   646438377   651703011   656967644   665559802   674151960
IP2           237300014   235777142   237300014   239315822   241331630   243055901   244780173   
IP3           120165792   119383128   120165792   121343421   122521050   122552002   122582953
IP4            94376980    92350325    92975105    93676043    94376980    95225231    96073481 
ID1           353203260   325851505   323219189   325851506   328483822   332779901   337075980 
ID2           118650007   117888571   118650007   119657911   120665815   121527951   122390087
ID3            60082896    59691564    60082896    60671711    61260525    61276001    61291477    
AH1            41299227    37965026    38058976    38388540    38718103    39039940    39361778
AH2             6958894     6613166     6644826     6677423     6710019     6740894     6771769 
AH3             5074618     4860000     4879596     4899502     4919409     4938538     4957667
PISFNorteIP    87569567    87569567    88254666    89580407    91055304    91889560    93304840
PISFNorteAH   519052201   487608805   490731592   493868136   497004680   499742278   502479876
PISFLesteIP     1921113     1889459     1895962     1908538     1921113     1940591     1960068
PISFLesteAH   302396100   281697099   283665503   285649286   287633068   289463069   291293070
Piscicultura    7816016     8442904     8386645     8330386     8274126     8215858     8157589
;
D(nd,t) = D(nd,t)/scalefactor;

Table
Demanda(nus,ss,t) 'demanda por água e cada cenário em m³'
                        2024        2025        2026        2027        2028        2029        2030
IPNiloCoelho. seco       24737507    25544744    25651191    25789174    27548291    26175065    26692442     
IPNiloCoelho. normal     24737507    23941164    24028207    24138851    24249495    24482393    24715292   
IPNiloCoelho. chuvoso    24737507    22058633    22245029    22245029    22245029    22431424    22431424     
IPSalitre. seco          84932539    85093334    86248881    88496107    90454179    91320571    93638606
IPSalitre. normal        84932539    78939304    79190283    79398541    79606800    80235696    80864592
IPSalitre. chuvoso       84932539    72168911    72342365    72342365    72342365    72515818    72515818
IP1. seco               706406520   706406520   716198681   734678421   750343371   757320743   775773685
IP1. normal             706406520   651703011   646438377   651703011   656967644   665559802   674151960
IP1. chuvoso            706406520   611469607   639382025   639382025   639382025   646438377   646438377
IP2. seco               237300014   251164225   253300489   256820271   258263132   258322474   266440248
IP2. normal             237300014   235777142   237300014   239315822   241331630   243055901   244780173  
IP2. chuvoso            237300014   221337835   222774956   222774956   222774956   224212078   224212078
IP3. seco               120165792   125223298   125693322   126216272   127047312   127825427   130328134
IP3. normal             120165792   119383128   120165792   121343421   122521050   122552002   122582953
IP3. chuvoso            120165792   111480382   111771381   111771381   111771381   112062379   112062379
IP4. seco                94376980    97080295    97325153    98233910    99646435   100395058   102199838
IP4. normal              94376980    92350325    92975105    93676043    94376980    95225231    96073481
IP4. chuvoso             94376980    84405124    85317694    85317694    85317694    86230263    86230263
ID1. seco               353203260   353203260   358099341   367339211   375171686   378660372   387886843  
ID1. normal             353203260   325851505   323219189   325851506   328483822   332779901   337075980 
ID1. chuvoso            353203260   305734804   319691013   319691013   319691013   323219189   323219189
ID2. seco               118650007   125582112   126650245   128410136   129131566   129161237   133220124
ID2. normal             118650007   117888571   118650007   119657911   120665815   121527951   122390087
ID2. chuvoso            118650007   110668918   111387478   111387478   111387478   112106039   112106039
ID3. seco                60082896    62611649    62846661    63108136    63523656    63912714    65164067
ID3. normal              60082896    59691564    60082896    60671711    61260525    61276001    61291477   
ID3. chuvoso             60082896    55740191    55885691    55885691    55885691    56031190    56031189  
AH1. seco                41299227    41299227    41623295    42120986    42468605    42642600    42990962
AH1. normal              41299227    37965026    38058976    38388540    38718103    39039940    39361778
AH1. chuvoso             41299227    35607450    35902808    35902808    35902808    36198166    36198166 
AH2. seco                 6958894     6958894     6990707     7049131     7102665     7129589     7183126
AH2. normal               6958894     6613166     6644826     6677423     6710019     6740894     6771769 
AH2. chuvoso              6958894     6199025     6240082     6240082     6240082     6281140     6281140
AH3. seco                 5074618     5074618     5094213     5132316     5169485     5188148     5225161
AH3. normal               5074618     4860000     4879596     4899502     4919409     4938538     4957667
AH3. chuvoso              5074618     4543362     4577420     4577420     4577420     4611479     4611479
PISFNorteIP. seco        87569567   116028900   108669784   108669784   108669784   101310667   101310667
PISFNorteIP. normal      87569567    87569567    88254666    89580407    91055304    91889560    93304840
PISFNorteIP. chuvoso     87569567    85244408    84811386    85244408    85677430    85244408    85677430
PISFNorteAH. seco       519052201   519052201   521840241   526728480   530942638   533056596   537302853
PISFNorteAH. normal     519052201   487608805   490731592   493868136   497004680   499742278   502479876
PISFNorteAH. chuvoso    519052201   452883862   456593169   456593169   456593169   460302475   460302475
PISFLesteIP. seco         1921113     2020700     2034088     2059240     2080024     2089045     2117576
PISFLesteIP. normal       1921113     1889459     1895962     1908538     1921113     1940591     1960068
PISFLesteIP. chuvoso      1921113     1779066     1790829     1790829     1790829     1802592     1802592
PISFLesteAH. seco       302396100   302396100   304272235   307632363   310608036   312099718   315083080
PISFLesteAH. normal     302396100   281697099   283665503   285649286   287633068   289463069   291293070
PISFLesteAH. chuvoso    302396100   259306501   261613225   261613225   261613225   263919948   263919948
Piscicultura. seco        7816016     9829293     9710746     9710746     9710746     9592200     9592200
Piscicultura. normal      7816016     8442904     8386645     8330386     8274126     8215858     8157589
Piscicultura. chuvoso     7816016     7816016     7759756     7647238     7534719     7478460     7361923;
;

Demanda(nus,ss,t) = Demanda(nus,ss,t)/scalefactor;

Table
Oferta(nd,ss,t) 'oferta de água em cada cenário em m³'
                  2024           2025        2026        2027        2028         2029         2030
supply.seco      2963952000  2191968000  2196396000  2196396000  2196396000  2200824000  2200824000
supply.normal    2963952000   2981388066  2998824132  3007848066  3016872000  3025284132  3033696264
supply.chuvoso   2963952000   4931928000  4681044000  4681044000  4681044000  4430160000  4430160000;

Oferta(nd,ss,t) = Oferta(nd,ss,t)/scalefactor;

Parameter D_Discrete(nus,ss, t) 'Discrete realizations of D(nus, t) per scenario';

Parameter O_Discrete(nsu,ss, t) 'Discrete realizations of O(nus, t) per scenario';


Loop((nus, t, ss),
    If (ord(t) > 0,   
        D_Discrete(nus,ss,t) = Demanda(nus, ss, t);
    );
);

Loop((nsu, t, ss),
    If (ord(t) > 0,   
        O_Discrete(nsu,ss,t) = Oferta(nsu, ss, t);
    );
);

display O, D_Discrete, O_Discrete;

y_init(nd) = y_init(nd)/scalefactor;
Q_init(nd) = Q_init(nd)/scalefactor;
R_init(nd) = R_init(nd)/scalefactor;
S_ini(nd) = S_ini(nd)/scalefactor;

Parameters 
D_discretev(nus,ss,t)   'demanda discreta para nós nus'
O_discretev(nsu,ss,t)   'demanda discreta para nós nus'
;


parameter D_weighted(nus, s2t) "Weighted sum of D_discretev";

parameter O_weighted(nsu, s2t) "Weighted sum of D_discretev";


Variables
z 'Lucro total';

Positive Variables
xnorte(t)     'Quantidade de m³ comprados para o Eixo Norte nos estágios futuros'
xleste(t)     'Quantidade de m³ comprados para o Eixo Leste nos estágios futuros'
y(nd,t)       'Quantidade de água vendida em cada cenário em m³'
R(nd,t)       'liberacao de agua'
Q(nd,t)       'entrada de agua em cada no'
S(nd,t)       'volume do reservatorio';



Equations
obj                           'Função objetivo: Maximizar lucro esperado'
rest_xnortestg1               'restrição do valor máximo de xnorte no primeiro estágio'
rest_xnorte(t)                'restrição do valor máximo de xnorte nos estágios futuros'
rest_xlestestg1               'restrição do valor máximo de xnorte no primeiro estágio'
rest_xleste(t)                'restrição do valor máximo de xnorte nos estágios futuros'
demand_rest_first(nus)      'm³ vendidos <= Demanda'
demand_rest_multi(nus,s2t)     'm³ vendidos <= Demanda'
demand_rest_comp_first(nd)   'condição inicial para os nós fora de  nsu + npisfnorte + npisfleste'
demand_rest_comp_multi(nd,t)       'y é nulo para os nós fora de  nsu + npisfnorte + npisfleste'
totalcompradoNorte_rest_first    'm³ vendidos do eixo norte <= m³ comprados do eixo norte (1-stage)'
totalcompradoNorte_rest_multi(t)    'm³ vendidos do eixo norte <= m³ comprados do eixo norte (multi-stage)'
totalcompradoLeste_rest_first    'm³ vendidos do eixo leste <= m³ comprados do eixo leste (1-stage)'
totalcompradoLeste_rest_multi(t)    'm³ vendidos do eixo leste <= m³ comprados do eixo leste (multi-stage)'
Q_nos1(nd)                    'quantidades que entram em cada no (primeiro estágio)'
Q_nos(nd,t)                   'quantidades que entram em cada no'
Eq_ns1(nd)                    'nos simples (primeiro estágio'
Eq_ns(nd,t)                   'nos simples'
Eq_nsu1(nsu)                  'nos oferta (primeiro estágio)'
Eq_nsu(nd,s2t)                  'nos oferta'
Eq_nsub2_first(nd)            'R é nulo para os nós fora de nsu e nsi'
Eq_nsub2_multi(nd,t)           'R é nulo para os nós fora de nsu e nsi'
Eq_nrs_first(nd)              'no reservatorio (1-stage)'
Eq_nrs_multi(nd,t)                  'no reservatorio (multistage)'
Eq_outnrs_first(nd)            'S é nulo para os nós fora de nrs'
Eq_outnrs_multi(nd,t)            'S é nulo para os nós fora de nrs'
;



* Função objetivo
obj.. z =e= sum(t, sum(npisf, y(npisf,t)$s2t(t))*(alfa*p(t) + gama*Lambida(t)) - c('2024')*(xnorte('2024') - xleste('2024'))) 
                 - sum(s2t, c(s2t)*(xnorte(s2t)+xleste(s2t))
                - sum(nsubm, D_weighted(nsubm,s2t) - y(nsubm,s2t) * co(nsubm) ) );

*Restrição do valor máximo que xnorte pode assumir no primeiro estágio
rest_xnortestg1..                    xnorte('2024') =l= Limite_Norte;

*Restrição do valor máximo que xnorte pode assumir nos estágios futuros
rest_xnorte(t)$(s2t(t))..            xnorte(t) =l= Limite_Norte;

*Restrição do valor máximo que xleste pode assumir no primeiro estágio
rest_xlestestg1..                    xleste('2024') =l= Limite_Leste;

*Restrição do valor máximo que xleste pode assumir
rest_xleste(t)$(s2t(t))..                                   xleste(t) =l= Limite_Leste;
demand_rest_first(nus)..                                    y(nus,'2024') =l= y_init(nus);
demand_rest_multi(nus,s2t)..                                y(nus,s2t) =l= D_weighted(nus, s2t);
demand_rest_comp_first(nd)$(nd_sub5(nd))..                  y(nd,'2024') =e= 0;
demand_rest_comp_multi(nd,t)$(nd_sub5(nd) and s2t(t))..     y(nd,t) =e= 0;

* Restrição Eixo Norte: m³ vendidos <= m³ comprados
totalcompradoNorte_rest_first..                       sum(npisfnorte, y(npisfnorte,'2024')) =l= xnorte('2024');
totalcompradoNorte_rest_multi(t)$(s2t(t))..           sum(npisfnorte, y(npisfnorte,t)) =l= xnorte(t);

* Restrição Eixo Leste: m³ vendidos <= m³ comprados
*totalcompradoLeste_rest1..                sum(npisfleste, y(npisfleste,'2024') ) =l= xleste('2024');
totalcompradoLeste_rest_first..                       sum(npisfleste, y(npisfleste,'2024')) =l= xleste('2024');
totalcompradoLeste_rest_multi(t)$(s2t(t))..           sum(npisfleste, y(npisfleste,t)) =l= xleste(t);

* Equações de rede
Q_nos1(nd)..                           Q(nd,'2024') =e= Q_init(nd);
Q_nos(nd,t)$(s2t(t))..                 Q(nd,t) =e= sum(nd1$(nd_from_nd1(nd,nd1)),R(nd1,t))- sum(nd1$(nd_to_nd1(nd,nd1)),y(nd1,t));

Eq_ns1(nd)$(nsi(nd))..                 R(nd,'2024') =e= Q(nd,'2024');
Eq_ns(nd,s2t)$(nsi(nd))..              R(nd,s2t) =e= Q(nd,s2t);

Eq_nsu1(nsu)..                                    R(nsu,'2024') =e= R_init(nsu);
Eq_nsu(nsu,s2t)..                                 R(nsu,s2t) =e= O_weighted(nsu, s2t);
Eq_nsub2_first(nd)$(nd_sub2(nd) )..               R(nd,'2024') =e= 0;
Eq_nsub2_multi(nd, t)$(nd_sub2(nd) and s2t(t) ).. R(nd,t) =e= 0;


Eq_nrs_first(nd)$(nrs(nd))..                     S(nd,'2024') =e= S_ini(nd);
Eq_nrs_multi(nd,s2t)$(nrs(nd))..                 S(nd,s2t) =e= S_ini(nd)$(ord(s2t) eq 1) + S(nd,s2t-1)$(ord(s2t) gt 1) + Q(nd,s2t) - R(nd,s2t);
Eq_outnrs_first(nd)$(nd_sub3(nd) )..             S(nd,'2024') =e= 0;
Eq_outnrs_multi(nd,t)$(nd_sub3(nd)and s2t(t))..  S(nd,t) =e= 0;


Model rededissertacao /all/;

*display D_weighted, O_weighted;

*$exit
file emp / '%emp.info%' /;
put emp;

loop(s2t(t), 
    put  / "jrandvar" ' ' 
        loop(nus,  put  ' ' D_weighted.tn(nus, s2t ) ' ' ) loop(nsu, put  O_weighted.tn(nsu, s2t) ' ' )
        put prob('seco') ' ' loop(nus, put Demanda(nus,'seco',s2t) ' ') loop(nsu, put Oferta(nsu,'seco',s2t) ' ' ) 
        put prob('normal') ' ' loop(nus,put Demanda(nus,'normal',s2t) ' ') loop(nsu, put Oferta(nsu,'normal',s2t) ' ' ) 
        put prob('chuvoso') ' ' loop(nus, put Demanda(nus,'chuvoso',s2t) ' ') loop(nsu, put Oferta(nsu,'chuvoso',s2t) ' ' ) ) ;

PutClose emp;
execute 'type emp.info';
put  /;


* First stage

loop(t$st(t), 
    put  / "stage" ' ' t.tl:0 ' ' xnorte.tn(t) ' ' xleste.tn(t) ' ');
    
loop(t$st(t),put  / "stage" ' ' t.tl:0 ' '
       loop(nd, put  ' '  y.tn(nd, t) ' ' R.tn(nd, t) ' ' Q.tn(nd, t) ' ' S.tn(nd, t) ' ' / )
       ) ;
   
put  /;
    put totalcompradoNorte_rest_first.tn ' ' totalcompradoLeste_rest_first.tn ' ' /
    loop(nus, put demand_rest_first.tn(nus) ' ' / )
    loop(nd$(nd_sub5(nd)), put demand_rest_comp_first.tn(nd) ' ' /)
    loop(nd$(nd_sub2(nd)), put Eq_nsub2_first.tn(nd) ' '/ )
    loop(nd$(nd_sub3(nd)), put Eq_outnrs_first.tn(nd)' ' /)

loop(nd, put Q_nos1.tn(nd) ' ')
loop(nd$(nsi(nd)), put Eq_ns1.tn(nd) ' ' /)
loop(nsu, put Eq_nsu1(nsu) ' ' /) ;
loop(nd$(nrs(nd)), put Eq_nrs_first(nd) ' ' /) ;  
put "rest_xnortestg1 rest_xlestestg1 " ;

put  /;


**Multistage
loop(t$s2t(t), 
    put  / "stage" ' ' t.tl:0 ' ' xnorte.tn(t) ' ' xleste.tn(t) ' ' rest_xnorte.tn(t) ' ' rest_xleste.tn(t) /);
loop(s2t, put  / "stage" ' ' s2t.tl:0 ' '
        loop(nd, put  ' '  y.tn(nd, s2t) ' '  R.tn(nd, s2t) ' ' Q.tn(nd, s2t) ' ' S.tn(nd, s2t) ' ' / )
       loop(nus, put  ' ' D_weighted.tn(nus, s2t ) ' ' / ) 
        loop(nsu, put  ' ' O_weighted.tn(nsu, s2t) ' '  )
        ) ;
        
loop(s2t, 
    put  / "stage" ' ' s2t.tl:0 ' ' totalcompradoNorte_rest_multi.tn(s2t) ' ' totalcompradoLeste_rest_multi.tn(s2t) ' '/
    loop(nus, put demand_rest_multi.tn(nus,s2t) ' '/ )
    loop(nd$(nd_sub5(nd)), put demand_rest_comp_multi.tn(nd,s2t) ' ' / )
    loop(nd$(nd_sub2(nd)), put Eq_nsub2_multi.tn(nd, s2t) ' ' / ) loop(nd$(nd_sub3(nd)), put Eq_outnrs_multi.tn(nd,s2t)' '/ )
    loop(nd, put Q_nos.tn(nd,s2t)' ' / ) loop(nsi, put Eq_ns.tn(nsi,s2t) ' ' / )
    loop(nsu, put Eq_nsu.tn(nsu,s2t) ' ' / )
*    loop(nd$(nd_sub3(nd)), put Eq_outnrs.tn(nd,t) ' ' / )
    loop(nrs, put Eq_nrs_multi.tn(nrs,s2t) ' ' / ) 
);

PutClose emp;

Set
scen 'cenários EMP' /s1*s729/
;
Parameters
     s_D(scen,nus,t)                      "demanda"
     s_O(scen,nsu,t)                       "oferta"
     s_xnorte(scen,t)       "Quantidade de m³ comprados para o Eixo Norte por cenário"
     s_xleste(scen,t)       "Quantidade de m³ comprados para o Eixo Leste por cenário"
     s_y(scen,nd,t)         "Quantidade de água vendida em m³ por cenário"
     s_R(scen,nd,t)         "Liberação de água por cenário"
     s_Q(scen,nd,t)         "Entrada de água em cada nó por cenário"
     s_S(scen,nd,t)         "Volume do reservatório por cenário"
     s_rep(scen,*)          "Probabilidade de cada cenário" / #scen.prob 0/;
;

Set dict /
     scen.           scenario.  ''
     D_weighted.     randvar.   s_D
     O_weighted.     randvar.   s_O
     xnorte.         level.     s_xnorte
     xleste.         level.     s_xleste
     y.              level.     s_y
     R.              level.     s_R
     Q.              level.     s_Q
     S.              level.     s_S
    ''.              opt.       s_rep/
;

option emp=de;
option dict:3;
Option LP = cplex;
option resLim=20600
*option resLim = 10000;
*option limrow = 1000, limcol = 1000;
*option optcr = 0.01;  
execute 'type emp.info';
*execute 'dir > directory_list.txt';
*execute 'copy emp.info C:\GAMS\emp.info';
**abort$[not fileexist('emp.info')];
*display s_xnorte, s_xleste, s_y, s_R, s_Q, s_S;
solve rededissertacao max z using emp scenario dict;
*display scen, Demanda, Oferta, scen, rand,rand2, D_discretev, O_discretev;
display s_xnorte, s_xleste, s_y, s_R, s_Q, s_S;

Yes. Same problem with symbol O_weighted. The symbols occur in the model equations and need to have data. Otherwise the model will not be generated.

There seem to be more flaws in the code. E.g. you seem to try to look at the content of the EMP info file by using execute 'type emp.info'; while you probably want to do execute 'type %emp.info%'; Also, by using PutClose emp; you are closing the putfile and when you reopen it you are not appending to but overwriting what you have previously written to the file. Also, the stages seem to correspond to years (you have stages 2024, 2024, 2026 etc in your EMP info file but you do not have a stage 2). In general, it seems that you are trying to implement a fairly complex SP. I would recommend to get the basics right first and then add more complexity step by step. Start e.g. with a simple 2 stage SP as explained in the documentation.

I hope this helps!