实验室救援组笔记

实验室救援组笔记

汇总分区的Kmeans算法和寻路算法

Kmeans分区算法

由于地图中道路和建筑都是对象,有一个确定的坐标,就以这些坐标来作为被划分的节点,如下示例:

有两个关键问题需要解决:不同地图中簇的个数k的确定和初始簇中心的确定

簇的数量

由救援机器人的数量以及城市地图总面积决定

初始簇中心

利用canopy算法确定初始簇,原因如下:

  1. 本身k的选择很影响kmeans算法的性能

  2. Kmeans算法对离群点和噪声敏感,中心点容易偏移

    canopy算法步骤:

  3. 确定两个距离 \(D_1, D_2,D_1 = D+\delta d,D_2 = D-\delta d\) ,其中D是地图上节点的平均距离

  4. 从数据集中随机取一个点作为中心点,计算其与其他点的距离,若距离小于D1但大于D2,则认为与其计算的点属于这个中心点所在的Canopy集内;若距离小于D2,则认为与其计算的点与中心点距离过近,不适宜再做中心点,于是将其从列表中删除。

  5. 重复上述步骤直到数据集为空

  6. 得到的k个canopy簇,以簇的中心作为Kmeans聚类算法的初始中心

动态分区的建立

划分初始分区后,综合道路和分区模型的特点,在某些分区的交接处设置了聚集点,由两个参数决定是否将原分区向聚合点融合,参数分别是:

  1. 时间参数:如果警察智能体完全清理完障碍物的时刻 - 分区之间相互建立主干道的时刻 > 70,则开始融合

  2. 面积参数:已探索区域面积占分区面积 0.6 以上则开始融合

目标选择与改进路障清理方法

警察智能体的目标是障碍物区域,但是也需要综合考虑清理带来的收益,也即规定优先级,优先级高的优先清理,道路清理方法选用矩形清理方法,沿引导线进行清理,在保证效率的同时减少出现智能体“卡住”的情况。

目标选择

计算清障任务的优先级如下:

\[V = \alpha + \beta + \gamma \]

  • \(\alpha\)代表由于障碍物阻塞智能体通往避难所,而导致该路障需要被清理的紧急程度

  • \(\beta\) 代表障碍掩埋了消防员、救护队和市民等智能体,导致该障碍需要被清理的紧急程度

  • \(\gamma\) 代表由于该障碍物阻塞着通往着火建筑和由被掩埋智能体建筑物,导致该路障需要被清理

根据经验,\(\alpha > \beta > \gamma\) ,分别为4,3,2,V的值越大,紧急程度越高

改进路障清理

清理方式:

  1. 将要清理的障碍物按一定比例不断缩小

  2. 在自身清理范围内生成一个矩形框,清理这个矩形框内的障碍

常规方法是智能体直接在能感知的范围内清理,选择最近的障碍来清理,但是这种方式具有一定的盲目性,清理出的道路会有突刺,阻碍其余智能体通过

改进方法是:基于引导线的清障算法

选中清理目标后,根据A*算法搜索出通往目标的路径,路径由地图模型的节点组成,节点模型的中线(根据情况是否进行调整)作为经过路径的模拟引导线,沿着引导线来清理路障

  • 有时两个相邻的引导线向量之间的角度很小,可以将两个向量相加得到的向量作为新引导线方向

  • 但是有时两个引导线方向差距过大,此时只能按照这两个引导线分别前进,进行清障工作

  • 具体判断标准如下:

结果

这种方法使用到仿真系统之后,清理的路径比较整洁,很少突刺,大大减少了智能体卡住的概率,同时对效率也有一定提高

但是在仿真后期,由于此时大部分主干道障碍已经被清除,此时可以使部分警察转变清障策略,使用缩小障碍物的方法来清理障碍,有助于清理地图上的边角

posted @ 2023-03-27 21:53  jayus71  阅读(27)  评论(0)    收藏  举报