📄 genetichw.m
字号:
function bestchrom=GeneticHW(t)
%主函数
%在此算法中,采用轮盘赌原则进行选择子代,浮点编码,浮点交叉,浮点变异。
%并进一步提高运算的效率。
maxgen=500; %最大迭代次数
sizepop=100; %每代种群个体数
pcross=[0.8]; %交叉概率
pmutation=[0.002]; %变异概率
bound=[ 0,22710;... %决策变量界限值,范围根据卡车可载体积的限制给出
0,18168;...
0,9084;...
0,24000;...
0,24000;... %决策变量,为每一类货物批复量的上限值,这里的范围是初始范围
0,24000;...
0,24000;...
0,24000;];
mu=[984.5,4207.4,4366,4069.6];
sigma=[520,745,1352.2,1101];
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
avgfitness=[];
bestfitness=[];
bestchrom=[];
for i=1:sizepop
individuals.chrom(i,:)=CodeHW(bound);%对每个个体进行浮点编码
x=individuals.chrom(i,:);
individuals.fitness(i)=1./mubiaof(x,mu,sigma);%这里要求最大值
end
[bestfitness bestindex]=min(individuals.fitness);%找出当代最优值
bestchrom=individuals.chrom(bestindex,:);%当代最优值的编码
avgfitness=sum(individuals.fitness)/sizepop;%当代平均适应度
trace=[avgfitness bestfitness];%记录当代最优个体
for i=1:maxgen
individuals=SelectHW(individuals,sizepop);
avgfitness=sum(individuals.fitness)/sizepop;
individuals.chrom=CrossHW(pcross,individuals.chrom,sizepop);
individuals.chrom=MutationHW(pmutation,individuals.chrom,sizepop,[i maxgen],[bound]);
for j=1:sizepop
individuals.chrom(j,:)=CodeHW(bound);
x=individuals.chrom(j,:);
individuals.fitness(j)=1./mubiaof(x,mu,sigma);
end
[newbestfitness,newbestindex]=min(individuals.fitness);
[worestfitness,worestindex]=max(individuals.fitness);
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=individuals.chrom(newbestindex,:);
end
individuals.chrom(worestindex,:)=bestchrom;
individuals.fitness(worestindex)=bestfitness;
avgfitness=sum(individuals.fitness)/sizepop;
trace=[trace;avgfitness bestfitness];
end
bestfitness
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -