您现在的位置:首页 >> 技术文章 >> MATLAB技术 >> 内容

MATLAB代做|FPGA代做|python代做-GA遗传优化算法

时间:2019-10-15 22:45:12 点击:

  核心提示:MATLAB代做|FPGA代做|python代做-GA遗传优化算法...
tic                   %%%%%%%%%%%%%%%
clc;clear all;
%相关原始数据格式说明如下:
%n——节点个数;n1——支路条数;isb——平衡节点号;H——PQ节点个数(为后面形成PVU存储PV节点初始电压用);pr——误差精度。
%B1——支路参数矩阵,其中第一列和第二列是起始节点编号和终点节点编号,第三列、第四列、第五列、第六列分别为:支路电阻、电抗、变压器变比、电纳。(不考虑电导)
%B2——节点参数矩阵,其中第一列和第二列为节点编号和节点类型;第三列到第六列分别为:注入有功、注入无功、电压幅值、电压相位。
%节点类型分类如下:“0”为平衡节点,“1”为PQ,“2”为PV节点;“3”为PQ(V)节点,“4”为PI节点。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%数据输入:基准电压10KV,基准功率10MW %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n=33 ;       
n1=32;
isb=1;
H=32;                %%%%%%%%%%%%%18节点加DG    PQV处理
pr=0.0001;          
B1=[1 2 0.00922 0.0047i 1 0;
    2 3 0.00493 0.02511i 1 0;
    3 4 0.0366 0.01864i 1 0;
    4 5 0.03811 0.01941i 1 0;
    5 6 0.0819 0.0707i 1 0;
    6 7 0.01872 0.06188i 1 0;
    7 8 0.07114 0.02351i 1 0;
    8 9 0.103 0.074i 1 0;
    9 10 0.1044 0.074i 1 0;
    10 11 0.01966 0.0065i 1 0;
    11 12 0.03744 0.01238i 1 0;
    12 13 0.1468 0.1155i 1 0;
    13 14 0.05416 0.07129i 1 0;
    14 15 0.05910 0.0526i 1 0;
    15 16 0.07463 0.05450i 1 0;
    16 17 0.1289 0.1721i 1 0;
    17 18 0.0732 0.0574i 1 0;
    2 19 0.0164 0.01565i 1 0;
    19 20 0.15042 0.13554i 1 0;
    20 21 0.04095 0.04784i 1 0;
    21 22 0.07089 0.09373i 1 0;
    3 23 0.04512 0.03083i 1 0;
    23 24 0.08980 0.07091i 1 0;
    24 25 0.08960 0.07011i 1 0;
    6 26 0.0203 0.01034i 1 0;
    26 27 0.02842 0.01447i 1 0;
    27 28 0.1059 0.09337i 1 0;
    28 29 0.08042 0.07006i 1 0;
    29 30 0.05075 0.02585i 1 0;
    30 31 0.09744 0.0963i 1 0;
    31 32 0.03105 0.03619i 1 0;
    32 33 0.03410 0.05302i 1 0];
B2=[1 0 0 0 1.05 0;
    2 1 -0.01 -0.006 1 0;
    3 1 -0.009 -0.004 1 0;
    4 1 -0.012 -0.008 1 0;
    5 1 -0.006 -0.003 1 0;
    6 1 -0.006 -0.002 1 0;
    7 1 -0.02 -0.01 1 0;
    8 1 -0.02 -0.01 1 0;
    9 1 -0.006 -0.002 1 0;
    10 1 -0.006 -0.0035 1 0;
    11 1 -0.0045 -0.003 1 0;
    12 1 -0.006 -0.0035 1 0;
    13 1 -0.006 -0.0035 1 0;
    14 1 -0.012 -0.008 1 0;
    15 1 -0.006 -0.001 1 0;
    16 1 -0.006 -0.002 1 0;
    17 1 -0.006 -0.002 1 0;
    18 3 -0.009+0.1 -0.004 1 0;
    19 1 -0.009 -0.004 1 0;
    20 1 -0.009 -0.004 1 0;
    21 1 -0.009 -0.004 1 0;
    22 1 -0.009 -0.004 1 0;
    23 1 -0.009 -0.005 1 0;
    24 1 -0.042 -0.02 1 0;
    25 1 -0.042 -0.02 1 0;
    26 1 -0.006 -0.0025 1 0;
    27 1 -0.006 -0.0025 1 0;
    28 1 -0.006 -0.002 1 0;
    29 1 -0.012 -0.007 1 0;
    30 1 -0.02 -0.06 1 0;
    31 1 -0.015 -0.007 1 0;
    32 1 -0.021 -0.01 1 0;
    33 4 -0.006 -0.004 1 0];
