现代优化算法:遗传算法

主要内容参考《数学建模应用与算法》

遗传算法简介

遗传算法(Genetic Algorithm,GA)是一种基于自然选择原理和自然遗传机制的搜索(寻优)算法,它是模拟自然界中的生命进化机制,在人工系统中实现特定目标的优化。遗传算法的实质是通过群体搜索技术,根据适者生存的原则逐代进化,最终得到最优解或准最优解

基本框架

摘自百度百科

编码

       由于遗传算法不能直接处理问题空间的参数,因此必须通过编码将要求解的问题表示成遗传空间的染色体或者个体。这一操作就叫做编码,也可以成为问题的表示。评估编码策略常采用以下3个规范:

a)完备性:问题空间中的所有点(候选解)都能作为GA空间中的点(染色体)表现。

b)健全性:GA空间中的染色体能对应所有问题空间中的候选解。

c)非冗余性:染色体和候选解一一对应。

适应度函数

       进化论中的适应度,是表示某一个体对环境的适应能力,也表示该个体繁殖后代的能力。遗传算法的适应度函数也叫评价函数,是用来判断群体中的个体的优劣程度的指标,它是根据所求问题的目标函数来进行评估的。

       遗传算法在搜索进化过程中一般不需要其他外部信息,仅用评估函数来评估个体或解的优劣,并作为以后遗传操作的依据。由于遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值。由此可见,在不少场合,将目标函数映射成求最大值形式且函数值非负的适应度函数是必要的。

适应度函数需要满足:单值、连续、非负、最大化;合理、一致性;计算量小;通用性强。在具体应用中,适应度函数的设计要结合求解问题本身的要求而定。适应度函数设计直接影响到遗传算法的性能

初始群体选取

遗传算法中初始群体中的个体是随机产生的。一般来讲,初始群体的设定可采取如下的策略:

a)根据问题的固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始群体。

b)先随机生成一定数目的个体,然后从中挑选最好的个体加到初始群体中,这种过程不断迭代,直到初始群体中个体数达到了预先确定的规模。

大致操作

初始群体的产生、求每一个体的适应度、根据适者生存的原则选择优良个体、被选出的优良个体两两配对,通过随机交叉其染色体的基因并随机变异某些染色体的基因后生成下一代群体,按此方法使群体逐代进化,直到满足进化终止条件。

选择

       从群体中选择优胜的个体,淘汰劣质个体的操作叫选择。选择算子有时又称为再生算子。选择的目的是把优化的个体(或解)直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。

常用的选择算子有:适应度比例方法、随机遍历抽样法、局部选择法。

交叉

       在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。

变异

变异算子的基本内容是对群体中的个体串的某些基因座上的基因值作变动。依据个体编码表示方法的不同,可以有以下的算法:

a)实值变异;b)二进制变异

一般来说,变异算子操作的基本步骤为:

a)对群中所有个体以事先设定的变异概率判断是否进行变异;b)对进行变异的个体随机选择变异位进行变异。

遗传算法引入变异的目的有两个:一是使遗传算法具有局部的随机搜索能力。当遗传算法通过交叉算子已接近最优解邻域时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。显然,此种情况下的变异概率应取较小值,否则接近最优解的积木块会因变异而遭到破坏。二是使遗传算法可维持群体多样性,以防止出现未成熟收敛现象。此时收敛概率应取较大值。

终止条件

       当最优个体的适应度达到给定的阈值,或者最优个体的适应度和群体适应度不再上升时,或者迭代次数达到预设的代数时,算法终止。预设的代数一般设置为100-500代。

实现方法

(1)根据具体问题确定可行解域,确定一种编码方法,能用数值串或字符串表示可行解域的每一个解。

(2)对每一解应有一个度量好坏的依据,它用一函数表示,叫做适应度函数。

(3)确定进化参数群体规模M、交叉概率Pc、变异概率pm、进化终止条件。

       为便于计算,一般来说,每一代群体的个体数目都取相等。群体规模越大、越容易找到最优解,但是计算机的运算能力有限,群体规模越大,计算所需要的时间也相应增加。进化终止条件指的是当进化到什么时候结束,它可以设定到某一代进化结束,也可以根据找出近似最优是否满足精度要求来确定。

生物遗传概念在遗传算法中的对应关系

遗传算法的特点

1)基于染色体的并行搜索,带有猜测性质的选择操作和突变操作。

2)算法从问题解的串集开始搜索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,覆盖面大,利于全局择优。

3)遗传算法同时处理群体中的多个个体,即对搜索空间中的多个解进行评估,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。

4)遗传算法基本上不用搜索空间的知识或其它辅助信息,而仅用适应度函数值来评估个体,在此基础上进行遗传操作。适应度函数不仅不受连续可微的约束,而且其定义域可以任意设定。这一特点使得遗传算法的应用范围大大扩展。

5)遗传算法不是采用确定性规则,而是采用概率的变迁规则来指导他的搜索方向。

6)具有自组织、自适应和自学习性。遗传算法利用进化过程获得的信息自行组织搜索时,适应度大的个体具有较高的生存概率,并获得更适应环境的基因结构。

7)此外,算法本身也可以采用动态自适应技术,在进化过程中自动调整算法控制参数和编码精度,比如使用模糊自适应法。

不足之处

1)编码不规范及编码存在表示的不准确性。

2)单一的遗传算法编码不能全面地将优化问题的约束表示出来。考虑约束的一个方法就是对不可行解采用阈值,这样,计算的时间必然增加。

3)遗传算法通常的效率比其他传统的优化方法低。

4)遗传算法容易过早收敛。

5)遗传算法对算法的精度、可行度、计算复杂性等方面,还没有有效的定量分析方法。

应用实例

函数求最大值

例1:用遗传算法求解下列非线性规划问题:

                                            

其MATLAB程序如下:

fun1.m

function y=fun1;
fun_1=@(x)(x(1)-2)^2+(x(2)-1)^2;
%[x,fval]=ga(@fitnessfun,nvars,A,b,Aeq,beq,LB,UB,@nonlcon,options)
%其中@fitnessfun是适应度函数句柄,nvars是适应度函数的独立变量个数,options是一个包含遗传算法选项参数的数据结构,其他参数的含义与非线性规划fmincon中的参数相同
%函数的返回值:x为最终值到达的点,其为行向量;fval是适应度函数的最终值。
[x,val]=ga(fun_1,2,[],[],[],[],[],[],@fun2)

fun2.m

function [c,ceq]=fun2(x);
c=-x(1)^2/4+x(2)^2-1; ceq=[]

输出结果(遗传算法的每次运行结果都是不一样的)

 

实例二:2006年研究生数学建模竞赛D题:学生面试

网上有不错的论文,也可以参考《数学建模算法与应用习题解答137~141页》

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值