一种基于改进邻接矩阵的稀疏技术技术领域
本发明属于电力系统计算领域,尤其涉及一种基于改进邻接矩阵的稀疏技
术。
背景技术
随着电压等级的不断提高,新系统元件的不断出现,现代电力系统规模庞大,
节点数动辄成千上万,如何有效提高其计算效率,是电力工作者非常关心的一个
问题。稀疏技术是提高计算速度的有效方法,目前,该技术已广泛应用于电力系
统很多方面的分析计算中,如潮流计算、暂态计算、状态估计、谐波阻抗扫描等。
因此结合计算机技术和电力系统的特点,对传统稀疏技术加以优化,进一步提高
计算效率,对电力系统各种分析计算都有重要意义。
目前电力系统中常用的方法有稀疏向量法和基于十字链表的稀疏技术,但仍
存在两个缺点:1)在稀疏矩阵结构确定的情况下,数组存储比链表存储更节省内
存,检索效率更高;2)节点优化编号的过程中,已产生新增非零元的信息,可提
前确定因子表结构。
随着将STL(StandardTemplateLibrary)纳入C++标准,数组的功能得到极大
的完善。利用容器数组可以方便地进行插入、删除、查找等操作,且不会出现维
数不足的情况,使原本对数组的复杂操作变得简单。
发明内容
针对现有技术存在的不足,本发明提出了一种可有效提高信息检索效率、程
序计算速度的基于改进邻接矩阵的稀疏技术。
为了解决上述技术问题,本发明采用如下的技术方案:
一种基于改进邻接矩阵的稀疏技术,将邻接矩阵的拓扑结构稀疏存储,构造
改进邻接矩阵,存储电力网络的拓扑结构;改进邻接矩阵M用来表示与某一节
点相连的节点号及两节点之间的支路编号,以非接地支路两端的节点号和支路编
号作为矩阵的行向量;改进邻接矩阵M共有三列,前两列表示节点编号,第三
列是对应的支路编号;将改进邻接矩阵M运用于电力系统的节点优化编号,LU
分解检索信息的提前确定和节点导纳矩阵的形成。
改进邻接矩阵M首先用于节点优化编号,节点优化过程结束后的矩阵M1
用于LU分解检索信息的提前确定,矩阵M用于节点导纳矩阵的形成。(其中,
节点优化编号和节点导纳矩阵的形成都是基于M,LU分解检索信息的提前确定
需要以节点优化编号后矩阵M1为依据)
(一)形成改进邻接矩阵
在图论中,无向图其中,V={vi}为图G的点集,E={ek}为
图G的边集,为与边对应的节点之间的连接关系。用矩阵表示图对
研究图的性质及应用非常方便,邻接矩阵就是图的一种常用的存储结构。初始邻
接矩阵是一个n维布尔方阵,表示节点之间的连接关系。邻接矩阵直观易懂,很
容易判断任意两个节点之间是否直接相连。然而邻接矩阵与节点导纳矩阵有着完
全相同的结构,高度稀疏,因此考虑将图G的拓扑结构稀疏存储。为此构造矩阵
M,改变邻接矩阵的表现形式,为表述方便,本文将矩阵M统称为改进邻接矩
阵。
改进邻接矩阵M主要用来表示与某一节点相连的节点号及两节点之间的支
路编号,以非接地支路两端的节点号和支路编号作为矩阵的行向量。矩阵M共
有三列,前两列表示节点编号,第三列是对应的支路编号。
BPA数据包含了一个系统潮流计算所需的信息,其中,B卡表示母线,L卡、
E卡和T卡分别表示对称线路、不对称线路和变压器支路。扫描BPA数据中的
所有支路,即可得到完整的拓扑信息。
BPA数据以字符形式存储,将字符信息转换为数字信息,才能进行后续的计
算。扫描BPA数据(中国版的BonnevillePowerAdministration—BPA程序的
*.DAT文件),将B卡(母线)的节点名和节点电压存入容器数组vecB,其在vecB
中的行号就是其节点编号。将L卡(对称线路)两侧的节点名和节点电压存入容器
数组vecL。扫描vecB,找到L卡两端的节点在vecB中的位置,转化为数字后
存入矩阵M,由此得到该支路的连接关系,每记录一条支路,支路编号加1。E
卡、T卡处理方法与L卡相同,如此可形成完整的矩阵M。
(二)基于改进邻接矩阵的节点优化编号
节点优化编号可以显著提高稀疏技术的性能,矩阵M包含了原始网络的拓
扑信息,在节点优化编号过程中,需及时更新拓扑信息以反映拓扑结构的变化。
基于矩阵M采用半动态法进行优化编号的具体过程如下:
(1)去除并联支路的影响,提取矩阵M前两列互不相同的行存放到矩阵M0
和M1,此时M0和M1完全相同;
(2)扫描矩阵M0,统计每个节点的出线度,存放到数组ND;
(3)消去出线度最小的一个节点i;
(4)在M0中去掉与节点i相关的所有支路,记录新增的支路,存放到矩阵
M0与矩阵M1;
(5)ND[i]=0,与节点i相连的所有未消去节点出线度减1,新增支路两端节
点的出线度加1;
(6)重复执行步骤(3)、(4)、(5),直到所有节点均被消去。
(三)基于改进邻接矩阵的三角分解检索信息的确定
在大规模系统节点电压方程的求解过程中,通常采用的是LU分解技术,因
为节点导纳矩阵高度稀疏,LU分解后的L矩阵和U矩阵也高度稀疏,采用三角
检索存储格式进行存储,检索信息是的形成是至关重要的一步。在LU分解过程
中,L可由U求出,所以只需存储U矩阵及其检索信息。采用三角存储格式存储
矩阵U及其检索信息,如下所示:
YD:存储U矩阵的对角线元素的值;
YU:按行顺序的存储U矩阵严格上三角非零元的值;
JU[p]:存储元素YU[p]所在的列号;
IU[k]:存储U矩阵严格上三角元素中第k行第1个非零元素在YU中的位置;
节点编号完成后的矩阵M1,包含原有节点间连接关系和节点消去过程中的
新增支路,由此确定存储框架和检索信息。对照节点编号后的节点顺序,通过扫
描、查找等操作即可在矩阵三角分解前确定矩阵U的存储框架YD、YU和检索
信息JU、IU。形成数组JU和IU的具体步骤如下;
(1)i=0,将i存放于数组JU,节点j=BestTour[i],扫描矩阵M1,得到与节
点j相连的另一节点y;
(2)扫描矩阵BestTour,找到y在其中的位置m,即y=BestTour[m];
(3)判断是否满足m>i,若是,转步骤(4),若否,转步骤(5);
(4)将m存放于数组JU;
(5)判断与节点j相连的节点是否都被找到,若是,转步骤(6),若否,转步
骤(1);
(6)将数组JU中数据个数存放于数组IU;
(7)i=i+1,转步骤(1),直至i=n-1,至此在LU分解之前形成矩阵U检索信
息。
其中,数组BestTour存储了优化编号后的节点顺序。
数组YD元素的个数为节点的个数,数组YU元素的个数与数组JU相同,
由此形成矩阵U存储框架。
检索信息确定后在整个计算过程中不再发生改变,进行LU分解及前代回代
时,按照数组JU和IU检索非零元。当产生非零注入元时,只需在数组YU的
相应位置处更新注入值,整个分解过程不需要再对注入元的检索信息进行额外处
理。
(四)基于改进邻接矩阵形成节点导纳矩阵
矩阵M包含了整个网络的拓扑结构,利用矩阵M及元件的电气参数形成系
统的节点导纳矩阵。具体步骤如下:
(1)k=0,节点i=BestTour[k],扫描矩阵M,得到与节点i相连的另一节
点m及支路编号d;
(2)扫描BestTour,找到节点m的位置j,即m=BestTour[j];
(3)根据支路编号d判断支路类型,利用该支路电气元件的数学模型得到节
点i与节点m之间的互导纳,将互导纳取负后累加到节点i的自导纳;
(4)扫描发电机与负荷等接地元件的对地导纳,累加到节点i的自导纳;
(5)与节点i相连的所有节点都处理完毕后,形成完整一行的导纳矩阵,转
步骤(6),否则转步骤(1);
(6)k=k+1,转步骤(1),直到k=n-1,至此形成完整的节点导纳矩阵。
其中:数组BestTour存储了优化编号后的节点顺序。
本发明方法的优点是:
1、本发明将邻接矩阵稀疏存储,构造改进邻接矩阵,方便了对拓扑结构的
调用,结合计算机技术和电力网络特点形成的稀疏技术,可以有效提高节点方程
的计算效率;
2、本发明将改进邻接矩阵应用于节点优化编号,节点导纳矩阵的形成,提
高了检索网络拓扑的效率;
3、本发明根据优化编号过程中新增支路与LU分解非零注入元的关联性质,
在优化编号的同时,记录新增支路的信息,根据优化编号后的改进邻接矩阵,提
前形成三角存储检索信息,避免了LU分解过程中对注入元的额外处理。
附图说明
图1是IEEE9节点系统拓扑结构和改进邻接矩阵。
图2是基于改进邻接矩阵的半动态法节点优化编号流程图。
图3是LU分解后的U矩阵和节点优化编号后的矩阵M。
图4是基于改进邻接矩阵提前形成三角检索信息流程图。
图5是基于改进邻接矩阵形成节点导纳矩阵流程图。
具体实施方式
下面通过实施例,并结合附图,对本发明的技术方案作进一步具体的说明。
基于改进邻接矩阵的稀疏技术,包括以下步骤:
(一)形成改进邻接矩阵
BPA数据包含了一个系统潮流计算所需的信息,其中,B卡表示母线,L卡、
E卡和T卡分别表示对称线路、不对称线路和变压器支路。扫描BPA数据中的
所有支路,即可得到完整的拓扑信息。
扫描BPA数据,将B卡(母线)的节点名和节点电压存入容器数组vecB,其
在vecB中的行号就是其节点编号。将L卡(对称线路)两侧的节点名和节点电压
存入容器数组vecL。扫描vecB,找到L卡两端的节点在vecB中的位置,转化
为数字后存入矩阵M,由此得到该支路的连接关系,每记录一条支路,支路编
号加1。E卡、T卡处理方法与L卡相同,如此可形成完整的矩阵M。
(二)基于改进邻接矩阵的节点优化编号
节点优化编号可以显著提高稀疏技术的性能,矩阵M包含了原始网络的拓
扑信息,在节点优化编号过程中,需及时更新拓扑信息以反映拓扑结构的变化,
因此M也随节点消去过程而变化。基于矩阵M采用半动态法进行优化编号的具
体过程如下:
(1)去除并联支路的影响,提取矩阵M前两列互不相同的行存放到矩阵M0
与矩阵M1;
(2)扫描矩阵M0,统计每个节点的出线度,存放到数组ND;
(3)消去出线度最小的一个节点i;
(4)在M0中去掉与节点i相关的所有支路,记录新增的支路,存放到矩阵
M0与矩阵M1;
(5)ND[i]=0,与节点i相连的所有未消去节点出线度减1,新增支路两端节
点的出线度加1;
(6)重复执行步骤(3)、(4)、(5),直到所有节点均被消去。
(三)基于改进邻接矩阵的三角分解检索信息的确定
在大规模系统节点电压方程的求解过程中,通常采用的是LU分解技术,因
为节点导纳矩阵高度稀疏,LU分解后的L矩阵和U矩阵也高度稀疏,采用三角
检索存储格式进行存储,检索信息是的形成是至关重要的一步。在LU分解过程
中,L可由U求出,所以只需存储U矩阵及其检索信息。采用4个一维数组存储
U矩阵及其检索信息,如下所示:
YD:存储U矩阵的对角线元素的值;
YU:按行顺序的存储U矩阵严格上三角非零元的值;
JU[p]:存储元素YU[p]所在的列号;
IU[k]:存储U矩阵严格上三角元素中第k行第1个非零元素在YU中的位置。
节点编号完成后的矩阵M1,包含原有节点间连接关系和节点消去过程中的
新增支路,由此确定存储框架和检索信息。对照节点编号后的节点顺序,通过扫
描、查找等操作即可在矩阵三角分解前确定矩阵U的存储框架YD、YU和检索
信息JU、IU。形成数组JU和IU的具体步骤如下;
(1)i=0,将i存放于数组JU,节点j=BestTour[i],扫描矩阵M1,得到与节
点j相连的另一节点y;
(2)扫描矩阵BestTour,找到y在其中的位置m,即y=BestTour[m];
(3)判断是否满足m>i,若是,转步骤(4),若否,转步骤(5);
(4)将m存放于数组JU;
(5)判断与节点j相连的节点是否都被找到,若是,转步骤(6),若否,转步
骤(1);
(6)将数组JU中数据个数存放于数组IU;
(7)i=i+1,转步骤(1),直至i=n-1,至此在LU分解之前形成矩阵U检索信
息。
其中,数组BestTour存储了优化编号后的节点顺序。
数组YD元素的个数为节点的个数,数组YU元素的个数与数组JU相同,
由此形成矩阵U存储框架。
(四)基于改进邻接矩阵形成节点导纳矩阵
矩阵M包含了整个网络的拓扑结构,利用矩阵M及元件的电气参数形成系
统的节点导纳矩阵。具体步骤如下:
(1)k=0,节点i=BestTour[k],扫描矩阵M,得到与节点i相连的另一节
点m及支路编号d;
(2)扫描BestTour,找到节点m的位置j,即m=BestTour[j];
(3)根据支路编号d判断支路类型,利用该支路电气元件的数学模型得到节
点i与节点m之间的互导纳,将互导纳取负后累加到节点i的自导纳;
(4)扫描发电机与负荷等接地元件的对地导纳,累加到节点i的自导纳;
(5)与节点i相连的所有节点都处理完毕后,形成完整一行的导纳矩阵,转
步骤(6),否则转步骤(1);
(6)k=k+1,转步骤(1),直到k=n-1,至此形成完整的节点导纳矩阵。
实施例:
这里应用改进邻接矩阵的稀疏技术求解节点电压方程I=YV,并用IEEE9
节点系统验证本发明方法的有效性。表1至表3给出了IEEE9节点系统的BPA
数据。
表1母线数据
表2两绕组变压器数据
表3输电线数据
(一)形成改进邻接矩阵
扫描BPA数据,将B卡(母线)的节点名和节点电压存入容器数组vecB,其
在vecB中的行号就是其节点编号。将L卡(对称线路)两侧的节点名和节点电压
存入容器数组vecL。扫描vecB,找到L卡两端的节点在vecB中的位置,转化
为数字后存入矩阵M,由此得到该支路的连接关系,每记录一条支路,支路编
号加1。E卡、T卡处理方法与L卡相同,如此形成完整的矩阵M。
图1给出了IEEE9节点系统拓扑结构和改进邻接矩阵。
(二)节点优化编号
图2给出了基于改进邻接矩阵的半动态法节点优化编号流程图。节点优化编
号前后的编号顺序如表4所示。
表4IEEE9节号点系统编优化
原始编号
1
2
3
4
5
6
7
8
9
优化编号
1
5
9
2
3
4
6
7
8
(三)确定三角分解检索信息
图3给出了LU分解后的U矩阵和节点优化编号后的矩阵M。
图4给出了基于改进邻接矩阵提前形成三角检索信息流程图。
采用6个一维数组存储U矩阵及其检索信息,如表5所示:
表5矩阵U三角存储数组
(四)形成节点导纳矩阵
图5给出了基于改进邻矩阵形成节点导纳矩阵流程图,具体步骤如下:
(1)k=0,节点i=BestTour[k],扫描矩阵M,得到与节点i相连的另一节
点m及支路编号d;
(2)扫描BestTour,找到节点m的位置j,即m=BestTour[j];
(3)根据支路编号d判断支路类型,利用该支路电气元件的数学模型得到节
点i与节点m之间的互导纳,将互导纳取负后累加到节点i的自导纳;
(4)扫描发电机与负荷等接地元件的对地导纳,累加到节点i的自导纳;
(5)与节点i相连的所有节点都处理完毕后,形成完整一行的导纳矩阵,转
步骤(6),否则转步骤(1);
(6)k=k+1,转步骤(1),直到k=n-1,至此形成完整的节点导纳矩阵。
基于改进邻接矩阵形成的节点导纳矩阵如表6所示。
表6IEEE9节点系统节点导纳矩阵