粒子群 理解.docx

上传人:b****6 文档编号:7311865 上传时间:2023-01-22 格式:DOCX 页数:12 大小:31.70KB
下载 相关 举报
粒子群 理解.docx_第1页
第1页 / 共12页
粒子群 理解.docx_第2页
第2页 / 共12页
粒子群 理解.docx_第3页
第3页 / 共12页
粒子群 理解.docx_第4页
第4页 / 共12页
粒子群 理解.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

粒子群 理解.docx

《粒子群 理解.docx》由会员分享,可在线阅读,更多相关《粒子群 理解.docx(12页珍藏版)》请在冰豆网上搜索。

粒子群 理解.docx

粒子群理解

最近由于做毕业设计的关系,抽出了几天的时间又学习了一些比较热门的智能算法。

发现身边不少朋友在学习这些算法的时候遇到了种种困难,所以想到了记录下自己学习时的一些体会和总结。

一方面是作为一个笔记,以便以后自己翻看。

另一方面,也算是半个教程,希望能够帮到正在各种算法中挣扎的朋友。

今天是第一篇,计划在这篇中对各种算法的应用情况做一个总结(也算是对后面章节要介绍的算法做一个广告吧),预计这个学习笔记系列要介绍的算法包括:

人工神经网络、遗传算法、粒子群算法、蚁群算法、粒子滤波器;另外,我也打算针对几个常见的专题进行一些细节的讨论,这些专题包括:

闭环控制、二维路径规划及地图创建、图像识别的基础方法、基本决策方法等。

虽然感觉内容比较多,但是我还是希望能够每天更新一部分,最终把这份笔记完成。

好了,闲话不多说,下面开始几天要讨论的内容:

首先,今天要对各种算法进行一些整理,将每种算法的可能应用方式和各种算法之间的关系(比如,从实际应用角度考虑,粒子群算法可以认为是一种比遗传算法速度更快,但是性能较差的轻量级算法)进行简单的介绍。

对于我们实际遇到的问题,基本上可以分为以下几种情况(名称是自己起的,主要是为了表示个意思):

1确定模型

这里的确定模型是指遇到的问题是一个用已有知识可以准确建模(指可以列出描述系统所需的所有方程)、且可在期望时间内可以用一般方法求解的问题。

这类问题的解决方法并不在本次学习笔记的讨论范围之内。

需要说明的一点是,如果系统可以用确定模型的方法获得解,那么,除非有特殊原因,否则不应该使用任何所谓的“智能算法”,因为几乎可以肯定的是,无论从计算量还是精度上来讲,准确的方程描叙都要比智能算法以某种随机方式训练来的实际的多。

2有确定的评价函数,求最优解

这类问题是我们遇到最多的问题,无论是数学建模还是机器人,都要考虑大量这类问题,遗传算法、粒子群算法这两种算法是解决复杂问题时候效果很好的两个算法,类似的包括了免疫算法等等的一系列基于人工生命体的算法,此外,还有更为轻量级的搜索算法,比如登山法(好像也叫爬山法)、模拟退火法等等等等。

这类算法之所以存在,其根本原因(我认为的)是因为:

对于一个可能的解集空间,我们面临2个问题,第一,无法直接求得最优解,也就是说,我们只能知道在某个特定解时,这个解是否“好”,而无法通过给出一个期望的“好”的程度,直接获得一个解(区别于确定模型,确定模型可以直接通过求解方程获得这个解),这通常是由于我们无法对系统进行准确描述导致的,所以,我们只能通过不断地“试验”各种可能的解,来找到一个最好的。

而很不幸的,我们面临的第二个问题就是,可能的解如此之多,以至于我们不可能在有限的时间内对所有解进行评估(注意这个前提,如果解集空间的规模允许我们进行穷举,那么使用任何智能算法都是不正确的做法)。

所以,我们需要一种“更聪明”的搜索算法,以使得我们可以通过检验更少的可行解就可以获得最优解——但是,严格的说,除了少数的例外情况外,我们如果没有对系统的所有解集空间进行穷举,那么你获得的解并不能保证一定是最优解,只不过是否是“绝对最优”在一般的情况下,并不重要。

有关此类问题更深入的讨论,计划将在下一章中进行,这里就不再过多叙述了。

3求可行(或最优)方案

与上一类问题不同,这类问题通常并不能简单的用一个向量来代表我们的最优解,而且,在当前解(方案)不可行时,无法进行准确的评价其有多“不可行”。

