欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GAMS系列分享6-电力系统最优潮流-3节点最优潮流

程序员文章站 2022-04-21 20:07:02
...

           本节主要探讨      3节点电力系统     

                                     基于直流潮流的

                                     电力系统最优潮流计算。

目录

1,物理模型

2,数学模型

3,程序

4,求解结果

5,重要知识点讲解

              5.1.集合的子集

               5.2 集合的多重命名

               5.3 多维集合

              5.4 关键点:***(对其理解极其重要)

6,一定要背下来的步骤:(几乎所有的程序都是这样)




1,物理模型

                                GAMS系列分享6-电力系统最优潮流-3节点最优潮流

2,数学模型

       GAMS系列分享6-电力系统最优潮流-3节点最优潮流

 

                式1,为优化目标

                式2,线路直流潮流计算

                式3,是各节点功率平衡

                式4,线路潮流约束

               式5,发电机出力约束

3,程序

* DC-OPF  three-bus network
*集合定义
Sets bus /1*3/,slack(bus) /3/,gen /g1*g2/;
scalars sbase /100/;
alias (bus,node);
*参数设置
Table Gendata(gen,*)
      b     Pmin    Pmax
g1    10    0       65
g2    11    0       100;
set GBconect(bus,gen)
/1  .   g1
 3  .   g2 /;
Table busData(bus,*)
       pd
2      100 ;
set conex
/1  .  2
 2  .  3
 1  .  3/;
 conex(bus,node)$(conex(node,bus))=1;
 Table branch(bus,node,*)
                x        limit
 1  .  2        0.2      50
 2  .  3        0.25     100
 1  .  3        0.4      100 ;
 branch(bus,node,'x')$(branch(bus,node,'x')=0)=branch(node,bus,'x');
 branch(bus,node,'limit')$(branch(bus,node,'limit')=0)=branch(node,bus,'limit');
 branch(bus,node,'bij')$conex(bus,node) = 1/branch(bus,node,'x');

*定义变量
 Variables Pij(bus,node),pg(gen),delta(bus),of;
*方程
 Equations const1,const2,const3;
 const1(bus,node)$conex(bus,node)..pij(bus,node)=e=branch(bus,node,'bij')*(delta(bus)-delta(node));
 const2(bus)..+sum(gen$gbconect(bus,gen),pg(gen))-busdata(bus,'pd')/sbase
                   =e=sum(node$conex(node,bus),pij(bus,node));
 const3..OF=g=sum(gen,pg(gen)*gendata(gen,'b')*sbase);
*模型建立,赋初值,模型求解
 model loadflow /all/;


 pg.lo(gen)=gendata(gen,'Pmin')/sbase;
 pg.up(gen)=gendata(gen,'pmax')/sbase;
 delta.up(bus)=pi;
 delta.lo(bus)=-pi;
 delta.fx(slack) =0;
 pij.up(bus,node)$conex(bus,node)=branch(bus,node,'limit')/sbase;
 pij.lo(bus,node)$conex(bus,node)=-branch(bus,node,'limit')/sbase;
 solve loadflow min of us lp;



*求解结果展示
 parameter report(bus,*),congestioncost;
 report(bus,'gen(MW)') = sum(gen$gbconect(bus,gen),pg.l(gen))*sbase;
 report(bus,'angle')   = delta.l(bus);
 report(bus,'LMP($/MW)') = const2.m(bus)/sbase;
 congestioncost = sum((bus,node),pij.l(bus,node)*(-const2.m(bus)+const2.m(node)))/2;
 display report,pij.l,congestioncost;

4,求解结果

              GAMS系列分享6-电力系统最优潮流-3节点最优潮流

 

5,重要知识点讲解

   这个模型已经初步成型,为什么这么说,

                         因为各节点功率平衡上,用到了

   一定自己动手敲一敲

   一定自己动手敲一敲

     后期会做一个总结,整理出一个电力系统最优潮流的框架出来,不管多么的系统都可以套用的模板,哈哈哈。

