Greedy Randomized Adaptive Searc
1. GRASP算法的基本思想
GRASP算法是一个多起点的迭代过程,每一次迭代由两个阶段组成:一是产生可行解的构造阶段;二是寻找局部最优解的局搜索阶段。如果局部最优解S比当前搜索到的最优解S还要优的话,就更新S。
该算法的基本架构如下:
在该算法中,Max_Iterations是迭代次数,迭代之前先贪心随机构造一个解,然后判断可行不可行,若不可行则进入Repair函数进行修正,对可行解进行局部搜索,然后更新最优解。
2 Greedy Randomized Construction过程伪代码
在每次迭代之前,初始化可行解S为空,并且初始化候选集C并对候选集的每一个元素进行评估,作为进入限制候选列表的依据。每次迭代从候选集中选部分元素构成限制候选列表RCL。每次从限制候选列表RCL中随机选择一个元素与可行解S进行合并,然后更新候选集的元素,同时对里面的每一个元素进行重新评估。
2.1 影响GRASP性能的因素
1.参数α的选择
α = 1,对应完全随机的过程
α = 0,对应完全贪心的过程
2.RCL的大小
如果RCL中含有很多元素,就会产生很多不同的解,产生解的范围就比较大。设置RCL的大小可以采用动态调整法,即根据候选集C中满足给定条件的元素个数动态调整RCL的大小。这是GRASP算法中自适应功能的体现。
3 贪心函数
贪心函数用来评估每一个候选元素,结果作为进入RCL的依据。
局部搜索阶段的伪代码如下:
GRASP算法构造阶段得到的可行解质量通常不高,所以要在该可行解的邻域内进行局部搜索。
基本思想是以持续不断的迭代方式在可行解的邻域内寻找替换它的最优解。
3.1 影响局部搜索性能的两个因素:
一是邻域结构
二是选择相邻解的策略:有最优适应和首次适应两种。最优适应策略要求所有的相邻解都被考察之后将最优解的相邻解替换可行解。首次适应策略则是,当第一次搜索到比可行解好的相邻解释,则用该相邻解替换可行解,并以此作为新的起点进行局部搜索。