资源简介

遗传算法函数优化f=x.^2+y.^3+z.^2,,.运行前需下载谢菲尔德遗传算法工具箱,此为三元,如需n元,需要在toolbox->gatbx->objfun1 文件里的Dim改为和n相等的个数,gatbx是谢菲尔德遗传算法工具箱名称(可能每个人下载版本不一样,根据你下的工具箱名称),hanshuga1.m是函数优化代码,tuxing1.m是函数图像代码(这个代码是三元的不可调整)

资源截图

代码片段和文件信息

clear all;close all; %释放所有变量,关闭图形窗口,清除命令窗口
%定义遗传算法参数
NIND=150;               %个体数目(Numbe of individuals)
MAXGEN=200;            %最大遗传代数(Maximum number of generations)
NVAR=3;               %变量的维数
PRECI=20;              %变量的二进制位数(Precision of variables)
GGAP=0.9;              %代沟(Generation gap)
trace=zeros(MAXGEN 2);
%建立区域描述器(Build field descriptor)
FieldD=[rep([PRECI][1NVAR]);rep([-5.12;5.12][1 NVAR]);rep([1;0;1;1][1NVAR])];
Chrom=crtbp(NIND NVAR*PRECI);                       %创建初始种群
gen=0;                                               %代计数器
ObjV=objfun1(bs2rv(Chrom FieldD));                  %计算初始种群个体的目标函数值
while gen    FitnV=ranking(ObjV);                             %分配适应度值(Assign fitness values)
    SelCh=select(‘sus‘ Chrom FitnV GGAP);         %选择
    SelCh=recombin(‘xovsp‘ SelCh 0.9);             %重组
    SelCh=mut(SelCh);                                %变异
    ObjVSel=objfun1(bs2rv(SelCh FieldD));           %计算子代目标函数值 
    [Chrom ObjV]=reins(Chrom SelCh 1 1 ObjV ObjVSel);     %重插入
    gen=gen+1;                                                 %代计数器增加
    trace(gen 1)=min(ObjV);                                   %遗传算法性能跟踪
    trace(gen 2)=sum(ObjV)/length(ObjV);
end
plot(trace(:1)‘r‘);hold on;
plot(trace(:2)‘-.‘);grid;
title(‘最小值/均值 变化趋势‘);xlabel(‘Generations‘);ylabel(‘最小值/均值‘);
legend(‘最小值的变化‘‘种群函数值均值的变化‘)
%输出最优解及其对应的20个自变量的十进制值Y为最优解I为种群的序号
%[A I]=min(ObjV)
% X=bs2rv(Chrom FieldD);
% X(I:)
disp(sprintf(‘种群数目:%d‘NIND));
disp(sprintf(‘遗传代数:%d‘MAXGEN));
disp(sprintf(‘代沟:%d‘GGAP));
[YI]=min(trace(:1));
disp(sprintf(‘最小值:‘));Y
y1=trace(I:size(trace1)1); %全局最小值之后的每代最小值
length1=length(y1);
y2=find(y1==Y);
length2=length(y2);
if length2==length(y2)&&length2>=10
    disp(sprintf(‘收敛次数:%d占总迭代次数比例:%4f‘II/MAXGEN));
else
    disp(sprintf(‘最小值所在代数:%d‘I));
    disp(sprintf(‘暂未收敛‘));
end




% [xyz]=meshgrid(linspace(-5.125.12));
% val=x.^2+y.^3+z.^2;
% [fv]=isosurface(xyzval2);
% p=patch(‘Faces‘f‘Vertices‘v‘CData‘v(:3)‘FaceColor‘‘w‘‘EdgeColor‘‘flat‘);
% isonormals(xyzvalp);%显示V=p等等值面
% view(3)
% grid on
% axis equal

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2453  2018-06-12 14:52  函数一\hanshuga1.m

     文件        312  2018-06-13 16:14  函数一\tuxing1.m

     目录          0  2018-06-13 16:16  函数一

----------- ---------  ---------- -----  ----

                 2765                    3


评论

共有 条评论