几种常用算法1:爬山算法、退火算法、遗传算法

文章目录

  • 目录

    前言

    一、爬山算法( Hill Climbing )

    二、模拟退火算法(SA,Simulated Annealing)

    2.1 模拟退火算法思想

    2.2 模拟退火算法伪代码

    2.3 使用模拟退火算法解决旅行商问题

    2.4 总结

    三、遗传算法 ( GA , Genetic Algorithm )

    3.1 遗传算法思想

    3.2 遗传算法的伪代码



前言

介绍退火算法和遗传算法。


一、爬山算法( Hill Climbing )

介绍模拟退火前,先介绍爬山算法。爬山算法是一种简单的贪心搜索算法,该算法每次从当前解的临近解空间中选择一个最优解作为当前解,直到达到一个局部最优解。爬山算法实现很简单,其主要缺点是会陷入局部最优解,而不一定能搜索到全局最优解。

二、模拟退火算法(SA,Simulated Annealing)

2.1 模拟退火算法思想

爬山法是完完全全的贪心法,每次都鼠目寸光的选择一个当前最优解,因此只能搜索到局部的最优值。模拟退火其实也是一种贪心算法,但是它的搜索过程引入了随机因素。模拟退火算法以一定的概率来接受一个比当前解要差的解,因此有可能会跳出这个局部的最优解,达到全局的最优解。以图1为例,模拟退火算法在搜索到局部最优解A后,会以一定的概率接受到E的移动。也许经过几次这样的不是局部最优的移动后会到达D点,于是就跳出了局部最大值A。

模拟退火算法描述:

若J( Y(i+1) )>= J( Y(i) )  (即移动后得到更优解),则总是接受该移动

若J( Y(i+1) )< J( Y(i) )  (即移动后的解比当前解要差),则以一定的概率接受移动,而且这个概率随着时间推移逐渐降低(逐渐降低才能趋向稳定)

这里的“一定的概率”的计算参考了金属冶炼的退火过程,这也是模拟退火算法名称的由来。

关于爬山算法与模拟退火,有一个有趣的比喻:

  爬山算法:兔子朝着比现在高的地方跳去。它找到了不远处的最高山峰。但是这座山不一定是珠穆朗玛峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

  模拟退火:兔子喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高方向跳去。这就是模拟退火。

2.2 模拟退火算法伪代码

/*
* J(y):在状态y时的评价函数值
* Y(i):表示当前状态
* Y(i+1):表示新的状态
* r: 用于控制降温的快慢
* T: 系统的温度,系统初始应该要处于一个高温的状态
* T_min :温度的下限,若温度T达到T_min,则停止搜索
*/
while( T > T_min )
{dE = J( Y(i+1) ) - J( Y(i) ) ; if ( dE >=0 ) //表达移动后得到更优解,则总是接受移动Y(i+1) = Y(i) ; //接受从Y(i)到Y(i+1)的移动else{// 函数exp( dE/T )的取值范围是(0,1) ,dE/T越大,则exp( dE/T )也if ( exp( dE/T ) > random( 0 , 1 ) )Y(i+1) = Y(i) ; //接受从Y(i)到Y(i+1)的移动}T = r * T ; //降温退火 ,0<r<1 。r越大,降温越慢;r越小,降温越快/** 若r过大,则搜索到全局最优解的可能会较高,但搜索的过程也就较长。若r过小,则搜索的过程会很快,但最终可能会达到一个局部最优值*/i ++ ;
}

2.3 使用模拟退火算法解决旅行商问题

旅行商问题 ( TSP , Traveling Salesman Problem ) :有N个城市,要求从其中某个问题出发,唯一遍历所有城市,再回到出发的城市,求最短的路线。旅行商问题属于所谓的NP完全问题,精确的解决TSP只能通过穷举所有的路径组合,其时间复杂度是O(N!) 。使用模拟退火算法可以比较快的求出TSP的一条近似最优路径。模拟退火解决TSP的思路:

1. 产生一条新的遍历路径P(i+1),计算路径P(i+1)的长度L( P(i+1) )

2. 若L(P(i+1)) < L(P(i)),则接受P(i+1)为新的路径,否则以模拟退火的那个概率接受P(i+1) ,然后降温

3. 重复步骤1,2直到满足退出条件

  产生新的遍历路径的方法有很多,下面列举其中3种:

