贪婪随机自适应搜索过程(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+构造+局搜属基础骨架;你的实现若属扩展,在文档中写清对应上述哪一层即可。