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
  • #107

Closed
Open
Created Jun 04, 2020 by Rosneft rosneft@rosneft_userDeveloper

Рефакторинг GPOptimiser

Предложения по рефакторингу:

  1. Сделайте блок-схему текущей версии алгоритма. Выделите на ней все этапы кастомизирования: виды регуляризации, тип inheritance, генетические операторы и прочее.
  2. Попробуйте (хотя бы мысленно) набросать абстрактный алгоритм или шаблонный метод GPChainOptimiser.optimize так, чтобы все выделенные выше методы можно было передавать из-вне, например, в конструкторе.
  3. Реализуйте пример такой "реализации" абстрактного алгоритма. Составные (кастомные) блоки можно реализовать либо с применением функционального программирования, либо через паттерн Command.
  4. Не получается все-таки избежать if-else конструкций в алгоритме (например, в зависимости от того, выбрана ли схема регуляризации, нужно применять (или нет) соответствующий метод для популяции?
  • Попробуйте набросать для этого метод по умолчанию, который, например, возвращает популяцию без изменений.
  1. Возможно, это все еще будет выглядеть не очень. Тогда имеет смысл задуматься: а, может быть, не все возможные кастомизации натягиваются на единственную абстракцию (алгоритм)?
  • Если да, то, возможно, имеет смысл реализовать несколько шаблонных методов / алгоритмов. Да, может частично возникнуть дублирование, но 2 простых версии алгоритма проще поддерживать, чем одну, но чересчур сложную.
  1. Убедитесь, что все составные элементы покрыты тестами, а также реализации алгоритмов тоже.
  2. Неудобно постоянно дублировать сборку алгоритма из составных операторов?
  • Задумайтесь насчет создания специального объекта - Builder-а, который будет за вас его собирать. Составные блоки алгоритма можно продублировать за счет его методов. Пример неплохого билдера см. тут: https://habr.com/ru/post/244521/

Подробности в https://github.com/nccr-itmo/FEDOT/pull/89#discussion_r435338199

Assignee
Assign to
Time tracking