T=60;%仿真代数               遗传算法
M=40;% 群体规模
pm=0.1;pc=0.8;%交叉变异概率
Ugmax=1.06;Ugmin=1.0;%参数取值范围
Timax=1.1;Timin=0.9;
Qcmax=0.05;Qcmin=-0.05;
Vimax=1.07;Vimin=0.93;
Z1=1;%Z2=1;%%惩罚因子%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&*********************具体数值待定
%QGmax=;QGmin=;
Long=5;%单个参数字串长度,总编码长度3L
bestv=-inf;
bval=round(rand(M,3*Long));%初始种群 round 四舍五入取整函数  编码后的初始种群
%%%%%%%%%%%%%bestv=-inf%最优适应度初值%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Y=zeros(n);               %zeros就是生成一个全0的矩阵
Times=1;                  %置迭代次数为初始值
%创建节点导纳矩阵   电导统一为零
for i=1:n1
        p=B1(i,1);
        q=B1(i,2);
        Y(p,q)=Y(p,q)-1/((B1(i,3)+B1(i,4))*B1(i,5));
        Y(q,p)=Y(p,q);
        Y(p,p)=Y(p,p)+1/(B1(i,3)+B1(i,4))+0.5*B1(i,6);%低压侧不变
        Y(q,q)=Y(q,q)+1/((B1(i,3)+B1(i,4))*B1(i,5)^2)+0.5*B1(i,6);%高压侧阻抗乘以变比平方  输入时注意低压侧在前
end
%disp('节点导纳矩阵:') ;
Y;
G=real(Y);
B=imag(Y);
OrgS=zeros(2*n-2,1);
DetaS=zeros(2*n-2,1);   %将OrgS、DetaS初始化
%创建OrgS,用于存储初始功率参数
Q=0;
PQV=0;
x=1.655;         %%%x1=6.7,x2=9.85,x=x1+x2;其中x1为定子漏抗,x2为转子漏抗
xp=18.8;         %%%xc=,xm=,xp=xc*xm/(xc-xm);其中xc为机端并联电容器电抗,xm为激磁电抗
h=0;
for i=1:n    %对PQ(V)节点的处理
    h=h+1;
    if i~=isb&&B2(i,2)==3   
         Q(i)=-(B2(i,5))^2/xp+(-(B2(i,5))^2+sqrt((B2(i,5))^4-4*(B2(i,3))^2*x^2))/2*x;
         B2(i,4)=Q(i);
         B2(i,2)=1; 
         PQV=h;
    end  
end
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ig=0.01;
Q=0;
PI=0;
h=0;
for i=1:n    %对PI节点的处理
    h=h+1;
    if i~=isb&&B2(i,2)==4   
         Q(i)=sqrt(Ig^2*((B2(i,5))^2)-B(i,3)^2);        %e=B2(i,5),f=0,e^2+f^2=B2(i,5))^2,其中e和f为光伏发电系统接入节点电压的实部和虚部
         B2(i,4)=Q(i);
         B2(i,2)=1; 
         PI=h;
    end  
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=0;
j=0;
for i=1:n            %对PQ节点的处理
    if i~=isb&&B2(i,2)==1   
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));   %Pi 书P57页11-45
            OrgS(2*h,1)=OrgS(2*h,1)+B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));       %Qi  同上
        end
    end
end
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+ B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5)); %同上
            OrgS(2*h,1)=OrgS(2*h,1)+ B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));    %同上
        end
    end
end
%disp('PQ、PV节点初始计算值:') ;             %用所给参数计算出的初始PQ、PV节点参数
OrgS;
%创建PVU 用于存储PV节点的初始电压
PVU=zeros(n-H-1,2);
t=0;
for i=1:n
    if B2(i,2)==2
        t=t+1;
        PVU(t,1)=B2(i,5);
        PVU(t,2)=B2(i,6);
    end
end
%disp('PV节点初始值:电压、相位ei、fi:')   ; 
PVU;
%创建DetaS,用于存储有功功率、无功功率和电压幅值的不平衡量 书p58 11-46和11-47
h=0;
for i=1:n           %对PQ节点的处理
    if i~=isb&&B2(i,2)==1
        h=h+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=B2(i,4)-OrgS(2*h,1);
    end
end
t=0;
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        t=t+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=PVU(t,1)^2+PVU(t,2)^2-B2(i,5)^2-B2(i,6)^2;
    end
