目录

2.基本遗传算法

2.1基本遗传算法描述

2.1.1基本遗传算法的构成要素

2.1.2基本遗传算法描述

2.1.3基本遗传算法的形式化定义

2.2基本遗传算法的实现

2.2.1个体适应度评价

2.2.2比例选择算子

2.2.3单点交叉算子

2.2.4基本位变异算子

2.3基本遗传算法应用举例

2.3.1遗传算法的应用步骤

2.3.2基本遗传算法在函数优化中的应用举例

2.3.3补充解释

参考资料


2.基本遗传算法

针对不同的问题,很多学者设计了许多不同的编码方法来表示问题的可行解,开发出了许多种不同的遗传算子来模仿不同环境下的生物遗传特性。这样,由不同的编码方法和不同的遗传算子就构成了各种不同的遗传算法。但这些遗传算法都有共同的特点,即通过对生物遗传和进化过程中选择、交叉、变异机理的模仿,来完成对问题最优解的自适应搜索过程。

基于这个共同特点,Goldberg总结出了一种统一的最基本的遗传算法——基本遗传算法(Simple Genetic Algorithms,简称SGA)。基本遗传算法只使用选择算子、交叉算子和变异算子这三种基本遗传算子。它不仅给各种遗传算法提供了一个基本框架,同时也具有一定的应用价值。

2.1基本遗传算法描述

2.1.1基本遗传算法的构成要素

(1)染色体编码方法。基本遗传算法使用固定长度的二进制符号串来表示群体中的个体,其等位基因是由二值符号集{0,1}所组成的。初始群体中各个个体的基因值可用均匀分布的随机数来生成。如:X=100111001000101101就可表示一个个体,该个体的染色体长度是n=18。

(2)个体适应度评价。基本遗传算法按与个体适应度成正比的概率来决定当前群体中每个个体遗传到下一代群体中的机会多少。为正确计算这个概率,这里要求所有个体的适应度必须为正数或零。这样,根据不同种类的问题,必须预先确定好由目标函数值到个体适应度之间的转换规则,特别是要预先确定好当目标函数值为负数时的处理方法。

(3)遗传算子。基本遗传算法使用下述三种遗传算子:
●选择运算使用比例选择算子;
●交叉运算使用单点交叉算子;
●变异运算使用基本位变异算子或均匀变异算子。

(4)基本遗传算法的运行参数。基本遗传算法有下述4个运行参数需要提前设定:
●M:群体大小,即群体中所含个体的数量,一般取为20~100;
●T:遗传运算的终止进化代数,一般取为100~500;
●Pc:交叉概率,一般取为0.4-0.99;
●Pm:变异概率,一般取为0.0001~0.1。

需要说明的是,这4个运行参数对遗传算法的求解结果和求解效率都有一定的影响,但目前尚无合理选择它们的理论依据。
在遗传算法的实际应用中,往往需要经过多次试算后才能确定出这些参数合理的取值大小或取值范围。

2.1.2基本遗传算法描述

下面我们给出基本遗传算法的伪代码描述。

Procedure SGA
begininitialize P(0);        %初始化群体t=0;while (t≤T)for i=0 to M doEvaluate fitness of P(t);         %计算群体中每个个体的适应度endforfor i=1 to M doSelect operation to P(t);        %选择操作endforfor i=1 to M/2 doCrossover operation to P(t);  %交叉操作endforfor i=1 to M doMutation operation to P(t);   %变异操作endforfor i=1 to M doP(t+1)=P(t);endfort=t+1;endwhile
end

2.1.3基本遗传算法的形式化定义

基本遗传算法可定义为一个8元组:

2.2基本遗传算法的实现

根据上面对基本遗传算法构成要素的分析和算法描述,我们可以很方便地用计算机语言来实现这个基本遗传算法。

现对具体实现过程中的间题作以下说明。

2.2.1个体适应度评价

在遗传算法中,以个体适应度的大小来确定该个体被遗传到下一代群体中的概率。个体的适应度越大,该个体被遗传到下一代的概率也越大;反之,个体的适应度越小,该个体被遗传到下一代的概率也越小。基本遗传算法使用比例选择算子来确定群体中各个个体遗传到下一代群体中的数量。为正确计算不同情况下各个个体的遗传概率,要求所有个体的适应度必须为正数或零,不能是负数。

2.2.2比例选择算子

