参考文献:MATLAB遗传算法工具箱及应用

遗传算法是1962年由美国

Michigon大学的John

Holland教授提出的模拟自然界遗传机制和生物进化论而成的一种并行的随机搜索最优化方法。

关键词:个体,染色体,基因,适应性,群体,种群,交叉,变异。

遗传算法的基本操作:选择,交叉,变异。

1.选择(复制)是从一个旧种群中选择生命力强的个体产生新种群的过程。复制能从旧种群选择出优秀者,但不能创造新的染色体。

2.交叉通过两个染色体的交换组合,来产生新的优良品种。交叉的过程:任意选两个染色体,随机选择一点或多点交换点位置,交换双亲染色体交换点右边的部分。

3.变异以很小的概率随机地改变遗传基因的值。在染色体以二进制编码的系统中,它随机地将染色体的某一基因由1变为0,或由0变为1。(防止陷入局部解而终止过程)

遗传算法的特点:

1 遗传算法是对参数的编码进行操作,而非对参数本身;

2 并行性:同时使用多个搜索点的搜索信息。(单个搜索点提供的信息不多,搜索效率不高,甚至使搜索过程局限于局部最优解)

3 遗传算法直接以目标函数作为搜索信息。不需要导数值等辅助信息。也不要求函数连续,可微。

注意:

1.群体规模的选择:规模越大,多样性越高,陷入局部解的危险越小;太大的话计算量增加,效率降低。

2.对于一些多维、高精度要求的连续函数优化问题,使用二进制编码来表示个体时将会有一些不利之处

。二进制编码存在着连续函数离散化时的映射误差。个体长度较短时,可能达不到精度要求,而个体编码长度较长时,虽然能提高精度,但却使遗传算法的搜索空间急剧扩大。

遗传算法的具体例证

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

第二步:建立优化模型

第三步:确定编码方法

将变量转换成二进制串。串的长度取决于所要求的精度。如果变量x的区间是[a,b],要求的精度是小数点后4位,也就意味着每个变量应该被分成至少(b-a)*104个部分。用下面的公式确定二进制串的位数m:

2m-1<(b-a)*104<2m-1.

第四步:确定解码

X(实际值)=a+de(x)*(b-a)/(2m-1)

de(x)为二进制x的十进制数。

初始种群

U1=[000001010100101001101111011111110]

U2=[001110101110011000000010101001000]

U3=[111000111000001000010101001000110]

U4=[100110110100101101000000010111001]

U5=[000010111101100010001110001101000]

U6=[111110101011011000000010110011001]

U7=[110100010011111000100110011101101]

U8=[001011010100001100010110011001100]

U9=[111110001011101100011101000111101]

U10=[111101001110101010000010101101010]

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

第六步:设计遗传算子和确定遗传算法的运行参数。

轮盘赌算法:

生成一个 [0,1]间的随机数r;如果r大于染色体的累计概率,就选择该染色体。

依次转动轮盘10次。

得到新的种群:

U1(U4)=[100110110100101101000000010111001]

U2(U4)=[100110110100101101000000010111001]

U3(U8)=[

001011010100001100010110011001100]

U4(U9)=[

111110001011101100011101000111101]

U5(U4)=[

100110110100101101000000010111001]

U6(U7)=[

110100010011111000100110011101101]

U7(U2)=[

001110101110011000000010101001000]

U8(U4)=[

100110110100101101000000010111001]

U9(U1)=[

000001010100101001101111011111110]

U10(U2)=[

001110101110011000000010101001000]

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

随机选择一个染色体串的节点,然后交换两个父辈节点右端部分来产生子辈。

假设交叉概率为p=25%,即在平均水平上有25%的染色体进行了交叉。过程如下:

开始

当k=<10时继续

产生一个[0,1]间的随机数r

如果r<0.25,则

选择Uk为交叉的一个父辈;

结束

K=k+1;

结束

结束

假设随机数如下:

0.625721 0.266823 0.288644 0.295114 0.163274 0.567461 0.08594 0.392865 0.770714 0.548656

那么,就意味着染色体U5和U7被选中作为交叉的父辈。之后随机选择一个[1,32]间的证书作为交叉点。

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

将变异概率设为p=0.01,就是说,希望在平均水平上,种群内所有的基因的1%要进行变异。在本例中,共有33*10=330个基因。因此,我们要生成一个位于[0,1]间的随机数洗了rk(k=1,..,330)。

至此,完成了遗传算法第一代的流程。

