【课】人工智能第八讲_遗传算法及其应用
遗传算法及其应用
基本遗传算法
受自然界和生物界规律的启迪,人们根据其原理模仿设计了许多求解问题的算法,包括人工神经网络、模糊逻辑、遗传算法、DNA计算、模拟退火算法、禁忌搜索算法、免疫算法、膜算法、量子计算、粒子群优化算法、蚁群算法、人工蜂群算法、人工鱼群算法以及细菌群体优化算法等,这些算法称为智能计算也称为计算智能
主要介绍智能优化方法当中的进化计算的和群智能当中的算法
遗传算法(genetic algorithms,GA)
一类借鉴生物界自然选择和自然遗传机制的随机搜索算法,非常适用于处理传统搜索方法难以解决的复杂和非线性优化问题。
遗传算法可广泛应用于组合优化、机器学习、自适应控制、规划设计、人工生命等领域。
| 生物遗传概念 | 遗传算法中的应用 |
|---|---|
| 适者生存 | 目标值比较大的解被选择的可能性大 |
| 个体 | 解 |
| 染色体 | 解的编码(字符串、向量等) |
| 基因 | 解的编码中的每一分量 |
| 适应性 | 适应度函数值 |
| 群体 | 根据适应度值选定的一组解(解的个数为群体的规模) |
| 婚配 | 交叉选择两个染色体进行交叉产生一组新的染色体的过程 |
| 变异 | 编码的某一分量发生变化的过程 |
遗传算法基本思想
在求解问题时,从多个解开始,然后通过一定的法则进行逐步迭代以产生新的解
| 最优化问题 | 遗传算法 |
|---|---|
| 目标函数 | 适应度函数 |
| 可行解 | 染色体 |
| 一组解 | 种群 |
| 遗传算法得到的是整体水平最优的一组解,各有好的特性,而不是以前最优化方法的单一的最优解 |
发展历史
1962年,Fraser提出了自然遗传算法
1965年,Holland首次提出了人工遗传操作的重要性
1967年,Bagley首次提出了遗传算法这一术语
1970年,Cavicchio把遗传算法应用于模式识别中
1971年,Hollstien在论文《计算机控制系统中人工遗传自适应方法》中阐述了遗传算法用于数字反馈控制的方法
1975年,美国J.Holland出版了《自然系统与人工系统的适配》;标志性成成果,对遗传算法进行了比较大的改进
20世纪80年代以后,遗传算法进入兴盛发展的时期
遗传算法求解过程
st=>start: 问题
e=>end: 输出最优解
op1=>operation: 确定表示问题解答的染色体(编码)
op2=>operation: 初始化染色体种群
op3=>operation: 计算每个个体的适应值
op4=>operation: 根据适应值选择串进行复制
op5=>operation: 交叉
op6=>operation: 变异
cond=>condition: 满足终止条件
st->op1->op2->op3->cond
cond(no)->op4->op5->op6(left)->cond
cond(yes,right)->e
遗传算法的特点
遗传算法是一种全局优化概率算法,主要特点有:
- 遗传算法对所求解的优化问题没有太多的数学要求,由于进化特性,搜索过程中不需要问题的内在性质,无论是线性的还是非线性的,离散的还是连续的都可处理,可直接对结构对象进行操作。
利用随机技术指导对一个被编码的参数空间进行效率搜索。采用群体搜索策略,易于并行化。
仅用适应度函数值来评估个体,并在此基础上进行遗传操作,使种群中个体之间进行信息交换。 - 进化算子的各态历经性使得遗传算法能够非常有效地进行概率意义的全局搜索。
- 遗传算法对于各种特殊问题可以提供极大的灵活性来混合构造领域独立的启发式,从而保证算法的有效性
不足之处:不可复现,每次结果不一样。
遗传算法的基本操作
编码
——编码后即可进行一般性操作,与具体问题无关,形成一般性的方法,从而能用在工程学上。
- 位串编码
- 一维染色体编码方法
将问题空间的参数编码为一维排列的染色体的方法。- 二进制编码:
用若干二进制数表示一个个体,将原问题的解空间映射到位串空间B={0,1}上,然后在位串空间上进行遗传操作
优点:类似于生物染色体的组成,最接近生物,算法易于用生物遗传理论解释,遗传操作如交叉、变异等易实现;算法处理的模式数最多。
缺点:- 相邻整数的二进制编码可能具有加到的Hamming距离,降低了遗传算子的搜索效率。15:01111 16:10000
- 要先给出求解的精度。
- 求解高维优化问题的二进制编码串长,算法的搜索效率低。
- Gray编码:
将二进制编码通过一个变换进行转换得到的编码。
二进制串:\(<\beta_1\beta_2...\beta_n>\)
Gray: \(<\gamma_1\gamma_2...\gamma_n>\)
由二进制编码→Gray编码:
\(\gamma_k=\left\{ \begin{aligned} \beta_1 && k=1\\ \beta_{k-1} \oplus \beta_k && k > 1 \\ \end{aligned} \right.\)
由Gray编码→二进制编码
\(\beta_k=\sum^k_{i=1} \gamma_i(mod 2)\)
- 二进制编码:
- 一维染色体编码方法
- 实数编码(十进制等)
- 采用实数表达法不必进行数制转换,可直接在解的表现型上进行遗传操作
- 多参数映射编码的基本思想:把每个参数先进行二进制编码得到子串,再把这些子串连成一个完整的染色体
- 多参数映射编码中的每个子串对应各自的编码参数,所有,可以有不同的串长度和参数的取值范围。
适应度函数的尺度变换
——解决欺骗问题的一种方法
欺骗问题
在遗传算法中,将所有妨碍适应度值高的个体产生,从而影响遗传算法正常工作的问题统称为欺骗问题。
过早收敛
缩小这些个体的适应度,以降低这些超级个体的竞争力
(即将这些个体间的尺度缩小)
停滞现象
改变原始适应值的比例关系,以提高个体之间的竞争力
(即将这些个体间的尺度拉大)
适应度函数的尺度变换或者定标:
对适应度函数值域的某种映射变换
- 线性变换:\(f^`=af+b\)
(可以不加)为了满足变换前后平均值等保持不变,即
满足\(f^`_{avg}=f_{avg}, f^`_{max}=C_{mult}*f_{avg}\)
\(a=\frac{(C_{mult}-1)f_{avg}}{f_{max}-f_{avg}}\)
\(b=\frac{(f_{max}-C_{mult}f_{avg})f_{avg}}{f_{max}-f_{avg}}\)
要满足最小适应度值非负:
\(a=\frac{f_{avg}}{f_{avg}-f_{min}}\)
\(b=\frac{-f_{min}f_{avg}}{f_{avg}-f_{min}}\) - 非线性变换:
- 幂函数变换法:\(f^`=f^K\)
2.指数变换:\(f^`=e^{-af}\)
- 幂函数变换法:\(f^`=f^K\)
选择
选择操作也称为复制(Reproduction)操作:从当前群体中按照一定概率选出优良的个体,使他们有机会成为父代繁衍下一代子孙。
选择是解决牛顿最初向量法能够收敛到局部最优解的重要策略:保持了解的多样性
判断个体优良与否的准则是各个个体的适应度值:个体适应度越高,其被选择的机会就越多,但不一定最高就被选择
进行选择,需要把适应度转换成被选择的概率。
个体选择概率分配法
- 适应度比例方法或蒙特卡罗法
- 各个个体被选择的概率和其适应度值成比例。
- 个体i被选择的概率为:\(P_{si}=\frac{f_i}{\sum^M_{i=1}f_i}\)
- 问题:当某个体适应度远远超过其他人时,选择概率也会远远超过其他个体
- 排序方法
- 线性排序
- 群体成员按适应值大小从好到坏依次排列:\(x_1,x_2,...,x_N\)
- 个体\(x_i\)分配选择概率\(p_i\)
\(p_i=\frac{a-b_i}{M(M+1)}\) - 按转盘式选择的方式选择父体
- 非线性排序(解决高排位个体优势太小)
- 将群体成员按适应值大小从好到坏依次排列,并按下式分配选择概率:
\(p_i=\left\{ \begin{aligned} q(1-q)^{i-1} && i=1,2,...,M-1\\ (1-q)^{M-1} && i=M \\ \end{aligned} \right.\)
- 将群体成员按适应值大小从好到坏依次排列,并按下式分配选择概率:
- 线性排序
交叉和变异
交叉操作的基本思想:
- 要有父代个体的特点
- 要有自己的特点
基本交叉算子:
- 一点交叉(single-point crossover)
在个体串中随机设定一个交叉点,实行交叉时,该点前或后的两个个体的部分结构进行互换,并生成两个新的个体。
例如,将两个代个体的一个的编码前几位和另一个的后几位连接 - 两点交叉(two-point crossover)
随机设置两个交叉点,将两个交叉点之间的码串相互交换。
相对于一点交叉,更加多样
修正思想
- 保持新个体,不和父代相同
- 合法,编码个数不能增减
修正的交叉方法
部分匹配交叉PMX:
A = 984|567|132
B = 871|239|546
变成
A`= 984|239|132
B`= 871|567|546
变异操作的基本思想
相对于交叉,产生革命性变化,例如,随机变一位,0→1等
变异方法
- 位点变异 -可能产生非法解
群体中的个体码串,随机挑选一个或多个基因座,并对这些基因座的基因值以变异概率作变动。 - 逆转变异
在个体码串中随机选择两点(逆转点),然后将两点之间的基因值以逆向排序插入到原位置 - 插入变异
在个体码串中随机选择一个码,然后将此码插入随机选择的插入点中间 - 互换变异
随机选取染色体的两个基因进行简单互换 - 移动变异
随机选取一个基因,向左或向右移动一个随机位数
遗传算法一般步骤
(再看一遍理解一下)
即下图:
st=>start: 问题
e=>end: 输出最优解
op1=>operation: 确定表示问题解答的染色体(编码)
op2=>operation: 初始化染色体种群
op3=>operation: 计算每个个体的适应值
op4=>operation: 根据适应值选择串进行复制
op5=>operation: 交叉
op6=>operation: 变异
cond=>condition: 满足终止条件
st->op1->op2->op3->cond
cond(no)->op4->op5->op6(left)->cond
cond(yes,right)->e
遗传算法特点
(再看一遍理解一下)
遗传算法是一种全局优化概率算法,主要特点有:
- 遗传算法对所求解的优化问题没有太多的数学要求,由于进化特性,搜索过程中不需要问题的内在性质,无论是线性的还是非线性的,离散的还是连续的都可处理,可直接对结构对象进行操作。
利用随机技术指导对一个被编码的参数空间进行效率搜索。采用群体搜索策略,易于并行化。
仅用适应度函数值来评估个体,并在此基础上进行遗传操作,使种群中个体之间进行信息交换。 - 进化算子的各态历经性使得遗传算法能够非常有效地进行概率意义的全局搜索。
- 遗传算法对于各种特殊问题可以提供极大的灵活性来混合构造领域独立的启发式,从而保证算法的有效性
不足之处:不可复现,每次结果不一样。
------------恢复内容结束------------

浙公网安备 33010602011771号