遗传算法(matlab)

  • 主要流程
  • 编码
    • 二进制编码
      • 编码
      • 解码
    • 浮点数编码
    • 符号编码
  • 适应度函数
    • 适应度函数尺度变换
      • 1、线性尺度变换
      • 2、乘幂尺度变换
      • 3、指数尺度变换
  • 选择算子
    • 轮盘赌选择
  • 交叉算子
    • 单点交叉
    • 两点交叉
  • 变异算子
  • matlab代码实现
  • 小结

主要流程

编码
初始化种群
计算适应度值
选择
交叉变异
子代种群循环迭代
解码
输出

编码

二进制编码

编码

假设需要的精度为1,那么我们需要在(a,b)(a,b)(a,b)之间选择需要的个体,即2n−1⩽b−a⩽2n2^{n-1}\leqslant b-a\leqslant2^n2n−1⩽b−a⩽2n,则n=log2(b−a)+1n=log_2(b-a)+1n=log2​(b−a)+1
假设需要的精度为epsepseps,那么需要的个体在(a,b)(a,b)(a,b)之间的数据为b−aeps\frac{b-a}{eps}epsb−a​,即2n−1⩽b−aeps⩽2n2^{n-1}\leqslant\frac{b-a}{eps}\leqslant2^n2n−1⩽epsb−a​⩽2n,则n=log2b−aeps+1n=log_2{\frac{b-a}{eps}}+1n=log2​epsb−a​+1
其中,自变量范围为(a,b),eps(a,b),eps(a,b),eps为精度。

解码

x0=x×eps,real=a+x0=a+(b−a)x2n−1x_0=x\times eps,real = a+x_0= a+\frac{(b-a)x}{2^{n-1}}x0​=x×eps,real=a+x0​=a+2n−1(b−a)x​
其中,x0x_0x0​为b−ab-ab−a中的某值。

浮点数编码

符号编码

适应度函数

适应度函数也称评价函数,是根据目标函数确定的用于区分群体中个体好坏的标准。

评价个体适应度的一般过程为:

1、对个体编码串进行解码处理后,可得到个体的表现型。
2、由个体的表现型可计算出对应个体的目标函数值。
3、根据最优化问题的类型,由目标函数值按一定的转换规则求出个体的适应度。

适应度函数的设计主要应满足以下要求:

1、单值、连续、非负、最大化。
2、合理、一致性。较难。
3、计算量小。
4、通用性强。

一般的,由目标函数f(x)f(x)f(x)到适应度函数fit(x)fit(x)fit(x)的转换方法有:

