RU
EN
Стратегия оптимизации в программе реализована методом перебора (Brute Force), но также заложена возможность добавления собственной стратегии оптимизации путем реализации интерфейса IOptimizationMethod.
В качестве примера приложен код Genetic оптимизации. Код работоспособен, но до конца не отлажен и поставляется по принципу "AS IS" ("как есть"). Никакие гарантии не прилагаются и не предусматриваются.
Вы можете использовать данный код на свой страх и риск.
При создании своей реализации IOptimizationMethod, она должна быть реализована в отдельном проекте как библиотека (C# class library).Сама dll должна быть помещена в в корневой каталог программы TSLab C:\Program Files (x86)\TSLab 2.1 Своя реализация IOptimizationResult на данный момент не предусмотрена.(Нельзя использовать рассчитанные данные, выводимые в окно Результаты для расчетов и пока нельзя Результаты из скрипта транслировать в окно Результат) В окно Результаты оптимизации можно транслировать. Пример - блок "Результат для оптимизации"
The optimization strategy used in TSLab is based on the Brute Force method, but you can also apply your own optimization with the help of the IOptimizationMethod interface.
You can try to use the attached Genetic optimization code. The code is operational, but has not been debugged completely so you can ise it only "as is". Correct results are not guaranteed.
You may use this code at your own risk.
When creating your own IOptimizationMethod implementation, implement it as a separate project as a library (C # class library).
The dll itself should be placed in the root directory of TSLab C: \ Program Files (x86) \ TSLab 2.1
At the moment TSLab doesn’t provide its own implementation of IOptimizationResult.(It is impossible to use the calculated data displayed in the Results window for calculations, and while it is impossible to translate the Results from the script into the Result window) The Optimization Results window can be broadcast. An example is the "Result for optimization" block.
Как работает. Генетика находит случайный пик, цепляется за него и дооптимизирует. Если был другой пик (лучший), пропущенный в первом поколении, о нем алгоритму неизвестно. Генетика не может найти несколько вершин, их может найти только брутфорс. Генетика без UI выбора параметра, по которому выбирать лучший результат в поколении, не имеет смысла, в нашем примере алгоритм работает по лучшему профиту.
Сначала происходит случайный перебор значений, который выражается в количестве равному размеру популяции. Из этого количества выделяется один результат, с самым большим значением по фактору восстановления (result.RecoveryFactor), и на основе его результата делается новое поколение в количестве равному размеру популяции. Шанс мутации 0.6. Это 60%. 60% что любой параметр изменится. Сила мутации 0.8. Это значит, что параметр который меняется, может изменится от найденного значения на 80% от диапазона заданного пользователем при оптимизации. Мутируется по формуле: Cnew = Cold + F * (A - B) A - значение, Cold, B - случайные значения из поколения, F - сила мутации Результат нормализуется, чтобы был в рамках допустимых значений.
Получение новых особей во втором и далее поколении осуществляется только методом мутации.
If there was another better peak missed in the first generation, the algorithm would not know it.
The genetic algorithm cannot find several peaks; they can only be found by brute force. Without UI parameter selection choosing the best result in a generation, the genetic algorithm does not make sense. In our example, the algorithm works at the best Recovery Factor.
Размер популяции Количество популяций Шанс мутации Сила мутации
Population size for a genetic algorithm Number of populations Mutation probability Power Mutation In genetic evolution