文章目录

  • 1 概述
  • 2 步骤
    • 2.1 种群初始化
    • 2.2 适应度计算(种群评估)
    • 2.3 筛选
    • 2.4 交叉(交配)运算
    • 2.5 突变
    • 2.6 终止判断
  • 3 代码

1 概述

遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。

参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

2 步骤

2.1 种群初始化

(1)二进制编码

二进制编码的字符串长度与问题所求解的精度有关。需要保证所求解空间内的每一个个体都可以被编码。

优点:编、解码操作简单,遗传、交叉便于实现

缺点:长度大

(2)其他编码方法

格雷码、浮点数编码、符号编码、多参数编码等
我们需要首先通过随机生成的方式来创造一个种群,一般该种群的数量为100~500,这里我们采用二进制将一个染色体(解)编码为基因型。随后用进制转化,将二进制的基因型转化成十进制的表现型。

2.2 适应度计算(种群评估)

这里我们直接将目标函数值作为个体的适应度。
适应度函数要有效反映每一个染色体与问题的最优解染色体之间的差距。

2.3 筛选

根据种群中个体的适应度大小,通过轮盘赌等方式将适应度高的个体从当前种群中选择出来。其中轮盘赌即是与适应度成正比的概率来确定各个个体遗传到下一代群体中的数量。
具体步骤如下:

 (1)首先计算出所有个体的适应度总和Σfi。(2)其次计算出每个个体的相对适应度大小fi/Σfi,类似于softmax。(3)再产生一个0到1之间的随机数,依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。

2.4 交叉(交配)运算

步骤是遗传算法中产生新的个体的主要操作过程,它用一定的交配概率阈值(pc,一般是0.4到0.99)来控制是否采取单点交叉,多点交叉等方式生成新的交叉个体。

 具体步骤如下:(1)先对群体随机配对。(2)再随机设定交叉点的位置。(3)再互换配对染色体间的部分基因。

2.5 突变

该步骤是产生新的个体的另一种操作。一般先随机产生变异点,再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。
避免收敛于一个局部最小值。

2.6 终止判断

如果满足条件(迭代次数,一般是200~500)则终止算法,否则返回step2。
我们首先从函数出发,既然是寻找全局最优解,我们可以想象一个多元函数的图像。遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)

我们从一元函数出发,已知这样一个函数:

3 代码

在matlab下绘制该函数图像 我们可以发现

x=-1:0.01:2;
y=-x.*sin(10*pi*x)+2;
plot(x,y)


我们尝试寻找这个函数在定义域内的最高点和最低点,可以尝试下列几种方法:

既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

下面介绍介绍“袋鼠跳”的几种方式。

爬山算法:一只袋鼠朝着比现在高的地方跳去。它找到了不远处的最高的山峰。但是这座山不一定是最高峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

模拟退火:袋鼠喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高峰跳去。这就是模拟退火算法。

遗传算法:有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

而这里我们使用的就是遗传算法来解决这个问题,首先我们使用matlab中的ga()函数来直接寻找到答案。

关于ga函数就是将上面的算法思想进行封装成的一个函数

function y = simple_fitness(x)y = x*sin(10*pi*x)+2end

ObjectiveFunction = @simple_fitness;
nvars = 1;%变量个数
LB = [-1]%定义域下限
UB = [2]%定义域上限[x,fval] = ga(ObjectiveFunction,nvars,[],[],[],[],LB,UB)%调用ga函数


机器学习(MACHINE LEARNING)MATLAB遗传算法相关推荐

  1. 机器学习(Machine Learning)深度学习(Deep Learning)资料汇总

    本文来源:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...

  2. 机器学习(Machine Learning)深度学习(Deep Learning)资料集合

    机器学习(Machine Learning)&深度学习(Deep Learning)资料 原文链接:https://github.com/ty4z2008/Qix/blob/master/dl ...

  3. (转)机器学习(Machine Learning)深度学习(Deep Learning)资料

    原文链接:https://github.com/ty4z2008/Qix/blob/master/dl.md 机器学习(Machine Learning)&深度学习(Deep Learning ...

  4. Re:从零开始的机器学习 - Machine Learning(一) 线性回归

    从我对整个职业生涯的规划出发,我不仅想做一些高质量的应用(软件工程的角度),还想做一些激动人心的应用,所以我希望能在机器学习的方向走,尽管我在大学粗浅的学了些皮毛,但如果要把机器学习作为职业发展的话这 ...

  5. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics

    数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...

  6. 机器学习(Machine Learning)、深度学习(Deep Learning)、NLP面试中常考到的知识点和代码实现

    网址:https://github.com/NLP-LOVE/ML-NLP 此项目是机器学习(Machine Learning).深度学习(Deep Learning).NLP面试中常考到的知识点和代 ...

  7. fprom预测结果内容_预测模型之机器学习 Machine Learning结果解读篇

    原标题:预测模型之机器学习 Machine Learning结果解读篇 学友提问:对于机器学习出来的只有图形,我怎么解释呢?怎样才能在临床使用呢? 论文的实例:2013年发表在The American ...

  8. 数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么

    数据挖掘(data mining),机器学习(machine learning),和人工智能(AI)的区别是什么? 数据科学(data science)和商业分析(business analytics ...

  9. 机器学习(Machine Learning)深度学习(Deep Learning)资料(Chapter 2)

    机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 2) - tony的专栏 - 博客频道 - CSDN.NET 注:机器学习资料篇目一共 ...

  10. 机器学习Machine Learning

    机器学习Machine Learning 定义(Mitchell 1997):对于某类任务T和性能量度P,一个计算机程序被认为可以从经验E中学习,通过经验E改进后,它在任务T上由性能度量P衡量的性能有 ...

最新文章

  1. adb和adbd详尽分析
  2. 洛谷P2462 [SDOI2007]游戏(哈希+最长路)
  3. 定时任务 - 定时任务弊端与优化方案
  4. Spring 框架核心概念IoC 随笔
  5. DIY逗比的时钟,制作资料100%开源!
  6. 谷歌浏览器怎么禁用flash flash禁用方法分享
  7. VB利用资源文件进行工作
  8. return 1 或 return 0 的作用
  9. mysql取分组最新的一条_基于mysql实现group by取各分组最新一条数据
  10. 计算机老丢失运行库,计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll的修复方案
  11. 文明与征服阵容搭配,文明与征服阵容推荐
  12. 实用工具|零代码实现高德地图POI数据下载
  13. 了解源代码管理工具——Github
  14. 全景故宫--全景图片展现数字故宫
  15. 他预言过Uber的成功、预言过川普的当选,但却预言不了这个!
  16. 携程称将继续参与一嗨私有化 Ocean联合体有33.2%投票权
  17. VREP教程--**BubbleRob tutorial**
  18. ubuntu 安装百度云客户端
  19. Trojan.Win32.Agent.vti的查杀举例
  20. Fluent自定义物理场

热门文章

  1. 一文读懂GAN, pix2pix, CycleGAN和pix2pixHD
  2. python判断灰度图
  3. There was a problem confirming the ssl certificate
  4. torch.randn torch.rand区别
  5. PyTorch 训练加速
  6. torch cpu版加载权重
  7. yolo v3学习笔记
  8. 从零开始PyTorch项目:YOLO v3目标检测实现
  9. 线性代数的本质 - 02 - 线性组合、张成的空间与基
  10. matlab 数组元素连乘积prod