Issue514

Title consolidate heuristic evaluation functions and only evaluate required information
Priority feature Status resolved
Superseder Nosy List florian, jendrik, malte, salome
Assigned To malte Keywords
Optional summary

Created on 2015-03-05.19:01:17 by florian, last changed by malte.

Messages
msg4039 (view) Author: malte Date: 2015-03-06.17:51:27
Option 2) reminds me of the old "evaluation context" idea of issue77, although
that was mainly intended to pass information *into* the evaluators rather than
*out of the* heuristics. Maybe the ideas can be usefully combined -- I'll look
into that in an experimental branch.
msg4035 (view) Author: malte Date: 2015-03-06.16:31:53
After having a deeper look at how the heuristic information is currently used:
the original idea for this issue won't work. It is currently not possible to
take the information about the evaluation results for the "current state" out of
the heuristic objects because this information is needed in essentially
unpredictable places within the open lists. There are two main ways of
addressing this:

1) keeping the information inside the heuristics and making it the heuristic's
responsibility to access them efficiently, with a nicer protocol/interface than
currently

2) using auxiliary objects that store evaluation information for a given state
and allow efficiently querying the heuristic value for a given heuristic and
making sure it is only evaluated once during one state evaluation

At the moment it looks like there isn't a solution for this that we are all
happy with, so I'll mark this "resolved" in the sense of "leave as is". This
doesn't mean that we think it should stay the way it currently is, but the
suggested implementation strategy won't work, and I don't think more general
structural changes would fit under this issue as we have currently defined it.
msg4032 (view) Author: malte Date: 2015-03-05.19:16:30
Another motivation for this is to simplify the heuristic interface in the sense
that you no longer have to remember to call evaluate() before get_heuristic() etc.
msg4031 (view) Author: florian Date: 2015-03-05.19:01:17
We plan to change the way heuristics are evaluated. Instead of calling
evaluate() and then asking for information (heuristic value, dead end detection,
preferred operators), the plan is to have one function that returns all required
information in one object (EvaluationResult). Optional parameters which default
to true specify which information is required.

Use cases:
In the sampling procedure of iPDB, we are interested in whether a state is a
dead end (but not its heuristic value or preferred operators). This can be
computed much faster than computing the full heuristic value.

In the landmark heuristic with the landmark synergy, computing preferred
operators can require additional overhead that can be avoided if they are not
needed.
History
Date User Action Args
2015-03-06 17:51:27maltesetmessages: + msg4039
2015-03-06 16:32:49maltesetstatus: chatting -> resolved
2015-03-06 16:31:53maltesetmessages: + msg4035
2015-03-06 12:31:16salomesetnosy: + salome
2015-03-05 19:16:30maltesetmessages: + msg4032
title: Only evaluate required information in heuristics -> consolidate heuristic evaluation functions and only evaluate required information
2015-03-05 19:15:00maltesetassignedto: malte
2015-03-05 19:11:04jendriksetnosy: + jendrik
2015-03-05 19:01:17floriancreate