实验室救援组笔记
实验室救援组笔记
汇总分区的Kmeans算法和寻路算法
Kmeans分区算法
由于地图中道路和建筑都是对象,有一个确定的坐标,就以这些坐标来作为被划分的节点,如下示例:
有两个关键问题需要解决:不同地图中簇的个数k的确定和初始簇中心的确定
簇的数量
由救援机器人的数量以及城市地图总面积决定
初始簇中心
利用canopy算法确定初始簇,原因如下:
-
本身k的选择很影响kmeans算法的性能
-
Kmeans算法对离群点和噪声敏感,中心点容易偏移
canopy算法步骤:
-
确定两个距离 \(D_1, D_2,D_1 = D+\delta d,D_2 = D-\delta d\) ,其中D是地图上节点的平均距离
-
从数据集中随机取一个点作为中心点,计算其与其他点的距离,若距离小于D1但大于D2,则认为与其计算的点属于这个中心点所在的Canopy集内;若距离小于D2,则认为与其计算的点与中心点距离过近,不适宜再做中心点,于是将其从列表中删除。
-
重复上述步骤直到数据集为空
-
得到的k个canopy簇,以簇的中心作为Kmeans聚类算法的初始中心
动态分区的建立
划分初始分区后,综合道路和分区模型的特点,在某些分区的交接处设置了聚集点,由两个参数决定是否将原分区向聚合点融合,参数分别是:
-
时间参数:如果警察智能体完全清理完障碍物的时刻 - 分区之间相互建立主干道的时刻 > 70,则开始融合
-
面积参数:已探索区域面积占分区面积 0.6 以上则开始融合
目标选择与改进路障清理方法
警察智能体的目标是障碍物区域,但是也需要综合考虑清理带来的收益,也即规定优先级,优先级高的优先清理,道路清理方法选用矩形清理方法,沿引导线进行清理,在保证效率的同时减少出现智能体“卡住”的情况。
目标选择
计算清障任务的优先级如下:
-
\(\alpha\)代表由于障碍物阻塞智能体通往避难所,而导致该路障需要被清理的紧急程度
-
\(\beta\) 代表障碍掩埋了消防员、救护队和市民等智能体,导致该障碍需要被清理的紧急程度
-
\(\gamma\) 代表由于该障碍物阻塞着通往着火建筑和由被掩埋智能体建筑物,导致该路障需要被清理
根据经验,\(\alpha > \beta > \gamma\) ,分别为4,3,2,V的值越大,紧急程度越高
改进路障清理
清理方式:
-
将要清理的障碍物按一定比例不断缩小
-
在自身清理范围内生成一个矩形框,清理这个矩形框内的障碍
常规方法是智能体直接在能感知的范围内清理,选择最近的障碍来清理,但是这种方式具有一定的盲目性,清理出的道路会有突刺,阻碍其余智能体通过
改进方法是:基于引导线的清障算法
选中清理目标后,根据A*算法搜索出通往目标的路径,路径由地图模型的节点组成,节点模型的中线(根据情况是否进行调整)作为经过路径的模拟引导线,沿着引导线来清理路障
-
有时两个相邻的引导线向量之间的角度很小,可以将两个向量相加得到的向量作为新引导线方向
-
但是有时两个引导线方向差距过大,此时只能按照这两个引导线分别前进,进行清障工作
-
具体判断标准如下:

结果
这种方法使用到仿真系统之后,清理的路径比较整洁,很少突刺,大大减少了智能体卡住的概率,同时对效率也有一定提高
但是在仿真后期,由于此时大部分主干道障碍已经被清除,此时可以使部分警察转变清障策略,使用缩小障碍物的方法来清理障碍,有助于清理地图上的边角

浙公网安备 33010602011771号