拓扑-网络连通性算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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节点数且有新“真”元素出现时,循环