GRASP优化算法原理梳理和应用细节

简介: GRASP优化算法原理梳理和应用细节

1、简介-Introduction



GRASP(Greedy Randomized Adaptive Searh Procedures)是一个用于求解组合优化问题的multi-start元启发式算法,每一次迭代都包含以下两个阶段:构造(construction)和局部搜索(local search)。在构造阶段会构建一个可行解,在局部搜索阶段会对可行解的邻域进行搜索直到找到局部最优解。


上述是基本GRASP的思路,可以采用下述几种方式对算法进行优化:Reactive GRASP,cost perturbation,bias function,memory and learning,path-relinking。同时,GRASP可以采用同步策略,使用多线程方法加快最优解寻优速度。




2、算法流程和概念引入


GRASP的整体流程如下图所示:


42b1061ab2544d2e8cbefb359ddd7418.png

其中Max_Iteration表示最大的迭代次数,seed表示随机数种子,第5行代码表示若找到更好的解则对当前最优解进行更新。


下图是构造(construction)阶段流程的伪代码:

f9510bcb5f704a7f9137f625a3b12238.png


在贪婪构建解的过程中,伪代码第5行中需要构建有限候选集合-RCL,使用贪心函数来构建RCL,简答来说就是将某个没有加入到解中的元素添加当前解之中,衡量元素加入到解前后的变动成本,之后设置一个阈值或者数量限制,将变动成本(或总成本)最小的一些元素选入到RCL中。之后从RCL中随机选择一个元素来继续构建解方案,之后在下一次构建时再重新进行RCL的构建,直到所有的元素均在解方案之中。


下图是局部搜索(Local Search)阶段流程的伪代码:


1e7bdcc4141c4b7bb6151519c178529a.png


局部搜索(LS)对构造的解Solution进行邻域N(Solution)的搜索,若找到优于Solution的解,则进行最优解的替换,直到找到局部最优解。


在使用邻域搜索时,使用的策略包括best-improving和first-improving两种,有相关研究发现使用first-improving在跳出局部最优解和求解时间方面比较有优势。




3、RCL的构建细节和技巧


GRASP算法比较重要的部分是每一次优化初始解的构建,一个好的初始输入可以使得LS搜索更加有效率,增加最优解找到的几率和缩短求解时间。而在解构造的过程中,RCL的构建和保留又是至关重要的一个环节。下面详细描述几种不同方式的RCL构建方式。


3.1 静态构建RCL


定义 c(e)表示加入一个元素  e到解之后的变动成本,RCL中包含拥有最优 c(e)的一定数量  p的所有的元素 e。通常的做法是依靠变动成本c(e)的质量来确定数量 p。下面引入一个阈值参数 α \alpha α来限定数量 p。规定可以加入到RCL中的元素必须满足下式:


c(e)[cmin,cmin+α(cmaxcmin)]



可以发现当参数 α = 0 \alpha = 0 α=0,RCL中只有一个最优元素,则构造过程变为一个完全贪婪构造;当 α = 1 \alpha = 1 α=1时,RCL包含所有可行的元素,则构造过程变为一个完全随机构造。所以依靠参数 α \alpha α便可以控制构造过程的随机性和贪婪性的比例。根据文献中的实践,参数 α \alpha α的取值为0.8时,可以得到较好的构造解。




3.2 基于均匀分布构建RCL


由于使用单一的参数 α \alpha α往往不能找到高质量的解,所以提出采用一系列不同的 α \alpha α值来增大随机性,扩大搜索的广度。首先定义

Ψ=α1,...,αm表示一系列参数 α \alpha α的可能取值,均匀分布的意思是这些不同取值的 α \alpha α被选到的概率均为  1/m。


3.3 非均匀离散分布构建RCL


和上述均匀分布类似,但不同取值的 α \alpha α被选到的概率基于实现分配,同时这些概率互不相同,下述是一种分配方式:

18cebdb8956a4377a18a0a998e522a23.png


3.4 Reactive GRASP


在这种方式下,参数 α \alpha α的取值不是固定的,而是根据求解的结果进行动态自适应调整的。


