I'm not sure if I have tested this thoroughly enough, but it seems to me that
the planner emits nonsensical mutex information when using the "--full-encoding"
option. Running
./translate.py --full-encoding
~/downward/benchmarks/blocks/{domain.pddl,probBLOCKS-4-0.pddl}
gives me the attached output.sas file. For example, the fact "(on a b)" is
represented with the assignments "var0=1" and "var7=2", but one of the mutex
groups claims that (0, 1) and (7, 2) are mutex, which makes no sense. It is
possible that the mutex code was never tested for the full encoding and
internally assumes that every variable only has one internal representation.
Generally speaking, it is not clear how to best represent mutex information for
the full encoding. Partially quoting from an email of mine:
For the full encoding, I think there are cases where this sort of information
cannot be represented in less than quadratic space in the form of mutex groups
(because there can be quadratically many interactions of this form), and for the
larger planning benchmarks, quadratic runtime or space can be prohibitive. There
exist benchmark tasks with more than 100000 facts, so mutex pair information
represented in a flat way can consist of more that 10^10 pairs, which means that
we would need something like 10^11 bytes to write it down, or 100 GB, just to
represent the mutexes. This is of course something we cannot afford.
In the partial encoding, it is possible to work around this by storing larger
sets of mutex groups, which can always be done in linear time in the size of the
internal representation. In the full encoding, I don't think this is possible.
One would need a different form of compact representation.
|