| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> Greedy Randomized Adaptive Search Procedure (GRASP)贪心随机自适应搜索算法 -> 正文阅读 |
|
[数据结构与算法]Greedy Randomized Adaptive Search Procedure (GRASP)贪心随机自适应搜索算法 |
目录 这个算法好像提到的人不多,不知道是不是我的错觉。 它是1989年被提出的,专门用来解决组合优化问题。如果仔细看了智能算法篇1常见算法的图片,就会发现它也位列其中。 1.元启发式算法备注: 元启发式算法一般都结合/借助了一些“知识”bias,并不是盲目的进行搜索。 元启发式方法结合了一些biases,这些偏见引导他们只考虑搜索空间的一小部分[6]。因此,他们可以从战略地寻找好的解决方案,并表现出一定的智能水平。下面是biases的分类(掌握这种思维我觉得对于设计算法也很有帮助 ):
2.GRASPGRASP是针对组合优化问题的多起点元启发式方法,其中每个迭代基本上都包含两个阶段,即:
构造阶段构造了一个可接受的解。在局部搜索阶段,GRASP剖析这个解的邻域,更新解,直到解达到局部最优。 更直白的说,GRASP首先从问题的组成元素中构造一个解(在构造阶段),然后再“调整”这个解决方案(在局部搜索阶段)。 GRASP重复进行构建和局部搜索阶段,直到达到最大迭代次数,或找到预期的解。通常来说,最大迭代次数影响着解的质量。换句话说:总体而言,迭代次数越多,解的质量就越好。 它将把在这个过程中,获得的最好的解视为最终解。当我们需要在合理的时间内找到一个接近最优的解时(不要求全局最优),GRASP是有用的。 2.1伪代码注意:第5行,是修复成可行解。因为一开始构造的解不一定可行。 第3行对应着构造阶段,第7行对应着改进阶段。只要有改进,就更新解。 2.2 构造阶段construction通过多次迭代构造一个可行解,每次加入一个元素。 在每次迭代之前,初始化可行解S为空,并且初始化候选集C并对候选集的每一个元素进行评估,作为进入限制候选列表的依据。每次迭代从候选集中选部分元素构成限制候选列表RCL。每次从限制候选列表RCL中随机选择一个元素与可行解S进行合并,然后更新候选集的元素,同时对里面的每一个元素进行重新评估。 在逐个加入元素的过程中,体现了贪心,随机,自适应的特点,这也是算法名字的由来。为什么贪心,随机,自适应——可以看这篇。 简单写写我的理解: 贪婪反映在了其对限制候选列表 (Restricted Candidate List -> RCL)的构建上(伪代码第2行到第5行),因为是按照价值增加的思想添加的。RCT的长度由参数确定。α = 1,对应完全随机的过程,所有候选元素都可随机选;α = 0,对应完全贪心的过程,只能选取最优的候选元素。 随机体现在选择点加入时是从限制候选列表中,随机进行选择的。 自适应体现在某次加入后,都会对RCL中的元素进行“更新”。 伪代码2:
2.3 局部搜索阶段局部搜索算法以迭代的方式工作,通过在其邻域中用更好的解连续替换当前解。当在邻域中找不到更好的解时,它就终止。 在GRASP中,局部搜索的存在是因为构造阶段生成的解并不总是在邻域内最好的[6]。因此,其目的是改进在构造阶段中生成的解。 简单来说,就是为了改进/提升第一阶段生成初始解的质量的。 那么,我们自然可以想到基于邻域的算法,应该都可以拿来进行改进了。事实上,第二阶段,确实可以结合遗传,邻域搜索进行改进。或者你可以认为GRASP只是一个框架体系。? 参考资料: 2.【优化算法】Greedy Randomized Adaptive Search算法 超详细解析,附代码实现TSP问题求解 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:02:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |