Issue771

Title translator generates wrong mutex information with full encoding
Priority bug Status resolved
Superseder Nosy List florian, gabi, malte
Assigned To florian Keywords translator
Optional summary

Created on 2018-03-22.13:58:54 by malte, last changed by florian.

Files
File name Uploaded Type Edit Remove
output.sas malte, 2018-03-22.13:58:54 application/octet-stream
Messages
msg8281 (view) Author: florian Date: 2018-12-13.11:12:48
I merged and pushed.
msg8276 (view) Author: florian Date: 2018-12-13.02:38:24
I did one more change pointed out by Malte. I think we can merge this now.
msg8273 (view) Author: florian Date: 2018-12-12.19:23:19
Thanks. I updated the pull request. The tests also finished without issue.
msg8271 (view) Author: malte Date: 2018-12-12.18:45:27
Thanks, Florian! I left some bitbucket comments.
msg8264 (view) Author: florian Date: 2018-12-12.15:39:31
I added issue878 for the additional information on equivalent facts.
msg8259 (view) Author: florian Date: 2018-12-12.15:31:53
I created a pull request for this:
https://bitbucket.org/FlorianPommerening/downward-issues/pull-requests/54

I started a small experiments that translates the first 4-5 tasks of all domains
with the new and old translator and checks that the output stays the same and
that the new assertion doesn't trigger. It also translates the tasks with the
full encoding to check that no assertion triggers. So far everything looks good.
msg8248 (view) Author: malte Date: 2018-12-12.11:08:09
Sounds good. (We discussed this in the sprint meeting this morning.)
msg8247 (view) Author: gabi Date: 2018-12-12.11:03:08
The problem is in line 604 in translate.py: if an atom is represented by several
variable-value pairs, we add them all to the mutex group, basically saying that
the atom is mutex with itself.

Since with the full encoding all mutex information is already covered by the
variable encoding, the obvious solution would be not to generate mutex
information if using the full encoding.

The information that two variable-value pairs represent the same fact gets lost
in the translator output. This might be useful for some purposes (e.g. potential
heuristics). I would not make such a change as part of this issue but maybe add
another low-priority issue to not loose the idea.
msg6953 (view) Author: malte Date: 2018-03-22.13:58:54
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.
History
Date User Action Args
2018-12-13 11:12:48floriansetstatus: reviewing -> resolved
assignedto: florian
messages: + msg8281
2018-12-13 02:38:24floriansetmessages: + msg8276
2018-12-12 19:23:19floriansetmessages: + msg8273
2018-12-12 18:45:27maltesetmessages: + msg8271
2018-12-12 15:39:31floriansetstatus: unread -> reviewing
messages: + msg8264
summary: Action items: - disable generation of additional mutex information with full encoding (also adding an assertion in build_mutex_key?) - create an issue to output information about equivalent variable-value pairs. ->
2018-12-12 15:31:53floriansetstatus: chatting -> unread
messages: + msg8259
2018-12-12 11:08:09maltesetmessages: + msg8248
2018-12-12 11:03:08gabisetstatus: unread -> chatting
nosy: + gabi, florian
title: translator generates wrong mutex information with full encoding? -> translator generates wrong mutex information with full encoding
messages: + msg8247
summary: Action items: - disable generation of additional mutex information with full encoding (also adding an assertion in build_mutex_key?) - create an issue to output information about equivalent variable-value pairs.
2018-03-22 13:58:54maltecreate