博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
遗传算法
阅读量:5153 次
发布时间:2019-06-13

本文共 1593 字,大约阅读时间需要 5 分钟。

遗传算法

The survival of the fittest

达尔文生物进行论

孟德尔遗传定律

1962年,美国Michigan大学的Holland教授提出的模拟生物进化及遗传机制而成的一种并行随机搜索最优化算法.

1975年,Holland出版了第一本系统论述遗传算法和人工自适应系统的专著《Adaptation

in Natural and Artificial Systems》。20世纪80年代,Holland教授实现了第一个基于遗传算法的机器学习系统—分类器系统,开创了基于遗传算法的机器学习的新概念。

1989年,Goldberg出版了专著《搜索、优化和机器学习中的遗传算法》,该书全面地论述了遗传算法的基本原理及其应用,奠定了现代遗传算法的科学基础。

1991年,Davis编辑出版了《遗传算法手册》一书,为推广和普及遗传算法的应用起到了重要的指导作用

遗传算法是一种优化算法, 能够在很快的时间给出一个足够好的结果, 如NP-hard 问题, 这种传统方法很难解决的问题. 而且遗传算法对目标函数不做苛刻假设, 如可微, 二阶可导等.

其基本思想 是将自然界当中的'优胜劣汰,适者生存'的进化法则,引入优化算法中, 并结合遗传学中的遗传,变异定律, 经过不断迭代,最后最到足够好的结果.

种群(population) : 是优化问题解的集合(子集).

个体(individual) 每一

染色体(chromosome)

基因(gene)

基因座(locus): 基因座 基因所在染色体位置

等位基因(Allele) : 可以出现在同一基因座的基因,

选择(selection)(或复制 (reproduction)):

复制是从一个旧种群中选择生命力强的个体产生新种群的过程, 具有高适应度的个体更有可能在下一代中产生一个或多个子孙.

交叉(crossover) 交叉模拟生物进化过程中的繁殖现象,通过两个染色体的交换组合, 来产生新的优良品种.

突变(mutation)

变异运算用来模拟生物在自然的遗传环境中由于各种偶然因素引起的基因突变, 它以很小的概率随机地改变遗传基因.

遗传算法的特点:

  1. 遗传算法是对参数的编码进行操作,而非对参数本身,这就是使得我们在优化计算过程中可以借鉴生物学中染色体和基因等概念.
  2. 遗传算法同时使用多个搜索点的搜索信息。不同于传统优化方法的从解空间单个初始点开始最优解的迭代搜索过程, 便于并行运算.
  3. 遗传算法直接以目标函数作为搜索信息
  4. 遗传算法使用概率搜索技术。遗传算法的选择、交叉、变异等运算都是以一种概率的方式来进行的,因而遗传算法的搜索过程具有很好的灵活性
  5. 遗传算法在解空间进行高效启发式搜索,而非盲目地穷举或完全随机搜索

遗传算法

遗传算法 设计一般分成几个部分:

编码方案:编码表示方式。

适应度函数:目标函数。

选择策略:优胜劣汰。

控制参数:种群的规模、算法执行的最大代数、执行不同遗传操作的概率等。

遗传算子:选择(selection);交叉(crossover);变异(mutation)。

算法的终止准则:规定一个最大的演化代数,或算法在连续多少代以后解的适应值没有改进。

遗传算法的五个基本要素:

参数编码

初始群体的设定

适应度函数的设计

遗传操作设计

控制参数设定

遗传算法的设计框架:

  1. 初始化: 初始化种群;
  2. 适应度计算计算每个个体的适应值;
  3. 终止判断: 根据终止条件判断是否终止, 如果是执行第 7 步,否则执行下一步;
  4. 选择: 根据适应度及其相关规则选择进入下一代的个体;
  5. 交叉: 根据交叉规则进行交叉操作;
  6. 突变: 根据突变规则进行突变操作,并返回第二步;
  7. 输出当前最优解
    1034295-20171022205927037-1822442302.png

转载于:https://www.cnblogs.com/vpegasus/p/genetic_algorithm.html

你可能感兴趣的文章
表单提交中的input、button、submit的区别(转来学习)
查看>>
java字符串分割的小练习
查看>>
冬雷震震
查看>>
SYSU每周一赛(13.03.16)1002
查看>>
初步了解 Dubbo 初始化,加载
查看>>
Python3网络爬虫——一、什么是爬虫
查看>>
Array.from()和Array.of()
查看>>
10.17-JavaScript
查看>>
网络通讯框架MINA和XSCOCKET的简单比较
查看>>
【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例...
查看>>
Opencv on Ubuntu (from Ubuntu)
查看>>
从Ubuntu12.04升级到Ubuntu 14.04之后,系统将无法启动
查看>>
Redis源代码分析(十)--- testhelp.h小测试框架和redis-check-aof.c日志检测
查看>>
屏幕分辨率(QQVGA、QVGA、VGA、XGA、WXGA、WUXGA和WSXGA+)
查看>>
OpenStreetMap初探(一)——了解OpenStreetMap
查看>>
ubuntu下安装xlrd模块,Mysqldb模块
查看>>
sql语句查询数据库中的表名/列名/主键/自动增长值
查看>>
视觉slam领域经典综述和具体应用场景
查看>>
oracle语法查某个字段为空
查看>>
(转载)DevExpress ASPxGridView 使用文档三:编辑
查看>>