在实现遗传算法时,首要遇到的关键问题就是编码(encode)。编码的方法直接影响到了遗传算法的交叉算子、变异算子等遗传算子的运算,因此很大程度上决定了遗传进化的效率。

编解码过程图示:

编码原则:

  • 完备性(completeness):问题空间的所有解都能表示为所设计的基因型
  • 健全性(soundness):任何一个基因型都对应于一个可能解
  • 非冗余性(non-redundancy):问题空间(表现型)和表达空间(基因型)一一对应

下面主要总结一下最主流的一些编码方法:

二进制编码

含义:
个体基因型使用二值符号集{0,1}来构成,整个基因型是一个二进制编码符号串。二进制编码符号串的长度与问题所要求的求解精度有关。

举例1:
x是属于[0,1023]的整数中的一个,精度为1(因为是整数),m表示二进制编码串的长度,由于解空间的要求,1024≤2(m−1)1024≤2^{(m-1)}1024≤2(m−1),因此m最小为10。如:染色体0010101111就可以表示表现型为x=175的个体。
当然,如果精度要求到小数点后1位,那么

举例2:
个体的表现型包含两个变量x1、x2x_1、x_2x1​、x2​,且他们均为区间在[0,7]之间的整数,那么可以用3位无符号二进制整数来表示一个变量,如:基因型101110对应的表现型为x1=5,x2=6x_1=5,x_2=6x1​=5,x2​=6。

优缺点:
优点:编解码简单;交叉和变异等操作易于实现;符合最小字符集编码原则;可以利用模式定理对算法进行理论分析等。
缺点:对于一些连续函数的优化问题,由于其随机性使其局部搜索能力差,当接近最优解时,由于变异后表现型变化很大,不连续,所以会远离最优解。如上面举例1中,加入0010101111的第2位发生了变异,那么表现型则会从x=175变成了x=331,变异使得表现型变化很大,很不稳定。

格雷码

含义:
格雷码编码是其连续的两个整数所对应的编码之间只有一个码位是不同的,其余码位完全相同。它是二进制编码方法的一种变形。

举例3:
四位的二进制和格雷码转换如下:

十进制 二进制 格雷码
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 0100
9 1001 0101
10 1010 1111
11 1011 1110
12 1100 1010
13 1101 1011
14 1110 1001
15 1111 1000

可以看出,格雷码与标准的二进制编码之间的转换公式有如下规则:
假设有一个二进制编码B=bmbm−1…b2b1B=b_mb_{m-1}\dots b_2b_1B=bm​bm−1​…b2​b1​,其对应的格雷码为G=gmgm−1…g2g1G=g_mg_{m-1}\dots g_2g_1G=gm​gm−1​…g2​g1​
由二进制编码转格雷码的转换公式为:

gm=bmg_m = b_mgm​=bm​
gi=(bi+1)⊕(bi),i=m−1,m−2,…2,1g_i = (b_{i+1})⊕(bi), i=m-1,m-2,…2,1gi​=(bi+1​)⊕(bi),i=m−1,m−2,…2,1

由格雷码转二进制的转换公式为:

bm=gmb_m = g_mbm​=gm​
bi=(bi+1)⊕(gi),i=m−1,m−2,…2,1b_i = (b_{i+1})⊕(g_i), i=m-1,m-2,…2,1bi​=(bi+1​)⊕(gi​),i=m−1,m−2,…2,1

从以上表格可以看出,当一个染色体变异后,它原来的表现现和现在的表现型是连续的。

优缺点:
优点:增强了遗传算法的局部搜索能力,便于连续函数的局部空间搜索

二进制编码(包括格雷码)的劣势:
虽然说二进制编码在交叉时产生新个体的可能性比浮点编码要大,但面对一些多维、高精度要求的连续函数优化问题时会显得非常不利,二进制编码存在着连续函数离散化时的映射误差。二进制串的长度短时,解可能达不到精度;二进制串足够长时,解的搜索空间会急剧扩大(如举例1中如果精度要求到小数点后两位,那么解空间扩大了100倍,串长m需要增加到17位)。因此这种情况下浮点数编码会更适合。

浮点数编码/实数编码

含义:
浮点数编码是指个体的每个基因值用某一范围内的一个浮点数来表示,而个体的编码长度等于其决策变量的个数。因为这种编码方法使用的决策变量的真实值,也称之为真值编码方法。
在浮点数编码方法中,必须保证基因值在给定的区间限制范围内,遗传算法中所使用的交叉、变异等遗传算子也必须保证其运算结果所产生的新个体的基因值也在这个区间限制范围内。

优点:

  • 适用于在遗传算法中表示范围较大的数
  • 适用于精度要求较高的遗传算法
  • 便于较大空间的遗传搜索
  • 改善了遗传算法的计算复杂性,提高了运算交率
  • 便于遗传算法与经典优化方法的混合使用
  • 便于设计针对问题的专门知识的知识型遗传算子
  • 便于处理复杂的决策变量约束条件
  • 在连续参数优化、连续渐变问题方面具有优势

符号编码法

含义:
符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}。

优点:

  • 符合有意义积术块编码原则
  • 便于在遗传算法中利用所求解问题的专门知识
  • 便于遗传算法与相关近似算法之间的混合使用。

排列编码法