1. 随机选择2个节点,交换路径中的这2个节点的顺序。

2. 随机选择2个节点,将路径中这2个节点间的节点顺序逆转。

3. 随机选择3个节点m,n,k,然后将节点m与n间的节点移位到节点k后面。

2.4 总结

模拟退火算法是一种随机算法,并不一定能找到全局的最优解,可以比较快的找到问题的近似最优解。 如果参数设置得当,模拟退火算法搜索效率比穷举法要高。

三、遗传算法 ( GA , Genetic Algorithm )

3.1 遗传算法思想

遗传算法是受达尔文的进化论的启发,借鉴生物进化过程而提出的一种启发式搜索算法。借鉴生物进化论,遗传算法将要解决的问题模拟成一个生物进化的过程,通过复制、交叉、突变等操作产生下一代的解,并逐步淘汰掉适应度函数值低的解,增加适应度函数值高的解。这样进化N代后就很有可能会进化出适应度函数值很高的个体。

举个例子,使用遗传算法解决“0-1背包问题”的思路:0-1背包的解可以编码为一串0-1字符串(0:不取,1:取) ;首先,随机产生M个0-1字符串,然后评价这些0-1字符串作为0-1背包问题的解的优劣;然后,随机选择一些字符串通过交叉、突变等操作产生下一代的M个字符串,而且较优的解被选中的概率要比较高。这样经过G代的进化后就可能会产生出0-1背包问题的一个“近似最优解”。

编码:需要将问题的解编码成字符串的形式才能使用遗传算法。最简单的一种编码方式是二进制编码,即将问题的解编码成二进制位数组的形式。例如,问题的解是整数,那么可以将其编码成二进制位数组的形式。将0-1字符串作为0-1背包问题的解就属于二进制编码。

选择:选择一些染色体来产生下一代。一种常用的选择策略是 “比例选择”,也就是个体被选中的概率与其适应度函数值成正比。假设群体的个体总数是N,那么一个体Xi被选中的概率为f(Xi)/( f(X1) + f(X2) + …….. + f(Xn) ) 。比例选择实现算法就是所谓的“轮盘赌算法”( Roulette Wheel Selection ) ,轮盘赌算法的一个简单的实现如下:

/*
* 按设定的概率,随机选中一个个体
* P[i]表示第i个个体被选中的概率
*/
int RWS()
{m =0;r =Random(0,1); //r为0至1的随机数for(i=1;i<=N; i++){/* 产生的随机数在m~m+P[i]间则认为选中了i* 因此i被选中的概率是P[i]*/m = m + P[i];if(r<=m) return i;}
}

交叉(Crossover):2条染色体交换部分基因,来构造下一代的2条新的染色体。例如:

交叉前:

00000|011100000000|10000

11100|000001111110|00101

交叉后:

00000|000001111110|10000

11100|011100000000|00101

染色体交叉是以一定的概率发生的,这个概率记为Pc 。

变异(Mutation):在繁殖过程,新产生的染色体中的基因会以一定的概率出错,称为变异。变异发生的概率记为Pm 。例如:

变异前:

000001110000000010000

变异后:

000001110000100010000

适应度函数 ( Fitness Function ):用于评价某个染色体的适应度,用f(x)表示。有时需要区分染色体的适应度函数与问题的目标函数。例如:0-1背包问题的目标函数是所取得物品价值,但将物品价值作为染色体的适应度函数可能并不一定适合。适应度函数与目标函数是正相关的,可对目标函数作一些变形来得到适应度函数。

3.2 遗传算法的伪代码

/*
* Pc:交叉发生的概率
* Pm:变异发生的概率
* M:种群规模
* G:终止进化的代数
* Tf:进化产生的任何一个个体的适应度函数超过Tf,则可以终止进化过程
*/
初始化Pm,Pc,M,G,Tf等参数。随机产生第一代种群Popdo
{ 计算种群Pop中每一个体的适应度F(i)。初始化空种群newPopdo{根据适应度以比例选择算法从种群Pop中选出2个个体if ( random ( 0 , 1 ) < Pc ){对2个个体按交叉概率Pc执行交叉操作}if ( random ( 0 , 1 ) < Pm ){对2个个体按变异概率Pm执行变异操作}将2个新个体加入种群newPop中} until ( M个子代被创建 )用newPop取代Pop
}until ( 任何染色体得分超过Tf, 或繁殖代数超过G )

