📄 genetic.asv
字号:
function bestchrom=Genetic(t)
%主调用函数,针对零件参数中提高精度的要求。
%在此算法中,采用轮盘赌原则进行选择子代,浮点编码,浮点交叉,浮点变异。
%并进一步提高运算的效率。
maxgen=300; %最大迭代次数
sizepop=100; %每代种群个体数
pcross=[0.6]; %交叉概率
pmutation=[0.002]; %变异概率
bound=[0.075 0.125;... %决策变量界限值
0.225 0.375;...
0.075 0.125;...
0.075 0.125;...
1.125 1.875;...
12 20;...
0.5625 0.935];
individuals=struct('fitness',zeros(1,sizepop),'chrom',[]);
avgfitness=[];
bestfitness=[];
bestchrom=[];
for i=1:sizepop
individuals.chrom(i,:)=Code(bound);%对每个个体进行浮点编码
x=individuals.chrom(i,:);
individuals.fitness(i)=1./Czfee(x,t);%因为这里要求最小值,所以计算每个个体的函数值的倒数
end
[bestfitness bestindex]=min(individuals.fitness);%找出当代最优值
bestchrom=individuals.chrom(bestindex,:);%当代最优值的编码
avgfitness=sum(individuals.fitness)/sizepop;%当代平均适应度
trace=[avgfitness bestfitness];%记录当代最优个体
for i=1:maxgen
individuals=Select(individuals,sizepop);
avgfitness=sum(individuals.fitness)/sizepop;
individuals.chrom=Cross(pcross,individuals.chrom,sizepop);
individuals.chrom=Mutation(pmutation,individuals.chrom,sizepop,[i maxgen],bound);
for j=1:sizepop
individuals.chrom(j,:)=Code(bound);
x=individuals.chrom(j,:);
individuals.fitness(j)=1./Czfee(x,t);
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 + -