MIP启发式算法:爬山算法 (Hill climbing)

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

*参考文献见链接。

本文讲述的是求解MIP问题的启发式算法中的爬山算法 (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的伪代码

猜你喜欢

转载自www.cnblogs.com/liuyingsme/p/9858523.html