MIP启发式求解:局部搜索 (local search)
*本文主要记录和分享学习到的知识,算不上原创。
*参考文献见链接。
本文讲述的是求解MIP问题的启发式算法。
启发式算法的目的在于短时间内获得较优解。
个人认为局部搜索(local search)几乎包括所有的求解MIP的启发式算法的核心框架,从简单的爬山算法(Hill-climbing)到复杂的禁忌搜索(Tabu search),从一个初始解出发的爬山算法(Hill-climbing)到一群初始解出发的遗传算法(Genetic algorithm),其核心框架都是local search。
所以说,学习求解MIP的启发式算法,一定要掌握到local search的思想和算法过程。
目录
引言
local search的过程
local search的要素
引言
求解一个MIP问题的困难之一在于,当问题的解空间很大时,我们想从中获取最优解是很耗时间的。但是,我们可以做到的是,从一个小的解空间短时间获得最优解。
就像一个标准型的线性规划问题,我们并不想逐一判断解空间中的所有解的大小,从而确定出最优解,而是希望有一种更加高效的方法。由于我们知道一个标准型的线性规划问题,其解空间可以表示成一个凸多边形(polyhedron),而最优解只会发生在凸多边形的顶点(vertex)处,所以我们可以仅仅判断顶点上的解的大小,从而获得最优解。
那么如何找到“最有可能成为最优解”的解呢?
我们知道,一个全局最优解一定是局部最优解,而一个解如果都不是局部最优解,那也不可能是全局最优解。所以我们认为那些局部最优解是最有可能成为全局最优解的解。
那么能不能找到所有的局部最优解呢?
只有判断所有的局部最优解的大小,才能确定全局最优解。但是由于解空间很大,想找到所有的局部最优解也是很耗时间的。从时间的角度上看,我们只能获得一部分的局部最优解,找到一个问题的较优解。
那么如何找到局部最优解,实现当前解的迭代呢?
local search寻找局部最优解的思想和过程和“梯度下降法”类似。
local search 的过程
(1)生成初始解:算法从一个初始解或若干个初始解开始;
从一个初始解出发,如:Tabu search,
从若干个初始解出发,如:genetic algorithm
(2)定义邻域,获得候选解:定义解的邻域,并产生若干个候选解;
不同的算法会考虑不同的邻域结构。邻域结构的定义对算法的性能影响比较大。
(3)确定新界:从候选解中确定新解;
最简单的选择策略是将候选解中的最优解作为新解。不过不同的算法会考虑不同的选择策略。
(4)迭代:重复上述搜索过程,直至满足终止条件。期间可能伴随着参数的调整。
终止条件可能是时间、迭代次数等。
local search 的要素
(1)目标函数:用于判断解的优劣;
(2)初始解的产生方法;
初始解的好坏可能会对结果造成很大的影响,与具体算法有关。
(3)邻域的定义;
(4)新解的确定规则;
(5)终止条件。
*local search,包括以local search为核心框架的启发式算法,一般在设计算法时都必须考虑算法的两个方面:
(1)Intensification:深度搜索。尽可能找到局部最优解。
(2)Diversification:广度搜索。尽可能搜索到更多的解空间,以及避免陷入局部最优解。
参考文献
http://www.cnblogs.com/JiePro/p/Metaheuristics_0.html
MIP启发式求解:局部搜索 (local search)的更多相关文章
- 【智能算法】迭代局部搜索(Iterated Local Search, ILS)详解
迭代局部搜索(Iterated Local Search, ILS) 源代码下载请关注微信公众号[程序猿声],在后台回复:[ILS],不包括[]即可下载. 00 目录 局部搜索算法 简单局部搜索 迭代 ...
- 代码 | 自适应大邻域搜索系列之(7) - 局部搜索LocalSearch的代码解析
前言 好了小伙伴们我们又见面了,咳咳没错还是我.不知道你萌接连被这么多篇代码文章刷屏是什么感受,不过,酸爽归酸爽.今天咱们依然讲代码哈~不过今天讲的依然很简单,关于局部搜索LocalSearch的代码 ...
- 对《禁忌搜索(Tabu Search)算法及python实现》的修改
这个算法是在听北大人工智能mooc的时候,老师讲的一种局部搜索算法,可是举得例子不太明白.搜索网页后,发现<禁忌搜索(Tabu Search)算法及python实现>(https://bl ...
- 线搜索(line search)方法
在机器学习中, 通常需要求某个函数的最值(比如最大似然中需要求的似然的最大值). 线搜索(line search)是求得一个函数\(f(x)\)的最值的两种常用迭代方法之一(另外一个是trust re ...
- 集束搜索beam search和贪心搜索greedy search
贪心搜索(greedy search) 贪心搜索最为简单,直接选择每个输出的最大概率,直到出现终结符或最大句子长度. 集束搜索(beam search) 集束搜索可以认为是维特比算法的贪心形式,在维特 ...
- 选择性搜索(Selective Search)
1 概述 本文牵涉的概念是候选区域(Region Proposal ),用于物体检测算法的输入.无论是机器学习算法还是深度学习算法,候选区域都有用武之地. 2 物体检测和物体识别 物体识别是要分辨出图 ...
- java中什么是局部内部类Local inner class?
5.局部内部类Local inner class 马克-to-win:什么叫局部内部类?内部类声明位置:1.它的外部类的范围之内.2.在几个程序块的范围之内.例如,由方法定义的块中或甚至在for循环体 ...
- 采用梯度下降优化器(Gradient Descent optimizer)结合禁忌搜索(Tabu Search)求解矩阵的全部特征值和特征向量
[前言] 对于矩阵(Matrix)的特征值(Eigens)求解,采用数值分析(Number Analysis)的方法有一些,我熟知的是针对实对称矩阵(Real Symmetric Matrix)的特征 ...
- [SAP ABAP开发技术总结]搜索帮助Search Help (F4)
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
随机推荐
- Help with Intervals(集合的交并补,线段树)
很早以前做过这题,早就没印象了,估计当时也是照着某大神的代码抄过的,现在是连题意都看了好长时间. 刚开始的S集合是空集,给你一些操作和一个T集合,把操作的结果再赋给S集合. 解法:因为会有开区间和闭区 ...
- vue axios post不能本地json
vue 脚本架里axios post是不能本地json,GET可以 解决这个问题需要自己在node里写脚本: 在build里新建立fakedata.js var express = require(' ...
- table表格字母无法换行
在项目中,用到的table比较多,本来布局挺好的,后来在td内写入英文字母,整个布局就乱了,会撑的很宽,不换行,后来才知道:一般字母的话会被浏览器默认是一个字符串或者说一个单词,所以不会自动换行. 于 ...
- HashMap,你知道多少?
一.前言 HashMap在面试中是个火热的话题,那么你能应付自如吗?下面抛出几个问题看你是否知道,如果知道那么本文对于你来说就不值一提了. HashMap的内部数据结构是什么? HashMap扩容机制 ...
- Linux下各文件夹的结构说明及用途介绍(转载)
linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录 ...
- 从零开发分布式数据库中间件 二、构建MyBatis的读写分离数据库中间件
在上一节 从零开发分布式数据库中间件 一.读写分离的数据库中间件 中,我们讲了如何通过ThreadLocal来指定每次访问的数据源,并通过jdbc的连接方式来切换数据源,那么这一节我们使用我们常用的数 ...
- ubuntu 14.04 构建openstack使用的ubunt 16 的桌面版的使用镜像
1. 下载ubuntu 16.04桌面版的iso文件,我的个人网盘中有,可以下载 https://pan.baidu.com/s/14qT3lbbqLwDaejmz2VSkyw 2. 安装制作镜像文件 ...
- Exception in thread "main" java.lang.NoSuchMethodError: org.apache.http.entity.ContentType.withCharset(Ljava/lang/String;)Lorg/apache/http/entity/ContentType;
解决方案是:第一点先检查一下使用的包是否冲突,是否是版本号一致.第二点是增加一个包 忙活了好久才解决了这个异常,小小的激动一下啊啊
- SAP Cloud for Customer(C4C)的一些学习资料
经常有顾问朋友们问我想自学C4C,有什么好的资料. SAP内部确实有一些C4C培训材料,但是不能散布到公司外部. 想学习C4C,还是得到SAP官网网站上查找资料. 1. 登录https://help. ...
- 在hibernate框架中配置显示sql语句
使用Hibernate的框架开发时,可在Hibernate.cfg.xml中加上 <property name="hibernate.show_sql">true< ...