遗传算法(Genetic Algorithm,GA)最早是由美国的 John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。该算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的优化结果。遗传算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。[1]

中文名

遗传算法

外文名

Genetic Algorithm[1]

基本概念

是一类借鉴生物界的进化规律设计的算法[1]基本操作算子

选择、杂交、变异[1]

特    点

模拟自然进化搜索最优解[1]

应    用

组合优化、人工生命等[1]

遗传算法简介

编辑

语音

遗传算法的起源可追溯到20世纪60年代初期。1967年,美国密歇根大学J. Holland教授的学生 Bagley在他的博士论文中首次提出了遗传算法这一术语,并讨论了遗传算法在博弈中的应用,但早期研究缺乏带有指导性的理论和计算工具的开拓。1975年, J. Holland等提出了对遗传算法理论研究极为重要的模式理论,出版了专著《自然系统和人工系统的适配》,在书中系统阐述了遗传算法的基本理论和方法,推动了遗传算法的发展。20世纪80年代后,遗传算法进入兴盛发展时期,被广泛应用于自动控制、生产计划、图像处理、机器人等研究领域。[1]

遗传算法基本框架

编辑

语音

遗传算法编码

由于遗传算法不能直接处理问题空间的参数,因此必须通过编码将要求解的问题表示成遗传空间的染色体或者个体。这一转换操作就叫做编码,也可以称作(问题的)表示(representation)。[2]

评估编码策略常采用以下3个规范:[2]

a)完备性(completeness):问题空间中的所有点(候选解)都能作为GA空间中的点(染色体)表现。[2]

b)健全性(soundness): GA空间中的染色体能对应所有问题空间中的候选解。[2]

c)非冗余性(nonredundancy):染色体和候选解一一对应。[2]

遗传算法适应度函数

进化论中的适应度,是表示某一个体对环境的适应能力,也表示该个体繁殖后代的能力。遗传算法的适应度函数也叫评价函数,是用来判断群体中的个体的优劣程度的指标,它是根据所求问题的目标函数来进行评估的。[2]

遗传算法在搜索进化过程中一般不需要其他外部信息,仅用评估函数来评估个体或解的优劣,并作为以后遗传操作的依据。由于遗传算法中,适应度函数要比较排序并在此基础上计算选择概率,所以适应度函数的值要取正值。由此可见,在不少场合,将目标函数映射成求最大值形式且函数值非负的适应度函数是必要的。[2]

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

a)单值、连续、非负、最大化[2]

b) 合理、一致性[2]

c)计算量小[2]

d)通用性强。[2]

在具体应用中,适应度函数的设计要结合求解问题本身的要求而定。适应度函数设计直接影响到遗传算法的性能。[2]

遗传算法初始群体选取

遗传算法中初始群体中的个体是随机产生的。一般来讲,初始群体的设定可采取如下的策略:[2]

a)根据问题固有知识,设法把握最优解所占空间在整个问题空间中的分布范围,然后,在此分布范围内设定初始群体。[2]

b)先随机生成一定数目的个体,然后从中挑出最好的个体加到初始群体中。这种过程不断迭代,直到初始群体中个体数达到了预先确定的规模。[2]

遗传算法运算过程

编辑

语音

遗传算法的基本运算过程如下:[2]

(1)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。[2]

(2)个体评价:计算群体P(t)中各个个体的适应度。[2]

(3)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。[2]

(4)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。[2]

(5)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。[2]

(6)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。[2]

遗传操作包括以下三个基本遗传算子(genetic operator):选择(selection);交叉(crossover);变异(mutation)。[1]

遗传算法选择

从群体中选择优胜的个体,淘汰劣质个体的操作叫选择。选择算子有时又称为再生算子(reproduction operator)。选择的目的是把优化的个体(或解)直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的,常用的选择算子有以下几种:适应度比例方法、随机遍历抽样法、局部选择法。[2]

遗传算法交叉

在自然界生物进化过程中起核心作用的是生物遗传基因的重组(加上变异)。同样,遗传算法中起核心作用的是遗传操作的交叉算子。所谓交叉是指把两个父代个体的部分结构加以替换重组而生成新个体的操作。通过交叉,遗传算法的搜索能力得以飞跃提高。[1]

遗传算法变异

变异算子的基本内容是对群体中的个体串的某些基因座上的基因值作变动。依据个体编码表示方法的不同,可以有以下的算法:[1]

a)实值变异。[1]

b)二进制变异。[1]

一般来说,变异算子操作的基本步骤如下:[1]

a)对群中所有个体以事先设定的变异概率判断是否进行变异[1]

b)对进行变异的个体随机选择变异位进行变异。[1]