选择算子或复制算子的作用是从当前代群体中选择出一些比较优良的个体,并将其复制到下一代群体中。最常用和最基本的选择算子是比例选择算子。所谓比例选择算子,是指个体被选中并遗传到下一代群体中的概率与该个体的适应度大小成正比。比例选择实际上是一种有退还随机选择,也叫做赌盘( Roulette Wheel)选择,因为这种选择方式与赌博中的赌盘操作原理颇为相似。

如下图,整个赌盘被分为大小不同的一些扇面,分别对应着价值各不相同的一些赌博物品。当旋转着的赌盘自然停下来时,其指针所指扇面上的物品就归赌博者所有。虽然赌盘的指针具体停止在哪一个面是无法预测的,但指针指向各个扇面的概率却是可以估计的,它与各个扇面的圆心角大小成正比:圆心角越大,停在该扇面的可能性也越大;圆心角越小,停在该扇面的可能性也越小。

与此类似,在遗传算法中整个群体被各个个体所分割,各个个体的适应度在全部个体的适应度之和中所占比例也大小不一,这个比例值瓜分了整个赌盘盘面,它们也决定了各个个体被遗传到下一代群体中的概率。

比例选择算子的具体执行过程是:
(1)先计算出群体中所有个体的适应度的总和。
(2)其次计算出每个个体的相对适应度的大小,它即为各个个体被遗传到下一代群体中的概率。
(3)最后再使用模拟赌盘操作(即0到1之间的随机数)来确定各个个体被选中的次数。

2.2.3单点交叉算子

单点交叉算子是最常用和最基本的交叉操作算子。

单点交叉算子的具体执行过程如下:

(1)对群体中的个体进行两两随机配对。若群体大小为M,则共有对相互配对的个体组。其中表示不大于x的最大的整数。

(2)对每一对相互配对的个体,随机设置某一基因座之后的位置为交叉点。若染色体的长度为n,则共有(n-1)个可能的交叉点位置。

(3)对每一对相互配对的个体,依设定的交叉概率Pc在其交叉点处相互交换两个个体的部分染色体,从而产生出两个新的个体。

2.2.4基本位变异算子

基本位变异算子是最简单和最基本的变异操作算子。对于基本遗传算法中用二进制编码符号串所表示的个体,若需要进行变异操作的某一基因座上的原有基因值为0,则变异操作将该基因值变为1;反之,若原有基因值为1,则变异操作将其变为0。

基本位变异算子的具体执行过程如下:
(1)对个体的每一个基因座,依变异概率Pm指定其为变异点;
(2)对每一个指定的变异点,对其基因值做取反运算或用其他等位基因值来代替,从而产生出一个新的个体;

2.3基本遗传算法应用举例

由前述可以知道,基本遗传算法是一个选代过程,它模仿生物在自然环境中的遗传和进化机理,反复将选择算子、交叉算子、变异算子作用于群体,最终可得到问题的最优解或近似最优解。

虽然算法的思想比较单纯,结构也比较简单,但它却也具有一定的实用价值,能够解决一些复杂系统的优化计算问题。

2.3.1遗传算法的应用步骤

遗传算法提供了一种求解复杂系统优化问题的通用框架,它不依赖于问题的领域和种类。对一个需要进行优化计算的实际应用问题,一般可按下述步骤来构造求解该问题的遗传算法。

第一步:确定决策变量及其各种约束条件,即确定出个体的表现型X和问题的解空间。
第二步:建立优化模型,即确定出目标函数的类型(是求目标函数的最大值还是求目标函数的最小值?)及其数学描述形式或量化方法。
第三步:确定表示可行解的染色体编码方法,也即确定出个体的基因型X及遗传算法的搜索空间。
第四步:确定解码方法,即确定出由个体基因型X到个体表现型X的对应关系或转换方法。
第五步:确定个体适应度的量化评价方法,即确定出由目标函数值f(X)到个体适应度F(X)的转换规则。
第六步:设计遗传算子,即确定出选择运算、交叉运算、变异运算等遗传算子的具体操作方法。
第七步:确定遗传算法的有关运行参数,即确定出遗传算法的M、T、Pc、Pm等参数。

由上述构造步骤可以看出,可行解的编码方法、遗传算子的设计是构造遗传算法时需要考虑的两个主要问题,也是设计遗传算法时的两个关键步骤。对不同的优化问题需要使用不同的编码方法和不同操作的遗传算子,它们与所求解的具体问题密切相关,因而对所求解问题的理解程度是遗传算法应用成功与否的关键。

