Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

high level of LB in ECBS do not used? #35

Open
xue19890510 opened this issue Jan 12, 2022 · 5 comments
Open

high level of LB in ECBS do not used? #35

xue19890510 opened this issue Jan 12, 2022 · 5 comments
Assignees

Comments

@xue19890510
Copy link

xue19890510 commented Jan 12, 2022

The paper ECBS said that the node that pushed into the FOCAL from OPEN should meet the condition LB<n.cost<=LB*W, but in your code

    bestCost = open.top().cost;

if (newNode.cost <= bestCost * m_w) {
focal.push(handle);
}

should it be bestCost = open.top().LB?
can you explain it? Than you very much.

@whoenig
Copy link
Owner

whoenig commented Jan 12, 2022

the lower bound (LB) of OPEN (assuming an admissible heuristic) is open.top().cost, that is, all other entries in OPEN will have the same or a higher cost.

@tangmingkai
Copy link

But the open.top().cost is the cost of suboptimal solution of the single-agent pathfinding problem. I think use open.top().cost directly cannot obtain the solution satisfying the condition cost(solution) <= cost(best_solution) * m_w.

@TachikakaMin
Copy link

Hi @whoenig , I think @john123741 is correct.

It should use LB rather than cost in high-level search.

https://tzin.bgu.ac.il/~felner/2014/cbseShort.pdf

image

@whoenig
Copy link
Owner

whoenig commented Jul 9, 2023

Thanks for your concerns. Could you point to a concrete line in the code that you think should be changed? I agree with the paper, but I believe that this might be just an issue with how LB is defined. I still think that my comment is correct. Note that

open.top().cost is the cost of suboptimal solution of the single-agent pathfinding problem

is not true, since open always contains the lowest-bound solution at the top (but the algorithm expands from FOCAL, not from OPEN).

@TachikakaMin
Copy link

TachikakaMin commented Jul 11, 2023

When you are doing Lowlevel search

LowLevelSearch_t lowLevel(llenv, m_w);
bool success = lowLevel.search(initialStates[i], newNode.solution[i]);

The newNode.solution[i] satisfy

newNode.solution[i].fmin <= newNode.solution[i] <= m_w*newNode.solution[i].fmin

So for each CT node, the cost is

newNode.LB <= newNode.cost <= m_w*newNode.LB

In Highlevel search

const auto& top = open.top();
Cost bestCost = top.cost;

we have:

top.LB <= top.cost == bestCost <= top.LB*m_w

In code:

if (val > oldBestCost * m_w && val <= bestCost * m_w) {
  const HighLevelNode& n = *iter;
  focal.push(n.handle);
}

which means all nodes in focal satisfy:

top.cost <= node.cost <= top.cost*m_w

So in focal queue, we have all node that:

top.LB <= top.cost <= node.cost <= top.cost*m_w <= top.LB*m_w*m_w
top.LB <= node.cost <= top.LB*m_w*m_w

And also top.LB is not the smallest LB in open, which will make the upper bound greater.

@whoenig whoenig self-assigned this Jan 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants