📄 chc.m
字号:
clc
clear all
nind=20; %个体数目,为偶数
maxgen=2000;%最大遗传代数
preci=20;
ggap=1; %代沟
A=5; %适应度系数
B=6; %适应度系数
C=0.9;%安全系数
%t=0.15;
chrom=crtbp(nind,preci);%创建初始种群
gen=1;%代数初始化
while gen <maxgen+1
gen=gen
attr=chrom(:,1:4); %以下为计算chrom中的,k,m,po,l的值
repu=chrom(:,5:8);
dist=chrom(:,9:12);
step=chrom(:,13:20);
fieldd1=[4;5;10;1;0;1;1];
variable1=bs2rv(attr,fieldd1);
fieldd2=[4;5;15;1;0;1;1];
variable2=bs2rv(repu,fieldd2);
fieldd3=[4;0.3;0.5;1;0;1;1];
variable3=bs2rv(dist,fieldd3);
fieldd4=[8;0.009;0.02;1;0;1;1];
variable4=bs2rv(step,fieldd4);
ii=1;
Kl=0;
ak=0;
am=0;
aPo=0;
al=0;
while ii<nind+1
k=variable1(ii);%计算引力需要的增益系数
m=variable2(ii);%计算斥力的增益系数,
Po=variable3(ii);%障碍物作用范围
l=variable4(ii);%步长
% objv=variable.*sin(10*pi*variable)+2.0;
fitness1=-k^2+l;%路径长度的倒数
fitness2=m^3+Po;
objv(ii)=(A*fitness1+B*fitness2)*100+C*Po;%核心之一,计算适应度
C=0.9;
% Kl=K*l+Kl;%计算路径长度总合
% ak=k+ak;%k值和
% am=m+am;%m值和
% aPo=Po+aPo;%Po值和
% al=l+al;%l值和
ii=ii+1;
%text11=(A*fitness1+B*fitness2)*100;适应度测试
end
%objv
%初始化矩阵给出,其适应度值已经产生,存入objv
if gen == 1
[column row] = max(objv);
ranseti(gen) = column;
else
if ranseti(gen-1)<max(objv)
[column row] = max(objv);
ranseti(gen) = column;
else
ranseti(gen) = ranseti(gen-1);
end
end
%储存每代参数均值
% akm(gen)=ak/nind;
% amm(gen)=am/nind;
% aPom(gen)=aPo/nind;
% alm(gen)=al/nind;
% aKlm(gen)=Kl/nind;%计算路径长度平均值
%x13=gen;
%y13=Kl/nind;
%plot(x13,y13,'*');
%Xlabel('gen'),Ylabel('路径长度');
%title('平均路径长度随种群代数的变化');
%hold on
%进行优选挑出适应度最小的两个,i为初始种群的序列号
%计算目标累计概率
i1=1;
sumobjv=zeros(1,nind);
allsumobjv=0;
while i1<nind+1%i1为循环序列号
sumobjv(i1)=objv(i1)+allsumobjv;
allsumobjv=objv(i1)+allsumobjv;
i1=i1+1;
end
sumobjv;
i2=1;
while i2<nind+1
sumpro(i2)=sumobjv(i2)/allsumobjv; %累计概率
i2=i2+1;
end
%轮盘赌选择
%couplei=fix(80*nind/100);百分之八十种群规模
i1=1;
while i1<nind+1
bet=rand;%投掷筛子
i3=1;
while sumpro(i3)-bet<0
i3=i3+1;
end
selpro(i1)=i3;%selpro为选中进行交配的个体
i1=i1+1;
end
%selpro
%构造产生子矩阵的父矩阵
i1=1;
while i1<nind+1
father(nind,preci)=0;
father(i1,:)=chrom(selpro(i1),:);
i1=i1+1;
end
oldfather=father;
%选中个体进行染色体交叉
i1=1;
i2=nind/2+1;
while i1<nind/2+1
gene1=father(i1,1:4);
gene2=father(i1,9:12);
geneh1=father(i2,1:4);
geneh2=father(i2,9:12);
father(i1,1:4)=geneh1;
father(i1,9:12)=geneh2;
father(i2,1:4)=gene1;
father(i2,9:12)=gene2;
i1=i1+1;
i2=i2+1;
end
%基因变异
%father=mut(father);
i1=1;
while i1<fix(nind*0.35*preci*gen/maxgen)
j4=3*rand(1)+1.3;
j4=fix(j4);
i4=(nind-1)*rand(1)+1.3;
i4=fix(i4);
father(i4,j4)=rand(1);
i1=i1+1;
end
%子代与父代组成新的家庭
family=zeros(2*nind,preci);
%计算家族适应度
family(1:nind,:)=chrom;
family(nind+1:2*nind,:)=father;
attr=family(:,1:4); %以下为计算chrom中的,k,m,po,l的值
repu=family(:,5:8);
dist=family(:,9:12);
step=family(:,13:20);
fieldd1=[4;5;10;1;0;1;1];
variable1=bs2rv(attr,fieldd1);
fieldd2=[4;5;15;1;0;1;1];
variable2=bs2rv(repu,fieldd2);
fieldd3=[4;0.3;0.5;1;0;1;1];
variable3=bs2rv(dist,fieldd3);
fieldd4=[8;0.009;0.02;1;0;1;1];
variable4=bs2rv(step,fieldd4);
ii=1;
while ii<2*nind+1
k=variable1(ii);%计算引力需要的增益系数
m=variable2(ii);%计算斥力的增益系数,
Po=variable3(ii);%障碍物作用范围
l=variable4(ii);%步长
% objv=variable.*sin(10*pi*variable)+2.0;
% apf00
% jud=X(:,1);
% % if max(jud)<9.5%末日审判,克服陷阱和震荡
% % K=6000;
% % C=0;
% % end
fitness1=-k^2+l;%路径长度的倒数
fitness2=m^3+Po;
objv(ii)=(A*fitness1+B*fitness2)*100+C*Po;%核心之一,计算适应度
ii=ii+1;
C=0.9;
end
% objv%初始化矩阵给出,其适应度值已经产生,存入objv
[y1,bestchoice]=max(objv);%本代最优个体
%跨代精英的序列号
i1=1;
while i1<nind+1
[y,i]=max(objv);
objv(i)=0;
sonth(i1)=i;
i1=i1+1;
end
%从家庭中选择下一代族群
i1=1;
while i1<nind+1
son(nind,preci)=0;
son(i1,:)=family(sonth(i1),:);
i1=i1+1;
end
chrom=son;
gen=gen+1;
end
figure(1)
plot(ranseti);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -