Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Decoupling FS from BFWS: Roadmap #48

Open
gfrances opened this issue Feb 20, 2017 · 5 comments
Open

Decoupling FS from BFWS: Roadmap #48

gfrances opened this issue Feb 20, 2017 · 5 comments
Assignees

Comments

@gfrances
Copy link
Member

We need to completely decouple de BFWS engine from the rest of elements in the FS planner.
This needs to be done along the lines outlined in the IJCAI'17 submission: the BFWS component
only interface is a simulation-based one, in which only black-box implementations
of the set of actions A, the set of actions A(s) applicable to a given state,
and some information about the structure of the state (i.e. number and type of variables)
and of the goals (i.e. a decomposition of the set of goals G into possibly-overlapping
sets of subgoals G_i) is needed.

We need a clean, well-documented, and ideally 0-overhead interface.
As a tentative roadmap, the following current components of FS should fall within "FS user space".

  • All of the Python front-end
  • The FSRIPS language component
  • The "applicable-action" iterators
  • The hybrid state (?)
  • All of the Gecode-based components. The BFWS component needs to be completely independent of Gecode.

And the following current components of FS should fall within the "BFWS component / library":

  • The novelty evaluators
  • The novelty-feature interfaces
  • The IW(k)
  • The width-based GBFS search engines.

Of course this last component will have a distinct namespace.
Not sure if it makes sense to wholle integrate it inside of LAPKT or it'd be better of
as a distinct library (or perhaps sub-library) on top of LAPKT.
Special care should be taken to ensure that the components are well-tested, the
physical design is as good as possible to ensure fast compilation times.

@gfrances gfrances self-assigned this Feb 20, 2017
@miquelramirez
Copy link
Member

miquelramirez commented Feb 20, 2017

All those contributions would be very welcome to LAPKT @gfrances. @nirlipo and me have discussed where to take it, after what we have learnt and we are in agreement that having there basic components, as the ones you mention, is the way to go.

@nirlipo
Copy link
Member

nirlipo commented Feb 24, 2017 via email

@gfrances
Copy link
Member Author

I'm just looking into this now... I was thinking on a module-based division (e.g. à la Boost, but much simpler of course !!), where we can have the development of different components in different repos, and then a simple 'install' script copying headers and library files into a common installation directory.

So for instance I would decouple some things which are in FS right not into a separate project / repo lapkt-novelty. This module would depend only on the base lapkt, and could be compiled standalone.
There'd be a install script which simply copies the whole tree substructure into a general installation directory:

~/projects/code/lapkt-installation$ tree -L 4
.
├── include
│   └── lapkt
│       └── novelty
│           ├── atom_evaluator.hxx
│           ├── base.hxx
│           ├── features.hxx
│           └── multivalued_evaluator.hxx
└── lib
    └── liblapkt-novelty.so

This of course is orthogonal to what you say, @nirlipo.
The thing I don't like about this approach... is that we would have the code in separate repos?
And this might create too much overhead in terms of keeping different versions of the module sync'd.
I like however the idea of the install script, which I have already written, and which is somewhat independent of using the approach above or not. It can be used as a quick way to install / uninstall different LAPKT versions.

@gfrances
Copy link
Member Author

In any case, it clearly seems reasonable to me to maintain the division you mention, Nir.
The poing would be whether we consider e.g. the very-specialized bfws falls within the category of "general algorithms" or within the novelty module...?

@miquelramirez
Copy link
Member

The idea of having specific repos for each module is interesting @gfrances - especially when it comes to making public specific bits and pieces, while leaving private others which are still being worked on and haven't been published.

The concern regarding overheads is a real one, but perhaps could be bridged with automation? Perhaps we could have an "empty" skeleton lapkt repository, with scripts that bootstrap the whole thing via git submodules

https://git-scm.com/docs/git-submodule

how does this sound?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants