ECBS的两个缺点:
1.容易陷入局部搜索,当结点N在进行扩展的时候,N的cost会逐渐增大,hc的值逐渐减小,当cost增大到一定程度且不满足次优界限时,算法会接着搜索cost比N小一点,hc比N大一点的下个节点,如此循环直到找到解,这中cost和hc的负相关性会导致聚焦搜索反复放弃节点的扩展,卡在局部区域,永远没有机会探索其它部分。
2.在进行扩展中,节点的冲突数不断减少,代价逐渐增加,导致次优的节点的hc的值较大,而Focal中每次都是选取hc小值进行扩充,因此,次优节点想要扩充到需要等到Focal中的节点快清空,但是由于一般会存在很多cost值差不多的节点,因此Focal很难清空,这就导致次优解一直得不到消耗,从而使上层的最优解下界几乎不怎么增加,这就使得整个计算不能保证在合理的时间范围内计算完成。
缺点1和2都涉及到负相关性,缺点很相似,但是一个是涉及成本,一个是涉及下界。
ECBS中函数定义:
N表示上层节点,n表示下层节点;
表示当前节点的状态和其它Agent发生了冲突的Agent数量;
表示节点N中的路径中的冲突数;
两者共用一个公式:
表示节点N的最优解下界;
标准A*算法的启发式
;
表示节点N的所有Agent的路径cost之和;
在下层,按d(n)排序,在上层hc(N)按排序。
Explicit Estimation Search (EES)
EES是一种有界次优搜索算法,它解决了聚焦搜索因为负相关导致的一些问题。
ESS引入了第三个函数f^用来估计当前给定节点的解决方案的成本,结合了对cost和hc和估计,用来预测展开哪些次优节点能更快找到解决方案。如果当前次优内的节点都不满足扩充条件,则它通过最小的f值来提高当前的边界。
ESS需要维护三个列表:CLEANUP , OPEN和 FOCAL
CLEANUP是A*算法中一个有序队列,按照启发式f进行排序,OPEN是A*算法另外一个有序队列,按照评估函数f^来排序,FOCAL中的从OPEN中选取,并且要满足f^<=w*f^(bestf^),其中fˆ(N) =cost(N) + hˆ(N),这里的 hˆ(N)指的是cost-to-go;
。。。
Explicit Estimation CBS(EECBS)
上层中,需要维护三个列表:
CLEANUP:按照函数lb进行排序
OPEN:按照代价函数f^进行排序,这个函数估计了CT节点以下的解决方案的最小成本,fˆ(N) =cost(N) + hˆ(N)
FOCAL:包含OPEN中所有满足fˆ(N)≤w·fˆ(best fˆ)的节点,并按照hc进行排序
EECBS选择节点的规则如下:
if cost(besthc)<=w lb(bestlb) ,then select besthc from FOCAL
else if cost(bestf^)<=w lb(bestlb) ,then select bestf^ from OPEN
else select bestlb from CLEANUP
在线学习,求解hˆ(N)
步距误差公式:
成本误差公式:
bc(n)表示子节点中f^最小的节点;
c(n,bc(n))表示从节点n移动到bc(n)的cost;
因为在EECBS中没有可接受成本h(n),所以需要对公式修改;
在EECBS中被定义如下:
注释:bc(N)表示节点N中最优子节点,在N的所有子节点中,cost最小为最优子节点,若cost相同,则冲突数hc最小的为最优子节点。