拓扑-网络连通性算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

网络连通性算法

网络定义

节点与支路的集合,该集合中的节点与支路的连接关系可通过一节点-节点关联矩阵A 充分表达:

A =[a ij ]n ×n i,j=1,2,…,n

式中:a ij =⎩⎨⎧间有支路直接相连。

与节点,当节点间无支路直接相连,与节点,当节点j i 1j i 0

n —网络节点数

连通性算法

理论算法:

称矩阵A 为网络一级连通矩阵,A 2为二级连通矩阵,…,A n-1为n-1级连通矩阵。

A 2=AA =[a 2ij ]n ×n i,j=1,2,…,n

式中:a 2ij =⎩⎨⎧相连。节点间有支路直接或经第

与节点,当节点相连,节点间无支路直接且经第与节点,当节点k 3j i 1 3j i 0k k=1,2,…,n ,k ≠i,j

……

A n-1= 个1-⋯n A AA =[a n-1ij ]n ×n i,j =1,2,…,n

式中:

a n-1ij =⎩⎨⎧-⋯-⋯个节点相连。,,,间有支路直接或经其它

与节点,当节点个节点相连,,,,间无支路直接且经其它与节点,当节点221j i 1 221j i 0n n 矩阵A n-1的每一线性无关的行或列中“1”元素对应的节点均处于同一连通子集中。 实际算法:

若矩阵A 第i (i=1,2,…,n )行元素与第j (j=i+1,i+2,…,n )行元素中第k 列元素a ik 和a jk 同为“1”,则第j 行中的其它“1”元素均填入第i 行的相应列中。结果矩阵A 第i 行中所有“1”元素对应的节点处于同一连通子集中。

数据定义

Nc —元件数

Nd —节点数

NOD (Nc,3)—每个元件的节点编号i 、j 、k

KND (Nc )—每个元件的种类(断路器、隔离开关、母线、线路、变压器……) CNT (Nc )—每个开关元件的分、合状态(逻辑型,例如:合为“真”,分为“假”) NDS0(Nd )—每个节点初始所在连通子集编号

NDS (Nd )—每个节点所在连通子集编号

NCT0(Nc )—每个元件初始所在连通子集编号

NCT(Nc)—每个元件所在连通子集编号

NST(Ns,3)—每个原始连通子集内[子集号,子集内节点数,子集内首位节点号]

Ns—最大可能连通子集数

RA(Nd)—节点关联矩阵第i行,逻辑型

RB(Nd)—节点关联矩阵第j行,逻辑型

检验第k0个连通子集的连通性子程序CNTS(k0)

初始化

IND=NST(k0,3) 取第k0个连通子集的首位节点号

N=0 连通子集数置0

LOOP1 l=1,Nd l从1至Nd循环

IF (NDS0(l)=k0),NDS(l)=0 第k0个连通子集的节点l的子集号临时置0 END LOOP1

连通性检验大循环

10 NSUM=1 节点关联矩阵“真”元素计数置为1

LOOP1 l=1,Nd l从1至Nd循环

RA(l)=FALSE 第k0个连通子集中第IND行第l列元素置为“假”

END LOOP1

RA(IND)=TRUE 节点关联矩阵第IND行对角元素置1

M=1 节点关联矩阵第IND行“真”元素计数置为1

形成节点关联矩阵的第IND行RA

LOOP1 l=1,Nc l从1至Nc循环

IF(NCT0(l)=k0),THEN 如果元件l属于初始连通子集k0,则

