Issue998

Title lm_zg does not handle unsolvable tasks properly
Priority bug Status chatting
Superseder Nosy List jendrik, malte, salome, silvan
Assigned To Keywords
Optional summary
Related to issue467 and issue937.

Created on 2021-01-28.12:18:24 by salome, last changed by malte.

Summary
Related to issue467 and issue937.
Messages
msg9910 (view) Author: malte Date: 2021-01-28.20:21:01
> A simple solution would be to exit_with(UNSOLVABLE) if the factory detects the
> task as unsolvable.

This is not really a solution. We don't know in which context the landmark graph is generated. It's easy to imagine that it's applied to some transformed task that is unsolvable, while the planning task solved at the top level is solvable (and solved by some other heuristic, for example in an alternation open list).

> Since there are no landmarks, the landmarks_reached PerStateBitset has vector
> size 0 and when we try to retrieve the Bitset for a specific state it results
> in a division by 0.

This sounds like an error in itself. Not finding any landmarks should be legitimate. Or at least if we don't want to allow it, we should make that clear, which we don't currently do.

> Furthermore, we should add a guard for creating PerStateBitsets (and possibly
> more general PerStateInformation) where the length of the information is 0.

Either that or make it supported. I think "PerStateInformation" has no notion of length, but there is another class that does ("PerStateArray"?).
msg9877 (view) Author: salome Date: 2021-01-28.12:18:23
If we use the lm_zg landmark factory on a task which it detects unsolvable, it simply adds 0 landmarks to the graph and returns normally. Aside from not making sense on a conceptual level, this causes a floating point error down the line: Since there are no landmarks, the landmarks_reached PerStateBitset has vector size 0 and when we try to retrieve the Bitset for a specific state it results in a division by 0.

A simple solution would be to exit_with(UNSOLVABLE) if the factory detects the task as unsolvable. It would however in my opinion also be good to see how other landmark factories handle this issue (if they can detect unsolvable tasks at all) and have a unified approach. One option might be to have a flag in the landmark graph that indicates that the task is unsolvable; or to add only one (goal) landmark with a natural order on itself. For the latter, we would need to fix issue937 first.

Furthermore, we should add a guard for creating PerStateBitsets (and possibly more general PerStateInformation) where the length of the information is 0.
History
Date User Action Args
2021-01-28 20:21:01maltesetmessages: + msg9910
2021-01-28 12:22:10silvansetnosy: + silvan
2021-01-28 12:18:24salomecreate