API. Plugins. Implementing IOptimizationMethod

Стратегия оптимизации в программе реализована методом перебора (Brute Force), но также заложена возможность добавления собственной стратегии оптимизации путем реализации интерфейса IOptimizationMethod.

В качестве примера приложен код Genetic оптимизации. Код работоспособен, но до конца не отлажен и поставляется по принципу "AS IS" ("как есть"). Никакие гарантии не прилагаются и не предусматриваются.

Вы можете использовать данный код на свой страх и риск.

При создании своей реализации IOptimizationMethod, она должна быть реализована в отдельном проекте как библиотека (C# class library).Сама dll должна быть помещена в в корневой каталог программы TSLab C:\Program Files (x86)\TSLab 2.1 Своя реализация IOptimizationResult на данный момент не предусмотрена.(Нельзя использовать рассчитанные данные, выводимые в окно Результаты для расчетов и пока нельзя Результаты из скрипта транслировать в окно Результат) В окно Результаты оптимизации можно транслировать. Пример - блок "Результат для оптимизации"

Размер популяции

Количество популяций

Шанс мутации

Сила мутации

wiki Генетический алгоритм

Как работает. Генетика находит случайный пик, цепляется за него и дооптимизирует. Если был другой пик (лучший), пропущенный в первом поколении, о нем алгоритму неизвестно. Генетика не может найти несколько вершин, их может найти только брутфорс. Генетика без UI выбора параметра, по которому выбирать лучший результат в поколении, не имеет смысла, в нашем примере алгоритм работает по лучшему профиту.

Сначала происходит случайный перебор значений, который выражается в количестве равному размеру популяции. Из этого количества выделяется один результат, с самым большим значением по фактору восстановления (result.RecoveryFactor), и на основе его результата делается новое поколение в количестве равному размеру популяции. Шанс мутации 0.6. Это 60%. 60% что любой параметр изменится. Сила мутации 0.8. Это значит, что параметр который меняется, может изменится от найденного значения на 80% от диапазона заданного пользователем при оптимизации. Мутируется по формуле: Cnew = Cold + F * (A - B) A - значение, Cold, B - случайные значения из поколения, F - сила мутации Результат нормализуется, чтобы был в рамках допустимых значений.

Получение новых особей во втором и далее поколении осуществляется только методом мутации.

  1. Сначала запускается метод Initialize, он выдает количество шагов, в генетике: return ((int)m_generationSize) * (int)m_nGenerations; Размер популяции * Количество популяций

  2. В каждом потоке вызывается GetNextProperties, берутся эти параметры и запускается проход скрипта.

  3. Полученные результаты передаются в AddResult в генетике эти результаты влияют на будущие параметры оптимизации (GetNextProperties) повторяются шаги 2,3 пока не пройдут все варианты.