GAMS系列分享20—GAMS电力系统—目标函数增量线性化

6 篇文章 5 订阅
2 篇文章 1 订阅

      对发电机的成本曲线进行线性化  

                   6节点电力系统

                               发电机成本,进行增量线性化

       

目录

1,物理模型

2,数学模型

3,增量线性化模型

4,程序

5,难点解读

5.1 程序书写规范

5.2 程序中的难点


                                   

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在电力系统(综合能源)中的应用!!!

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值