例一
最大化问题:
fit(x)={f(x),f(x)>00,otherfit(x)=\begin{cases} f(x) ,\quad f(x)>0 \\ 0 \,\,\quad, \quad other \end{cases}fit(x)={f(x),f(x)>00,other​

最小化问题:
fit(x)={−f(x),f(x)<00,otherfit(x)=\begin{cases} -f(x) ,\quad f(x)<0 \\ 0 \;\;\;\;\,\quad, \quad other \end{cases}fit(x)={−f(x),f(x)<00,other​

例二
最大化问题:
fit(x)={f(x)−fmin,f(x)−fmin>00,otherfit(x)=\begin{cases} f(x)-f_{min} \,\,,\quad f(x)-f_{min}>0 \\ 0 \quad\quad \quad \quad \quad, \quad other \end{cases}fit(x)={f(x)−fmin​,f(x)−fmin​>00,other​

最小化问题:
fit(x)={fmax−f(x),fmax−f(x)>00,otherfit(x)=\begin{cases} f_{max}-f(x) \,\,,\quad f_{max}-f(x)>0 \\ 0 \quad\quad\quad\quad\quad, \quad other \end{cases}fit(x)={fmax​−f(x),fmax​−f(x)>00,other​
其中,fmax和fminf_{max}和f_{min}fmax​和fmin​是给定的一个值(目标函数估计值),目标函数可以大于或小于某值为好。

例三
最大化问题:
fit(x)=11+f+f(x)fit(x) = \frac{1}{1+f+f(x)}fit(x)=1+f+f(x)1​
最小化问题:
fit(x)=11+f−f(x)fit(x) = \frac{1}{1+f-f(x)}fit(x)=1+f−f(x)1​
其中,fff是给定的一个值(目标函数界限估计值)。

以上三种都是适应度越大越好。

适应度函数尺度变换

适应度函数总是非负的,而目标函数可能有正有负,故需要在目标函数与适应度函数之间进行变换。常用的尺度变换方法如下:(以后补充)

1、线性尺度变换

2、乘幂尺度变换

3、指数尺度变换

链接: 适应度函数构造.

选择算子

1.轮盘赌选择(Roulette Wheel Selection):是一种回放式随机采样方法。每个个体进入下一代的概率等于它的适应度值与整个种群中个体适应度值和的比例。选择误差较大。

2.随机竞争选择(Stochastic Tournament):每次按轮盘赌选择一对个体,然后让这两个个体进行竞争,适应度高的被选中,如此反复,直到选满为止。

3.最佳保留选择:首先按轮盘赌选择方法执行遗传算法的选择操作,然后将当前群体中适应度最高的个体结构完整地复制到下一代群体中。

4.无回放随机选择(也叫期望值选择Excepted Value Selection):根据每个个体在下一代群体中的生存期望来进行随机选择运算。方法如下:

(1) 计算群体中每个个体在下一代群体中的生存期望数目N。

(2) 若某一个体被选中参与交叉运算,则它在下一代中的生存期望数目减去0.5,若某一个体未 被选中参与交叉运算,则它在下一代中的生存期望数目减去1.0。

(3) 随着选择过程的进行,若某一个体的生存期望数目小于0时,则该个体就不再有机会被选中。

5.确定式选择:按照一种确定的方式来进行选择操作。具体操作过程如下:

(1) 计算群体中各个个体在下一代群体中的期望生存数目N。

(2) 用N的整数部分确定各个对应个体在下一代群体中的生存数目。

(3) 用N的小数部分对个体进行降序排列,顺序取前M个个体加入到下一代群体中。至此可完全确定出下一代群体中M个个体。

6.无回放余数随机选择:可确保适应度比平均适应度大的一些个体能够被遗传到下一代群体中,因而选择误差比较小。

7.均匀排序:对群体中的所有个体按期适应度大小进行排序,基于这个排序来分配各个个体被选中的概率。

8.最佳保存策略:当前群体中适应度最高的个体不参与交叉运算和变异运算,而是用它来代替掉本代群体中经过交叉、变异等操作后所产生的适应度最低的个体。

9.随机联赛选择:每次选取几个个体中适应度最高的一个个体遗传到下一代群体中。

10.排挤选择:新生成的子代将代替或排挤相似的旧父代个体,提高群体的多样性。

轮盘赌选择

又称比例选择方法.其基本思想是:各个个体被选中的概率与其适应度大小成正比.
基本流程:
1.计算每个个体的适应度fitvalue(i)fitvalue(i)fitvalue(i)
2.计算适应度比例,即每个个体的选择概率 p=fitvalue(i)∑fitvaluep = \frac{fitvalue(i)}{\sum fitvalue}p=∑fitvaluefitvalue(i)​
3.计算每个个体的累积概率 pp(i)=∑p(i)pp(i) = \sum p(i)pp(i)=∑p(i)
4.在[0,1][0,1][0,1]区间内产生一个均匀分布的伪随机数rrr
5.选择第一个大于rrr的个体
6.重复4、5共MMM次(MMM为种群数)

交叉算子

适用于二进制编码个体或浮点数编码个体的交叉算子:

1.单点交叉(One-point Crossover):指在个体编码串中只随机设置一个交叉点,然后再该点相互交换两个配对个体的部分染色体。

2.两点交叉与多点交叉:

(1) 两点交叉(Two-point Crossover):在个体编码串中随机设置了两个交叉点,然后再进行部分基因交换。

(2) 多点交叉(Multi-point Crossover)

3.均匀交叉(也称一致交叉,Uniform Crossover):两个配对个体的每个基因座上的基因都以相同的交叉概率进行交换,从而形成两个新个体。

4.算术交叉(Arithmetic Crossover):由两个个体的线性组合而产生出两个新的个体。该操作对象一般是由浮点数编码表示的个体。

单点交叉


10000 01010(父) \qquad\qquad\qquad\qquad\qquad\qquad 10000 00110
10010 00110(母) \qquad\qquad\qquad\qquad\qquad\qquad 10010 01010
交换后五位即可

两点交叉


100 00 01010(父) \qquad\qquad\qquad\qquad\qquad\qquad 100 10 01010
100 10 00110(母) \qquad\qquad\qquad\qquad\qquad\qquad 100 00 00110
交换两个交叉点之间数据即可

变异算子

以下变异算子适用于二进制编码和浮点数编码的个体:

1.基本位变异(Simple Mutation):对个体编码串中以变异概率、随机指定的某一位或某几位仅因座上的值做变异运算。

2,均匀变异(Uniform Mutation):分别用符合某一范围内均匀分布的随机数,以某一较小的概率来替换个体编码串中各个基因座上的原有基因值。(特别适用于在算法的初级运行阶段)

3.边界变异(Boundary Mutation):随机的取基因座上的两个对应边界基因值之一去替代原有基因值。特别适用于最优点位于或接近于可行解的边界时的一类问题。

4.非均匀变异:对原有的基因值做一随机扰动,以扰动后的结果作为变异后的新基因值。对每个基因座都以相同的概率进行变异运算之后,相当于整个解向量在解空间中作了一次轻微的变动。

5.高斯近似变异:进行变异操作时用符号均值为P的平均值,方差为P**2的正态分布的一个随机数来替换原有的基因值。

matlab代码实现

由于随机数原因,可能需要多次运行,得到最佳结果。

小结

学习笔记,欢迎指正!
参考文章

遗传算法(matlab)相关推荐

  1. MATLAB程序详细解析,遗传算法——matlab代码解析

    遗传算法--matlab代码解析 本文为学习B站老哥数学建模课程之后的一点笔记,图片源自web,代码源自老哥程序包,侵权删. 详细的遗传算法原理不再赘述,百度即可找到. 算法定义 遗传算法(GA)是模 ...

  2. 非线性整数规划的遗传算法Matlab程序

    非线性整数规划的遗传算法Matlab程序 通常,非线性整数规划是一个具有指数复杂度的NP问题,如果约束较为复杂,Matlab优化工具箱和一些优化软件比如lingo等,常常无法应用,即使能应用也不能给出 ...

  3. matlab遗传算法整数规划,非线性整数规划的遗传算法Matlab程序

    非线性整数规划的遗传算法Matlab程序 非线性整数规划的遗传算法Matlab程序 (引自人工智能及数据挖掘论坛) 这是一个具有200个01决策变量的多目标非线性整数规划,编写优化的目标函数如下,其中 ...

  4. 简单遗传算法MATLAB实现

    整理资料的时候发现的一篇讲的比较好的基于MATLAB实现遗传算法的博文,感谢原主的博文,源博文->简单遗传算法MATLAB实现 遗传算法的概念最早是由Bagley J.D 于1967年提出的.后 ...

  5. Matlab遗传算法求解TSO,遗传算法matlab程序实例.doc

    遗传算法matlab程序实例.doc --------------------------------------------------------------------------------- ...

  6. 遗传算法MATLAB工具箱的下载与安装

    一. 工具箱下载 1.gatbx(英国设菲尔德大学遗传算法工具箱)下载地址   http://www.shef.ac.uk/acse/research/ecrg/gat.html    在页面上的下部 ...

  7. 遗传算法MATLAB工具包简介

    下面介绍的函数都是Sheriffed大学遗传算法工具包内的常用函数 复制矩阵 B=rep(A,RepN) 1 A表示要被复制的矩阵,RepN包含每个方向的复制次数,RepN(1)代表纵向复制次数,Re ...

  8. java matlab 遗传算法_简单遗传算法MATLAB实现

    遗传算法的概念最早是由Bagley J.D 于1967年提出的.后来Michigan大学的J.H.Holland教授于1975年开始对遗传算法(Genetic Algorithm, GA)的机理进行系 ...

  9. 精英主义 遗传算法 matlab,遗传算法优化 - osc_lfs4vsih的个人空间 - OSCHINA - 中文开源技术交流社区...

    1.遗传算法简介 遗传算法是一种基于自然选择和群体遗传机理的搜索算法,它模拟了自然选择和自然遗传过程中的繁殖.杂交和突变现象.再利用遗传算法求解问题时,问题的每一个可能解都被编码成一个"染色 ...

  10. 遗传算法matlab优化实例,用遗传算法优化BP神经网络的Matlab编程实例

    此文章首次在simwe公开发表,属于GreenSim团队原创作品,转载请注明! 更多原创程序,请访问GreenSim团队主页http://blog.sina.com.cn/greensim 由于BP网 ...

最新文章

  1. 安装sql 2005 闪退 连接到服务器失败。错误:0x80070424
  2. Quzrtz 使用oracle集群无法正常启动问题解决
  3. vscode中设置字体大小_vscode配置使用教程
  4. java 并发编程第七章:取消和关闭
  5. nacos如何做注册中心?服务注册之后自带负载均衡,这一篇文章就够了!
  6. Java版世界时钟示例
  7. [日志]做人与标点符号
  8. 函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例
  9. 使用pdb调试python脚本
  10. echarts的legend显示不全_Echarts【1、数据过多导致显示不全分页,2、数据展示探讨分析】...
  11. 【转】win7 虚拟机virtualbox中ubuntu12.04安装samba实现文件共享
  12. 提升R代码运算效率的11个实用方法——并行、效率
  13. Oracle与Google两IT巨头战争冲击整个硅谷
  14. Shell笔记5——函数的知识与实践
  15. Win10下如何清理优化C盘
  16. HTML与CSS如何创建悬停折角纸叠效果
  17. 如何升级win10.
  18. php html转ubb,PHP HTML转UBB函数
  19. iOS开发者的一些前端感悟
  20. 路遥《人生》中经典语录

热门文章

  1. java文件处理(一)--文本文件转二进制文件
  2. 转:拉近人与人之间的关系
  3. 大专学计算机升本的学校多吗,专科学校升本科学校条件
  4. ISO/IEC 14496
  5. iOS错误:Error: ImageIO: PNG IDAT: invalid stored block lengths
  6. 人大经济论坛SAS版的几个问题
  7. 【钢格板】钢格板压焊机的实际操作和使用方法
  8. 键盘上下左右键返回的键值的问题
  9. 填充阴影线(45°细线、剖面线)——Visio制图总结(五)
  10. openstack nova 分析笔记