对发电机的成本曲线进行线性化
6节点电力系统
发电机成本,进行增量线性化
目录
1,物理模型
看程序就能看出来,偷个懒。
2,数学模型
很简单,看原来的分享就知道了
3,增量线性化模型
具体的参考文献,程序里面有。
4,程序
$title
$ontext
只有电网数据的
****
对电网目标函数进行线性化
采用方法 增量线性化
增量线性化原理参考文献: 天然气网络和电源、电网联合规划的方法研究
注意点:sbase 在电网的编程中非常重要,
1)涉及到节点功率平衡的时候,和线路潮流计算的时候,都要除以SBase ,进行标幺值
2)涉及到发电机运行成本的时候,都需要进行*sbase计算,得到实际的运行成本
**你要问能不能不标幺,给的数据,branch中的数据‘x’,就是标幺值。。
计算潮流的时候就是标幺值,你说能不能不标幺
$offtext
$oneolcom
$eolcom //
Option Limrow=20;
*---------------------------------------------------------------------------------------------------
set bus /1*6/
slack(bus) /1 /
gen /g1*g3/
;
alias(bus,node);
set genbus(gen,bus) // 发电机和母线的连接关系
/ g1 . 1
g2 . 2
g3 . 6 / ;
set k /1*100/ ; //线性化添加分段集合
*---------------------------------------------------------------------------------------------------
Scalar Sbase /100/ ; //这个在写电网节点功率平衡的时候很重要,一定不能用有名值。要用标幺值。
table busdata(bus,*)
pd ratio hd
1 0 0 0
2 0 0 340.9454725
3 51.2 0.2 0
4 102.4 0.4 0
5 102.4 0.4 0
6 0 0 169.2663901 ;
table gendata(gen,*)
bus pmax pmin a b c RU RD
g1 1 220 100 0.0004 13.51 176.95 55 55
g2 2 100 10 0.001 32.63 129.97 50 50
g3 6 20 10 0.005 17.7 137.41 20 20 ;
;
table branch(bus,node,*)
x limit
1 . 2 0.17 200
1 . 4 0.258 100
2 . 3 0.037 100
2 . 4 0.197 100
3 . 6 0.018 100
4 . 5 0.037 100
5 . 6 0.140 100 ;
branch(bus,node,'x')$(branch(node,bus,'x')) = branch(node,bus,'x'); //参数对称
branch(bus,node,'limit')$(branch(node,bus,'limit')) = branch(node,bus,'limit');
branch(bus,node,'bij')$branch(bus,node,'x')= 1/branch(bus,node,'x') ; //bij赋值
parameter connex(bus,node);
connex(bus,node)$(branch(bus,node,'x')) =1 ;
display connex,branch ;
** 损耗线性化添加的参数
parameter liner_ele_data(gen,k,*);
liner_ele_data(gen,k,'x')= (gendata(gen,'pmin')+ (ord(k)-1)*((gendata(gen,'pmax')-gendata(gen,'pmin'))/(card(k)-1)))/sbase;
liner_ele_data(gen,k,'f')= liner_ele_data(gen,k,'x')*liner_ele_data(gen,k,'x')*gendata(gen,'a')*sbase*sbase
+liner_ele_data(gen,k,'x')*gendata(gen,'b')*sbase+gendata(gen,'c');
display liner_ele_data;
*---------------------------------------------------------------------------------------------------
variables
of
EC
pg(gen)
delta(bus)
pij(bus,node)
ksi(gen,k) ; // 线性化添加的变量
binary variables
yita(gen,k)
;
*---------------------------------------------------------------------------------------------------
equations obj
CE2,CE3,
CEL1,CEL2,CEL3,CEL4;
obj.. of =e= EC ;
*CE1.. EC=e=sum(gen,gendata(gen,'a')*pg(gen)*pg(gen)*Sbase*Sbase+gendata(gen,'b')*pg(gen)*Sbase+gendata(gen,'c')); //
CE2(bus,node)$connex(bus,node)..pij(bus,node)=e=branch(bus,node,'bij')*(delta(bus)-delta(node)); // 线路潮流
CE3(bus).. sum(gen$genbus(gen,bus),pg(gen))-busdata(bus,'pd')/Sbase=e=sum(node$connex(bus,node),pij(bus,node)); //节点功率平衡
CEL1 .. EC=e= sum(gen,gendata(gen,'a')*gendata(gen,'pmin')*gendata(gen,'pmin') +gendata(gen,'b')*gendata(gen,'pmin')
+gendata(gen,'c')) + sum((gen,k)$(ord(k)<card(k)),(liner_ele_data(gen,k+1,'f')-liner_ele_data(gen,k,'f'))*ksi(gen,k));
CEL2(gen) .. pg(gen)=e=gendata(gen,'pmin')/sbase+ sum(k$(ord(k)<card(k)),(liner_ele_data(gen,k+1,'x')-liner_ele_data(gen,k,'x')) *ksi(gen,k) );
CEL3(gen,k)$(ord(k)<card(k)-1) .. yita(gen,k) =l= ksi(gen,k);
CEL4(gen,k)$(ord(k)<card(k)-1) .. yita(gen,k) =g= ksi(gen,k+1);
*---------------------------------------------------------------------------------------------------
model only_e /all/ ;
pg.up(gen) = gendata(gen,'pmax')/Sbase ;
pg.lo(gen) = gendata(gen,'pmin')/Sbase ;
delta.up(bus) = pi/2 ;
delta.lo(bus) =-pi/2 ;
delta.fx(slack) = 0 ; //这个一定放在delta赋值的最后
pij.up(bus,node)$connex(bus,node) = branch(bus,node,'limit')/Sbase ;
pij.lo(bus,node)$connex(bus,node) = -branch(bus,node,'limit')/Sbase ;
ksi.up(gen,k) = 1 ;
ksi.lo(gen,k) = 0 ;
solve only_e using mip min of ;
display of.l,pg.l,pij.l;
5,难点解读
5.1 程序书写规范
程序一定要按,
1)集合,
2)数据,
3)变量,
4)方程,
5)模型,变量约束及变量初值,求解
有了这样的范式,写什么程序就是往这几个模块里面添加内容就行了。
要写这个模型,首先,我先写了6节点的最优潮流程序,
接着,看懂增量线性化方法
又根据上边的范式,一点点网集合里加东西,往数据中加东西,往变量中加东西。
5.2 程序中的难点
1) Sbase 的使用
程序中有标注
2) ord(k)<card(k)-1)
这一类的表达,也要好好注意
增量线性化程序如何编写就到这里了
搜索“GAMS系列分享”,查看GAMS在电力系统(综合能源)中的应用!!!
搜索“GAMS系列分享”,查看GAMS在电力系统(综合能源)中的应用!!!
搜索“GAMS系列分享”,查看GAMS在电力系统(综合能源)中的应用!!!