而且,方案通常是由多个步骤组成的。

这类问题最典型的就是(简单的)博弈问题和基于通道的路径规划问题。

求解此类问题的基本方法是使用树或者图(如果树不能描述问题)。

也就是说,我们按方案的步骤将其按树的方式展开,在其中找到一条可行的分支。

对于树,目前已经有很多成熟的方案可以解决,最简单的当然就是深度优先搜索(求可行解)、广度优先搜索(求最优解)以及各种启发式搜索,其中,最常用(也是基本上就可以解决你遇到的问题的)的启发式搜索算法是A*算法(以后会专门介绍)。

对于更复杂的问题,蚁群算法有着不错的表现(指可以在更短的时间内,得到更好的解),尤其是对于图,我们知道有所谓的NP-难问题的存在(需要指数复杂度进行求解),所以使用此类性能更好的算法将尤其重要。

4决策问题

需要解决的问题就是:

我现在又很多方案可以选择,那么我选择哪种方案是最好的呢?

需要注意的是,一般决策问题的决策结果很难直接写出评价函数(如果可以写出,问题将变得非常简单,其也就退化为第2类问题)。

所以,决策问题主要关心的将是我们如何对策略进行评价。

典型的问题就是,比如一个复杂的博弈问题,只有在棋局结束的时候计算机才能知道准确的评价(赢或者输),而如果是胜利,那么,究竟哪一步对胜利是起到了推动作用呢?

而如果输了棋,显然不应该是所有的步骤都要对输棋负责的。

5模式识别问题

最常见的是分类问题,这类问题的基本原理是计算当前样本与标准模式的某种“距离”,然后取最短距离。

另外的一种方法是基于概率的,也就是求当前样本是每种类型的概率,取最大概率。

特别的,粒子滤波器通过一种特殊的手法,将我们求解<在检测到某些信息时,计算其属于某种情况的概率>转化为了,<假定其是某种情况,计算能检测到已知信息的概率>。

其更为形象的描述就是:

比如我有一张准确的地图,那么,我通过看身边的东西来在地图上找到我的位置容易呢?

还是,我知道我在地图上的位置,判断我能看到什么东西容易呢?

显然后者更加容易一些。

有关粒子滤波器的详细讨论计划将在最近2-3章内进行,希望大家能关注,因为粒子滤波算法是我非常推荐的一个算法,不仅仅是其实际意义,更重要的是它的启发意义。

以上几种情况是以我目前水平和经历总结的,划分依据主要是依赖于我们的解决方法主要需要关心的问题为准。

当然,对于一个实际问题,可能是由多个部分组成的,不过、幸运的是,一般情况下,我们可以将复杂的问题划分成若干个子问题解决。

