博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MIP启发式求解:局部搜索 (local search)
阅读量:5046 次
发布时间:2019-06-12

本文共 1445 字,大约阅读时间需要 4 分钟。

*本文主要记录和分享学习到的知识,算不上原创。

*参考文献见链接。

本文讲述的是求解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:广度搜索。尽可能搜索到更多的解空间,以及避免陷入局部最优解。

 

参考文献

 

转载于:https://www.cnblogs.com/liuyingsme/p/9857714.html

你可能感兴趣的文章
JS截取字符串常用方法
查看>>
Google非官方的Text To Speech和Speech Recognition的API
查看>>
stdext - A C++ STL Extensions Libary
查看>>
Django 内建 中间件组件
查看>>
bootstrap-Table服务端分页,获取到的数据怎么再页面的表格里显示
查看>>
进程间通信系列 之 socket套接字及其实例
查看>>
天气预报插件
查看>>
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>