MIP启发式算法:爬山算法 (Hill climbing)
本文主要记录和分享学习到的知识,算不上原创。
*参考文献见链接。
本文讲述的是求解MIP问题的启发式算法中的爬山算法 (Hill climbing)。
目录
前言
Hill climbing 的过程
Hill climbing 的伪代码
Hill climbing 的不足
前言
爬山算法是以local search为核心框架的启发式算法中最简单的算法,当然,结果一般也不太好,因为爬山算法有一个很大的缺点:不能跳出局部解。
就像我们在local search那篇文中提到,以local search 为框架的启发式算法需要综合考虑到算法的两个方面,即intensification和diversification。爬山算法在diversification这一方面没有任何措施,所以导致不能跳出局部最优解。
所以对于可能拥有若干个(数目还很多)的MIP问题,仅仅依靠爬山算法,效果是比较差的。所以大部分情况下也不会考虑仅使用爬山算法。
但是爬山算法作为local search中最简单的算法,理解爬山算法有助于进一步理解local search。
爬山算法的联想词:局部最优、深度搜索
Hill climbing的过程
由于hill climbing是以local search为框架的,所以其算法过程也是很类似的。
首先,我们先摆出local search的过程:
(1) 生成初始解:算法从一个初始解或若干个初始解出发;
(2) 定义邻域和候选解:定义解的邻域,并产生若干个候选解;
(3) 确定新解:从候选解中确定新解;
(4) 迭代:重复上述搜索过程,直至满足终止条件,期间可能伴随着参数的调整。
再一一对应local search的过程,将其中一些元素具体化,即可得到hill climbing的过程:
(1) 生成初始解:算法从一个初始解开始。初始解可以随机生成,也可以是给定的。
(2) 定义领域和候选解:定义解的邻域和候选解。不同的爬山算法会考虑不同的邻域结构。
(3) 确定新解:选出候选解中的最优解,如果最优解大于当前解,则将该局部最优解作为新解;
(4) 迭代:重复上述搜索过程,直至满足终止条件。终止条件可以是时间、迭代次数,也可能是当前解不能进一步优化了。
Hill climbing的伪代码
Hill_Climbing algorithm for minimization problem Procedure HillClimbing()
x:=getInitial(); //get initial feasible solution x
while(the stopping condition is not reached)
x'=localSearch(N(x)); //select the optimal solution from the neighborhood of x as x'
if(c'x'<=c'x)
x:=x'
else
return x
end
Hill Climbing的不足
Hill Climbing的缺点主要表现在不能跳出局部最优解。
MIP启发式算法:爬山算法 (Hill climbing)的更多相关文章
- 爬山算法 | Java版HA_TSP
嗯哼,今天记录下采用Java编写的爬山算法(Hill Algorithm)求解TSP问题. 爬山算法与其他智能算法类似,是一种用来求解多峰函数最值的算法,爬山算法的基本思想是新解不劣于当前解则转移,否 ...
- MIP启发式算法:遗传算法 (Genetic algorithm)
*本文主要记录和分享学习到的知识,算不上原创 *参考文献见链接 本文主要讲述启发式算法中的遗传算法.遗传算法也是以local search为核心框架,但在表现形式上和hill climbing, ta ...
- POJ 2420 A Star not a Tree? 爬山算法
B - A Star not a Tree? Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/co ...
- BZOJ 3680: 吊打XXX【模拟退火算法裸题学习,爬山算法学习】
3680: 吊打XXX Time Limit: 10 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 3192 Solved: 1198[Sub ...
- BZOJ.3680.吊打XXX(模拟退火/爬山算法)
题目链接 一个比较好的解释? 模拟退火(Simulated Annealing,SA): (1)初始化一个温度(充分大).初始解状态S.每个T值的迭代次数. (2)对i=1,...,L,做(3)至(7 ...
- 基于爬山算法求解TSP问题(JAVA)
一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...
- NASH:基于丰富网络态射和爬山算法的神经网络架构搜索 | ICLR 2018
论文提出NASH方法来进行神经网络结构搜索,核心思想与之前的EAS方法类似,使用网络态射来生成一系列效果一致且继承权重的复杂子网,本文的网络态射更丰富,而且仅需要简单的爬山算法辅助就可以完成搜索,耗时 ...
- MIP启发式算法:Variable fixing heuristic
*本文主要记录及分享学习到的知识,算不上原创 *参考文章见链接. 本文简单介绍一下Variable fixing heuristic,这个算法同样以local search为核心框架,它的特点在于定义 ...
- MIP启发式算法:local branching
*本文主要是记录并分享最近学习到的知识,算不上原创 *参考文献见链接 本文主要是讲述local branching算法,主要以M. Fischetti的论文 “Local braching”和Pier ...
随机推荐
- python入门之冒泡排序
原理: (白话描述)一列数,从左到右,依次两两比较,若左边的数大于右边的数,则两数交换,始终保持比较后左边的数小于右边的数,这样从第一个到最后一个数全部比较一次就会把这列数中的最大值排到最后(最右边) ...
- Expert Python programming - Reading Notes
1. MRO: method resolution order lookup order: L(MyClass) = [MyClass, merged(L(Base1), L(Base2), Base ...
- Spring之WebContext不使用web.xml启动 初始化重要的类源码分析(Servlet3.0以上的)
入口: org.springframework.web.SpringServletContainerInitializer implements ServletContainerInitializer ...
- if __FILE__ == $0 end
if __FILE__ == $0 end __FILE__是一个“具有魔力”的变量,它代表了当前文件名.$0是用于启动程序的文件名.那么代码“if __FILE__ == $0”便意味着检查此文件是 ...
- DockerSwarm 集群环境搭建
一.简介 1. 什么是docker swarm? Swarm 在 Docker 1.12 版本之前属于一个独立的项目,在 Docker 1.12 版本发布之后,该项目合并到了 Docker 中,成为 ...
- VC和MATLAB混合开发需要注意的一个问题
作者:朱金灿 来源:http://blog.csdn.net/clever101 如果你的操作系统是64位操作系统,那么直接运行MATLAB的安装文件下的Setup.exe会默认安装的是64位的MAT ...
- ADO1
1. 新建Web窗体 客户端控件:html控件 服务器控件:用的比较少 2. 数据库连接 protected void btnLogin_Click(object sender, EventArgs ...
- Openjudge 1.13-23:区间内的真素数
总时间限制: 1000ms 内存限制: 65536kB 描述 找出正整数 M 和 N 之间(N 不小于 M)的所有真素数. 真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就 ...
- Ubuntu 14.04 配置confluence破解
1. 配置java环境,请参展我的另一篇博客 http://www.cnblogs.com/youran-he/p/8607155.html 2. 下载文件 https://pan.baidu.com ...
- Eclipse Java类编辑器里出现乱码的解决方案
如图:在Java Class编辑器里出现的这种乱码,非常烦人. 解决方案:Windows->Preference->General->Appearance, 在里面将Theme设置成 ...