(本片写完后写的的写在前面:

本来想在这一回中,把优化问题的算法都介绍完,可是发现写完粒子群内容已经很多了,而且我也写累了,所以遗传算法、以及如何将实际问题抽象为优化问题的内容在下一次再讨论吧

好,闲话少说,直接进入本次正题。

所谓优化问题,我们需要解决的是这样的一个问题:

对于一个模型,我们已经有了对任意解的评价方法(称为评价函数),这个评价方法可以是一个函数表达式,同样也可以是一个环境、设备甚至一个人(即所谓的交互式XX算法,就是用人工评价代替函数评价)。

那么,如果我们无法通过评价函数直接求得最优解(例如如果评价函数是针对一个变量的2次函数,则我们就可以直接得到最优解,但对更复杂或更高维的函数,通常我们无法求解),那么我们就只能通过所谓的“试”的方法,对每个解使用评价函数进行测试,以找到最优解。

针对这类问题,我们将分两部分进行讨论:

如何求解以及如何把一个现实问题转换为优化问题。

我们先来讨论如何求解的问题。

在求解时,有两个关键的限制条件是我们首先要考虑的:

第一是解得维数,也就是说,我们需要求的解是由多少个独立量决定的。

解得维数直接决定了解集空间的大小,其直观意义就是:

由于有限时间内,我们只能对有限多个样本进行评价,所以,如果解集空间越大,那么我们可以评价到的比例就越小。

对于很多算法而言,其越难收敛。

第二个限制条件就是,评价函数的“复杂”程度,这里的复杂主要是针对局部极小(大)值而言的,如果评价函数是一个“简单”函数,只有一个极小值,那么显然我们只要找到一个解,这个解的每一维向各个方向变化均会导致评价结果变差,那么这个解就是最优解。

而相反的,我们就很难评价一个解是否是全局最优。

在实际应用中,虽然我们很难通过数学手段知道一个评价函数是否“复杂”,但通常,我们可以通过较为直观的方法来“猜测”系统是否具有这样的特性,比如考虑一个简单的路径规划问题,在起始点和目标点处于两个房间中,唯一的到达方法是连接两个房间的一道门。

那么可以预料到的,如果我们以距离为评价函数的话,对于可行路径,必然只有一个全局最优。

而对于另外一个简单的路径规划问题:

起始点和终止点在一个区域内,中间有一个圆形障碍物相隔,那么,可以预测的到,我们将有两个局部极小点,即从左侧紧贴障碍物通过和从右侧紧贴障碍物通过。

如果系统涉及的情况足够复杂,或者我们对系统的实际情况了解非常少,以至于我们无法判断(注意是无法判断时,而不是我们已经确认系统是一个“复杂”函数),那么,我们也没有必要直接使用复杂的算法进行求解,我们可以使用一个简单的算法(如马上要介绍的爬山法)对系统的情况进行估计,如果算法的解不满意,那么我们再考虑更复杂的算法;如果解我们满意……那我们就可以开始写论文了^.^。

下面,我们将按照针对情况的复杂度由低到高的顺序,介绍几个常用算法(包括大家想看的遗传和粒子群)。

首先,是最简单的爬山法开始(注意,这里讨论了一些对爬山法的变形,这对理解后面的粒子群算法很重要)。

爬山法的思路很简单:

随机选择一个解,然后让这个解以一定得步长(即每个分量变化一个非常小的值),向更优的方向移动。

考虑一个最简单的情况,评价函数是一个针对一个变量的2次函数(画图麻烦,大家自己想象吧),那么我们随机选择一个x值后,按照以上的描述,我的x必然不断向函数的极值移动,最终停止在极值处(注意,如果步长过大,则算法会在极值附近震荡,当然,一种立刻就能想到的改进方案就当评价值变化变小时,步长减小——呵呵,算法改进就是这样的直观)。

这个算法存在两个问题,第一就是如果维数过大,那么如果我们无法求得评价函数的偏导数(在实际环境下一般不能,因为实际环境下,评价函数经常是个复杂的仿真环境)来获得方向,那么我们的计算量将随着维数的提升快速增加(维数的指数复杂度)。

第二个,也是更主要的问题就是:

这个算法毫无疑问的会陷入一个局部极小值,并且这个局部极小值的位置与随机选择的初始解的位置相关(试想一个sin函数)。

对于这个问题,我们有两个思路可以改善(注意,同时应用这两个思路时,将引出所谓的“智能算法”的原型):

第一,是我可以多次随机初始化出不同的起始位置,这样,我们就可以获得多个不同的局部极小值,然后选择其中最小的作为最优解——显然,评价函数越复杂(可以理解为“坑”越多),我们很幸运的碰巧随即到全局最优的概率就越小。

第二个思路就是,我们提供一种“跳出”局部极小值的方法,让算法在进入一个局部极小值后,继续搜索。

最直观的方法就是,我们为我们的“爬山者”增加一个冲量(速度),增加冲量有两种基本的方式:

一种是算法会一定程度上保持原有的方向,这就好像在一个坑洼地中滚动的足球:

由于有冲量的存在,足球就有机会离开一个坑(局部极小点),另一种方式和这种做法没有本质的却别,不过描述起来更数学一些:

算法以一定得概率可以接受一个比当前差的解。

两种方法都可以使算法离开当前的局部极小值——注意!

这个算法同样可以使算法离开全局最优解,但是,改进算法立刻就能想到:

我只要额外记录下目前为止的最优解就可以了。

呵呵,科学又进步了。

这种改进方法还有另外一个问题要解决:

直觉上就可以知道,我的冲量需要不断衰减,否则算法不会结束。

那么怎么衰减呢?

简单的办法是我们令其和执行时间成反比——或者是2次函数等等,特别的,如果我们让这个衰减过程符合一个特别的函数:

温度传递函数。

那么,我们的算法就有了一个很著名的名字:

模拟退火法——当然,这个和我们选择简单的线性衰减函数没有本质的区别。

好了,激动人心的时候到了。

如前面铺垫的那样,我们将两个思路结合起来,然后稍加改动,粒子群算法呼之欲出^.^

第一项改动就是,正如前文所述,我们如果多次初始化不同的起始位置,那么我们可以得到更好的解。

既然我们多次运行了算法多次,那么我们就可以将算法改为一个并行算法:

一上来就随机初始化多个位置(为了和后面术语相同,从现在开始称这些“东西”为“个体”),并在每一周期对所有的个体进行改变——在接下来的讨论中我们将会发现,这一改动给算法带来了更多的可能性。

好了,现在我们拥有了一个个体的“种群”,下面我们考虑刚刚爬山法遇到的另一个问题:

如果我们无法对评价函数求导,那么我们就要对每一维的各个方向进行评价,以决定哪个方向“更优”以便让我们的“登山者”有一个方向,而这需要很大的计算量。

那么,我们现在有了种群,有没有更好的方法呢?

呵呵,对了,这个问题在提出的时候就已经有了答案:

既然我们有很多的个体,那么我们只要看看其他人,就知道哪个方向更好了——具体的说,就是我们现在不再需要向原来那样通过判断身边的情况来决定方向了,我们只需要观察两个量就可以了:

最牛的个体在哪?

大家都在哪?

然后朝着他们的方向走就可以了。

讲到这里可能大家有个问题就出现了:

如果这样的话,那么很快大家就都聚集到一个点了么?

别忘了,刚刚我们还提到了一个重要的方法:

增加冲量(模拟退火法),通过增加冲量,我们可以很容易的避免大家都停在一个点上。

好,现在我们可以用数学方法总结下我们的算法了(此式即标准粒子群算法):

向量形式(就是由解得各个维数构成的向量):

本周期的变化量=系数1*上周期变化量+系数2*0到1随机数*(最优个体位置-自身位置)+系数3*0到1随机数*(最优群体均值-自身位置)

分量形式:

对于每一维

该维的变化量=系数1*上周期变化量+系数2*0到1随机数*(最优个体对应维-自身对应维)+系数3*0到1随机数*(最优群体均值对应维-自身对应维)

其中,系数1、2、3是权重参数,其中,系数1叫惯性权重(按照之前的叫法可以叫冲量权重),这些值的选取将会影响算法的性能,大家在使用的时候可以多试验试验。

下面也将会有一些定性的讨论。

现在来解释一下这个式子:

系数1对应的项就是咱们以前讨论过的冲量,在实际的粒子群算法中,通常也会对系数1进行衰减处理,但是,没有模拟退火法那么复杂,设计者一般用一个线性方法进行衰减,当然,如果我们队衰减的特性不满意,大可以参考模拟退火法选择温度函数——恩,起名叫退火粒子群算法?

……好像不是很好听-.-#。

至于后面两项,如前文所述,就是用看其他个体的方法,代替了原来的只计算自身周围的办法,这样可以大大增加算法的速度(前面已经讨论过了,多维情况下,原来的算法显指数复杂度)。

其中,之所以选择了2个量,一定程度上出于以下考虑:

首先,选择最优可以作为参考无可厚非,这里就不过多讨论,唯一要提醒的是,这里的最优个体不是指本周期的最优个体,而是历史上(包括本周期)的最优个体——记得咱们避免冲量将爬山法带出全局最优解时候使用的增加一个历史最优解得做法么?

这里也用了这个办法。

那么我们为什么要增加一个最有群体均值呢(这个最优群集均值的选取很随意,各个周期所有个体的均值,也可以以一定比例选择的个体的均值,当然,我们用的还是历史最优),很主要的一个原因是,群体的抗干扰能力较强,如果只设置一个个体的话,那么如果个体找到的只是一个局部最优,对其他粒子的影响太大,而且不稳定,用群体就稳定很多。

具体的情况大家可以再matlab中试验下不用群体或不用个体的变种算法。

好了,以上就是粒子群算法了,名字这么猛的算法算法,原来就是这样搞出来的,有没有觉得很失望?

根据粒子群算法的描述,我们现在的算法已经有了一个种群,并且有了寻找前进方向的办法(看最优个体和群体),而且还有一个冲量来避免陷入局部最小和避免所有粒子高度集中。

那么,我们怎么来继续改进我们的算法呢?

让我们来重新考虑一下所有基于对解集空间“试”的搜索算法面临的主要问题:

我们的计算能力是有限的,所以我们在有限时间内只能对固定数量的解进行验证,而各种算法都是通过某种手段,来选择更可能是最优解的点来试验(向更好的方向移动)。

我们现在先不考虑那些真的不错的点,我们来考虑下系统中那些与最优点差距非常远的点。

显然,对于大多数的评价函数来说,如果一个解得评分非常非常差,那么最优解在他附近的可能性就很低(一切算法都是这个前提,如果不符合,那么任何算法都很难有很好的解——穷举除外)。

而之前的算法,对于每个个体,无论他有多差,我们都还通过各种手段来让他试图变好,如果我们换个思路呢?

我们将这些点不要,这样就节约了计算量。

而由于我们有一个固定的计算能力,所以,删除这些点带来的空闲时间,我们可以用来处理一些更好的点。

比如对于粒子群算法来说,我们可以删除最差的10%的粒子,然后在全局最优和最优个体附近,随机生成出等量的粒子——这相当于,我们对更可能的区域进行了更细致(用更多个体)的搜索,宏观上看,我们的算法试验解得效率应该就变高了。

好的,现在,我们又掌握了一种对算法优化的办法了:

将不需要的点删除,并在更可能的区域创建更多个点,以使算法效率更高。

当然,用手工设置一个百分比的方法来设置我要怎么删除个体的方法太不数学了,而且实际效果证明并不理想。

那么我们有什么更好的选择方法呢?

一个统计学常用的手段是,我们为每一个粒子设置一个权重,来代表这个个体进入下一周期的资格程度,显然,我们可以直接用评价函数的结果作为这个权重。

然后,我们对权重进行归一化,也就是每个权重除以权重总和,这样处理之后,我们有所有权重之和等于1。

好了,现在,我们可以将这个归一化之后的权重作为这个粒子进入下一周期的概率来使用了——这个过程的统计学名字为“重采样”;具体的使用方法是:

对于下一周期进入算法的每个粒子来说,其是上周期任意个体的概率为那个个体的权重。

这个叙述太过抽象,我们来举一个具体的例子说明:

试想两种情况,第一是,当前所有粒子的评价结果都一样,比如我们有100个粒子,那么,我们每个粒子的权重就是1除以100,也就是0.01。

那么下一个周期,新的100个粒子是什么样子呢?

显然,每个粒子进入下一个周期的概率相同,理想情况下,也就是这100个粒子平均的进入了下一个周期,没有被删除的。

第二个情况就是,如果我有一个粒子的权重非常大,以至于这个粒子占到了所有权重的50%,也就是0.5,另外还有5个粒子的权重也很大,5个一种占了0.4999的概率,而其他的90多个粒子都非常差劲,加起来才有0.0001。

那么,下一周期的粒子会是什么样子呢?

最可能的情况当然是:

50个粒子等于刚刚最好的那个,另外有5组10个粒子分别等于另外五个还不错的粒子,然后,如果运气极好,我们可能会有1个粒子会是剩下的90多个差劲粒子中的一个(当然,他要占掉前面6种粒子的1个名额)。

好的,现在请大家对上面的做法留有印象,下面我们再来分析粒子群算法的另外一个不足,和前面对爬山法的分析类似,最终我们将通过这些改进来得到遗传算法。

现在,我们来考虑粒子群算法用来决定每个个体方向的办法:

看最好的个体和群体均值。

显然,我们会有这样的一个感觉:

我只关心目前最好的两个位置是否显得太“呆板”了?

如果我考虑更多的优秀的个体,那么我们的算法是否能有更好的性能呢?

(试想一个有10个粒子都进入了一个局部极小点附近,而其中只有一个是真正的全局最优。

那么,哪个个体先开始对对应区域进行搜索必然会有很大的优势,我们的其他个体可能只是因为暂时没有找到最好的解,就被其他的粒子抢了风头)

那么,我们怎么来建立一个能够将目前的优势信息在全局传播的方法呢?

答案就是:

我们利用生物“交-配”的办法(汗,不知道这个词会不会被屏蔽掉)。

考虑我们刚刚进行的重采样过程,在重采样过程之后,我们保留下来的就是“优势个体”了,那么我们可以通过随机配对(这个词应该没有问题)的方法,让新个体同时具有父母的优势信息(当然,正如你知道的,新个体同样可能是集成了父母的所有缺点,不过,没有关系,这个个体将在下次重采样的时候被“优胜劣汰”掉)。

这样,就可以使更多的优势信息在种群中传播了。

到现在为止,我们已经有了算法向更优位置前进的方法了:

通过优胜劣汰来找出号的个体,然后用这些个体随机繁衍,以使优势信息扩散。

那么我们是不是就已经获得了所谓的遗传算法了呢?

很可惜,繁衍的方法带来了一个问题:

通过前面的介绍我们知道,为了避免很多问题,我们的算法需要有某种形式的“冲量”存在。

但现在我们不是通过移动而是通过繁衍的方法来获得新的个体,我们怎么计算冲量的方向和大小呢?

答案很简单:

没法计算!

-.-#那么我们怎么设置冲量呢?

既然我们没有办法计算,那么我们就采用最直接的方式:

随机加一个冲量。

而这个冲量,就是我们所谓的“基因突变”。

好了,现在我们已经通过讨论粒子群算法的不足,获得了一套完整的改进方案,现在我们总结一下,正式提出遗传算法:

初始化:

(这里是最简单的方法)为了突变的执行方便,我们将解(向量)使用2进制位来表示,每一位代表一个基因位。

具体做法就是,如果解是由4个独立量(维)构成,并且每一维的取值可能范围是0到2^10,那么我们就用一个40位的2进制数来代表这个解,其中最高10位是第一维,以此类推。

现在,我们已经将解从向量形式变成了“基因”形式了,那么按照惯例,我们随机初始化种群,即每一位随机取0或1.

迭代部分:

对于每个周期,执行以下操作

首先,对每一个个体,使用评价函数进行评价,计算优劣。

进行优胜劣汰过程,也就是“重采样”。

进行随机配对,最简单的配对方法是:

每一对父母产生一对后代,正常的是直接“复制”(这个是遗传算法的3个基本操作之一)到对应个体,并以一定概率,“交换”(操作之二)其中的随机的一段基因(比如互换了第5-10位基因)。

对获得的新个体,再以随机概率对每一位进行“突变”(操作之三,具体做法就是1变0,0变1,这也就是之前要进行编码的原因)。

最终产生新的种群,进入下一周期。

这个算法直观意义很强,就是现实世界物种进化的方法,很好理解。

唯一我们要提到的就是,上面算法描述中涉及到了两个我们需要自己调节的概率:

交换的概率和突变的概率。

其中比较重要的是突变概率,如果过大,则算法的解将会很难收敛,并且“行为诡异”,可以想象科幻电影里面描绘的由于核辐射,世界生物发生剧烈突变的场景……。

如果过小,那么算法将会变得很慢,这个就更直接了,想象现实世界,由于突变率不高,我们用了上亿年才进化成现在这个样子……

好了,优化问题中,常用的重量级(主要指需要的计算量)的算法已经介绍给大家了,下面我们来讨论下一个更为实际的问题:

究竟什么情况下,我们才能使用这些算法?

什么时候用什么算法最好?

这里,我们首先给出评判的准则:

1.我们必须可以用有限多个变量,来描述我们要求解的东西。

2.我们至少要有一个评价一个解好坏的方法。

这个评价方法可以不是一个函数(当然最好是个函数),甚至可以是一个人进行手工评价。

3.我们必须可以通过随机方式,获得足够多的可评判解。

这个原则的实际意义在后面具体解释。

下面我们来仔细的讨论下以上两点。

对于第一点,我们使用的变量数量应该尽可能的少,就像之前讨论过的,独立量越多(维数越多),解集空间越大,找到最优的可能性就越小。

而如果我们的问题无法使用不多的几个独立数值来描述,那么,这个问题就是没有可能使用遗传、粒子群等算法求解的问题。

下面我们来举一个具体例子说明:

考虑一个简单的路径规划问题:

在一个空旷区域内,有一个起始点和一个目标点,中间有一个障碍物(比如圆形)。

我们的目的是找到一条最短路径,绕过障碍物到达目标点。

如果我们想使用粒子群算法进行路径规划,根据以上原则,我们必须要把这条路径用一个多维向量来描述出来,否则就不能使用。

直接用一个多维向量去描述一条路径显然是不可能的,你可以先自己考虑一下。

那么,我们怎么用一个多维向量来描述一条路径呢?

一个可以想到的办法就是,我将路径变为有限多个点(比如5个),每个点用2个量(坐标X,Y)来描述,那么这条路径就可以用一个10维向量来描述出来。

那么,有没有更简单的描述方法呢?

呵呵,这里卖个关子,在之后推出的路径规划专题中,大家可以看到一种将10维向量变为5维向量的方法——显然,这样的一半维数的做法可以让算法性能大大提高。

以上介绍的只是一个简单的例子,我想说明的问题主要是:

不要被算法名字迷惑了,不要看到“粒子群”,就直觉的觉得,这个算法可以让一堆粒子在地图里面乱跑,然后把跑的路径记

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1