Skip to content

Comments

[issue559] Solve the component interaction problem.#285

Open
FlorianPommerening wants to merge 27 commits intoaibasel:mainfrom
FlorianPommerening:issue559
Open

[issue559] Solve the component interaction problem.#285
FlorianPommerening wants to merge 27 commits intoaibasel:mainfrom
FlorianPommerening:issue559

Conversation

@FlorianPommerening
Copy link
Member

This is not quite ready for review yet.

Notable changes:

  • All components now exist in two varieties: task-independent and task-specific.
  • For most components the task-independent variety is an instance of a template class that takes and stores constructor arguments, and then passes them on to the task-specific variant when needed (see component.h). For components where the general template doesn't fit, we add new classes for the task-independent version. Many of the classes we already have already use a factory pattern (landmark factory, pattern generator, etc.) - we plan to use them directly as the task-independent version to reduce the nesting level. But this is deferred to follow-up issues.
  • Heuristic no longer takes a transform argument on the command line. Instead, there is a new heuristic cost_adapted_heuristic that evaluates a nested heuristic under different costs (so far this was the only publicly available transformation).
  • Instead, all task-specific classes now take a shared_ptr<AbstractTask> and store a TaskProxy internally. This task is passed to their constructors when binding a task to a task-independent object. This is currently only used by heuristics and search algorithms. All other classes still get a task in the same way they did before (e.g., in generate_patterns(task)). This is because of the factory-factory pattern mentioned above and will be clearer once we get rid of it.
  • We simplified the inheritance of Feature classes in the plugin code and use a TaskIndependentFeature where we previously used TypedFeature.
  • Features now define options for the task-independent classes, so e.g. take an TaskIndependentEvaluator where they previously took an Evaluator. Our templated automatic task-independent class recursively binds those to a given task before passing them on to the constructor, so the task-specific classes still take the original arguments (e.g., Evaluator). The automatic documentation was adapted so the output should stay the same (still calling the argument and Evaluator).
  • We got rid of a lot of parser code for copying ASTs and lazy instantiation which was only required for iterated search

…hrough a task (currently unused and fixed to the root task)
…omponent instead). Also remove features no_transform and adapt_costs (use cost_adapted_heuristic in the future). AbstractTask is no longer a TaskIndependentComponent.
…of TaskIndependentComponent parameter with concept, expose TaskIndependentComponent::BoundType
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

Successfully merging this pull request may close these issues.

2 participants