基于冲突的搜索算法(CBS)个人笔记

CBS
  • 实例
    • 以下将通过一个简单的实例体现CBS的基本过程:
讲解:
  • 上层
    • 结点:指的是每个”小方格“;
    • 节点:树的节点;
    • (ai, aj, s, t):ai与aj在t时刻都在s结点上;
    • OPENcbs:存放待探测的状态,与下层的OPEN意思一样,都是将下一步(某时刻)可能要走的结点存放进来;
    • N:为结点;
    • N.constraints:一个约束集,包含对问题中所有 Agent 的约束;(我们要做的就是在某个结点上给定的约束集中,帮Agent规划避开在该结点的约束集后的其最佳路线);
    • N.solution:问题的一个解,这个解可能不是有效的,但是这个解中所有 的 Agent 的路径都满足该结点 的约束集中的约束;(看例子:在节点1,我们发现,他们在3结点冲突了,于是得到了节点2和节点3,这两个节点均得到了3结点的解,满足了该结点的约束集,但是整条路径下来,两个还是会撞上,因此不是有效的);
    • N.cost:该结点解的代价。(我们避开该结点的约束集可能有很多解,所以我们需要求解的代价,然后得到该结点的解中代价最小的那个);
  • 下层
    • A*算法
流程:
CBS算法流程,即初始化上层的时候先计算出所有的Agent的解和其对应的总cost,令约束树为空,(解释:第一步我们无视其他Agent,得到每个Agent到指定位置的路线,其路线cost最优(小)),然后每一轮弹出约束树的cost最小的结点N(从OPEN队列中弹出),判断N中是否存在一个冲突,只需要找到一个即可,用(ai,aj,s,t)表示冲突,然后生成两个子结点N1,N2,并且都值传递继承节点N的内容,存进OPEN,接着将冲突(ai,aj,s,t)分成约束结点(ai,s,t)和(aj,s,t),一个加入到N1约束树中,一个加入到N2约束树中,(解释:我们以一个Agent为视角,走到s时发生冲突,那我退回去上个结点,然后此时我继承了s点冲突的信息,也就是说也保留了约束集,所以这台Agent会重新规划最优路线(cost最小),以保证自己在t时间内避开s,即约束集),对于N1而言,ai的约束发生了变化,因此需要对ai进行重新规划,规划时需要在约束树下进行规划,最后更新ai的路径和cost值并插入到上层优先队列中OPEN中,接着对N2进行同样的操作,直到取出的N检测没有冲突时返回结点N即可。

个人理解环节:
个人理解环节:上层其实和下层一样,都是A*,都是我(为一台Agent)走一步计算一步,每一步都是最优的,然后上层呢,就是我在某个结点和其他Agent撞上了,就记录下该时间该结点我不能走这个结点,于是我就重新规划绕开走(这里相当是发配命令给下层,让下层通过A*得到这台Agent一条路径,然后将这条路径反馈给上层,上层将其放入解中,分析这个解是否有效),然后因为我们是多台Agent,那么就产生了分支,树也就建出来了:我们假设是两台(a1,a2),一条分支a1动,a2不动;一条分支a2动,a1不动;但是呢,我绕开了这个结点,也不能保证,在绕开该结点后,我这台Agent就不撞上了,所以下一步就会继续寻找撞上的结点,再次进行避开操作,于是又产生了分支,以此类推,最终找到所有Agent不碰撞的解(路径)。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值