同样令 Ψ=α1,...,αm表示参数 α \alpha α所有可能的取值,而选择每一个取值的概率初始化为pi=1/m,i=1,..,m。令 z^* 表示当前解的目标函数值,令  Ai表示使用每一个 α i \alpha_i αi所求得的目标函数值的平均值,初始化 A i A_i Ai的值为初始解的值。在每一次局部搜索结束之后,首先更新 Ai的值,之后计算 qi=z∗/Ai,for i=1,...,m,最后更新选择每一个 α i \alpha_i αi被选到的概率:pi=qi/∑j=1mqj。




4、Bias Function


在标准GRASP框架之中,构建完RCL集合之后,会从中随机选取一个元素来继续构建解方案,但是其实可以采取更加有效的方式,例如以一定概率首先选取更好的元素,来bias这个选择的过程。要应用Bias Function首先需要根据贪心函数求得的 c ( e ) c(e) c(e)给所有的元素 e e e一个等级 r ( e ) r(e) r(e),之后可以采取的Bias Function有以下几种:


   random bias:bias(r)=1;

   linear bias:  bias(r)=1/r;

   log bias: bias(r)=log−1(r+1)

   exponential bias: bias(r)=e−r

   polynomial bias of order n:  bias(r)=r−n



利用上述某种规则计算出来所有元素的bias值之后,选择某个元素        e的概率计算如下所示:


image.png

5、Path Relinking


路径重连算法从一个或者多个精英解出发,通过对比精英解之间的共有特性来构建新的解,以求能够得到更好的解。在选定两个精英解初始解(initial solution)和导向解(guiding solution)之后,路径重连算法通过探索初始解的邻域,寻找这些邻域中和导向解有相似部分的邻域进行计算,最终判断是否能获得更优的解。路径重连详细内容够可以参见微博: 路径重连(Path Relinking)算法简介。



6、并行GRASP(parallelism)


采用多线程的编程方式来加快最优解的寻找速度,可以有以下两种方式来应用并行策略,一种为独立线程方式mtltiple-walk independent thread strategy,另一种为合作线程方式mtltiple-walk cooperative thread strategy。



6.1 mtltiple-walk independent thread strategy


这是一种比较容易实现的多线程求解方式,对于每个优化过程开一个独立的线程进行运算,开一个总的线程来记录最优解即可。这种方式由于不需要线程之间共享信息,所以比较容易设计和实现。在某个线程找到更优解之后,所有的线程都暂停求解,更新每一个线程中的最优解为当前找到的最优解。



6.2 mtltiple-walk cooperative thread strategy


这种多线程方式涉及到线程之间共享信息,所以操作会更加复杂。一种共享信息的方式是通过路径重连算法来实现。实现方式是:给所有的线程建立一个共享的精英解池,之后在每一个线程应用路径重连技术的时候,都会从共享精英解池中选取精英解和自己的当前解进行路径重连探索。
















相关文章
|
5月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
6月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
352 14
|
5月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
449 5
|
6月前
|
运维 监控 JavaScript
基于 Node.js 图结构的局域网设备拓扑分析算法在局域网内监控软件中的应用研究
本文探讨图结构在局域网监控系统中的应用,通过Node.js实现设备拓扑建模、路径分析与故障定位,提升网络可视化、可追溯性与运维效率,结合模拟实验验证其高效性与准确性。
374 3
|
6月前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
207 1
|
6月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
305 1
|
5月前
|
机器学习/深度学习 人工智能 算法
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
【基于TTNRBO优化DBN回归预测】基于瞬态三角牛顿-拉夫逊优化算法(TTNRBO)优化深度信念网络(DBN)数据回归预测研究(Matlab代码实现)
246 0
|
5月前
|
机器学习/深度学习 算法 物联网
基于遗传方法的动态多目标优化算法
基于遗传方法的动态多目标优化算法
|
6月前
|
机器学习/深度学习 存储 算法
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
【微电网调度】考虑需求响应的基于改进多目标灰狼算法的微电网优化调度研究(Matlab代码实现)
280 0

热门文章

最新文章