end
%disp('P、Q、V不平衡量:')  ;
DetaS;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建I,用于存储节点电流参数(计算雅克比矩阵用 具体见纸板公式推导)
I=zeros(n-1,1);
h=0;
for i=1:n
   if i~=isb
        h=h+1;
        I(h,1)=(OrgS(2*h-1,1)-OrgS(2*h,1)*sqrt(-1))/conj(B2(i,5)+B2(i,6)*sqrt(-1));                                           
    end                                                           
end
I;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建Jacbi(雅可比矩阵)     各元素是书中各元素求法乘个-1 所以△W=J△V
Jacbi=zeros(2*n-2);
h=0;
k=0;
for i=1:n       %对PQ节点的处理
    if B2(i,2)==1
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));      
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k)+2*real(I(h,1));
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1)-2*imag(I(h,1));
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k);
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1);
                end
                if k==(n-1) %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
k=0;
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=2*B2(i,6);
                    Jacbi(2*h,2*k)=2*B2(i,5);
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=0;
                    Jacbi(2*h,2*k)=0;
                end
                if k==(n-1)     %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
%disp('雅克比矩阵为:')  ;
Jacbi; %列参数跟书上的相反   这里面第一列是对电压相位的偏导 第二列是对幅值的偏导
%求解修正方程,获取节点电压的不平衡量
DetaU=zeros(2*n-2,1);
DetaU=Jacbi\DetaS;       
%disp('求解修正方程得:')  ;
DetaU;
%修正节点电压
j=0;
for i=1:n       %对PQ节点处理
    if B2(i,2)==1
        j=j+1;
        B2(i,5)=B2(i,5)+DetaU(2*j,1);
        B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        j=j+1;
       B2(i,5)=B2(i,5)+DetaU(2*j,1);
       B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n            %对PQ(V)节点的处理
    if i==PQV
       B2(i,2)=3; 
    end
end
for i=1:n            %对PI节点的处理
    if i==PI
       B2(i,2)=4; 
    end
end
%disp('修正后的B2阵:')  ;
B2;
%开始循环**********************************************************************
while max(abs(DetaU))>pr%先取绝对值在找出最大值来与误差精度比较
for i=1:n            %对PQ(V)节点的处理
    if i~=isb&&B2(i,2)==3   
         Q(i)=-(B2(i,5))^2/xp+(-(B2(i,5))^2+sqrt((B2(i,5))^4-4*(B2(i,3))^2*x^2))/2*x;
         B2(i,4)=Q(i);
    end
    if B2(i,2)==3
       B2(i,2)=1; 
    end
end
for i=1:n    %对PI节点的处理
    if i~=isb&&B2(i,2)==4   
         Q(i)=sqrt(Ig^2*((B2(i,5))^2)-B(i,3)^2);       
          B2(i,4)=Q(i);
    end
    if B2(i,2)==4
       B2(i,2)=1; 
    end
end
OrgS=zeros(2*n-2,1);        
h=0;
j=0;
for i=1:n            %对PQ节点的处理
    if i~=isb&&B2(i,2)==1   
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));         %Pi
            OrgS(2*h,1)=OrgS(2*h,1)+B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));            %Qi
        end
    end
end
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+ B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));
            OrgS(2*h,1)=OrgS(2*h,1)+ B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));
        end
    end
end
%disp('修正后的迭代计算PQ、PV节点参数:') ; 
OrgS;
%创建DetaS
h=0;
for i=1:n           %对PQ节点的处理
    if i~=isb&&B2(i,2)==1
        h=h+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=B2(i,4)-OrgS(2*h,1);
    end
end
t=0;
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        t=t+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=PVU(t,1)^2+PVU(t,2)^2-B2(i,5)^2-B2(i,6)^2;
    end
end
%disp('修正后的迭代计算PQ、PV节点不平衡量:') ; 
DetaS;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建I
I=zeros(n-1,1);
h=0;
for i=1:n
    if i~=isb
        h=h+1;
        I(h,1)=(OrgS(2*h-1,1)-OrgS(2*h,1)*sqrt(-1))/conj(B2(i,5)+B2(i,6)*sqrt(-1));                                              
    end                                                           
end
I;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建Jacbi
Jacbi=zeros(2*n-2);
h=0;
k=0;
for i=1:n       %对PQ节点的处理
    if B2(i,2)==1
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));           
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k)+2*real(I(h,1));
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1)-2*imag(I(h,1));
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k);
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1);
                end
                if k==(n-1) %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
k=0;
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=2*B2(i,6);
                    Jacbi(2*h,2*k)=2*B2(i,5);
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=0;
                    Jacbi(2*h,2*k)=0;
                end
                if k==(n-1)     %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
