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

📄 ga.m

📁 matlab遗传算法程序
💻 M
字号:
function []=main(N,pcro,pmut)
%遗传算法主函数
%用以实现求给定函数fun在给定区间[low,up]上的极大值
% pcro交叉概率,pmut变异概率,N为迭代次数
low=-5; %区间下限
up=5;   %区间上限
prec=0.0001;    %要求结果精度
n=100;          %种群个数
length=ceil(log2((up-low)/prec+1));  %求得单个变量编码长度
pop=encode(length,n);    %用解码函数求得初始种群,n为种群个体个数

gen=0;          %代数初始化
while(gen<=N)
    fval=zeros(1,n);   %初始化函数值
    fit=zeros(1,n);    %初始化适应度
    for i=1:n
        [x1,x2]=decode(pop(i,:),low,up,length);   %利用解码函数解码个体
        fval(i)=fun(x1,x2);               %求个体的函数值值
    end
    fsum=sum(fval);
    fmax=max(fval);
    fs=n*fmax-fsum;
    fit=(fmax-fval)/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;              %下一代
end
minf=inf;
for i=1:n
    [x1,x2]=decode(pop(i,:),low,up,length);   %解码最终得到的个体
    fval=fun(x1,x2);                          %计算其函数值
    if fval<minf                    %最优点及最优值得到最终种群中的
        minf=fval;
        x0=[x1,x2];
    end
end
minf,x0                             %输出最小值以及此时的自变量

⌨️ 快捷键说明

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