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

📄 ga.asv

📁 主要用于初学者的有关遗传算法的MATLAB的应用.这里应用了少量的工具箱,对初学者很有帮助.
💻 ASV
字号:
function []=main(N,pcro,pmut)
%遗传算法主函数
%用以实现求给定函数fun在给定区间[low,up]上的极大值
% pcro交叉概率,pmut变异概率,N为迭代次数
low=0; %区间下限
up=9;   %区间上限
n=50;          %种群个数
length=22;  %求得单个变量编码长度
pop=encode(length,n);    %用解码函数求得初始种群,n为种群个体个数
f='x+10*sin(x.*5)+7*cos(x.*4)';
gen=0;          %代数初始化
vfx=[];
while(gen<=N)
    fval=zeros(1,n);   %初始化函数值
    fit=zeros(1,n);    %初始化适应度
    x=decode(pop(:,1:22),low,up);
    fx=eval(f);
    if gen==1
        figure(1);fplot(f,[low,up]);grid on;hold on;
        plot(x,fx,'k*');
        title('(a)染色体初始位置分布图');
        xlabel('x');ylabel('f(x)');
    end
    fsum=sum(fx);
    fmin=min(fx);
    fs=fsum-n*fmin;
    fit=(fx-fmin)/fs;                   %求个体的适应度
    
    q(1)=fit(1);
    for i=2:n
        q(i)=q(i-1)+fit(i);               %累加个体适应度形成赌轮
    end
    pop=select(pop,q,n);                  %选择
    pop=crossover(pop,pcro,n,length);     %交叉
    pop=mutation(pop,pmut,n,length);      %变异
    gen=gen+1;              %下一代
[x]=decode(pop(1,:),low,up);
fval=fun(x);
maxf=fval;
for i=1:n
    [x]=decode(pop(i,:),low,up);   %解码最终得到的个体
    fval=fun(x);                          %计算其函数值
    if fval>maxf                    %最优点及最优值得到最终种群中的
        maxf=fval;
        x0=[x];
    end
end
if gen==N
    x=decode(pop(:,1:22),low,up);
    fx=eval(f);
    figure(2);fplot(f,[low,up]);grid on;hold on;
        plot(x,fx,'k*');
        title('(b)染色体最终位置分布图');
        xlabel('x');ylabel('f(x)');
end
end
figure(3);plot(vfx);xlabel('Generation');ylabel('zuiyou');

⌨️ 快捷键说明

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