%disp('修正后的雅克比矩阵:')  ;
Jacbi;
DetaU=zeros(2*n-2,1);
DetaU=Jacbi\DetaS;
DetaU;
%修正节点电压
j=0;
for i=1:n       %对PQ节点处理
    if B2(i,2)==1
        j=j+1;
        B2(i,5)=B2(i,5)+DetaU(2*j,1);
        B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        j=j+1;
       B2(i,5)=B2(i,5)+DetaU(2*j,1);
       B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n            %对PQ(V)节点的处理
    if i==PQV
       B2(i,2)=3; 
    end
end
for i=1:n            %对PI节点的处理
    if i==PI
       B2(i,2)=4; 
    end
end
Times=Times+1;      %迭代次数加1
end
disp('初始潮流计算结果如下:');
disp('迭代次数:');
Times
disp('节点电压幅值如下(按节点由小到大的顺序):');
B2(:,5)
%创建Sb,用于存储平衡节点功率
Sb=zeros(1);
for i=1:n
    if i==isb
        for j=1:n
     Sb=Sb+(B2(i,5)+sqrt(-1)*B2(i,6))*conj(Y(i,j))*conj(B2(j,5)+sqrt(-1)*B2(j,6)); 
        end                                                           
     end
end
disp('初始平衡节点功率:')
Sb
%求解各条支路的功率
Sij=zeros(n);
for i=1:n
     for j=1:n
     Sij(i,j)=Sij(i,j)+(B2(i,5)+sqrt(-1)*B2(i,6))^2*conj(B1(1,4))+(B2(i,5)+sqrt(-1)*B2(i,6))*conj(Y(i,j))*(conj((B2(i,5)+sqrt(-1)*B2(i,6)))-conj((B2(j,5)+sqrt(-1)*B2(j,6)))); 
      end
end
%disp('线路功率分布:')
Sij;
%%%求解系统网损
Ploss=0;
for i=1:n            
        for j=1:n
            Ploss=Ploss+B2(i,5)*B2(j,5)*(G(i,j)*cos(B2(i,6)-B2(j,6))+B(i,j)*sin(B2(i,6)-B2(j,6))); 
        end
end
disp('初始网损:')
Ploss
for ii=1:T
%解码,计算适应度
   for a=1:M
        y1=0;y2=0;y3=0;
        for j=1:1:Long
           y1=y1+bval(a,Long-j+1)*2^(j-1) ;  %%%解码  二进制转换为十进制
        end
        Ug=(Ugmax-Ugmin)*y1/(2^Long-1)+Ugmin;%%%%%%%%解码换算为约束条件范围内的数
        for j=1:1:Long
           y2=y2+bval(a,2*Long-j+1)*2^(j-1);
        end
        Ti=(Timax-Timin)*y2/(2^Long-1)+Timin;%%%%%%%%9档  0.2pu.   0.025
        if Ti>=0.9&&Ti<=0.9125;
            Ti=0.9;
        elseif Ti>0.9125&&Ti<=0.9375;
            Ti=0.925;       
        elseif Ti>0.9375&&Ti<=0.9625;
            Ti=0.95;            
        elseif Ti>0.9625&&Ti<=0.9875;
            Ti=0.975;            
        elseif Ti>0.9875&&Ti<=1.0125;
            Ti=1;            
        elseif Ti>1.0125&&Ti<=1.0375;
            Ti=1.025;            
        elseif Ti>1.0375&&Ti<=1.0625;
            Ti=1.05;            
        elseif Ti>1.0625&&Ti<=1.0875;
            Ti=1.075;            
        else Ti>1.0875&&Ti<=1.1;
            Ti=1.1;            
        end
        Ti;      
        for j=1:1:Long
           y3=y3+bval(a,3*Long-j+1)*2^(j-1);
        end
        Qc=(Qcmax-Qcmin)*y3/(2^Long-1)+Qcmin;
        %%%%%%修正网络参数进行潮流计算%%%%%%%%%%
