Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
  • Sign in / Register
  • F FEDOT
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 87
    • Issues 87
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 1
    • Merge requests 1
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Container Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • ITMO-NSS-team
  • FEDOT
  • Issues
  • #706

Closed
Open
Created Jun 06, 2022 by Elizaveta Lutsenko@LizLutsenkoOwner1 of 7 tasks completed1/7 tasks

Make evolutionary operators & Optimiser modular

Created by: gkirgizov

I have a thought of abstracting evolutionary operators as classes, that will encapsulate all necessary parameters and provide concise functional interface. In other words, I'd like to separate specification of the operator from its actual usages.

Motivation is just a cleaner design, that will allow more straightforward extensions and modifications of the base evolutionary algorithm.

Example for mutation:

# specification in __init__ or in Composer
mutation = MutationOperator(types=self.parameters.mutation_types,
                        params=self.graph_generation_params,
                        requirements=requirements,
                        max_depth=max_depth, log=self.log)

...
# simple usage in .optimise()
new_population = self.mutation(previous_population)

If all operators are represented in this form, then Optimiser can be just constructed from specific implementations of operators, something like:

optimiser = EvoOptimiser(mutation_operator, crossover_operator, selection_operator)

Operators to refactor:

  • #737 (closed)
  • #727 (closed)
  • Mutation
  • Selection
  • Crossover
  • Regularisation
  • Elitism can also be represented as an operator acting on previous & new population (its usage can look like next_population = Elitism(previous_pop, new_pop))
Assignee
Assign to
Time tracking