⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 work.m

📁 运用遗传算法的思想
💻 M
字号:
%定义遗传算法参数
NIND=40;          %个体数目
MAXGEN=1000;       %最大遗传代数
NVAR=50;          %变量的维数
PRECI=20;         %变量的二进制位数
GGAP=0.9;         %代沟
trace=zeros(MAXGEN,2);                    %建立区域描述器
vari=zeros(0,NVAR*PRECI);                 %建立区域描述器
FieldD=[rep([PRECI],[1,NVAR]);rep([-500;500],[1,NVAR]);rep([1;0;1;1],[1,NVAR])];
Chrom=crtbp(NIND,NVAR*PRECI);             %创建初始种群
gen=0;                                    %代计数器
variable=bs2rv(Chrom,FieldD);             %将二进制转换为十进制
v=variable';                              %考虑到sum是对列求和,将variable转置
w=-sum(v.*sin(sqrt(abs(v))));             %计算初始种群个体的目标函数值
ObjV=w';                                  %转置
while gen<MAXGEN,                         %迭代
    FitnV=ranking(ObjV);                  %分配适应度值
    SelCh=select('sus',Chrom,FitnV,GGAP); %选择
    SelCh=recombin('xovsp',SelCh,0.7);   %重组
    SelCh=mut(SelCh);                     %变异
    variable=bs2rv(SelCh,FieldD);         %二进制转十进制
    v=variable';                          %考虑sum,转置
    w=-sum(v.*sin(sqrt(abs(v))));         %计算经过选择、重组、交叉后子代的目标函数值
    ObjVSel=w';                           %转置
    [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);  %重插入
    gen=gen+1;                            %计代数
    [trace(gen,1),loc]=min(ObjV);         %从子代中选择函数值最小的,存至trace数组,并记录此最小值的位置loc
    mid=Chrom(loc,:);                     %从子代中取出函数最小值的各二进制变量
    vari=[vari;mid];                      %存至vari数组
    trace(gen,2)=sum(ObjV)/length(ObjV);  %记录当前代数平均函数值
end
plot(trace(:,1));hold on;                 %画出每代函数最小值
[m,n]=min(trace(:,1));                    %计算历代函数最小值,记录位置n
va=bs2rv(vari,FieldD);                    %二进制转十进制
var=va(n,:);                              %历代函数最小值的50个变量
string1=['最终值',num2str(m)];
gtext(string1);
plot(trace(:,2),'-.');grid;
legend('种群最小值的变化','平均值的变化');

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -