www.pudn.com > IEEE33DG.rar > kxjpanding.m, change:2015-04-17,size:4949b


function guanck=kxjpanding(Swarm1) 
b=32; 
n=33; 
LL=5;      %联络开关数   
checkhl=1; %环路判断 
checkgd=1;   %孤岛(孤点)判断 
H=[ 7     6     5     4     3     2    20    19    18    33     0     0     0     0     0     0     0     0     0     0     0 
    14    13    12    11    10     9    34     0     0     0     0     0     0     0     0     0     0     0     0     0     0 
    11    10     9     8     7     6     5     4     3     2    21    20    19    18    35     0     0     0     0     0     0 
    17    16    15    14    13    12    11    10     9     8     7     6    32    31    30    29    28    27    26    25    36 
    24    23    22    28    27    26    25     5     4     3    37     0     0     0     0     0     0     0     0     0     0];%由函数matrixH生成 
 
 for i1=1:LL 
       a(1,i1)=H(i1,Swarm1(1,i1)); 
 end 
BranchM=[1 1 2    0.0922+i*0.047  %支路参数矩阵 
         2 2 3    0.4930+i*0.2511  
         3 3 4    0.3660+i*0.1864 
         4 4 5    0.3811+i*0.1941 
         5 5 6    0.8190+i*0.7070 
         6 6 7    0.1872+i*0.6188 
         7 7 8    0.7114+i*0.2351 
         8 8 9    1.0300+i*0.7400 
         9 9 10   1.0440+i*0.7400 
         10 10 11 0.1966+i*0.0650 
         11 11 12 0.3744+i*0.1238 
         12 12 13 1.4680+i*1.1550 
         13 13 14 0.5416+i*0.7129 
         14 14 15 0.5910+i*0.5260 
         15 15 16 0.7463+i*0.5450 
         16 16 17 1.2890+i*1.7210 
         17 17 18 0.3720+i*0.5740 
         18 2 19 0.1640+i*0.1565 
         19 19 20 1.5042+i*1.3554 
         20 20 21 0.4095+i*0.4784 
         21 21 22 0.7089+i*0.9373 
         22 3 23 0.4512+i*0.3083 
         23 23 24 0.8980+i*0.7091 
         24 24 25 0.8960+i*0.7011 
         25 6 26 0.2030+i*0.1034 
         26 26 27 0.2842+i*0.1447 
         27 27 28 1.0590+i*0.9337 
         28 28 29 0.8042+i*0.7006 
         29 29 30 0.5075+i*0.2585 
         30 30 31 0.9744+i*0.9630 
         31 31 32 0.3105+i*0.3619 
         32 32 33 0.3410+i*0.5362 
         33 8  21 2.0+i*2.0 
         34 9  15 2.0+i*2.0 
         35 12 22 2.0+i*2.0 
         36 18 33 0.5+i*0.5 
         37 25 29 0.5+i*0.5   ]; 
NodeM=[1 0 
       2 0.1000+i*0.0600     %节点参数矩阵(电源节点负荷为0) 
       3 0.0900+i*0.0400 
       4 0.1200+i*0.0800 
       5 0.0600+i*0.0300 
       6 0.0600+i*0.0200 
       7 0.2000+i*0.1000 
       8 0.2000+i*0.1000 
       9 0.0600+i*0.0200 
       10 0.0600+i*0.0200 
       11 0.0450+i*0.0300 
       12 0.0600+i*0.0350 
       13 0.0600+i*0.0350 
       14 0.1200+i*0.0800 
       15 0.0600+i*0.0100 
       16 0.0600+i*0.0200 
       17 0.0600+i*0.0200 
       18 0.0900+i*0.0400 
       19 0.0900+i*0.0400 
       20 0.0900+i*0.0400 
       21 0.0900+i*0.0400 
       22 0.0900+i*0.0400 
       23 0.0900+i*0.0500 
       24 0.4200+i*0.2000 
       25 0.4200+i*0.2000 
       26 0.0600+i*0.0250 
       27 0.0600+i*0.0250 
       28 0.0600+i*0.0200 
       29 0.1200+i*0.0700 
       30 0.2000+i*0.6000 
       31 0.1500+i*0.0700 
       32 0.2100+i*0.1000 
       33 0.0600+i*0.0400 ]; 
    
%1、判断是否形成环路,F为支路环路关联矩阵(行表示回路,列表示断开开关,若任意两行相同,则表示形成了环路)    
F=zeros(5); 
for i1=1:LL  %回路 
    for i2=1:LL   %断开开关 
        if max(a(1,i2)==H(i1,:)) 
            F(i1,i2)=1; 
        end 
    end 
end 
for i1=1:LL-1 
    for i2=i1+1:LL 
        if min(F(i1,:)==F(i2,:)) 
        checkhl=0;                %disp('出现环路')%出现环路时 
        checkgd=0; 
        end 
    end 
end 
for i1=1:LL          %按照断开开关矩阵,剔除Z矩阵中的断开支路 
    j=i1-1; 
    for i2=1:b+LL-j 
        if BranchM(i2,1)==a(1,i1) 
            BranchM(i2,:)=[]; 
            break 
        end 
    end 
end 
NodeN=zeros(n);   %节点-节点关联矩阵NodeN 
for i1=1:b 
    NodeN(BranchM(i1,2),BranchM(i1,3))=1; 
    NodeN(BranchM(i1,3),BranchM(i1,2))=1; 
end 
LayerM=[1];      %节点分层矩阵,电源节点号记“1” 
NU=zeros(1,n);   %上层节点矩阵(有33列的行矩阵) 
 
%以下用循环求取矩阵LayerM和NU,判定是否形成了孤岛(孤点) 
h=1; 
while(checkhl==1) 
while(min(NU(2:33)~=0)==0) %NU矩阵的2-最后都有上层节点了,表示循环结束了     
m=max(find(LayerM(:,h)));  %m为矩阵LayerM第h列非零元素的个数 
 k=1; 
for i1=1:m      
    g=LayerM(i1,h);           %LayerM的第i1行第h列元素 
    ss=find(NodeN(g,:)==1); 
       for i2=1:length(ss) 
        if LayerM~=ss(1,i2)   %排除相同节点 
           LayerM(k,h+1)=ss(1,i2); 
           NU(1,ss(1,i2))=g; 
           k=k+1;             %k表示第h层含有的节点数 
        end 
    end 
end 
h=h+1;                     %h表示网络分层的层数 
if length(LayerM(1,:))==h-1  %如果网络分层矩阵没有搜索到下层节点,说明形成了断点,后边网络形成了孤岛,与电源节点没有连通回路 
        checkgd=0;         %disp('孤岛') 
        checkhl=0;   %结束循环 
        break 
    end 
end 
  if min(NU(2:33)~=0)  %若解可行,已经计算完LayerM,则让其跳出最外层while循环 
    checkhl=0; 
  end 
end 
 
if checkgd==0 
    guanck=0;  %不可行解 
else 
    guanck=1;  %可行解 
end