from:https://blog.csdn.net/garfielder007/article/details/51038577/

爬山算法、退火算法、遗传算法相关推荐

  1. 粒子群算法和遗传算法的比较 退火算法

    粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为研究.粒子群优化算法的基本 ...

  2. 遗传算法与爬山算法简介_遗传算法简介

    遗传算法与爬山算法简介 Genetic Algorithms (GAs) are a part of Evolutionary Computing (EC), which is a rapidly g ...

  3. 量子计算机原理与退火算法的通俗解释

    摘  要 量子理论自其产生就充满了争议,其抽象.不确定的特点使得其难以被大众理解.但随着科学的发展,量子理论的巨大潜能越来越多的被发掘出来,并被应用到了多种领域.本文的目的是尽力用基础易懂的语言来解释 ...

  4. Matlab--模拟退火算法优化指派问题

    1.引言 之前二狗已经分别介绍过了,如何用模拟退火算法和遗传算法,进行背包问题的求解.其实背包问题是可以看成是一个可以看成是一个比较特殊的,有线性约束的,0-1规划问题.在数学中还有很多其他特殊的问题 ...

  5. 基于改进遗传退火算法的0-1背包问题设计与实现

    JISHOUUNIVERSITY 本科生毕业设计 题    目: 基于改进遗传退火算法的0-1背包问题设计与实现 作    者: 秦峰 学   号: 20144042001 所属学院: 信息科学与工程 ...

  6. 退火算法解决简单优化问题

    退火算法基本思想在此不再赘述,可参考本文.模板如下: T0 = 1000; % 初始温度 T = T0; % 迭代中温度会发生改变,第一次迭代时温度就是T0 maxgen = 500; % 最大迭代次 ...

  7. 退火算法 贪婪算法_算法贪婪策略简介

    退火算法 贪婪算法 介绍 (Introduction) The solution is determined by a sequence of steps each step has given a ...

  8. 使用绝热演化/量子退火算法求解矩阵本征态

    问题定义 定义一个\(N\times N\)大小的矩阵\(H\),找到该矩阵的本征态.已知:若态矢量\(\left|\psi\right>\)为哈密顿矩阵\(H\)的本征矢,则有: \[H\le ...

  9. 【建模算法】基于遗传算法求解TSP问题(matlab求解)

    [建模算法]基于遗传算法求解TSP问题(matlab求解) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问题规模的增 ...

最新文章

  1. 服务器错误配置文件的xml格式,IIS配置文件的XML格式不正确
  2. golang的错误汇总
  3. 互联网基础知识_数字化工业网络—工业互联网的网络技术.pptx
  4. 2017软件工程第三次作业--效能分析
  5. TensorFlow MNIST CNN LeNet5模型
  6. 如何使计算机为您读取文档
  7. 我用 MySQL 干掉了一摞简历
  8. jquery 获取键值对中最大值_jquery属性的操作
  9. BugkuCTF-Reverse题特殊的Base64
  10. 逐月对比的交叉表处理
  11. Python 对文件进行编码转换
  12. 机器学习笔记-基于逻辑回归的分类预测
  13. mysqldump怎么用 mysqldump没反应 mysqldump语法错误 mysqldump备份 mysql恢复 source命令 采用Navicat备份与mysqldump备份的区别...
  14. iOS:childViewController和view的声明周期及其原理
  15. mybatis_plus条件构造器
  16. 《天龙八部》通关攻略 一
  17. 大二第六周(逐渐暴躁的一周)
  18. 针对ONION勒索病毒!如何关闭139端口及445端口等危险端口
  19. 胖AP和瘦AP区别组网优缺点
  20. Mac Safari 配置 IE 代理 (支持 IE 调试)

热门文章

  1. 终于有人说出来了——Java不适合于作为主要编程教学语言
  2. 理工大暑假计算机课程班,2019年申报北京理工大学在职研究生计算机专业课程班可以获得双证吗...
  3. HTML阻止textarea标签回车换行
  4. Python xlwings 将数据写入表格
  5. 电商后台系统:管理后台篇之库存管理
  6. 解决Sublime报错ImportError:No module named xxx的问题
  7. 什么是机器学习,机器学习简介
  8. python学习(十五) 内建模块学习
  9. printf多级别、带颜色打印输出
  10. mac电脑忘记密码后强制更改登陆密码