B2=[1 0 0 0 1.05 0;
    2 1 -0.01 -0.006 1 0;
    3 1 -0.009 -0.004 1 0;
    4 1 -0.012 -0.008 1 0;
    5 1 -0.006 -0.003 1 0;
    6 1 -0.006 -0.002 1 0;
    7 1 -0.02 -0.01 1 0;
    8 1 -0.02 -0.01 1 0;
    9 1 -0.006 -0.002 1 0;
    10 1 -0.006 -0.0035 1 0;
    11 1 -0.0045 -0.003 1 0;
    12 1 -0.006 -0.0035 1 0;
    13 1 -0.006 -0.0035 1 0;
    14 1 -0.012 -0.008 1 0;
    15 1 -0.006 -0.001 1 0;
    16 1 -0.006 -0.002 1 0;
    17 1 -0.006 -0.002 1 0;
    18 3 -0.009+0.1 -0.004 1 0;
    19 1 -0.009 -0.004 1 0;
    20 1 -0.009 -0.004 1 0;
    21 1 -0.009 -0.004 1 0;
    22 1 -0.009 -0.004 1 0;
    23 1 -0.009 -0.005 1 0;
    24 1 -0.042 -0.02 1 0;
    25 1 -0.042 -0.02 1 0;
    26 1 -0.006 -0.0025 1 0;
    27 1 -0.006 -0.0025 1 0;
    28 1 -0.006 -0.002 1 0;
    29 1 -0.012 -0.007 1 0;
    30 1 -0.02 -0.06 1 0;
    31 1 -0.015 -0.007 1 0;
    32 1 -0.021 -0.01 1 0;
    33 4 -0.006 -0.004 1 0];

        for m=1:n             %%%%%%%%机端电压修正
            if m==isb 
                B2(m,5)=Ug;
            end
        end
        B1(1,5)=Ti;          %%%%变压器分接头修正
        %B2(i,4)=B2(i,4)+Qc;%%%18节点加DG 加补偿%%%%%%后期做位置优化
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%      
Y=zeros(n);               %zeros就是生成一个全0的矩阵
Times=1;                  %置迭代次数为初始值
%创建节点导纳矩阵   电导统一为零
for i=1:n1
        p=B1(i,1);
        q=B1(i,2);
        Y(p,q)=Y(p,q)-1/((B1(i,3)+B1(i,4))*B1(i,5));
        Y(q,p)=Y(p,q);
        Y(p,p)=Y(p,p)+1/(B1(i,3)+B1(i,4))+0.5*B1(i,6);%低压侧不变
        Y(q,q)=Y(q,q)+1/((B1(i,3)+B1(i,4))*B1(i,5)^2)+0.5*B1(i,6);%高压侧阻抗乘以变比平方  输入时注意低压侧在前
end
%disp('节点导纳矩阵:') ;
Y;
G=real(Y);
B=imag(Y);
OrgS=zeros(2*n-2,1);
DetaS=zeros(2*n-2,1);   %将OrgS、DetaS初始化
%创建OrgS,用于存储初始功率参数
Q=0;
PQV=0;
x=1.655;    %%%x1=6.7,x2=9.85,x=x1+x2
xp=18.8;    %%%xc=,xm=,xp=xc*xm/(xc-xm)
h=0;
for i=1:n    %对PQ(V)节点的处理
    h=h+1;
    if i~=isb&&B2(i,2)==3   
         Q(i)=-(B2(i,5))^2/xp+(-(B2(i,5))^2+sqrt((B2(i,5))^4-4*(B2(i,3))^2*x^2))/2*x;
         B2(i,4)=Q(i);
         B2(i,4)=B2(i,4)+Qc;%%%18节点加DG 加补偿%%%%%%后期做位置优化
         B2(i,2)=1; 
         PQV=h;
    end  
end
       %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ig=0.01;
Q=0;
PI=0;
h=0;
for i=1:n    %对PI节点的处理
    h=h+1;
    if i~=isb&&B2(i,2)==4   
         Q(i)=sqrt(Ig^2*((B2(i,5))^2)-B(i,3)^2);        %e=B2(i,5),f=0,e^2+f^2=B2(i,5))^2,其中e和f为光伏发电系统接入节点电压的实部和虚部
         B2(i,4)=Q(i);
         B2(i,2)=1; 
         PI=h;
    end  
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
h=0;
j=0;
for i=1:n            %对PQ节点的处理
    if i~=isb&&B2(i,2)==1   
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));   %Pi 书P57页11-45
            OrgS(2*h,1)=OrgS(2*h,1)+B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));       %Qi  同上
        end
    end
end
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+ B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5)); %同上
            OrgS(2*h,1)=OrgS(2*h,1)+ B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));    %同上
        end
    end
end
%disp('PQ、PV节点初始计算值:') ;             %用所给参数计算出的初始PQ、PV节点参数
OrgS;
%创建PVU 用于存储PV节点的初始电压
PVU=zeros(n-H-1,2);
t=0;
for i=1:n
    if B2(i,2)==2
        t=t+1;
        PVU(t,1)=B2(i,5);
        PVU(t,2)=B2(i,6);
    end
end
%disp('PV节点初始值:电压、相位ei、fi:')   ; 
PVU;
%创建DetaS,用于存储有功功率、无功功率和电压幅值的不平衡量 书p58 11-46和11-47
h=0;
for i=1:n           %对PQ节点的处理
    if i~=isb&&B2(i,2)==1
        h=h+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=B2(i,4)-OrgS(2*h,1);
    end
