遗传算法解最优化问题
- 与遗传算法的第一次接触
- 遗传算法的基本概念
- 基本定义
- 遗传算法的基本流程
- 遗传算法过程中的具体操作
- 参数的编码
- 二进制编码
- Gray编码
- 实数编码
- 有序编码
- 初始群体的设定
- 适应度函数的计算
- 遗传操作设计
- 选择selection
- 交叉crossover
- 变异mutation
- 控制参数的设定
- 参数的编码
- 求解优化问题的实例
- 问题描述
- 问题分析
- 算法设计
- 个体编码
- 适应值函数
- 选择策略
- 杂交算子
- 变异算子
- 参数设置
- 初始化
- 终止条件
- 实验代码
- 最终结果
与遗传算法的第一次接触 遗传算法是我进入研究生阶段接触的第一个智能算法,从刚开始接触,到后来具体去研究,再到后来利用遗传算法完成了水利水电的程序设计比赛,整个过程中对遗传算法有了更深刻的理解,在此基础上,便去学习和研究了粒子群算法,人工蜂群算法等等的群体智能算法。想利用这个时间,总结下我对于遗传算法的理解,主要还是些基本的知识点的理解。
遗传算法的基本概念 遗传算法(Genetic Algorithm, GA)是由Holland提出来的,是受遗传学中的自然选择和遗传机制启发发展起来的一种优化算法,它的基本思想是模拟生物和人类进化的方法求解复杂的优化问题。
基本定义
- 个体(individual):在遗传学中表示的是基因编码,在优化问题中指的是每一个解。
- 适应值(fitness):评价个体好坏的标准,在优化问题中指的是优化函数。
- 群体(population): 由个体组成的集合
- 遗传操作:遗传操作的主要目的是用于在当前的群体中产生新的群体,主要的操作包括:选择(selection)、交叉(crossover)、变异(mutation)。
基本遗传算法的具体过程如下:
文章图片
遗传算法过程中的具体操作 参数的编码 【遗传算法解最优化问题】遗传算法中的参数编码的方式主要有:1、二进制编码。2、Gray编码。3、实数编码。4、有序编码。
二进制编码
二进制编码是最原始的编码方式,遗传算法最初是在二进制编码的方式下进行运算的。二进制编码也是遗传算法中使用最为直接的运算编码方式。二进制编码是指利用00分别使用二进制位串表示,然后将他们的二进制位串组合在一起。对于每一个变量的二进制位串的长度取决于变量的定义域所要求的精度。
二进制位串的长度的计算方法如下:
假设aj≤xj≤bjaj≤xj≤bj
对于上述的优化问题,假设精度为小数点后44。
Gray编码
这种编码方式在求解优化问题时,本人基本上没做过任何研究。
实数编码
在二进制编码的过程中存在这样的一个问题,即在计算适应值的时候需要将二进制编码转换成十进制的编码进行运算,这样,很显然会想到能否直接使用十进制编码直接进行运算,如上例中的(x1,x2)(x1,x2)这样的编码方式。
有序编码
有序编码主要使用在TSP问题中,
在本文中主要涉及二进制编码和实数编码
。初始群体的设定 在解决了个体的编码问题后,需要解决的问题是如何利用个体表示群体。在上述中,我们知道,群体是个体的集合。假设初始群体的大小为N=20N=20组初始解。
适应度函数的计算 适应度函数的目的是评价个体的好坏,如上面的优化问题中,即为最终的优化目标函数。对于二进制编码,则需要先将二进制编码转换成实数编码,再进行适应值函数的计算,对于实数编码方式,则直接进行适应值函数的计算。
遗传操作设计 遗传操作主要包括:选择(selection)、交叉(crossover)、变异(mutation),遗传操作的主要目的是从当前的群体中产生新的群体,这样便能使得产生新的更优的个体。
选择(selection)
选择操作的目的是选择出父体,用于参加交叉(crossover)和变异(mutation)操作。一般使用较多的方式是轮盘赌的选择策略(Roulette Wheel Selection)。根据每个个体的适应值,计算出相对适应值大小,即:
pi=fi∑fipi=fi∑fi 个父体。轮盘赌的算法过程如下所示:
文章图片
交叉(crossover)
交叉操作也称为杂交,其目的是产生新的个体。
对于二进制编码方式,主要有单点杂交和多点杂交。单点杂交是指在二进制串中随机选择一位,交换两个父体中该位以后的二进制串,用以产生新的个体,操作如下图所示:
文章图片
多点杂交是指在二进制串中选择某几位进行杂交,其中以两点杂交最为常见,其过程如下图所示:
文章图片
具体的操作过程为:设定一个杂交的概率pcpc
变异(mutation)
变异操作的目的是使得基因突变,在优化算法中,可以防止算法陷入局部最优,从而跳出局部最优,帮助算法找到全局最优解。
二进制编码时的变异算子非常简单,只是依一定的概率(称为变异概率)将所选个体的位取反。即若是11具体形式为:
推荐阅读
- parallels|parallels desktop 解决网络初始化失败问题
- 深入理解Go之generate
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 由浅入深理解AOP
- 我们重新了解付费。
- 拍照一年啦,如果你想了解我,那就请先看看这篇文章
- MybatisPlus|MybatisPlus LambdaQueryWrapper使用int默认值的坑及解决
- 画解算法(1.|画解算法:1. 两数之和)
- 逻辑回归的理解与python示例
- Guava|Guava RateLimiter与限流算法