基本遗传算法(GA)的算法原理、步骤、及Matlab实现

算法原理

遗传算法可以用来求函数的极值。
(1)用二进制编码来离散自变量,码长根据离散精度来确定。码长为 log2[maxmin)/+1]
(2)交叉方法采用单点交叉
(3)变异是根据变异概率反转子代某个位的值
(4)选择策略采用轮盘赌策略,令 PPi=ij=1pi,PP0=0 ,其中 PPi 为累计概率, pi 为个体的选择概率,公式为: pi=fitness(xi)NPi=1fitness(xi) ,其中 fitnessxi 为个体的适应度,共轮转 NP 次,每次轮转时,产生随机数 r ,当PPi1<=r<PPi时选择个体 i <script type="math/tex" id="MathJax-Element-10">i</script>。

算法步骤

基本遗传算法的基本步骤是:

  1. 随机产生种群,
  2. 用轮盘赌策略确定个体的适应度,判断是否符合优化准则,若符合,输出最佳个体及其最优解,结束,否则,进行下一步
  3. 依据适应度选择再生个体,适应度高的个体被选中的概率高,适应度低的个体被淘汰
  4. 按照一定的交叉概率和交叉方法,生成新的个体
  5. 按照一定的变异概率和变异方法,生成新的个体
  6. 由交叉和变异产生新一代种群,返回步骤2

算法的实现

%基本遗传算法,一维无约束优化
function [ xv,fv ] = mGA( fitness,a,b,NP,NG,Pc,Pm,eps )
% 待优化的目标函数:fitness
% 自变量下界:a
% 自变量上界:b
% 种群个体数:NP
% 最大进化代数:NG
% 杂交常数:Pc
% 变异常数:Pm
% 自变量离散精度:eps
% 目标函数取最大值是的自变量值:xv
% 目标函数的最小值:fv

L=ceil(log2((b-a)/eps+1)); %码长
x=zeros(NP,L);
for i=1:NP
    x(i,:)=Initial(L);
    fx(i)=fitness(Dec(a,b,x(i,:),L));
end
for k=1:NG
    sumfx=sun(fx);
    Px=fx/sumfx;
    PPx=0;
    PPx(1)=Px(1);
    for i=2:NP  %根据轮盘赌确定父亲
        PPx(i)=PPx(i-1)+PPx(i);
    end
    for i=1:NP
        sita=rand();
        for n=1:NP
            if sita <= PPx(n)
                SelFather = n;
                break;
            end
        end
        Selmother=floor(rand()*(NP-1))+1;   %随机选择母亲
        posCut=floor(rand()*(L-2))+1;   %随机确定交叉点
        r1=rand();
        if r1<=Pc
            nx(i,1:posCut)=x(SelFather,1:posCut);
            nx(I,(posCut+1):L)=x(Selmother,(posCut+1):L);
            r2=rand();
            if r2<=Pm    %变异
                posMut=round(rand()*(L-1)+1);
                nx(i,posMut)=~nx(i,posMut);
            end
        else
            nx(i,:)=x(SelFather,:);
        end
    end
    x=nx;
    for i=1:NP
        fx(i)=fitness(Dec(a,b,x(i,:),L);
    end
end
fv=-inf;
for i=1:NP
    fitx=fitness(Dec(a,b,x(i,:),L));
    if fitx > fv
        fv=fitx;
        xv=Dec(a,b,x(i,:),L);
    end
end
end

function result=Initial(length)     %初始化函数
    for i=1:length
        r=rand();
        result(i)=round(r);
    end
end
function y=Dec(a,b,x,L)     %二进制转十进制
    base=2.^((L-1):-1:0);
    y=dot(base,x);
    y=a+y*(b-1)/(2^L-1)'
end


  • 29
    点赞
  • 333
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
遗传算法是一种模拟自然进化过程的优化算法。它基于生物进化理论,通过模拟遗传、交叉和变异等操作,不断迭代优化问题的解。以下是遗传算法基本原理MATLAB实现步骤: 1. 初始化种群:随机生成一组个体,称为种群。每个个体表示问题的一个可能解。 2. 评估适应度:根据问题的目标函数,计算每个个体的适应度值。适应度值用于评估个体的优劣程度。 3. 选择操作:选择适应度较高的个体作为下一代个体的父代。常用的选择方法有轮盘赌选择和竞争选择等。 4. 交叉操作:从父代中选取两个个体,通过某种方式交叉产生两个新个体。交叉操作可以增加种群的多样性。 5. 变异操作:对新个体进行变异操作,即随机改变个体的某些基因值。变异操作可以引入新的解空间。 6. 更新种群:将父代和子代合并形成新的种群。 7. 判断终止条件:判断是否达到终止条件,如达到最大迭代次数或找到满足要求的解。 8. 返回结果:返回最优解或满足要求的解。 在MATLAB中,可以使用遗传算法工具箱(Genetic Algorithm Toolbox)来实现遗传算法。下面是一个简单的MATLAB实现示例: ```matlab % 定义目标函数 fitnessFunc = @(x) x^2; % 设置遗传算法参数 options = gaoptimset('PopulationSize', 50, 'Generations', 100); % 调用遗传算法函数 [x, fval] = ga(fitnessFunc, 1, options); % 输出结果 fprintf('最优解:%f\n', x); fprintf('最优值:%f\n', fval); ``` 在上述示例中,我们定义了一个目标函数 fitnessFunc,并使用遗传算法工具箱中的 ga 函数来求解最优解。设置种群大小为 50,迭代次数为 100。最后输出找到的最优解和最优值。 这是一个简单的遗传算法实现示例,你可以根据具体问题的需求进行参数调整和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值