遗传算法引入变异的目的有两个:一是使遗传算法具有局部的随机搜索能力。当遗传算法通过交叉算子已接近最优解邻域时,利用变异算子的这种局部随机搜索能力可以加速向最优解收敛。显然,此种情况下的变异概率应取较小值,否则接近最优解的积木块会因变异而遭到破坏。二是使遗传算法可维持群体多样性,以防止出现未成熟收敛现象。此时收敛概率应取较大值。[1]

遗传算法终止条件

当最优个体的适应度达到给定的阈值,或者最优个体的适应度和群体适应度不再上升时,或者迭代次数达到预设的代数时,算法终止。预设的代数一般设置为100-500代。[1]

遗传算法特点

编辑

语音

遗传算法是解决搜索问题的一种通用算法,对于各种通用问题都可以使用。搜索算法的共同特征为:[3]

(1) 首先组成一组候选解[3]

(2)依据某些适应性条件测算这些候选解的适应度[3]

(3)根据适应度保留某些候选解,放弃其他候选解[3]

(4) 对保留的候选解进行某些操作,生成新的候选解。[3]

在遗传算法中,上述几个特征以一种特殊的方式组合在一起:基于染色体群的并行搜索,带有猜测性质的选择操作、交换操作和突变操作。这种特殊的组合方式将遗传算法与其它搜索算法区别开来。[3]

遗传算法还具有以下几方面的特点:[3]

(1)算法从问题解的串集开始搜索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,覆盖面大,利于全局择优。[3]

(2)遗传算法同时处理群体中的多个个体,即对搜索空间中的多个解进行评估,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。[3]

(3)遗传算法基本上不用搜索空间的知识或其它辅助信息,而仅用适应度函数值来评估个体,在此基础上进行遗传操作。适应度函数不仅不受连续可微的约束,而且其定义域可以任意设定。这一特点使得遗传算法的应用范围大大扩展。[3]

(4)遗传算法不是采用确定性规则,而是采用概率的变迁规则来指导他的搜索方向。[3]

(5)具有自组织、自适应和自学习性。遗传算法利用进化过程获得的信息自行组织搜索时,适应度大的个体具有较高的生存概率,并获得更适应环境的基因结构。[3]

(6)此外,算法本身也可以采用动态自适应技术,在进化过程中自动调整算法控制参数和编码精度,比如使用模糊自适应法。[3]

遗传算法不足之处

编辑

语音

(1)编码不规范及编码存在表示的不准确性。[2]

(2)单一的遗传算法编码不能全面地将优化问题的约束表示出来。考虑约束的一个方法就是对不可行解采用阈值,这样,计算的时间必然增加。[2]

(3)遗传算法通常的效率比其他传统的优化方法低。[2]

(4)遗传算法容易过早收敛。[2]

(5)遗传算法对算法的精度、可行度、计算复杂性等方面,还没有有效的定量分析方法。[2]

遗传算法应用

编辑

语音

由于遗传算法的整体搜索策略和优化搜索方法在计算时不依赖于梯度信息或其它辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学,下面我们将介绍遗传算法的一些主要应用领域:[4]

遗传算法函数优化

函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果。[4]

遗传算法组合优化

随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。例如遗传算法已经在求解旅行商问题、 背包问题、装箱问题、图形划分问题等方面得到成功的应用。[4]

此外,GA也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。[4]

遗传算法车间调度

车间调度问题是一个典型的NP-Hard问题,遗传算法作为一种经典的智能算法广泛用于车间调度中,很多学者都致力于用遗传算法解决车间调度问题,现今也取得了十分丰硕的成果。从最初的传统车间调度(JSP)问题到柔性作业车间调度问题(FJSP),遗传算法都有优异的表现,在很多算例中都得到了最优或近优解。[5]

词条图册

更多图册

参考资料

1.

郑树泉.工业智能技术与应用[M].上海:上海科学技术出版社,2019:250-251

2.

王铁方.计算机基因学 基于家族基因的网格信任模型[M].北京:知识产权出版社,2016:93-94

3.

陶经辉,王声绪,徐标.集装箱港口智能化管理优化策略[M]:中国财富出版社,2016:61-63

4.

王彦辉,王敬敏.电力系统安全风险评估及应急管理[M]:中国质检出版社,2017:92-93

5.

李德毅,于剑,中国人工智能学会.中国科协新一代信息技术系列丛书 人工智能导论[M].北京:中国科学技术出版社,2018:73-82

