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

Algorithm simplification #47

Open
5 of 7 tasks
OndrejNepozitek opened this issue Nov 17, 2019 · 0 comments
Open
5 of 7 tasks

Algorithm simplification #47

OndrejNepozitek opened this issue Nov 17, 2019 · 0 comments
Labels

Comments

@OndrejNepozitek
Copy link
Owner

OndrejNepozitek commented Nov 17, 2019

The goal of this feature is to simplify the ChainBasedGenerator class. The problem is that the current implementation can generate layouts for different map descriptions without having to create a new instance of the generator. To support that, the generator provides multiple SomethingCreator() classes that are used to set factories for individual components of the algorithm. This makes the algorithm needlessly complex e.g. because it must have additional generic parameters.

The goal is to make the generator simpler. It will possibly mean that users will have to do more of the work themselves (decomposing graphs, creating configuration spaces, etc.). However, even now, we need factory methods to create an instance of the generator so we may implement something similar with the new algorithm.

The new implementation will be probably specialized on a single map description - we will probably have to create a new generator instance for each map description. But that is something that is already being done for example when benchmarking the library, so it is probably not an issue.

Use case 1

Learning parameters for simulated annealing, like when to restart the current run.

Phase 1

  • Remove GetLog() from IGeneratorPlanner interface - it can be on the implementation.
  • Greedily add nodes to the layout insided SimulatedAnnealingEvolver instead of in the generator itself. Think about who needs to make copies of the layout so that nothing important is overwritten.
  • Change IGeneratorPlanner to work directly with ILayoutEvolver instead of LayoutGeneratorFunction.
  • Change IGeneratorPlanner to always generate only a single layout.
  • Remove IGeneratorContext
  • Maybe add more information to event handlers like OnLayoutPerturbed (number of iterations, etc.)

Phase 2

  • Remove old interfaces
Repository owner locked and limited conversation to collaborators Nov 20, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

1 participant