2.3.2基本遗传算法在函数优化中的应用举例

【例】Rosenbrock函数的全局最大值计算。

max                                (2-6)

遗传算法的主要构造过程如下:

下面介绍求解该问题的遗传算法的构造过程。

第一步:确定决策变量和约束条件。

式(2-7)已给出了该问题的决策变量及其约束条件。

第二步:建立优化模型。

式(2-6)已给出了该问题的数学模型。

第三步:确定编码方法。

用长度为10位的二进制编码串来分别表示两个决策变量x1、x2。10位二进制编码串可以表示从0到1023之间的1024个不同的数,故将x1、x2的定义域离散化为1023个均等的区域,包含两个端点,分别有1024个不同的离散点。从离散点-2.048到离散点2.048,依次让它们分别对应于从0000000000(0)到1111111111(1023)之间的二进制编码。再将分别表示x1、x2的两个10位长的二进制编码串连接在一起。组成一个20位长的二进制编码串,它就构成了这个函数优化问题的染色体编码方法。使用这种编码方法,解空间和遗传算法的搜索空间具有一一对应的关系。

例如

就表示一个个体的基因型,其中前10位表示x1,后10位表示x2。

第四步:确定解码方法。

解码时,需先将20位长的二进制编码串切断为两个十进制串,然后分别将它们转换为对应的十进制整数代码,分别记为y1和y2。依据前述个体编码方法和对定义域的离散化方法可知,将代码yi转换为变量xi的解码公式为:

4.096×yi/1023是整个决策变量的区间长度(在1023等分),加上-2.048(区间开始的值),求得xi即为解码后的数值(在区间的约束条件内)

例如,对于前述个体   X:0000110111 1101110001 它由这样的两个代码所组成:y1=55  y2=881

经过式(2-7)的解码处理后,可得到:x1=-1.828   x2=1.476

第五步:确定个体评价方法。

由式(2-6)可知,Rosenbrock函数的值域总是非负的,并且优化目标是求函数的最大值,故这里将个体的适应度直接取为对应的目标函数值,并且不再对它作其他变换处理,即有F(X)=f(x1,x2)     (2-9)

第六步:设计遗传算子。

选择运算使用比例选择算子;

交叉运算使用单点交叉算子;

变异运算使用基本位变异算子。

第七步:确定基本遗传算法的运行参数。

对于本例,设定基本遗传算法的运行参数如下:

群体大小:M=80

终止代数:T=200

交叉概率:Pc=0.6

变异概率:Pm=0.001

通过上述七个步骤可构成用于Rosenbrock函数优化计算的基本遗传算法,下图为其进化过程示例及运行结果。图中横轴表示进化代数,纵轴表示适应度(也是目标函数值),图中的两条曲线分别为各代群体中个体适应度的最大值和平均值。

在上图可以看出,在解的进化过程中,群体中个体适应度的最大值和平均值虽然有上下波动的情况,但总的来说却是呈现一种上升的趋势。

随着进化过程的进行,群体中适应度较低的一些个体被逐渐淘汰掉,而适应度较高的一些个体越来越多,并且它们都集中在所求问题的最优点附近,从而最终就可搜索到问题的最优解。

2.3.3补充解释

遗传算法可以形象化的理解:假设我们求这群山的海拔最高的点

往这群山上撒一些点,初始化群体;
然后给个海拔的要求,假如是图中的红线1,不满足要求的淘汰掉,满足要求的留下来;
然后再给个海拔的要求,假如是图中的红线2,不满足要求的淘汰掉,满足要求的留下来,依次求下去,如红线3;
随着适应度的不断提高,群体也逐渐接近最优解,也就是说遗传算法是一种全局的优化算法。

当然也有可能陷入局部最优解,这和适应度函数的设置有很大的关系。比如,撒在山3的个体比较多,满足适应度函数的个体集中在山3上,即使交叉、变异之后再选择,它也只在山3选择,不会到其它山1、山2上。最终求得的结果在山3上,并不是山2的最优解,这就是“早熟”的现象。

参考资料

《遗传算法原理及应用》周明、孙树栋编著