遗传算法多维matlab,MATLAB遗传算法相关推荐

  1. Matlab实现遗传算法(附上完整仿真源码)

    遗传算法(Genetic Algorithm,GA)是一种基于生物进化理论的优化算法,通过模拟自然界中的遗传过程,来寻找最优解. 在遗传算法中,每个解被称为个体,每个个体由一组基因表示,每个基因是解空 ...

  2. 遗传算法实现图像分割(MATLAB)

    本文是对于Omar Banimelhem and Yahya Ahmed Yahya 发表论文<Multi-Thresholding Image Segmentation Using Genet ...

  3. 基于Matlab的遗传算法程序设计及优化问题求解

    FPGA教程目录 MATLAB教程目录 ----------------------------------------------------------------------- 遗传算法(Gen ...

  4. 【GA MTSP】基于matlab GUI遗传算法求解多旅行商问题(多起点不同终点)【含Matlab源码 935期】

    一.TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选择 ...

  5. Matlab 基于遗传算法优化的VMD信号去噪算法 创新点:基于样本熵作为适应度函数

    Matlab 基于遗传算法优化的VMD信号去噪算法 创新点:基于样本熵作为适应度函数 创新点2:基于信噪比作为适应度函数 提高信噪比 本人研究方向信号处理特征提取与故障诊断算法 ID:34506686 ...

  6. 从Matlab实例学习遗传算法

    文章目录 前言 问题背景 遗传算法 Matlab实例代码 附录 君主方案 遗传算法解决旅行商问题 前言 本文旨在使用智能优化算法及其MATLAB实例(第2版) 一书中的例子,来透彻理解遗传算法的本质. ...

  7. 【老生谈算法】matlab实现遗传算法求解TSP问题——TSP问题

    遗传算法求解TSP问题MATLAB实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]遗传算法求解TSP问题MATLAB实现 ...

  8. 遗传算法原理简介及其MATLAB实践

    目录 遗传算法简介 遗传算法的深入理解: 遗传算法的MATLAB实现 [例]BP神经网络初始权值和阈值优化 遗传算法简介 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理 ...

  9. MATLAB编写遗传算法求解vrp问题

    MATLAB编写遗传算法求解vrp问题 vrp问题是有载重限制的物流配送线路优化问题,详细可表述为:有1个配送中心,向m个客户点送货,从配送中心出发,货物不足时回配送中心装货,配送完成后回到配送中心. ...

  10. 无功优化的matlab程序,遗传算法的无功优化matlab实现

    [实例简介] 基于遗传算法的无功优化matlab实现方法软件包,调试基本通过,可直接下载应用,具体例子可以自己修改一下原代码. [实例截图] [核心代码] matlab实现方法软件包,调试基本通过,可 ...

最新文章

  1. QCopChannel的用法
  2. 在2019年,如何成为更好的Node.js开发者?
  3. LeetCode OJ 113. Path Sum II
  4. 29. Divide Two Integers
  5. 如何处理错误消息Please install the Linux kernel header files
  6. Java进阶之光!java字符串类型转换为int
  7. iref streams_如何利用Neo4j Streams并建立即时数据仓库
  8. Linux中常用命令(文件与目录)
  9. CSS中加号、星号及其他符号的作用
  10. c fscanf 按行读取文件_每日干货丨C语言文件操作函数
  11. Idea启动报错 Error:java: System Java Compiler was not found in classpath
  12. 利用对象字面量创建对象
  13. Apache POI (JAVA处理Office文档的类库)
  14. Ruby Numeric
  15. 数据治理:数据血缘关系分析
  16. HTC ONE X(G23)官方解锁教程
  17. 数学——每日一题6 1.13 利用定积分的定义求极限
  18. 【菜鸟C++学习杂记】ASCII码转换和显示
  19. 面对电车难题,自动驾驶会怎么选?
  20. 概率论与数理统计-离散型随机变量基础知识

热门文章

  1. netty和dubbo的hashwheel时间轮定时器原理和源码解析
  2. scv文件单元格内存在换行符
  3. arduino使用BCD电波对时模块获取时间
  4. 这些年,这些ACM大佬-杜瑜皓访谈
  5. 零基础一周学会PIC单片机视频教程
  6. 用电信息采集系统常见故障
  7. MX160煲机音乐的选择
  8. html木马制作教程,利用Internet Explorer Object Data漏洞制做全新网页木马
  9. MFC使用多线程_beginthread函数控制进度条和文本控件
  10. 用NBSI进行SQL注入***分析及安全解决方案