O Código inicia com um título e a frente dele um “$” para indicar função de Título.
$Ontext
This example ....
…. (in Danish)
$Offtext
Msc. Alexandre Hitoshi Ito
Com o comando SET ou SETS é declarado o nome do(s) conjunto(s) e os dados que
estão dentro do conjunto
alias (n,np);
Msc. Alexandre Hitoshi Ito
𝑑𝑖𝑠𝑡 𝑛, 𝑛 =
𝑑𝑖𝑠𝑡 𝑎 𝑛, 𝑛𝑝 =
A função Scalar, declara os valores constantes que são utilizadas para o modelo,
assim é possível verificar o que está sendo utilizado
davg = sqrt(dmin*dmax);
rr = sum(dn,node(dn,"demand")) / sum(rn,node(rn,"supply"));
Msc. Alexandre Hitoshi Ito
A função Scalar, declara os valores constantes que são utilizadas para o modelo, assim
é possível verificar o que está sendo utilizado
(Porto, 2006) pg 53 𝑄𝑛
𝐽=𝐾 𝑚
𝐷
A função Scalar, declara os valores constantes que são utilizadas para o modelo,
assim é possível verificar o que está sendo utilizado
A função Scalar, declara os valores constantes que são utilizadas para o modelo,
assim é possível verificar o que está sendo utilizado
A função Scalar, declara os valores constantes que são utilizadas para o modelo,
assim é possível verificar o que está sendo utilizado
𝑄𝑑𝑛
𝑟𝑟 =
𝑄𝑟𝑛
Msc. Alexandre Hitoshi Ito
Declarando as Variáveis
Declarando as Equações
Atribuindo as Equações
loss(a(n,np))..
h(n) - h(np) =e= [hloss*dist(a)*(qp(a)+qn(a))**(qpow-1)*(qp(a)-qn(a))/d(a)**dpow] $(qpow <> 2) +
[hloss*dist(a)*(qp(a)+qn(a))* (qp(a)-qn(a))/d(a)**dpow] $(qpow = 2);
Atribuindo as Equações
cont(n)..
sum(a(np,n), qp(a)-qn(a)) - sum(a(n,np), qp(a)-qn(a)) +
s(n)$rn(n) =e= node(n,"demand");
Equação “cont(n)”
𝑛𝑝,𝑛 𝑛,𝑛𝑝
𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 − 𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 + 𝑄𝑟𝑛 (𝑛) = 𝑄𝑛
𝑎 𝑛𝑝,𝑛 𝑎 𝑛,𝑛𝑝
n np
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
Para cada valor de nó sendo o de referencia (n) calcular a vazão que chega e a
vazão que saí, tendo a diferença, como resultado a vazão que saí do nó como
consumo
𝑛𝑝,𝑛 𝑛,𝑛𝑝
𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 − 𝑞𝑝 𝑎 − 𝑞𝑛 𝑎
𝑎 𝑛𝑝,𝑛 𝑎 𝑛,𝑛𝑝
n np
np n
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
Assim toda a somatória de cada um dos nós +
A quantidade que sai do reservatório
Deve ser igual a vazão estabelecida de demanda de cada
nó.
Desta forma as vazões de entrada e saída de cada nó irá
variar.
𝑛𝑝,𝑛 𝑛,𝑛𝑝
𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 − 𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 + 𝑄𝑟𝑛 (𝑛) = 𝑄𝑛
𝑎 𝑛𝑝,𝑛 𝑎 𝑛,𝑛𝑝
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
loss(a(n,np))..
h(n) - h(np) =e=
[hloss*dist(a)*(qp(a)+qn(a))**(qpow-1)*(qp(a)-
qn(a))/d(a)**dpow] $(qpow <> 2) +
[hloss*dist(a)*(qp(a)+qn(a))**(qpow-1)*(qp(a)-
qn(a))/d(a)**dpow] $(qpow = 2);
Equação “loss(a(n,np))”
𝑛
𝑘 ∙ 𝐿 𝑎 ∙ 𝑞+ + 𝑞−
ℎ 𝑛 − ℎ 𝑛𝑝 = , 𝑠𝑒 𝑛 ≠ 2
𝐷 𝑎 𝑚
𝑘 ∙ 𝐿 𝑎 ∙ 𝑞+ + 𝑞− 𝑛
ℎ 𝑛 − ℎ 𝑛𝑝 = , 𝑠𝑒 𝑛 = 2
𝐷 𝑎 𝑚
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
qpup(a).. qp(a) =l= maxq*qb(a);
qnup(a).. qn(a) =l= maxq*(1-qb(a));
Esta condição aplica que, a vazão Positiva (qpup) ou Negativa (qnup) (entra ou
sai do nó) será Menor ou igual (=l=) a expressão.
A condição de contorno máxima (maxq) neste caso igual a 2. Multiplicado por
um binário (1 ou 0) para identificar se tem o fluxo.
OBS:. O escoamento apresenta somente um único sentido, entrando ou saindo do
nó.
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
peq..
pcost =e= sum(rn, s(rn)*node(rn,"pcost")*
(h(rn)-node(rn,"height") ) );
𝑐𝑢𝑠𝑡𝑜 = 𝑠 𝑟𝑛 ∙ 𝑝𝑐𝑜𝑠𝑡 𝑟𝑛 ∙ (ℎ 𝑟𝑛 − 𝐻 𝑟𝑛 )
𝑟𝑛
Custo Total
Diâmetro
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
peq..
pcost =e= sum(rn, s(rn)*node(rn,"pcost")*
(h(rn)-node(rn,"height") ) );
Diâmetro
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
peq..
pcost =e= sum(rn, s(rn)*node(rn,"pcost")*
(h(rn)-node(rn,"height") ) );
𝐻𝑔 + 𝐽 ∙ 𝐿
𝐶𝑢𝑠𝑡𝑜2 = 9,8 ∙ 𝑄 ∙ ∙𝑁∙𝑇∙𝐴
ɳ𝐵 ∙ ɳ𝑚
Atribuindo as Equações
weq..
wcost =e= sum( rn , s(rn) * node(rn,"wcost") );
Calcula o custo da água
Somando para todos os reservatórios, o produto da vazão que sai de cada um
deles pelo custo unitário da água
𝑐𝑢𝑠𝑡𝑜 = 𝑠 𝑟𝑛 ∙ 𝑤𝑐𝑜𝑠𝑡(𝑛𝑟)
𝑟𝑛
Custo Total
Diâmetro
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
deq..
dcost =e= dprc * sum((n,np)$a(n,np),
dist(n,np)*d(n,np)**cpow );
Fator de custo em função do tamanho do tubo (dprc) multiplicado pela soma do
produto de cada arco em função do comprimento, pelo diâmetro elevado por um
fator
𝑟𝑛
Custo Total
Diâmetro
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
dpen..
pen =e= sum(a, qp(a) + qn(a));
𝑐𝑢𝑠𝑡𝑜 = 𝑞𝑝 𝑎 + 𝑞𝑛(𝑎)
𝑎
Custo Total
pen
Diâmetro
Msc. Alexandre Hitoshi Ito
Atribuindo as Equações
obj..
cost =e= ( pcost + wcost ) / r + dcost + pen;
Função Objetivo
Considera uma razão entre o custo de operação e o custo da água +
O custo de instalação +
O Custo de operação da vazão
𝑝𝑐𝑜𝑠𝑡 + 𝑤𝑐𝑜𝑠𝑡
𝐹𝑂 = + 𝑑𝑐𝑜𝑠𝑡 + 𝑝𝑒𝑛
𝑟
𝑎
Custo Total
Diâmetro
Msc. Alexandre Hitoshi Ito
𝑝𝑐𝑜𝑠𝑡 + 𝑤𝑐𝑜𝑠𝑡
𝐹𝑂 = + 𝑑𝑐𝑜𝑠𝑡 + 𝑝𝑒𝑛
𝑟
𝑎
Custo Total
𝑝𝑐𝑜𝑠𝑡 + 𝑤𝑐𝑜𝑠𝑡
𝑟
𝑎 𝑑𝑐𝑜𝑠𝑡
De Diâmetro
Msc. Alexandre Hitoshi Ito
1 2
3 qp qn 4
8 7 6 5
9
Msc. Alexandre Hitoshi Ito
𝑛
𝑘 ∙ 𝐿 𝑎 ∙ 𝑞+ + 𝑞−
𝑛𝑝,𝑛 𝑛,𝑛𝑝 ℎ 𝑛 − ℎ 𝑛𝑝 = , 𝑠𝑒 𝑛 ≠ 2
𝐷 𝑎 𝑚
𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 − 𝑞𝑝 𝑎 − 𝑞𝑛 𝑎 + 𝑄𝑟𝑛 (𝑛) = 𝑄𝑛
𝑛
𝑎 𝑛𝑝,𝑛 𝑎 𝑛,𝑛𝑝 𝑘 ∙ 𝐿 𝑎 ∙ 𝑞+ + 𝑞−
ℎ 𝑛 − ℎ 𝑛𝑝 = , 𝑠𝑒 𝑛 = 2
𝐷 𝑎 𝑚
1 2
3 qp qn 4
𝑐𝑢𝑠𝑡𝑜 = 𝑠 𝑟𝑛 ∙ 𝑤𝑐𝑜𝑠𝑡(𝑛𝑟)
𝑟𝑛 𝑐𝑝𝑜𝑤
𝑐𝑢𝑠𝑡𝑜 = 𝑑𝑝𝑟𝑐 ∙ 𝑠 𝑟𝑛 ∙ 𝑝𝑐𝑜𝑠𝑡 𝑟𝑛 ∙ 𝑑 𝑛, 𝑛𝑝
𝑐𝑢𝑠𝑡𝑜 = 𝑞𝑝 𝑎 + 𝑞𝑛(𝑎) 8 𝑟𝑛
𝑎
7 6
𝑝𝑐𝑜𝑠𝑡 + 𝑤𝑐𝑜𝑠𝑡 9
𝐹𝑂 = + 𝑑𝑐𝑜𝑠𝑡 + 𝑝𝑒𝑛 𝑐𝑢𝑠𝑡𝑜 = 𝑠 𝑟𝑛 ∙ 𝑝𝑐𝑜𝑠𝑡 𝑟𝑛 ∙ (ℎ 𝑟𝑛 − 𝐻 𝑟𝑛 )
𝑟
𝑎 𝑟𝑛
Msc. Alexandre Hitoshi Ito
Restrições
d.lo(n,np)$a(n,np) = dmin;
d.up(n,np)$a(n,np) = dmax;
h.lo(rn) = node(rn,"height");
h.lo(dn)=node(dn,"height")+7.5+5.0* node(dn,"demand");
s.lo(rn) = 0;
s.up(rn) = node(rn,"supply");
Msc. Alexandre Hitoshi Ito
Restrições
d.lo(n,np)$a(n,np) = dmin;
d.up(n,np)$a(n,np) = dmax;
Restrições
h.lo(rn)= node(rn,"height");
h.lo(dn)=node(dn,"height")+7.5+ 5.0*node(dn,"demand");
Restrições
s.lo(rn) = 0;
s.up(rn) = node(rn,"supply");
Valores Iniciais
d.l(n,np)$a(n,np) = davg;
h.l(n) = h.lo(n) + 5.0;
s.l(rn) = node(rn,"supply")*rr;
“.l” – Nível de atividade ou valor primal
“d.l(n,np)$a(n,np)” - O valor inicial da variável diâmetro de cada um dos
arcos, sendo um arco de um nó a outro, deverá ser igual a média do diâmetro
“davg”
“h.l(n)” o valor inicial da carga hidráulica, será a carga mínima disponível pelo
reservatório + 5
Modelo
$ontext
* DICOPT requires different nonlinear optimizers to overcome some of
* the difficulties with non-convexities. This problem has a large
* number of local solutions and it is important to find a 'good'
* first nlp solution. Minos is used to find the first nlp and Conopt
* is used to solve the subsequent problems. Minos or Conopt alone are
* not able to find a good solution.
network.optfile = 1;
Solução
Resultados
---- 33 SET dn demand nodes
cc, w , sw, s , se, n
sw 1209.339
s 1118.034 2002.498
Msc. Alexandre Hitoshi Ito
cc w sw s se n
sw 1209.339
s 1118.034 2002.498
n
nw
2080,865
sw se
s
Msc. Alexandre Hitoshi Ito
n
nw
w cc
e
sw se
s
cont(n)..
sum(a(np,n), qp(a)-qn(a)) - sum(a(n,np), qp(a)-qn(a)) +
s(n)$rn(n) =e= node(n,"demand");
cont(nw)..
w cc
e
sw se
s
cont(n)..
sum(a(np,n), qp(a)-qn(a)) - sum(a(n,np), qp(a)-qn(a)) +
s(n)$rn(n) =e= node(n,"demand");
cont(e)..
w cc
e
sw se
s
cont(n)..
sum(a(np,n), qp(a)-qn(a)) - sum(a(n,np), qp(a)-qn(a)) +
s(n)$rn(n)=e= node(n,"demand");
cont(cc)..
nw . . . 123.443
e . . . 152.638
cc 1.212 1.212 1.212 164.828
w 0.452 0.452 0.452 175.368
sw 0.245 0.245 0.245 255.297
s 0.652 0.652 0.652 235.193
se 0.252 0.252 0.252 217.525
n 0.456 0.456 0.456 215.539
Msc. Alexandre Hitoshi Ito
h(n) - h(np) =e=
[hloss*dist(a)*(qp(a)+qn(a))**(qpow-1)*(qp(a)-qn(a))/d(a)**dpow]
$(qpow <> 2) +
[hloss*dist(a)*(qp(a)+qn(a))*qp(a)-qn(a))/d(a)**dpow]$(qpow = 2);
loss(nw,cc)..
(0)*qp(nw,cc) + (0)*qn(nw,cc) + (0)*d(nw,cc) + h(nw) -h(cc) =E=0;
(LHS = -10.08, INFES = 10.08 ***)
loss(nw,w)..
(0)*qp(nw,w) + (0)*qn(nw,w) + (0)*d(nw,w) + h(nw) - h(w) =E= 0 ;
(LHS = -8.42, INFES = 8.42 ***)
loss(nw,n)..
(0)*qp(nw,n) + (0)*qn(nw,n) + (0)*d(nw,n) + h(nw) - h(n) =E= 0 ;
(LHS = -9.58, INFES = 9.58 ***)
Msc. Alexandre Hitoshi Ito
h(n) - h(np) =e=
[hloss*dist(a)*(qp(a)+qn(a))**(qpow-1)*(qp(a)-qn(a))/d(a)**dpow]
$(qpow <> 2) +
[hloss*dist(a)*(qp(a)+qn(a))*qp(a)-qn(a))/d(a)**dpow]$(qpow = 2);
---- EQU loss pressure loss on each arc
nw.cc . . . 16.191
nw.w . . . 3.307
nw.n . . . 0.119
e .cc . . . 0.020
e .s . . . 5.106
e .se . . . 1.572
e .n . . . 7.028
cc.w . . . 0.021
cc.sw . . . 2.899
cc.s . . . 0.100
cc.n . . . 0.153
sw.w . . . -0.160
s .sw . . . 6.778
s .se . . . -1.572
Msc. Alexandre Hitoshi Ito
peq..
pcost =e= sum(rn, s(rn)*node(rn,"pcost")*
(h(rn)-node(rn,"height") ) );
weq..
wcost =e= sum( rn , s(rn) * node(rn,"wcost") );
- (187.028826784067)*d(nw,n) - (149.69026915419)*d(e,cc)
- (174.349550814975)*d(e,s) - (97.1772791762506)*d(e,se)
- (99.7312779565658)*d(e,n) - (93.7382216420746)*d(cc,w)
- (116.286437524713)*d(cc,sw) - (97.1772791762506)*d(cc,s)
- (155.548322247858)*d(cc,n) - (90.4001852304575)*d(sw,w)
- (83.5750008102197)*d(s,sw) - (149.69026915419)*d(s,se)
+ dcost =E= 0 ;
----------------------------------------------------------------
(LHS = 0)
Msc. Alexandre Hitoshi Ito
qpup(a).. qp(a) =l= maxq*qb(a);
---- qpup =L= positive bounds
nw . 1.923 2.500 .
e . 1.346 6.000 .
---- VAR qb