The preprocessor and search components currently encounter problems with certain
degenerate inputs, such as problems with no goals. Also, such inputs may
complicate the implementation of certain parts of the planner. Given that these
input formats are under our control, we have decided to enforce some
restrictions on degenerate inputs.
In detail, we need to do three things:
1. Translator and preprocessor must ensure that their output follows these
restrictions, e.g. by introducing artificial state variables and goals if necessary.
2. Preprocessor and search must validate their input to verify that it follows
these restrictions, and complain about invalid input if it doesn't.
3. Our documentation for translation and preprocessor output format on the wiki
must describe these restrictions.
The restrictions we want to make are:
A. There must be at least one state variable.
B. There must be at least one goal.
C. Each state variable must have at least two values in its domain.
We have decided *not* to enforce that all variables are relevant and all facts
are relaxed reachable. (For example, this is violated for the artificial
unsolvable problems we generate if the translator detects unsolvability.) In the
past, there used to be code in the variable order finder (and possibly
elsewhere?) that incorrectly made the assumption that all variables are
relevant, or even that the causal graph is connected, and this might still be
the case. It is perhaps worth adding a separate issue for this?
Marking this as a bug because we currently fail on problems whose goal condition
is simplified to "true" in the translator.
|