遗传算法占用计算机空间,遗传算法相关推荐

  1. 遗传算法占用计算机空间,遗传算法综述摘要.doc

    随着经济社会的迅猛发展, 人类科学研究与生产活动的广度与深度都大大拓展了,其中涌现出的大量具有各种非线性.不确定.不能精确解析以及建模机理复杂的新课题对信息与控制科学提出了前所未有的挑战.正是在这种背 ...

  2. Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法

    Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法 系统环境版本 排除问题过程 解决问题 总结 不知从何时开始,电脑就不定期变的非常卡,尤其是笔者平时不关机,下班都是按 ...

  3. 遗传算法(四)——遗传算法的基本实现技术

    目录 3.遗传算法的基本实现技术 3.1编码方法 3.1.1二进制编码方法 3.1.2格雷码编码方法 3.1.3浮点数编码方法 3.1.4 符号编码方法 3.2适应度函数 3.2.1目标函数与适应度函 ...

  4. 如何占用计算机内存,怎么减少电脑内存被占用

    我们一直在讨论如何加快电脑的运行速度,一直用清理系统垃圾,清理磁盘空间等各种各样的方法减轻电脑的负担,但是实际上,影响电脑运行速度的因素,其实就集中在CPU.硬盘以及内存三个条件上.今天学习啦小编要讲 ...

  5. 遗传算法c语言程序,遗传算法c语言代码.doc

    遗传算法c语言代码 遗传算法代码 #include #include #include #include #include struct group //染色体的结构 { int city[citie ...

  6. docker 占用磁盘空间清理 无用数据卷删除

    目录 1.删除未被任何容器使用的本地卷 2. Docker System命令 3. 手动清理Docker镜像/容器/数据卷 3. 限制容器的日志大小 4. 重启Docker 1.删除未被任何容器使用的 ...

  7. 找出占用磁盘空间最大的前10个文件或文件夹

    找出占用磁盘空间最大的前10个文件或文件夹 法1: # du -a /var | sort -n -r | head -n 10 法2: 如果需要输出可读性高的内容,请使用如下命令: $ cd /pa ...

  8. [工具]-电脑磁盘爆满了,但又不知道哪些文件占用的空间,怎么办?

    电脑磁盘爆满了,但又不知道哪些文件占用的空间,怎么办? 使用一款 SpaceSniffer的软件(无需安装) 就可以把文件所占的大小可视化,这样就知道哪些文件占用的存储了,然后再去手动删除 磁盘爆满如 ...

  9. HBase oldWALs目录文件剧增占用磁盘空间问题

    出现问题原因: 当/hbase/WALs中的HLog文件被持久化到存储文件中,且这些Hlog日志文件不再被需要时,就会被转移到{hbase.rootdir}/oldWALs目录下,该目录由HMaste ...

  10. C++对象模型探索 / 普通类对象占用的空间

    一.空类的大小 #include <iostream>class A{};int main() {A obja;std::cout << "obja 的地址:&quo ...

最新文章

  1. 分布式锁的实现方式——ACID数据库、缓存或者是zk
  2. elasticsearch mapping之store
  3. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8700系列电磁流量计和传感器的几种类型!...
  4. pandas之数据结构
  5. [css] 说下line-height三种赋值方式有何区别?
  6. Django:ORM基本操作-CRUD,管理器对象objects,----->删除:删除单个数据,删除批量数据
  7. Spring Boot学习总结(1)——Spring Boot入门
  8. windows上怎么用libnfc的库函数编程
  9. Linux安装GCC方法—简洁版
  10. 关于fragstats内存问题
  11. Jquery提交表单(通过添加button的click事件)
  12. win7美化_win7/8/10桌面插件美化
  13. 企业网络冗余技术(EthernetChannel、HSRP、VRRP)
  14. LOJ-10105(欧拉回路模板,套圈法,递归)
  15. C语言项目-后宫选妃系统-第三天-终结
  16. 架构师说低代码:走出半生,归来仍是“毒瘤”!
  17. python编程题3.5:恺撒密码
  18. 1010 -- 青蛙的约会
  19. shopee上架接口java_Shopee虾皮店小秘ERP刊登发布产品图文教程
  20. 自制Chrome绿色版

热门文章

  1. Python计算股票收益率、Alpha和Beta系数
  2. 黑莓开发新手入门教学帖,如何制作一个能控制LED颜色的程序(一)
  3. java jbutton方法_java-如何设置JButton的大小?
  4. lms自适应算法c语言,LMS算法(LMS自适应算法)
  5. Au入门系列之九:多轨混音
  6. Lua里面new一个对象详细步骤
  7. 导航鼠标悬停变色--H5+css
  8. HTML当前标签鼠标停留下划线和变色效果
  9. 短视频从业者实操资料大全(含代运营案例+报价单+合同协议 +分镜头脚本+管理运营)共180份
  10. 【四足机器人--支撑相足端反作用力预测】(5)ConvexMPCLocomotion代码解析