00 前言
各位读者大家好,好久没有介绍算法的推文了,感觉愧对了读者们热爱学习的心灵。于是,今天我们带来了一个神奇的优化算法——遗传算法!
它的优点包括但不限于:
-
遗传算法对所求解的优化问题没有太多的数学要求,由于他的进化特性,搜索过程中不需要问题的内在性质,对于任意形式的目标函数和约束,无论是线性的还是非线性的,离散的还是连续的都可处理。
-
进化算子的遍历性(各态历经性)使得遗传算法能够非常有效地进行概率意义的全局搜素。
-
遗传算法对于各种特殊问题可以提供极大的灵活性来混合构造领域特有的启发式,从而保证算法的有效性
看完了是不是顿时觉得遗传算法很强大呢?
其实遗传算法在我们之前的推文中就已经出现啦,在干货 | 遗传算法(Genetic Algorithm) (附代码及注释)以及干货 | 遗传算法(Genetic Algorithm) Java 详细代码及注释里你都可以学到遗传算法的相关知识。
这次我们要介绍的是遗传算法解决混合流水车间调度问题。需要注意的是,在以上两篇推文中求解的是连续优化问题,采用浮点数编码方式可以更好达到精度和空间要求(具体见两篇推文)。而本文求解的是离散优化问题,使用二进制编码和浮点数编码会存在精度误差,使用符号编码是更好的选择。符号编码法是指个体染色体编码串中的基因值取自一个无数值含义、而只有代码含义的符号集如{A,B,C…}、{1,2,3…}(数字仅表示为符号)、{A1、A2、A3…}等。本文采用了符号编码中的数字符号编码。
废话不多说,我们赶紧来学习一下这么niubility的算法吧~
01 遗传算法
1.1 遗传算法简介
遗传算法(Genetic Algorithm,GA)是一种模拟自然选择和生物进化过程的智能优化算法。在自然界中,自从达尔文提出“优胜劣汰,适者生存”物种进化理论之后,研究学者对生物进化的过程进行了长久而又深远的研究。物种通过母代的繁衍形成新的下一代个体,新一代个体中,大多数个体由于发生染色体交叉过程会与母代类似,少数个体由于发生了变异则与母代不同。大自然作为自然选择的执行者,在生存资源和外界环境的变化、个体不断进行竞争的过程中,将适应能力强的个体留下,而淘汰适应能力差的个