end
t=0;
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        t=t+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=PVU(t,1)^2+PVU(t,2)^2-B2(i,5)^2-B2(i,6)^2;
    end
end
%disp('P、Q、V不平衡量:')  ;
DetaS;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建I,用于存储节点电流参数(计算雅克比矩阵用 具体见纸板公式推导)
I=zeros(n-1,1);
h=0;
for i=1:n
   if i~=isb
        h=h+1;
        I(h,1)=(OrgS(2*h-1,1)-OrgS(2*h,1)*sqrt(-1))/conj(B2(i,5)+B2(i,6)*sqrt(-1));                                           
    end                                                           
end
I;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建Jacbi(雅可比矩阵)     各元素是书中各元素求法乘个-1 所以△W=J△V
Jacbi=zeros(2*n-2);
h=0;
k=0;
for i=1:n       %对PQ节点的处理
    if B2(i,2)==1
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));      
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k)+2*real(I(h,1));
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1)-2*imag(I(h,1));
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k);
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1);
                end
                if k==(n-1) %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
k=0;
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=2*B2(i,6);
                    Jacbi(2*h,2*k)=2*B2(i,5);
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=0;
                    Jacbi(2*h,2*k)=0;
                end
                if k==(n-1)     %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
%disp('雅克比矩阵为:')  ;
Jacbi; %列参数跟书上的相反   这里面第一列是对电压相位的偏导 第二列是对幅值的偏导
%求解修正方程,获取节点电压的不平衡量
DetaU=zeros(2*n-2,1);
DetaU=Jacbi\DetaS;       
%disp('求解修正方程得:')  ;
DetaU;
%修正节点电压
j=0;
for i=1:n       %对PQ节点处理
    if B2(i,2)==1
        j=j+1;
        B2(i,5)=B2(i,5)+DetaU(2*j,1);
        B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        j=j+1;
       B2(i,5)=B2(i,5)+DetaU(2*j,1);
       B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n            %对PQ(V)节点的处理
    if i==PQV
       B2(i,2)=3; 
    end
end
for i=1:n            %对PI节点的处理
    if i==PI
       B2(i,2)=4; 
    end
end
%disp('修正后的B2阵:')  ;
B2;
%开始循环**********************************************************************
while max(abs(DetaU))>pr%先取绝对值在找出最大值来与误差精度比较
Q=0;
PQV=0;
x=1.655;    %%%x1=6.7,x2=9.85,x=x1+x2
xp=18.8;    %%%xc=,xm=,xp=xc*xm/(xc-xm)
h=0;
for i=1:n    %对PQ(V)节点的处理
    h=h+1;
    if i~=isb&&B2(i,2)==3   
         Q(i)=-(B2(i,5))^2/xp+(-(B2(i,5))^2+sqrt((B2(i,5))^4-4*(B2(i,3))^2*x^2))/2*x;
         B2(i,4)=Q(i);
         B2(i,4)=B2(i,4)+Qc;        %%%18节点加DG 加补偿%%%%%%后期做位置优化
         B2(i,2)=1; 
         PQV=h;
    end  
end
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Ig=0.01;
Q=0;
PI=0;
h=0;
for i=1:n    %对PI节点的处理
    h=h+1;
    if i~=isb&&B2(i,2)==4   
         Q(i)=sqrt(Ig^2*((B2(i,5))^2)-B(i,3)^2);        %e=B2(i,5),f=0,e^2+f^2=B2(i,5))^2,其中e和f为光伏发电系统接入节点电压的实部和虚部
         B2(i,4)=Q(i);
         B2(i,4)=B2(i,4)+Qc;
         B2(i,2)=1; 
         PI=h;
    end  
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
OrgS=zeros(2*n-2,1);        
h=0;
j=0;
for i=1:n            %对PQ节点的处理
    if i~=isb&&B2(i,2)==1   
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));         %Pi
            OrgS(2*h,1)=OrgS(2*h,1)+B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));            %Qi
        end
    end
end
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        for j=1:n
            OrgS(2*h-1,1)=OrgS(2*h-1,1)+ B2(i,5)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))+B2(i,6)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));
            OrgS(2*h,1)=OrgS(2*h,1)+ B2(i,6)*(G(i,j)*B2(j,5)-B(i,j)*B2(j,6))-B2(i,5)*(G(i,j)*B2(j,6)+B(i,j)*B2(j,5));
        end
    end