5.1.集合的子集

              slack(bus)

5.2 集合的多重命名

              alias (bus,node)

    为什么给母线bus集合多重命名,就是因为要对母线进行多重索引。初学者可能不太明白,其实索引是个非常重要的概念

理解下面这个约束,可能会对你多重命名有个更清楚的认识:

     const1(bus,node)$conex(bus,node)..pij(bus,node)=e=branch(bus,node,'bij')*(delta(bus)-delta(node)); 

     该方程的含义是:对所有的线路进行直流潮流计算。

      下面附上gams用户手册对集合多重命名的片段加强理解。

GAMS系列分享6-电力系统最优潮流-3节点最优潮流

 

5.3 多维集合

      conex (bus,node)       母线和母线的关系

      GBconect(bus,gen)         发电机集合和母线集合的关系

       前期分享过为什么建立多维集合,多维集合的目的就是建立集合之间的关系。

      本程序中,建立的conex就是母线集合和母线集合的关系,母线和母线之间的联系不就是线路吗?发电机和母线的关系不就是

5.4 关键点:***(对其理解极其重要)

                 

                 conex(bus,node)$(conex(node,bus))=1;  

                 branch(bus,node,'x')$(branch(bus,node,'x')=0)=branch(node,bus,'x');
                 branch(bus,node,'limit')$(branch(bus,node,'limit')=0)=branch(node,bus,'limit');
                  branch(bus,node,'bij')$conex(bus,node) = 1/branch(bus,node,'x');

 

                  举例说明,该段程序的重要性。手动输入的为:

                             Table branch(bus,node,*)
                                                                  x        limit
                                                1  .  2        0.2      50
                                                2  .  3        0.25     100
                                                1  .  3        0.4      100 ;

                             branch(1,2,x)=0.2;但是却没有定义branch(2,1,x)=0.2; 在后边应用branch(2,1,x)的时候就会认为branch(2,1,x)=0。

                   后边的方程:const1(bus,node)$conex(bus,node)..pij(bus,node)=e=branch(bus,node,'bij')*(delta(bus)-delta(node));  

GAMS在解析的时候会会有:Pij(2,1)=branch(2,1,'bij')*(delta(2)-delta(1));  

                                               branch(2,1,'bij')=1/branch(2,1,'x');分母为零,因此会出现错误。

                    意识到这个重要性了吗????哈哈哈哈

                     意识到这个重要性了吗????哈哈哈哈

6,一定要背下来的步骤:(几乎所有的程序都是这样)

       理解程序的重点来了。

       对所有的程序进行这样的拆解,有助于自己快速掌握编程。

       1,定义集合

                      电力系统常见的单维集合:bus,gen,slack(bus)。

                      多维集合:conex(bus,node) ,GBconect(bus,gen) ;

                      集合的多重命名: alias(bus,node)。 

       2,写参数

 

                     发电机参数    :Gendata(gen,*)   

                     负荷大小参数  :busData(bus,*) 

                     线路参数      : branch(bus,node,*)      这个地方注意***,详见5.4

       3,设变量

                    发电机出力大小    pg(gen)

                    线路上的潮流大小  Pij(bus,node)

                    各母线的相角      delta(bus)

                   优化变量:OF

       4,写约束

                    等式约束:线路有功潮流 const1

                                       母线节点功率平衡 const2

                                       目标函数:const3

 

                    不等式约束:发电机出力上下限,因为不涉及变量间的运算,直接用.lo,.up约束,更简洁

                                        同样的线路潮流上下限

       5,赋初值

             对平衡节点的相角为0    用到的.fx   ,delta(bus).fx

       6,建 模型,求模型

                 本文是目标函数只考虑了b,是线性规划LP问题。

 

欢迎关注系列GAMS分享,现在更新电力系统最优潮流的GAMS求解。

欢迎关注系列GAMS分享,现在更新电力系统最优潮流的GAMS求解。

欢迎关注系列GAMS分享,现在更新电力系统最优潮流的GAMS求解。