Skip to content

贪婪随机自适应搜索过程(GRASP)

贪婪随机自适应搜索过程(Greedy Randomized Adaptive Search Procedure,GRASP)是多次重复「半贪心的随机化构造 → 局部搜索」的元启发式:构造阶段在每一步不是只选当前最好分量,而在「代价足够好的一批候选」中随机,从而解多样化;再对得到的全可行解做局搜抛光。与纯贪心加单轮局搜相比,随机化减轻一步错步步错的刚性;与 迭代局搜 相比不依赖长程扰动,而更多依赖每次重新抽样构造。见 元启发式总览

名称:部分资料或口语会误写为 GARSP 等,文献与代码中标准英文缩写是 GRASP。


构造阶段与候选列表(RCL)

从空(或根状态)起逐步往部分解上加入一个决策分量(TSP 中为下一城市、装箱中为下一放法等),直到得到完整可行解。设第 步有候选集合 ,在最小化下可对各候选算逐元增量代价 或总成本下界等贪心标量,并排序(并列时按你的约定排)。

RCL:restricted candidate list,受限候选表。不唯取 最小者,而取 不高于某阈值的整批 。常见阈值为

其中 为随机化强度(有的文献在代价型与秩型 RCL 间变体,与论文/代码一致即可):

  • :退化为纯贪心(RCL 常只有当前最优项,若唯一)。
  • :满足上式阈值的候选可全部进 RCL,随机性大、多样性好。
  • 中间值:在「好」与「不太差」之间折中,是 GRASP 常用旋钮。

在 RCL 上按均匀(或加权)律随机选一步。重复至整解

:也可用语义等价的前 好候选(数量型 RCL),与上式可对照实现。


局部搜索

对构造得到的 做问题相关的 ,与 ILS 中局搜子程序同型:在邻域内改进到局部最优或达到步/时上限。GRASP 经典叙述通常不在外循环里对解向量另加温控或长禁忌记忆;历史最优用 单独维护即可。


主循环与终止

外循环:反复「;更新 」,直至时间、总轮数、无改进等。同一实例上常独立多轮运行以利用随机性,报告最优一次或平均表现,依实验约定。

与 ILS 等比较:探索主要来自构造阶段的 RCL 抽样,而非热力学、禁忌或长程 kick;局搜可换为 禁忌搜索 等更强子程序,属混合实现。


主循环(最小化、示意框)

下框中 表示在参数 与上节 RCL 规则下做半贪心生完整可行解。 为局搜。 最小化, 为历史最优值。

▶ GRASP 主循环(半随机构造 + 局搜,最小化)

1. 初始化

无或某个可行初解, 相应设定或 。选定 与 RCL 规则(比式/前 名,与上文自洽)。定主过程终止(时间、总构造次数、无改进等)。

2. 未满足主终止时重复

  • (在随机种子与 RCL 下得到新初始可行解;若多起点或部分构造,在实现中写清接口)。
  • ,则

3. 输出

输出 (与可选的迭代日志)。


为何叫「自适应(adaptive)」

英文全称里的 adaptive 在原文与各类综述里并不只有一种讲法;教学上最常强调的是下面「随部分解而变」这一条,不必先把「自适应」理解成一定具备「参数在线自学习」。

最核心的一义:贪心信息随部分解而变

每往部分解上再加一次决策,候选集 以及每个候选的 ,都随已构造结构而变(TSP 里已访城市集合一变,各下一城市的边际代价就变)。因此有:

  • 与「自始到终只用一张与当前局面脱钩的固定打分表」的静态规则不同;
  • GRASP 在构造的每一步都据新状态重算谁优谁劣、RCL 里收进谁。

不少介绍性文章将名称里的 adaptive 就落在这里:对当前局面的贪婪评价随部分解不断刷新;相对只会一条道走到头的刚性贪心,准则在过程内是跟着局面前进的。该解释下,即使 全程为常数,只要 在每一步重算,已属于「在构造轨道上的自适应」。

第二义:RCL 在利用与探索之间的制度性折中

RCL 用阈值或前 好,在「只跟当前 最小」与「在达标的一批里随机」之间调节。就单步而言,是在已按当前部分解排好的排序上,为随机化留出可控宽度(由 事先给定)。文献有时也把 adaptive 顺带用在这里:强调机制上不是单纯贪心、而是在优质候选里保留多样性。侧重仍是结构、规则层面,不必然等于运行中改

第三义:反应式、在线调参等扩展

Reactive GRASP 等在无改进、时间或解分布等信号下改 、RCL 大小或轮换多种构造/局搜,则 adaptive 更贴近「随搜索反馈变参、变策略」的日常含义。与「定参、但逐步重算 」的基础版对照时,可复现说明里宜写明 reactive 或「参数自适应」等字样,避免和第一层含义混谈。

小结:讲 GRASP 的「自适应」,宜先说明随部分解重算贪心性与 RCL;再视需要补 RCL 对探索的折中、以及反应式等扩展。本页前文的定参 RCL+构造+局搜属基础骨架;你的实现若属扩展,在文档中写清对应上述哪一层即可。

个人笔记