三种典型启发式算法(禁忌搜索,模拟退火,遗传算法)
启发式算法
启发式算法:用来求解非常好的可行解,但不一定是最优解;该类算法可处理非常大的问题,可用来解决NP hard问题,是一种成熟的迭代算法,每次迭代结果可能导致比先前最佳解更好的新解,当算法经过适当时间终止时,提供的解就是迭代程序中发现的最优解。
优点:当陷入局部最优解时,有一定概率可以跳出局部最优,继续进行搜索全局最优解
缺陷:无法证明迭代结束后的最优解就是全局最优解,可能只是局部最优解。
三种典型启发式算法
1.禁忌搜索算法
2.模拟退火算法
3.遗传算法
禁忌搜索
- 广泛使用的通用启发式算法,采用一些常识使搜索过程逃离局部最优解
- 包含一个子程序,即局部搜索程序,其关键策略是允许在局部最优解邻域内存在向最优解进行非改进性移动,继续进行局部搜索;当到达某一个当前试解邻域内可找到更优解的点时,则可再次应用局部改进程序,找到新的局部最优解。
- 在远离局部最优解后,局部搜索可能会循环到同一个局部最优解,为避免这一问题,禁忌搜索暂时禁止返回到近期访问过的解移动;禁忌表记录被禁移动,也称为禁忌移动(注: 若发现禁忌移动实际上优于目前得出的最优可行解,此类移动可以解禁)
禁忌搜索算法概述:
- 初始值:从一个可行的初始试解开始
- 迭代:
- 使用适当的局部搜索程序确定向当前试解局部邻域内的可行移动数,这些可行移动数不包括当前禁忌表中的移动,除非禁忌表中的移动能得到优于当前所得最优试解的解;
- 确定在这些移动中,哪一移动可得到这些移动中的最优解,将该解作为下一个试解,无论其是否优于当前试解
- 更新禁忌表,禁止其循环至当前试解
- 若禁忌表已满,删除禁忌表中最早的项,为后续移动提供更多的灵活性
- 停止规则:
- 使用一些停止准则,如固定迭代数量,固定cpu时间,或在不改进最优目标函数值的情况下固定连续迭代数量
- 若在迭代中没有向当前试解局部邻域内的可行移动,则停止迭代,将迭代出的最优试解作为最终解
模拟退火
- 与禁忌搜索类似,是一种启发式算法,可使搜索过程跳出局部最优解
模拟退火算法概要
- 初始化:从一个可行初始试解开始
- 迭代:
- 根据移动选择规则选择下一个试解(若当前试解的近邻均不可接受,则算法终止)
- 核查温度计划表:在当前T值条件下进行了所需次数的迭代后,将T值降低至温度计划表中的下一个T值,然后恢复迭代
- 停止规则:在温度计划表中最低T值进行所需次数的迭代后(或当前试解的近邻均不可接受时),停止搜索,接受迭代中发现的最佳试解(包括T值较高时)作为最终解
Ex:
Zc = 当前试解的目标函数值
Zn = 迭代中当前候选解的目标函数值
T = 该候选解不能改进当前试解时,衡量当前候选解作为下一个试解可能性的参数
若Zn >= Zc,接受该候选解
若Zn < Zc,按照下列概率接受该候选解 - P(接受) = e^x, 其中x = (Zc - Zn)/T
假设温度计划表包含5个T值(T1,T2, T3, T4, T5),且分别依次进行5次迭代,则总共会有25次迭代,其中若温度的参数设为(0.2,0.5,0.5,0.5,0.5),那么
T1 = 0.2Zc,其中Zc为初始试解的目标函数值
T2 =0.5T1
T3 = 0.5T2
T4 = 0.5T3
T5 = 0.5*T4。
若存在7个点,初始解Zc= 69,则T1=0.2*69 = 13.8,随机选择出7个点中的2,3,4,5,6作为候选替换点,按照总概率为1,则每个点依次分配到0.2的概率;
假设起始点随机数是0.37,则对应起始选中的是点3,再用剩余2,4,5,6个点依次分配总概率1,每个点将有0.25概率,若终止点随机数为0.8,则终止点落在了点6,进而将起始点3和终止点6进行对调并重新计算目标函数值Zn;
若Zn = 65<69,优于初始解,则选择该解为下一个试解;
若Zn = 71 >69,差于初始解,则计算概率阈值P(接受) = e^ [(69-71)/13.8]=0.865,之后再生成随机数;
- 若该随机数<0.865,则接受该候选解为下一个试解
- 该随机数>0.865,则不接受该候选解为下一个试解
模拟退火与禁忌搜索对比
- 禁忌搜索采用的方法是朝最陡的方向爬上当前高峰,直到登上山顶(局部最优解),之后开始缓慢下山,同时寻找另一座山峰攀登(将局部最优的移动放入禁忌表,尝试将其他不在禁忌表中的移动进行相互替换);该方法的不足是花费大量时间攀爬(迭代)上遇得到的每一座山,而不是搜寻最高峰。
- 模拟退火采用的是将注意力主要放在最高山峰的寻找上,由于最高峰可能位于可行域任何地方,故前期重点是随机朝不同方向移动,以便尽可能探索更多可行域;由于大部分接受的移动都是向上的,所以搜索会逐渐朝可行域内最高山峰所在的部分倾斜,因此,搜索过程逐步否定越来越多向下的移动,从而逐渐将主要注意力放在向上攀爬上,只要时间足够,搜索过程通常会达到最高峰
- 简言之,模拟退火搜索每次迭代都会从当前试解向该解邻域内的一个近邻移动,这点和禁忌搜索相似,不同在于如何选择近邻作为下一个试解;禁忌搜索会利用禁忌表确认哪些移动在迭代中不会被替换,而模拟退火则在迭代过程中利用随机数生成随机概率来确认从哪个邻域内开始搜索最优解
遗传算法
- 遗传算法利用达尔文的进化论,将父类优秀的基因以较大的概率保留下来,而较次的基因则以较小的概率被保留到子代,另外,还考虑到了基因突变的影响,以极低的概率对子类部分基因做0/1变换,最后生成新的子类进行迭代
- 由于群体中适应度最强的成员比其他成员更有可能成为父亲,遗传算法会随着过程的不断推进得到试解的改进群体;偶尔发生突变,所以某些子代可能获得其父代任何一方不具备的特征(有时是更好的特征),这有助于遗传算法探索一个新的可行域或优于此前考虑的可行域的其他部分;最终,由于适者生存,遗传算法会得到一个试解(所研究的最佳解),这个试解至少会近似与最佳解。
遗传算法概述
- 初始化:从可行试解的初始群体开始,可随机生成,评估当前群体每个成员的适应度(目标函数值)
- 迭代:
- 采用一个随机过程,该过程偏向于当前群体适应度较强的成员,选择其中的部分成员(偶数)作为父代
- 对父代进行随机配对,让每对父代都分娩两个子代(新的可行试解),子代的特征(基因)是其父代特征的随机混合,偶然发生突变的情况除外(任何时候特征的随机混合和突变产生不可行解时,即为一次流产,因此重复进行分娩子代的过程,直到产生一个对应于可行解的子代)
- 保留这些子代并保留足够的当前群体最佳成员,以便形成一个同样规模的新群体进行下一次的迭代(丢弃当前群体的其他成员)
- 评估新群体中各新成员的适应度
- 停止规则:采用某种停止规则,如固定迭代次数,固定cpu时间或固定最佳试解中未发现任何改进的连续迭代次数,并将迭代中发现的最佳试解作为最终解。
Ex:
1.假设群体规模:10
2.父代选择:从群体中适应度最强的5个成员中(根据目标函数值确定),随机选择4个作为父代;从适应度最差的5个成员中随机选择2个作为父代;随机配对6位父代,形成3对配偶
3.父代特征(基因)遗传给子代:这一个过程很大程度上需看具体问题而定;通常父代和子代会将数值转换为二进制,之后将配对的父代进行二进制(0/1)匹配,相同的位数值会传到下一代,不同位数值的部分,会对每个位数值生成随机概率,若大于0.5,则为1,反之,则为0;
4.突变率:提前设定好突变概率阈值(如0.1),之后将新生成的子代对每个位数值都再进行随机概率生成,若小于0.1,则将该位数值进行0/1反转;若大于0.1,则不进行反转
5.停止规则:进行多次(如5次)连续迭代后仍未在最佳试解中发现任何改进,则停止迭代
总结
一些最优化问题(包括各种组合优化问题)十分复杂,很多精确算法都无法得出最优解,此时通常可采用启发式算法搜索好的可行解(不一定是最优解),这些启发式算法的一个关键特征是它们都能跳出局部最优解并在可行域内实施强大的搜索能力。
禁忌搜索每次迭代从当前试解向最佳近邻试解移动,除没有改进性移动时允许进行非改进性移动外,其他与局部改进程序非常相似;另外,该算法具有对过去搜索的短期记忆,以便向可行域的新区域移动,而不是回到前面的已知解;最后,该算法还可基于长期记忆,采用集中搜索和分散搜索策略,重点搜索可能性更高的延续部分。
模拟退火也在每次迭代时从当前试解向邻近试解移动,但偶尔允许非改进性移动;该算法随机选择邻近试解,然后仿照物理退火过程,确定如果该近邻并不优于当前试解,是否拒绝将其作为下一个试解。
遗传算法则是每次迭代都将整个试解群体作为对象,然后该算法采用类似于生物进化论的演进方式(包括适者生存概念)舍弃部分试解(尤其是那些适应度差的试解),用新的试解替代,这一替代过程使群体中多对续存的成员将其部分特征传递给新的成员,就像是父代繁衍子代一样。
三种典型启发式算法(禁忌搜索,模拟退火,遗传算法)相关推荐
- 元启发式算法 | 禁忌搜索(Tabu Search)解决TSP问题(Python)
[元启发式算法]禁忌搜索(Tabu Search)解决TSP问题(Python) 文章目录 [元启发式算法]禁忌搜索(Tabu Search)解决TSP问题(Python) 1.Tabu Search ...
- 三种典型电气减压比例阀线性度和短期重复性的对比考核试验
摘要:为实现0.1%超高精度的压力控制,需要选择合适的电气比例阀.本文介绍了三种典型电气比例阀的控制精度(线性度和稳定性)考核试验和结果,以从中确定合适性价比的电气比例阀来满足超高精度压力控制要求. ...
- 五种典型启发式算法对比总结
说明: 1. 五种启发式算法包括:遗传算法,粒子群算法,蚁群算法,禁忌搜索,模拟退火 之前的博文中已经写了五种启发式算法的偏应用的总结,避开背景知识和代码,已经尝试从问题和解的角度去总结五种算法的流程 ...
- 最佳实践丨三种典型场景下的云上虚拟IDC(私有池)选购指南
简介:业务上云常态化,业务在云上资源的选购.弹性交付.自助化成为大趋势.不同行业的不同客户,业务发展阶段不一样,云上资源的成本投入在业务整体成本占比也不一样,最小化成本投入.最大化业务收益始终是不同客 ...
- python贪心算法几个经典例子_关于贪心算法的一些探讨、经典问题的解决和三种典型的贪心算法算法(哈弗曼,Kruskal,Prim)的Python实现。...
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优解,关键是 ...
- 三种典型的博弈论问题之巴什博奕(Bash Game)
什么是博弈论 官方回答: 博弈论,又称为对策论(Game Theory).赛局理论等,既是现代数学的一个新分支,也是运筹学的一个重要学科. 博弈论主要研究公式化了的激励结构间的相互作用,是研究具有斗争 ...
- 智能算法浅介----模拟退火,遗传算法,禁忌搜索,神经网络等
本文讲的过于笼统,如果想真正理解,请参考: 1模拟退火 2遗传算法 3禁忌搜索 智能算法浅介----By cooler 一个比方 在工程实践中,经常会接触到一些比较"新颖的算法"如 ...
- 异同点 模拟退火 遗传算法 邻域搜索_智能算法浅介----模拟退火,遗传算法,禁忌搜索,神经网络等...
本文讲的过于笼统,如果想真正理解,请参考: 智能算法浅介----By cooler 一个比方 在工程实践中,经常会接触到一些比较"新颖的算法"如模拟退火,遗传算法,禁忌搜索,神经网 ...
- java 遗传禁忌搜索_[转载]模拟退火,遗传算法,禁忌搜索,神经网络
在工程实践中,经常会接触到一些比较"新颖"的算法或理论,比如模拟退火,遗传算法,禁忌搜索,神经网络等.这些算法或理论都有一些共同的特性(比如模拟自然过程),通称为"智能 ...
最新文章
- 新概念英语(1-137)A pleasant dream
- 又到校招季,来说说面试和实习
- 让数字校园走向云端【我身边的戴尔企业级解决方案】
- pyqt5中QWidget的show 一闪而过的原因及解决办法实例
- CentOS 8 成为绝版!到底发生了什么?
- iOS用workspace和cocoapods管理多个项目
- Levko and Permutation CodeForces - 361B 思维 数论
- 通用高性能 Windows Socket 组件 HP-Socket v2.2.1(增加 PULL 模型支持)
- [数据结构与算法] (顺序)线性表简单demo程序
- Maven下载安装配置详细过程
- 特种期货开户交易权限开通认定标准
- 常用开发工具及常用DOS命令
- 小度独立融资,百度上演“大象跳舞”
- CD 20 打气球的最大分数
- php 将数字转为大写,将数字小写转为大写 php
- FOC——10.11.IR2106半桥预驱电路
- 我在离天空最近的城市
- 2019年最实用的导航栏设计实践和案例分析全解
- 安卓病毒频发,做好手机安全防护很有必要
- 研究生生涯的一些经验和感悟
热门文章
- A的特征值与A的矩阵多项式的特征值的关系
- 5月开始,考研重要时间节点要牢记!
- 读书笔记-让别人主动赞美你的能力而不是自夸
- 【sshd】sshd_config 中 PermitRootLogin 的forced-commands-only的限定密钥登陆、限定执行命令
- java的cloneable_Java中的克隆Cloneable
- golang 代理direct的意义
- Waymo无人车的两件秘密武器:模拟软件Carcraft,秘密基地Castle
- 用Speakerphone模拟视频会议场景
- java swing 目录,java swing图形界面开发目录
- NYOJ-123-士兵杀敌(四)