📄 lpc.m
字号:
%function [rst,F0]=gacs(N,pcro,pmut,pre,n)
%pcro交叉概率,pmut变异概率,N为迭代次数
%rst染色体,F0最后最好的染色体
clc
clear
N=5; %遗传次数
pcro=0.75; %取0比取0.75更容易得到满足电压要求的解,但损耗值较大
pmut=0.05;
num=100; %种群个数
length1=12; %染色体长度
B2=[1,-1.6-0.8j,1,1;2,-2-4j,1,1;3,-3.7-1.3j,1,1;4,5,1.05,2;5,0,1.00,3];%1.05-1.00
[U,sunhao]=chaoliu(B2);
disp('补偿前网损');
disp(sunhao);
disp('补偿前节点电压');
disp(U);
N_B2=B2;
%第一列存储节点号
%第二列存储节点的功率
%第三列存储节点的电压
%第四列存储节点的类型 ;其中1为PQ节点,2为PV节点,3为平衡节点
pop=zeros(num,12);
s=0;
ii=1;
while (s<num)
pop2=randint(1,12);
y=zeros(1,3);
a=1:4:9;
j=1:3;
y(j)=8*pop2(a)+4*pop2(a+1)+2*pop2(a+2)+pop2(a+3); %二进制转化为十进制
y=y'; %行向量转化为列向量
if y(1)<=8&y(2)<=10&y(3)<=13
zhi=sum(y);
if zhi<=30&zhi>=0 %%%%%%%%电容太少,效果差 电容太多,无功流动,损耗反而可能增加
BB2=charu(y,B2); %将3×1变为5×1的矩阵
B2(:,2)=BB2;
[U,sunhao]=chaoliu(B2);
B2=N_B2;
if max(U)<=1.06&min(U)>=0.94 %平衡节点电压为1.05 上下偏移量限设为5%
%disp('电压U的值');
%disp(U);
pop(ii,:)=pop2;
ii=ii+1;
s=s+1;
end
end
end
end
pop;
gen=0; %单次遗传代数初始化;
fmax=0;
while(gen<=N)
fit0=0; %初始化函数
fit=zeros(1,num); %初始化适应度
for b=1:num
c=pop(b,:); %解码
y=zeros(1,3);
a=1:4:9;
j=1:3;
y(j)=8*c(a)+4*c(a+1)+2*c(a+2)+c(a+3); %二进制转化为十进制
y=y';
BB2=charu(y,B2); %将3×1变为5×1的矩阵
B2(:,2)=BB2;
[U,sunhao]=chaoliu(B2);
B2=N_B2;
F=sunhao;
fit0=1/F;
fit(b)=fit0; %求个体的适应度
if fit(b)>fmax
fmax=fit(b); %求各代的最高适应度的个体
popfmax=pop(b,:); %把最好的个体存储下来 popfmax表示种群中最好适应度的个体
end
end
q=zeros(1,num);
q(1)=fit(1);
for ii=2:num
q(ii)=q(ii-1)+fit(ii); %累加个体适应度形成赌轮
end %遗传操作_________%%%%%%%%%%%%%%%%%%%%%%%%
popnew=select(pop,q,num); %轮盘赌选择
pop=crossover(pop,pcro,num,length1); %两点交叉
pop=mutation(pop,pmut,num,length1); %均匀变异
gen=gen+1; %下一代
end
F0=popfmax;
disp('最佳个体');
disp(F0);
y=zeros(1,3);
a=1:4:9;
j=1:3;
y(j)=8*F0(a)+4*F0(a+1)+2*F0(a+2)+F0(a+3); %二进制转化为十进制
disp('1,2,3节点补偿电容个数');
disp(y);
y=y';
disp('补偿电容总个数');
disp(sum(y));
BB2=charu(y,B2); %将3×1变为5×1的矩阵
B2(:,2)=BB2;
[U,sunhao]=chaoliu(B2);
disp('节点电压幅值');
disp(abs(U));
disp('补偿后网损');
disp(sunhao);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -