Issue89

Title compute causal graph in search code and distinguish the "two kinds" of causal graphs
Priority wish Status resolved
Superseder Nosy List andrew.coles, erez, gabi, malte, mkatz
Assigned To malte Keywords
Optional summary

Created on 2010-06-06.16:10:15 by malte, last changed by malte.

Messages
msg2390 (view) Author: malte Date: 2013-02-12.15:50:49
Done.
msg2388 (view) Author: malte Date: 2013-02-12.15:49:32
For an unrelated reason, I recently implemented a new version of the causal
graph. This change resolves this issue, since the new implementation supports
different kinds of causal graph.

The old implementation is still around ("legacy causal graph") and used in the
places that previously used the causal graph. I've opened an issue to get rid of
it eventually (issue372).
msg334 (view) Author: malte Date: 2010-06-06.19:15:52
If u doesn't occur in any preconditions or goal (in any given abstraction), it
is irrelevant (for that abstraction), so two states which only differ in u value
will have the same abstract goal distance -- so we don't need to worry about the
value of u.
msg333 (view) Author: mkatz Date: 2010-06-06.19:12:01
I am almost convinced. What about states that differ only in the value of u?
Don't we want to distinguish between their values?
msg332 (view) Author: malte Date: 2010-06-06.18:44:42
I think there is no point in including u in that case. If you consider the
situation before conversion into unary operators (since that itself is an
abstraction), then no operator in the projection to the fork variables has a
precondition on u, so why bother including it?

Every abstract plan in the abstraction without u can be mapped to an abstract
plan of the same cost in the abstraction including u, so there's no point in
making the problem larger.
msg331 (view) Author: mkatz Date: 2010-06-06.18:32:51
In such an inverted fork this operator will be decomposed into two operators,
one changing u, and one changing v preconditioned by the effect value of u. 
I think there may be cases when you would like to have u in the inverted fork,
even if there is no goal defined on u.
msg329 (view) Author: malte Date: 2010-06-06.18:15:55
The way I see it, the best choice between type (A) and (B) for structural
patterns might depend on whether or not you have a goal defined on the given
variable.

For example, in an inverted fork pattern for variable v, if there is a variable
u s.t. u and v are affected by some common operator but u does not have a
precondition in such operators, then there is no point in including u in the
pattern *unless* there's a goal defined in u (in which case it might be either a
good idea or a bad idea, depending on the specifics of the case and the cost
partitioning that is used).
msg327 (view) Author: erez Date: 2010-06-06.17:52:05
Added Michael, since he had that problem (with structural patterns) a long time 
ago.
msg324 (view) Author: malte Date: 2010-06-06.16:10:15
There are two "causal graph" variants that are interesting:

 (A) arcs from condition vars to effect vars and arcs between effect vars
 (B) arcs from condition vars to effect vars only

The standard definition is (A). However, our code actually implements (B).

This is actually preferable for some things. For example, for relevance
analysis, definition (B) is better because using it still allows us to do sound
pruning and gives us the possibility of pruning more than with (A). Extreme
examples of that can be found in Trucks-Strips (e.g. task #1).

However, we should *not* use definition (B) and call it "causal graph" without
further qualifications. Maybe call it "dependency graph" instead? Or even
something very descriptive like "condition-effect graph"?

We should go through the code that uses the causal graph and check for each
individual case which of the two definitions should be used. If necessary, we
should provide both graphs in the code (maybe implemented as a single data
structure with annotated edges that can give us both kinds of information).
History
Date User Action Args
2013-02-12 15:50:49maltesetstatus: chatting -> resolved
messages: + msg2390
2013-02-12 15:49:32maltesetassignedto: malte
messages: + msg2388
title: distinguish the "two kinds" of causal graphs -> compute causal graph in search code and distinguish the "two kinds" of causal graphs
2013-02-12 15:40:29maltesetnosy: + gabi
2010-06-06 19:15:52maltesetmessages: + msg334
2010-06-06 19:12:02mkatzsetmessages: + msg333
2010-06-06 18:44:42maltesetmessages: + msg332
2010-06-06 18:32:51mkatzsetmessages: + msg331
2010-06-06 18:15:55maltesetmessages: + msg329
2010-06-06 17:52:05erezsetmessages: + msg327
2010-06-06 17:50:58erezsetnosy: + erez, mkatz
2010-06-06 17:19:12andrew.colessetnosy: + andrew.coles
2010-06-06 16:10:30maltesettitle: distinguish edge types in causal graph -> distinguish the "two kinds" of causal graphs
2010-06-06 16:10:15maltecreate