Issue667

Title Merge-and-Shrink: Integrate SCCs based merge strategy
Priority feature Status resolved
Superseder Nosy List malte, silvan
Assigned To silvan Keywords
Optional summary

Created on 2016-09-02.10:41:48 by silvan, last changed by silvan.

Messages
msg6238 (view) Author: silvan Date: 2017-04-27.10:25:39
Thanks for the feedback; merged.
msg6231 (view) Author: malte Date: 2017-04-26.18:52:45
Thanks! I made some comments directly for the two commits (because I wanted to
see the diff between the previous version and the new commits) and some more for
the pull requests. I hope you get notifications for all of these. After these
small comments are addressed, I think this can be merged.
msg6230 (view) Author: silvan Date: 2017-04-26.18:23:22
I updated the pull request with the changes to sccs and the changes from the
other comments.
msg6213 (view) Author: malte Date: 2017-04-25.11:28:21
Code review done. Looks like this is done apart from the changes to the SCC
algorithm we discussed.
msg6211 (view) Author: silvan Date: 2017-04-25.11:09:13
Great! The pull request is updated.
msg6209 (view) Author: malte Date: 2017-04-25.10:51:55
Hi Silvan, it's FIFO time! Can you bring the pull request up to date, i.e., make
sure that it is based on the most recent master version? If I look at it right
now, I see some small conflicts (e.g. in the CMake files).
msg5971 (view) Author: silvan Date: 2016-12-22.11:39:02
I ran experiments for two versions: v1 is the one that matches the paper, but
which uses a hack, and v2 is the "clean" version.

The hack: the previous implementation of DFP (before the refactoring of the
design of merge strategies) did not compute DFP scores for any pair of
transition systems where both were not goal-relevant. With the new
implementation of DFP as a chain of score-based selectors where after each
iteration, only the pairs with the best score remain, we would first "filter
out" all pair that are not goal-relevant, then evaluate the remaining ones with
DFP, before finally using the usual tie-breaking criteria. If there are no
goal-relevant pairs (which is possible when merging an SCC that does not contain
any goal variable), we would compute DFP on *all* pairs, which differs from the
old implementation of DFP. Hence the hack skipped the evaluation with DFP at
this point. 

The following tables are a subset of the full reports (linked below), relevant
for Table 4 of the ICAPS16 paper:
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-v1-paper.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-v2-paper.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-compare-v1-v2-paper.html

abp: atomic before product (prefer atomic transition systems over products)
pba: product before atomic (prefer product transition systems over atomics)
rl/l/rnd: order of atomic transition systems (reverse level/level/random)
nto/otn/rnd: order product transition systems (new to old/old to new/random)

The differences between using the hack and not using it is very small, hence we
can safely not use it. Furthermore, like in issue668, the results match those in
the paper, except for the configurations that use RNG-based tie-breaking. Again,
this is due to the change from using a local to the "global" RNG always, and I
think that this is ok.

Full reports:
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-v1-abp.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-v1-pba.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-v2-abp.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-v2-pba.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-compare-v1-v2-abp.html
http://ai.cs.unibas.ch/_tmp_files/sieverss/issue667-compare-v1-v2-pba.html
msg5622 (view) Author: silvan Date: 2016-09-09.20:30:18
> I was thinking of a high-level description of what should go where (and perhaps
> why, i.e., the rationale). Something that could help people decide where to put
> things and also help find things and understand the code structure on a high
level.

> Regarding where/how to document it: don't really know. I'll suggest it for the
> next meeting.
issue672 deals with that.

I also pushed the review to the new queue.
msg5597 (view) Author: malte Date: 2016-09-04.19:21:00
> What exactly did you mean by "master documentation on the directory structure"?
> Something that lists the precise contents of each directory, or rather a
> conceptual description of where to find what? Should this be a document of the
> code repository or a description of the homepage?

I was thinking of a high-level description of what should go where (and perhaps
why, i.e., the rationale). Something that could help people decide where to put
things and also help find things and understand the code structure on a high level.

Regarding where/how to document it: don't really know. I'll suggest it for the
next meeting.
msg5592 (view) Author: silvan Date: 2016-09-04.17:40:00
I made the change, moving the class SCCs to the subdir algorithms, as the first
representative of such classes. Issue669 will deal with with moving further
algorithms there.

What exactly did you mean by "master documentation on the directory structure"?
Something that lists the precise contents of each directory, or rather a
conceptual description of where to find what? Should this be a document of the
code repository or a description of the homepage?
msg5587 (view) Author: malte Date: 2016-09-02.13:51:54
I'm in favour of an algorithms directory. I 
wouldn't move the RNG there. Do we have a 
master documentation on the directory 
structure somewhere? If not, I think this 
would be good to add.
msg5586 (view) Author: silvan Date: 2016-09-02.13:47:18
Florian mentioned a few examples* that could end up in a subdirectory
"algorithms", but we don't have concrete plans for this yet. This algorithm
collection could then contain a CMake plugin for each utility that ends up being
there. I'm not sure if there are that many examples of such algorithms that
grouping them into their own directory would be justified, but maybe it is still
worth starting this now. What do you think? 

Otherwise, I'd leave the files in the main directory and have a separate CMake
plugin for the class (and a namespace, because CMake plugin also means
namespace, if I remember correctly).

*max clique computation of PDBs, Intpacker, maybe RNG which is now part of
"utils" (although I think this would rather be a system utility than an algorithm)
msg5585 (view) Author: malte Date: 2016-09-02.13:11:38
I think we discussed a place for "algorithmic utilities" like these. Perhaps
Florian might know?
msg5584 (view) Author: silvan Date: 2016-09-02.12:14:54
I included the scc files, which I think originally stem from Fast Downward's
preprocessor, as a CMake plugin rather than making it part of the core. I don't
know if there is a better place for this class, as it is rather a utility, but
still does not fit the "systems utils" plugin we have.

The code can be found here:
https://bitbucket.org/SilvanS/fd-dev/pull-requests/19/issue667/diff

I'd like to queue this code review into the famous Downward FIFO :-)
msg5582 (view) Author: silvan Date: 2016-09-02.10:41:48
We would like to integrate the recent merge strategy based on SCCs of the causal
graph, from the ICAPS 2016 paper An Analysis of Merge Strategies for
Merge-and-Shrink Heuristics.
History
Date User Action Args
2017-04-27 10:25:39silvansetstatus: in-progress -> resolved
messages: + msg6238
2017-04-26 18:52:45maltesetmessages: + msg6231
2017-04-26 18:23:22silvansetmessages: + msg6230
2017-04-25 11:28:21maltesetmessages: + msg6213
2017-04-25 11:09:13silvansetmessages: + msg6211
2017-04-25 10:51:55maltesetmessages: + msg6209
2016-12-22 11:39:02silvansetstatus: chatting -> in-progress
messages: + msg5971
2016-09-09 20:30:18silvansetmessages: + msg5622
2016-09-04 19:21:01maltesetmessages: + msg5597
2016-09-04 17:40:00silvansetmessages: + msg5592
2016-09-02 13:51:54maltesetmessages: + msg5587
2016-09-02 13:47:18silvansetmessages: + msg5586
2016-09-02 13:11:38maltesetmessages: + msg5585
2016-09-02 12:14:54silvansetmessages: + msg5584
2016-09-02 10:41:48silvancreate