含义:
排列编码也叫序列编码,是针对一些特殊问题的特定编码方式。该编码方式将有限集合内的元素进行排列。若集合内包含m个元素,则存在m!种排列方法,当m不大时,m!也不会太大,穷举法就可以解决问题。当m比较大时,m!就会变得非常大,穷举法失效,遗传算法在解决这类问题上具有优势。
优点:
排序编码使问题简洁,易于理解。如需要解决上面说的排列问题(如解决TSP问题)时,用排列编码自然、合理。

其他编码方式

如复数编码、DNA编码、多参数级联编码等等,不常用,在此不一一展开。

遗传算法(二)——编码相关推荐

  1. CSR8670/8675 发射(TX SOURCE)一拖二 编码 格式APTX APTXLL APTXHD SBC

    CSR8670/8675 发射(TX SOURCE)默认支持一拖二. 但一拖二不支持APTXLL.目前已经通过自己修改DSP在一拖二情况下支持APTXLL. 可以针对不同的编码格式做不同的指示,便于用 ...

  2. 初识遗传算法(二): 适应度地形与协同进化

    上一节讲了遗传算法的基本概念和一些专有名词,这一节谈谈适应度地形和协同进化 1.适应度地形(fitness landscape) 1.1适应度地形的定义 适应度地形(fitness landscape ...

  3. 遗传算法---实数编码方式

    问题:求f(x)=x+10*sin(5x)+7*cos(4x)最大值, 0<=x<=9 新建输入文件gadata.txt,内容为: 0, 9 表示变量x的下界和上界. 新建日志文件galo ...

  4. 遗传算法求解3D打印中零件二维排布问题(MATLAB实现)

    目录 遗传算法求解3D打印中零件二维排布问题(MATLAB实现) 一.遗传算法简介 二.排样方法 1.二维不规则排样 2.编码及解码方式 三.遗传算法求解 1.算法建模 2.遗传算子 选择算子 交叉算 ...

  5. 遗传算法二进制编码c语言,遗传算法,实数编码的交叉操作之SBX(模拟二进制交叉)...

    本文主要介绍遗传算法(实数编码)的交叉操作中的SBX,模拟二进制交叉. 首先,给出个人用python2.7实现的代码,具体模块已上传到: https://github.com/guojun007/sb ...

  6. 优化算法(二)遗传算法及python实现

    文章目录 1. 基本原理 1.1 生物启示 1.2 基本思想 1.3 组成要素 1.3.1 编码方式 1.3.2 适应度函数 1.3.3 选择方式 1.3.4 交叉和变异 1.3.5 算法终止方式 1 ...

  7. 遗传算法,vector

    小袋鼠你往哪儿跳--遗传算法 基础及其本质 有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方.这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰.但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠,并希望存活下来 ...

  8. 使用遗传算法实现迷宫游戏(genetic maze)

    强烈推荐一本书 <游戏编程中的人工智能技术>(AI.Techniques.for.Game.Programming).(美)Mat.Buckland 一.缘起 在之前的c印记系列当中有有一 ...

  9. 遗传算法求解TSP问题(matlab实现)

    一.问题描述 旅行商问题(TSP)解决的是,假设有一个人要拜访N个城市,要求他从一个城市出发,每个城市都要拜访一次,最后再回到最初的城市,保证所选择的路径长度最短.这是一个典型的NP难问题.用数学的方 ...

  10. 基于模板匹配和遗传算法的人眼定位

    基于模板匹配和遗传算法的人眼定位 余甜甜,唐普英(电子科技大学光电信息学院,四川成都6l0054) 摘要:文中提出了一种利用模板匹配与遗传算法相结合的人眼定位算法.根据人脸几何特征将人脸分为几个特征区 ...

最新文章

  1. 这个图片转文字功能搞一下?还好这个开源项目救了我!
  2. ssh服务常见问题及其解决办法
  3. .net 开发人员当前必须掌握的技术
  4. GDI文字旋转90度
  5. 通常每个套接字地址只允许使用一次
  6. 生命大发的意义 BY 几米
  7. SecureCRT使用技巧连载
  8. 飞秋mac版字符乱码_Mac必装软件推荐,下载方法也给你了。
  9. BZOJ4898/5367 Apio2017商旅(分数规划+floyd)
  10. 39. 后台模块开发(4)
  11. 局部内部类使用局部变量应注意什么?
  12. linux7 iperf,CentOS 7下安装Iperf
  13. 操作系统--进程和线程
  14. 华为鸿蒙智慧屏和手机,【荣耀智慧屏评测】鸿蒙初体验:荣耀智慧屏跨系统交互构建新生态(全文)_荣耀 智慧屏_手机评测-中关村在线...
  15. Urchin.exe使用说明
  16. 微信H5授权用户和公众号关注用户区别
  17. 历史记录---4月6日
  18. 请简述独占设备的分配过程。
  19. Overleaf如何使用中文(亲测有效)
  20. 根据日期获取农历节日

热门文章

  1. 上海七宝惊现海宝美眉
  2. 收益率的分解 无风险利率
  3. 大学生最好用搜题的APP,个人开发的,吊打一切搜题软件
  4. 笔记本合上盖子不能从睡眠中唤醒解决办法
  5. IDEA安装流程(dear dad级教程)
  6. 寒江独钓 Windows内核安全编程
  7. 最新全国姓名报告出炉!
  8. 使用EasyExcel的坑
  9. 【个人记录 | 研二预答辩】
  10. Android 的Recovery机制