Andrey Dik #: Сомневаюсь, что значение GetMicrosecondCount может повторить значения при повторных запусках, даже если сильно постараться. При условии, что отдельные тесты проходят дольше микросекунды, конечно.
99.99% это максимум, которого можно достичь с выбранным шагом, а насколько я понимаю, выбрана точность два знака после запятой в настройках BGA.
Так что, это не следствие одинаковой инициализации гсч, а результат полной теоретически возможной сходимости в рамках поставленной задачи.
Можно в этом убедится, если распечатать самую первую созданную хромосому в каждом отдельном тесте, это будут разные хромосомы. В этом и есть удивительное свойство алгоритма оптимизации - находить одно и то же решение при разных (рандомных) начальных состояниях.
Пришёл в голову тест на устойчивость алго к застреванию в локалах.
Нужно разместить всех агентов на первой итерации не случайно по всему полю, а в глобальном минимуме. Задача - найти глобальный максимум. Уверен, что многие алго так и останутся в яме.
Это очень искусственный случай, но имеющий интересные выводы.
Пришёл в голову тест на устойчивость алго к застреванию в локалах.
Нужно разместить всех агентов на первой итерации не случайно по всему полю, а в глобальном минимуме. Задача - найти глобальный максимум. Уверен, что многие алго так и останутся в яме.
Это очень искусственный случай, но имеющий интересные выводы.
Вся популяция в одной точке - это вырожденная популяция. Это так же тест на влияние уменьшения разнообразия в популяции, алгоритм должен способен выйти из такого "бутылочного горлышка".
Нужно разместить всех агентов на первой итерации не случайно по всему полю, а в глобальном минимуме. Задача - найти глобальный максимум.
Обычный запуск с поиском глобального максимума.
Далее запускаемся из найденной точки (MaxTmp) для поиска глобального минимума.
Далее запускаемся из найденной точки (MinTmp) для поиска глобального максимума.
Переход на п.2.
В п.2-3 замеряем, как далеко находимся от глобальных минимумов/максимумов (MaxGlobal - MaxTmp + MinTmp - MinGlobal). Средний показатель - рейтинг1 алгоритма оптимизации.
Берем среднее значение от суммы (MaxTmp[i] - MinTmp[i]) - рейтинг2 алгоритма оптимизации.
Сейчас нет функции, позволяющей запускать алгоритм из точки.
Далее запускаемся из найденной точки (MaxTmp) для поиска глобального минимума.
Далее запускаемся из найденной точки (MinTmp) для поиска глобального максимума.
Переход на п.2.
В п.2-3 замеряем, как далеко находимся от глобальных минимумов/максимумов (MaxGlobal - MaxTmp + MinTmp - MinGlobal). Средний показатель - рейтинг1 алгоритма оптимизации.
Берем среднее значение от суммы (MaxTmp[i] - MinTmp[i]) - рейтинг2 алгоритма оптимизации.
Можно и так))
Сейчас нет функции, позволяющей запускать алгоритм из точки.
Можно "насильно" снаружи инициализировать координаты агентов любыми значениями перед замером ФФ на самой первой эпохе. Благо поля агентов публичные. "Кишки" алгоритмов постарался сделать максимально доступными из вне, это, конечно, противоречит обычному подходу по обеспечению безопасности полей, но желающий выстрелить себе в ногу в любом случае найдёт способ, а так сохранено удобство использования алго.
99.99% это максимум, которого можно достичь с выбранным шагом, а насколько я понимаю, выбрана точность два знака после запятой в настройках BGA.
Так что, это не следствие одинаковой инициализации гсч, а результат полной теоретически возможной сходимости в рамках поставленной задачи.
Можно в этом убедится, если распечатать самую первую созданную хромосому в каждом отдельном тесте, это будут разные хромосомы. В этом и есть удивительное свойство алгоритма оптимизации - находить одно и то же решение при разных (рандомных) начальных состояниях.
С алгоритмом BGA такой трюк не пройдёт, потому что таким образом мы перепишем только фенотип, а бинарный генотип останется при этом неизменным. Для него придётся залезть внутрь алгоритма и когда популяция в зачаточном состоянии - сделать такую хирургическую операцию.
Вот что получится, если инициализировать таким способом ESG:
Вот, снял видео с ESG, видно, как он вылазит из одной точки и распространяется вокруг в поисках глобального максимума. Так будут вести себя далеко не все алгоритмы, я писал об этом в статьях, некоторые алгоритмы вообще лишены механизмов "вылезать из ловушки".
Привет, я только начинаю узнавать об альтернативах встроенному быстрому генетическому алгоритму. Мне интересно, не могли бы вы помочь мне заставить вашу оптимизацию BGA работать. Я просматривал некоторые ваши статьи на эту тему. Однако у меня такое ощущение, что я начинаю поздно, где-то упустил какую-то информацию и не знаю, как на самом деле оптимизировать советник с другим алгоритмом. Я скачал и скомпилировал test_ao_bga.mq5. При загрузке терминала пишет: «Неверный тип программы, загрузка Test_AO_BGA.ex5 не удалась». Если я попытаюсь запустить его, терминал сообщит: «Test_AO_BGA.ex5 не найден». Не могли бы вы помочь мне заставить его работать? И как мне настроить свой собственный советник для использования оптимизации BGA? Спасибо.
Сомневаюсь, что значение GetMicrosecondCount может повторить значения при повторных запусках, даже если сильно постараться. При условии, что отдельные тесты проходят дольше микросекунды, конечно.
Слева столбец времени запуска скрипта.
Слева столбец времени запуска скрипта.
Вся популяция в одной точке - это вырожденная популяция. Это так же тест на влияние уменьшения разнообразия в популяции, алгоритм должен способен выйти из такого "бутылочного горлышка".
Ну это так, просто размышления вслух.
В п.2-3 замеряем, как далеко находимся от глобальных минимумов/максимумов (MaxGlobal - MaxTmp + MinTmp - MinGlobal). Средний показатель - рейтинг1 алгоритма оптимизации.
Берем среднее значение от суммы (MaxTmp[i] - MinTmp[i]) - рейтинг2 алгоритма оптимизации.
Сейчас нет функции, позволяющей запускать алгоритм из точки.
В п.2-3 замеряем, как далеко находимся от глобальных минимумов/максимумов (MaxGlobal - MaxTmp + MinTmp - MinGlobal). Средний показатель - рейтинг1 алгоритма оптимизации.
Берем среднее значение от суммы (MaxTmp[i] - MinTmp[i]) - рейтинг2 алгоритма оптимизации.
Можно и так))
Можно "насильно" снаружи инициализировать координаты агентов любыми значениями перед замером ФФ на самой первой эпохе. Благо поля агентов публичные. "Кишки" алгоритмов постарался сделать максимально доступными из вне, это, конечно, противоречит обычному подходу по обеспечению безопасности полей, но желающий выстрелить себе в ногу в любом случае найдёт способ, а так сохранено удобство использования алго.
И, вопрос с инициализацией ГСЧ урегулирован?
Вы правы, спасибо!
Можно "насильно" снаружи инициализировать координаты агентов любыми значениями перед замером ФФ на самой первой эпохе.
Просьба показать на примерах двух своих алгоритмов.
Просьба показать на примерах двух своих алгоритмов.
в главном цикле эпох вставить код, который перезапишет координаты агентов на координаты глобального минимума функции:
С алгоритмом BGA такой трюк не пройдёт, потому что таким образом мы перепишем только фенотип, а бинарный генотип останется при этом неизменным. Для него придётся залезть внутрь алгоритма и когда популяция в зачаточном состоянии - сделать такую хирургическую операцию.
Вот что получится, если инициализировать таким способом ESG:
Вот, снял видео с ESG, видно, как он вылазит из одной точки и распространяется вокруг в поисках глобального максимума. Так будут вести себя далеко не все алгоритмы, я писал об этом в статьях, некоторые алгоритмы вообще лишены механизмов "вылезать из ловушки".