Issue125

Title implement "problem transformations" and make heuristics use them
Priority wish Status resolved
Superseder Nosy List erez, jendrik, malte, mkatz
Assigned To Keywords
Optional summary

Created on 2010-09-09.21:27:10 by malte, last changed by malte.

Messages
msg8836 (view) Author: malte Date: 2019-06-06.12:00:32
Problem transformations now exist in principle. The reason we kept this issue
alive was to preserve some of the ideas mentioned here, but idea suggestions are
cheap, and we haven't acted on them for more than 4 years. This is enough of a
grace peroid, so I'm closing this now.

As usual, new issues can be opened to put the ideas on the agenda again, but I
would only do that when we're actually planning to work on it immediately.

Issues of the type "Here is a nice to have feature; no plans to work on it" clog
up the system. We're getting a lot more rigorous with closing them these days to
practice good tracker hygiene.
msg3914 (view) Author: jendrik Date: 2014-12-12.14:58:10
Then we should probably keep this issue to not forget about the ideas in it.
msg3909 (view) Author: malte Date: 2014-12-12.13:47:23
The task class is the mechanism we want to use for this, but we should not lose
the concrete feature suggestions from this issue. So if we close this, we should
add a summary of the important points of the discussion and a reference from
issue439.
msg3907 (view) Author: jendrik Date: 2014-12-12.10:37:04
Is this superseded by the task class in issue439?
msg519 (view) Author: malte Date: 2010-09-09.21:57:42
Another interesting transformation is Patrik's P^m transformation. For example,
quoting from an email he sent yesterday:

============================================================================

storage/Propositional:

Greedy best-first search with...

h^FF computed on original problem  | h^FF computed on P2
				   |
p01      3 nodes     0.004 sec.    | p01    3 nodes    0.004 sec.
p02      3 nodes     0 sec.	   | p02    3 nodes    0.008 sec.
p03      3 nodes     0.008 sec.	   | p03    3 nodes    0.040002 sec.
p04     31 nodes     0.012 sec.	   | p04    9 nodes    0.092005 sec.
p05      9 nodes     0.012 sec.	   | p05   11 nodes    0.548034 sec.
p06     10 nodes     0.020001 sec. | p06   10 nodes    1.10807 sec.
p07    193 nodes     0.088005 sec. | p07   29 nodes    1.6881 sec.
p08    288 nodes     0.500031 sec. | p08   27 nodes    8.38452 sec.
p09    119 nodes     0.440027 sec. | p09   23 nodes   17.7891 sec.
p10   1134 nodes     0.940059 sec. | p10  138 nodes   36.5543 sec.
p11    300 nodes     1.07607 sec.  | p11   85 nodes   82.8812 sec.
p12    806 nodes     5.45234 sec.  | p12  182 nodes  393.365 sec.
p13   1358 nodes     1.52409 sec.  | p13   84 nodes   56.7275 sec.
p14   1400 nodes     7.15645 sec.  | p14
p15   1651 nodes    21.4573 sec.   | p15
p16   3176 nodes    57.9236 sec.   | p16   34 nodes  428.759 sec.
p17  93782 nodes  2175.59 sec.     | p17

Missing entries are time-outs (1h) or, in case p17-p20 in the right
column, running out of memory while constructing P2.

Fairly dramatic decrease in # of node exps... but an even more dramatic
increase in runtime ;)
msg517 (view) Author: malte Date: 2010-09-09.21:27:10
Split off from issue120.

The following pasted from msg516 in that issue:
==========================================================================
Actually, there are a bunch of useful things that could be done by problem
transformations or problem adapters. Some of them could be under the control of
the user, others could be under control of the heuristics.

Example under control of the heuristics: some heuristics (at least h^cea)
compile the goal away to simplify their implementation. This could be one kind
of general problem transformation that is implemented in such a way that it is
also useful for others who want it. This is best implemented using some kind of
adapter that doesn't modify the original problem (since we don't want to compile
goals away everywhere -- some people, like the goal count heuristic, might like
having the original goal around) or copy the problem (since that's a waste of
time and space).

An example under control of the user would be a transformation that compiles
landmark tracing into the problem so that the heuristics can than make use of
the enriched problem, as in Matthias's Studienarbeit or the paper by Carmel,
Michael and Sagi.

I think there's a lot of potential there, but I'd see that in beyond-1.0
territory and would prefer sticking to the base class approach for now. If there
are other preferences, I'm open to discussion though.
==========================================================================

Different treatments of action costs in the heuristics, such as the three LAMA
variants (original cost, unit cost, original cost plus 1) could also be readily
implemented with different "problem views".

One generic way to implement that would be to give each heuristic an additional
"problem" parameter (or whatever) which would be optional and default to the
actual problem. But one could also apply transformations to the original
problem, either directly within the argument to the call or in an external
declaration as with heuristics:

    --problem prob1=compile_in_landmarks(ignore_action_costs(the_problem))
    --search lazy_greedy(ff(problem=prob1), hcea(problem=prob2), hcea())

This would alternate between three heuristics:

 * h^FF applied to a transformed problem where landmark achievement is tracked
   by state variables and all actions have unit cost
 * h^cea applied to the same transformed problem
 * h^cea applied to the original problem (i.e., taking costs into account and
   without compiling landmarks in)
History
Date User Action Args
2019-06-06 12:00:32maltesetstatus: chatting -> resolved
messages: + msg8836
2015-04-20 09:34:13mkatzsetnosy: + mkatz
2014-12-12 14:58:10jendriksetmessages: + msg3914
2014-12-12 13:47:23maltesetmessages: + msg3909
2014-12-12 10:37:04jendriksetnosy: + jendrik
messages: + msg3907
2010-09-09 23:15:42erezsetnosy: + erez
2010-09-09 21:57:42maltesetmessages: + msg519
2010-09-09 21:27:10maltecreate