IF(KND(l)≠‘开关’or (KND(l)=‘开关’and CNT(l)=‘合’),THEN

I=NOD(l,1) J=NOD(l,2) K=NOD(l,3) 取元件l的各端节点号

IF(I=IND),THEN 如果节点号I等于节点号IND,则

IF(J≠0 and J≠I),THEN 如果节点号J不等于0和I,则

RA(J)=TRUE 关联矩阵第IND行第J列元素置为“真”

M=M+1 关联矩阵第IND行“真”元素计数+1

END IF

IF(K≠0 and K≠I and K≠J),THEN 如果节点号K不等于0和I和J,则

RA(K)=TRUE 关联矩阵第IND行第K列元素置为“真”

M=M+1 关联矩阵第IND行“真”元素计数+1

END IF

END IF

IF(J=IND),THEN 如果节点号J等于节点号IND,则

IF(I≠0 and I≠J),THEN 如果节点号I不等于0和I,则

RA(I)=TRUE 关联矩阵第IND行第I列元素置为“真”

M=M+1 关联矩阵第IND行“真”元素计数+1

END IF

IF(K≠0 and K≠I and K≠J),THEN 如果节点号K不等于0和I和J,则

RA(K)=TRUE 关联矩阵第IND行第K列元素置为“真”

M=M+1 关联矩阵第IND行“真”元素计数+1

END IF

END IF

IF(K=IND),THEN 如果节点号K等于节点号IND,则

IF(I≠0 and I≠K),THEN 如果节点号I不等于0和K,则

RA(I)=TRUE 关联矩阵第IND行第I列元素置为“真”

M=M+1 关联矩阵第IND行“真”元素计数+1

END IF

IF(J≠0 and J≠I and J≠K),THEN 如果节点号J不等于0和I和K,则

RA(J)=TRUE 关联矩阵第IND 行第J 列元素置为“真” M=M+1 关联矩阵第IND 行“真”元素计数+1

END IF

END IF

END IF

END IF

END LOOP1

将节点连通矩阵第IND+1~Nd 行与第IND 行比较,寻找包含节点IND 的连通子集

LOOP1 WHILE(M <NST(k 0,2) and M >NSUM) 当

NSUM=M

LOOP2 ld=IND+1,Nd ld 自IND+1至Nd 循环

IF (NDS0(ld)=k 0 and RA(ld)=FALSE and NDS(ld)=0),THEN 当

LOOP3 l=1,Nd l 自1至nd 循环

RB(l)=FALSE 关联矩阵第ld 行第l 列元素置为“假”

END LOOP3

RB(ld)=TRUE 节点关联矩阵第ld 行对角元素置1

形成节点关联矩阵的第ld 行RB

LOOP3 l=1,Nc l 自1至Nc 循环

IF(NCT0(l)=k 0),THEN 如果元件l 属于原连通子集k 0,则 IF(KND(l)≠‘开关’or (KND(l)=‘开关’and CNT(l)=‘合’),THEN

I=NOD(l,1) J=NOD(l,2) K=NOD(l,3) 取元件l 的各端节点号

IF(I=ld),THEN 如果节点号I 等于节点号ld ,则

IF(J ≠0 and J ≠I),THEN 如果节点号J 不等于0和I ,则

RB(J)=TRUE 关联矩阵第ld 行第J 列元素置为“真”

END IF

IF(K ≠0 and K ≠I and K ≠J),THEN 如果节点号K 不等于0和I 和J ,则

RB(K)=TRUE 关联矩阵第ld 行第K 列元素置为“真”

END IF

END IF

IF(J=ld),THEN 如果节点号J 等于节点号ld ,则

IF(I ≠0 and I ≠J),THEN 如果节点号I 不等于0和J ,则

RB(I)=TRUE 关联矩阵第ld 行第I 列元素置为“真”

END IF

IF(K ≠0 and K ≠I and K ≠J),THEN 如果节点号K 不等于0和I 和J ,则

RB(K)=TRUE 关联矩阵第ld 行第K 列元素置为“真”

END IF

END IF

IF(K=ld),THEN 如果节点号K 等于节点号ld ,则

IF(I ≠0 and I ≠K),THEN 如果节点号I 不等于0和K ,则

RB(I)=TRUE 关联矩阵第ld 行第I 列元素置为“真”

END IF

IF(J ≠0 and J ≠I and J ≠K),THEN 如果节点号K 不等于0和I 和J ,则

RB(J)=TRUE 关联矩阵第ld 行第J 列元素置为“真”

END IF

END IF

END IF

END IF END LOOP3

节点ld 属于连通子集k 0,且关联矩阵第IND 行第ld 列元素为“假”,且未找到节点ld 新连通子集号时,循环 M <子集k 0节点数且有新“真”元素出现时,循环

相关文档
最新文档