遗传算法(三)——基本遗传算法相关推荐

  1. 遗传算法三种交叉算子(OX、PMX、CX)

    目录 前言 代码 总结 前言 三种遗传算法的交叉算子:OX.PMX.CX 运行环境:Visual Studio 2019 源文件:.cpp文件 代码 #include <stdio.h> ...

  2. 基于群智能的路径规划算法(三)------遗传算法

       本系列文章主要记录学习基于群智能的路径规划算法过程中的一些关键知识点,并按照理解对其进行描述和进行相关思考.    主要学习资料是来自 小黎的Ally 的 <第2期课程-基于群智能的三维路 ...

  3. python 遗传算法 字符串_遗传算法——Python

    好久没写博客了,最近看了个东西,觉得不错,整理了一下: 遗传算法 遗传算法 ( GA , Genetic Algorithm ) ,也称进化算法 . 遗传算法是受达尔文的进化论的启发,借鉴生物进化过程 ...

  4. GA遗传算法c语言,遗传算法GA(Genetic Algorithm)入门知识梳理

    一.遗传算法进化论背景知识 作为遗传算法生物背景的介绍,下面内容了解即可: 种群(Population):生物的进化以群体的形式进行,这样的一个群体称为种群. 个体:组成种群的单个生物. 基因 ( G ...

  5. MATLAB实现遗传算法、模拟退火遗传算法求解避障路径规划问题——计算智能作业

    文章目录 一.问题描述 二.遗传算法设计 2.1 算法原理 2.2 编码 2.2 适应度函数 2.3 混合遗传算法 三.实验结果及分析 四.总结 参考文献 MATLAB代码 主程序 相关函数 一.问题 ...

  6. java遗传算法编程_遗传算法示例程序

    评论 # re: 遗传算法示例程序  回复  更多评论 2007-05-06 00:18 by 橙子的希望 我可不可以表示晕倒? # re: 遗传算法示例程序[未登录]  回复  更多评论 2007- ...

  7. 什么是遗传算法?解释遗传算法中的个体和种群的含义?

    什么是遗传算法?解释遗传算法中的个体和种群的含义? 遗传算法思想来源于生物进化过程,它是基于进化过程中的信息遗传机制和优胜劣汰的自然选择原则的搜索算法.遗传算法用概率搜索过程在该状态空间中搜索,产生新 ...

  8. matlab如何用遗传算法,使用MATLAB遗传算法工具实例(详细).doc

    最新发布的MATLAB 7.0 Release 14已经包含了一个专门设计的遗传算法与直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox,GADS) ...

  9. 三个遗传算法matlab程序实例

    遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPo ...

  10. 遗传算法 优化 工具箱 matlab pareto front,matlab遗传算法三目标优化,出来的pareto前沿图只是二维图...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 三目标不是三维图么?怎么修改啊?啊 function f=multidisk(x) global I1 I2 F r=350;u=0.5;fai=1;W= ...

最新文章

  1. Python基础 模块
  2. APUE读书笔记-第14章-高级I/O
  3. WiFi攻击中的“核武器”长啥样?来,今天咱们开开眼...
  4. python中的out of loop_TclError: out of stack space (infinite loop?)
  5. 在docker中运行ASP.NET Core Web API应用程序
  6. 前端基础-html-路径的介绍
  7. python工具用什么语言_Python中一些自然语言工具的使用的入门教程
  8. stm32串口通信_STM32之串口通信
  9. window下python2和python3的共存
  10. hadoop菜鸟教程 Hadoop学习资料(云计算学习电子书)
  11. 优科豪马冬季SUV轮胎G072的性能特点全解
  12. 创建自己的WordPress主题的三种方法
  13. IETester——用来测试IE5.5~IE11兼容性的工具
  14. Android内存优化:Reckon(二)
  15. 【STM32学习笔记】(6)—— 跑马灯实验详解
  16. 计算几何(二) by邓俊辉老师
  17. java 将json写入txt_关于json:在java中将String写入文本文件
  18. 浅说北仑有趣的地名之霞浦篇
  19. 【FPGA】数码管电子时钟
  20. 用HTML+bootstrap制作个人简历

热门文章

  1. 消息管理-自动回复文本消息
  2. C1任务-修改游戏存档
  3. codeigniter linux url 大写,CodeIgniter中使用Smarty3基本配置
  4. 人工神经网络有哪些算法,神经网络都有哪些算法
  5. js发布订阅原理,代码解析
  6. 用互动的方式打开“11月全国气象短视频(快手、抖音)影响力榜单“
  7. go mux子路由的基本使用
  8. 构词法重新辨析triweekly与entrance
  9. 华为手机设置页面黑色_华为手机微信猫和老鼠主题皮肤怎么设置 ?超个性主题等你来设置!...
  10. 中继链路trunk详解