遗传算法求解一般函数极值问题

遗传算法的实现

1.种群初始化

大部分函数求解过程直接采用实数编码的方式即可

function ret=Code(lenchrom,bound)
%本函数将变量编码成染色体,用于随机初始化一个种群
% lenchrom   input : 染色体长度
% bound      input : 变量的取值范围
% ret        output: 染色体的编码值

flag=0;
while flag==0
    pick=rand(1,length(lenchrom));
    ret=bound(:,1)'+(bound(:,2)-bound(:,1))'.*pick; %线性插值
    flag=test(lenchrom,bound,ret);             %检验染色体的可行性
end

function flag=test(lenchrom,bound,code)
检验染色体的可行性,即每个自变量不能超过其上下界限
% lenchrom   input : 染色体长度
% bound      input : 变量的取值范围
% code       output: 染色体的编码值

flag=1;
[n,m]=size(code);

for i=1:n
    if code(i)<bound(i,1) || code(i)>bound(i,2)
        flag=0;
    end
end

编码方式通过线性插值的方式,即

x=lb+(ub-lb)*rank

        其中lb为自变量的下界,ub为自变量的上界,rank为[0,1]区间的随机数;并构造测试函数检验染色体的可行性,确保所有自变量均在其定义域内。

 

2.适应度函数

        适应度值是用来区分群体中各个个体好坏的指标,一般与自变量对应的函数值有关,适应度值大的个体表明其为优良个体,给予保留。根据需要(最大值或最小值)对适应度值与函数值进行转化——如求函数值的最大值,则适应度值即可为函数值,函数值越大适应度值越大,我们所要做的就是将我们所求的目标尽可能地给予更大的适应度值;若求函数值的最小值,则可令函数值的倒数作为个体的适应度值

Fitness(x)=1/f(x)

 

3.选择操作

        选择操作即为决定整个遗传算法种群走向的关键性步骤,遗传算法的选择操作通常以较大的概率保留父代优良个体到子代中,以此使得种群往适应度值高的方向进化,随着种群整体往适应度值大的方向偏移,则有更大的几率得到最优解,这也是遗传算法中种群进化的原因所在。

        选择方法多种多样,最为普遍的是轮盘赌法

p(i)=F(i)/sum(F)

即每个个体被选中保留至子代的概率为p(i),p(i)即为此个体的适应度值与总适应度值之和的比值。具体实现过程为:例如共有10个个体,它们被选中的

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值