end
%disp('修正后的迭代计算PQ、PV节点参数:') ; 
OrgS;
%创建DetaS
h=0;
for i=1:n           %对PQ节点的处理
    if i~=isb&&B2(i,2)==1
        h=h+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=B2(i,4)-OrgS(2*h,1);
    end
end
t=0;
for i=1:n           %对PV节点的处理
    if i~=isb&&B2(i,2)==2
        h=h+1;
        t=t+1;
        DetaS(2*h-1,1)=B2(i,3)-OrgS(2*h-1,1);
        DetaS(2*h,1)=PVU(t,1)^2+PVU(t,2)^2-B2(i,5)^2-B2(i,6)^2;
    end
end
%disp('修正后的迭代计算PQ、PV节点不平衡量:') ; 
DetaS;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建I
I=zeros(n-1,1);
h=0;
for i=1:n
    if i~=isb
        h=h+1;
        I(h,1)=(OrgS(2*h-1,1)-OrgS(2*h,1)*sqrt(-1))/conj(B2(i,5)+B2(i,6)*sqrt(-1));                                              
    end                                                           
end
I;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%创建Jacbi
Jacbi=zeros(2*n-2);
h=0;
k=0;
for i=1:n       %对PQ节点的处理
    if B2(i,2)==1
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));           
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k)+2*real(I(h,1));
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1)-2*imag(I(h,1));
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)=-B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)=G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=-Jacbi(2*h-1,2*k);
                    Jacbi(2*h,2*k)=Jacbi(2*h-1,2*k-1);
                end
                if k==(n-1) %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
k=0;
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        h=h+1;
        for j=1:n
            if j~=isb
                k=k+1;
                if i==j     %对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6)+imag(I(h,1));
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6)+real(I(h,1));
                    Jacbi(2*h,2*k-1)=2*B2(i,6);
                    Jacbi(2*h,2*k)=2*B2(i,5);
                else        %非对角元素的处理
                    Jacbi(2*h-1,2*k-1)= -B(i,j)*B2(i,5)+G(i,j)*B2(i,6);
                    Jacbi(2*h-1,2*k)= G(i,j)*B2(i,5)+B(i,j)*B2(i,6);
                    Jacbi(2*h,2*k-1)=0;
                    Jacbi(2*h,2*k)=0;
                end
                if k==(n-1)     %将用于内循环的指针置于初始值,以确保雅可比矩阵换行
                    k=0;
                end
            end
        end
    end
end
%disp('修正后的雅克比矩阵:')  ;
Jacbi;
DetaU=zeros(2*n-2,1);
DetaU=Jacbi\DetaS;
DetaU;
%修正节点电压
j=0;
for i=1:n       %对PQ节点处理
    if B2(i,2)==1
        j=j+1;
        B2(i,5)=B2(i,5)+DetaU(2*j,1);
        B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n       %对PV节点的处理
    if B2(i,2)==2
        j=j+1;
       B2(i,5)=B2(i,5)+DetaU(2*j,1);
       B2(i,6)=B2(i,6)+DetaU(2*j-1,1);
    end
end
for i=1:n            %对PQ(V)节点的处理
    if i==PQV
       B2(i,2)=3; 
    end
end
for i=1:n            %对PI节点的处理
    if i==PI
       B2(i,2)=4; 
    end
end
Times=Times+1;      %迭代次数加1
if Times>20
    break          %%%%%%%%%%%%%%%%%%%%%%%%%%%%or continue
end
end
%disp('迭代次数:');
Times;
%disp('节点电压参数:');
B2(:,5);
%创建Sb,用于存储平衡节点功率
Sb=zeros(1);
for i=1:n
    if i==isb
        for j=1:n
     Sb=Sb+(B2(i,5)+sqrt(-1)*B2(i,6))*conj(Y(i,j))*conj(B2(j,5)+sqrt(-1)*B2(j,6)); 
        end                                                           
     end
end
%disp('平衡节点功率:')
Sb;
%求解各条支路的功率
Sij=zeros(n);
for i=1:n
     for j=1:n
     Sij(i,j)=Sij(i,j)+(B2(i,5)+sqrt(-1)*B2(i,6))^2*conj(B1(1,4))+(B2(i,5)+sqrt(-1)*B2(i,6))*conj(Y(i,j))*(conj((B2(i,5)+sqrt(-1)*B2(i,6)))-conj((B2(j,5)+sqrt(-1)*B2(j,6)))); 
      end
end
%disp('线路功率分布:')
Sij;
%%%求解系统网损
Ploss=0;
for i=1:n            
        for j=1:n
            Ploss=Ploss+B2(i,5)*B2(j,5)*(G(i,j)*cos(B2(i,6)-B2(j,6))+B(i,j)*sin(B2(i,6)-B2(j,6))); 
        end
end
%disp('网损:')
Ploss;
for i=1:n                %%%节点电压越界罚函数  
    if B2(i,5)>Vimax
        detaV(i)=B2(i,5)-Vimax;
    elseif B2(i,5)>=Vimin&&B2(i,5)<=Vimax
        detaV(i)=0;
    elseif B2(i,5)<Vimin
        detaV(i)=Vimin-B2(i,5);
    end
end
%for i=1:n         %%%%%%%发电机无功越界罚函数
%if QGi>QGmax
%    detaQGi=QGi-QGmax;
%elseif QGi>=QGmin&&QGi<=QGmax
%    detaQGi=0;
%elseif QGi<QGmin
%    detaQGi=QGmin-QGi;
%end
%end
F0=0;
for i=1:n
F0=F0+(detaV(i)/(Vimax-Vimin))^2*Z1;
end
F=Ploss+F0;%%%+F1(发电机无功出力罚函数)

obj(a)=F; %目标函数
xx(a,:)=[Ug,Ti,Qc];%%
end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%种群M%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:M
    if obj(i)==0
       obj(i)=1;
    end
end    
func=1./obj;%目标函数转换为适应度函数
p=func./sum(func);
q=cumsum(p);%累加     分布采样区间 以便进行选择
[fmax,indmax]=max(func);%求当代最佳个体  indmax 当前最佳个体代数
   if fmax>=bestv;
      bestv=fmax;%到目前为止最优适应度值
      bvalxx=bval(indmax,:);%到目前为止最佳位串
      optxx=xx(indmax,:);%到目前为止最优参数
   end   
   Bfit1(ii)=bestv ;% 存储每代的最优适应度
%%%%遗传操作开始
%轮盘赌选择
 for i=1:(M-1)
    r=rand;
    tmp=find(r<=q);%%找到适应度大于随机r的个体
    newbval(i,:)=bval(tmp(1),:); %%保存第一个这样的个体因为r就落到第一个这样的数的区间内,然后继续选择
 end 
    newbval(M,:)=bvalxx;%最优保留
    bval=newbval;
%单点交叉
for i=1:2:(M-1) %隔一个交叉一对
   cc=rand;
   if cc<pc   %%pc交叉率
       point=ceil(rand*(3*Long-1));%取得一个1到3L-1的整数  ceil:取整
       ch=bval(i,:);
       bval(i,point+1:3*Long)=bval(i+1,point+1:3*Long);
       bval(i+1,point+1:3*Long)=ch(1,point+1:3*Long);
    end
end   
bval(M,:)=bvalxx;%最优保留
%位点变异
mm=rand(M,3*Long)<pm;%N行
mm(M,:)=zeros(1,3*Long);%最后一行不变异,强制赋0
bval(mm)=1-bval(mm); %%%对应mm为1的位置变异
end

disp('遗传算法优化后的结果如下:');
disp('最优参数为:');
optxx    %输出最优参数

disp('电压最优适应度值为:');
bestv   %输出最优适应度值

disp('节点电压幅值(按节点由小到大的顺序)为:');
B2(:,5)

disp('优化后的平衡节点功率为:');
Sb

disp('优化后的网损为:');
minPloss=1/bestv%-F0

toc
plot(1./Bfit1);% 绘制最优适应度进化曲线
title ('\bf最优适应度进化曲线');
xlabel ('\bf\it种群代数\rm\bf (代)');
ylabel ('\bf\it最优适应度\rm\bf ()');
%pause
%plot(B2(1:17,5));

联系:highspeedlogic

QQ :1224848052

微信:HuangL1121

邮箱:1224848052@qq.com

网站:http://www.mat7lab.com/

网站:http://www.hslogic.com/

微信扫一扫:

作者:GA遗传优化 来源:GA遗传优化
  • 您是如何找到本站的?
  • 百度搜索
  • Google搜索
  • 查阅资料过程中
  • 论坛发现
  • 百度贴吧发现
  • 朋友介绍
本站最新成功开发工程项目案例
相关文章
  • 没有相关文章
相关评论
发表我的评论
  • 大名:
  • 内容:
  • matlab代做|matlab专业代做|matlab淘宝代做(www.hslogic.com) © 2019 版权所有 All Rights Reserved.
  • Email:highspeed_logic@163.com 站长QQ: 1224848052

    专业代做/代写/承接、MATLAB、SIMULINK、FPGA项目、博士/硕士/本科毕业设计、课题设计、论文,毕业论文,Coursework、Eassy、Assignment