Yuriy Bykov #: С преждевременным вырождением популяции параметров генетической оптимизации сталкиваться приходилось
Получается доверять генетической оптимизации нельзя. Запустил один раз: нашел более-менее приличный результат. Потом запустил несколько раз с другими комбинациями параметров, в которые обязательно входил результат первой оптимизации. Все последующие выродились, даже близко не достигнув результат первой. Причем поведение последующих одинаковое: каждый раз на новом поколении запускает проходов не больше количества имеющихся агентов. И каждый раз новые поколения не находят результат выше 0-го. Что не удивительно - при таком ничтожно малом количестве новых проходов.
Первая оптимизация:
2024.07.3100:06:47.602 Tester Best result 917.7769495942078 produced at generation 2. Next generation 3
Вторая оптимизация с комбинацией параметров, которую нашла первая:
2024.07.3108:02:54.541 Tester Best result 572.0037530596592 produced at generation 0. Next generation 12024.07.3108:03:53.669 Tester Best result 572.0037530596592 produced at generation 0. Next generation 22024.07.3108:05:07.264 Tester Best result 572.0037530596592 produced at generation 0. Next generation 32024.07.3108:07:13.690 Tester Best result 572.0037530596592 produced at generation 0. Next generation 42024.07.3108:07:42.802 Tester Best result 572.0037530596592 produced at generation 0. Next generation 52024.07.3108:08:58.490 Tester Best result 572.0037530596592 produced at generation 0. Next generation 62024.07.3108:10:22.149 Tester Best result 572.0037530596592 produced at generation 0. Next generation 72024.07.3108:11:20.351 Tester Best result 572.0037530596592 produced at generation 0. Next generation 82024.07.3108:12:34.242 Tester Best result 572.0037530596592 produced at generation 0. Next generation 92024.07.3108:13:55.450 Tester Best result 572.0037530596592 produced at generation 0. Next generation 102024.07.3108:14:50.479 Tester Best result 572.0037530596592 produced at generation 0. Next generation 112024.07.3108:16:15.610 Tester Best result 572.0037530596592 produced at generation 0. Next generation 122024.07.3108:17:23.609 Tester Best result 572.0037530596592 produced at generation 0. Next generation 132024.07.3108:18:16.493 Tester Best result 572.0037530596592 produced at generation 0. Next generation 142024.07.3108:19:15.242 Tester Best result 572.0037530596592 produced at generation 0. Next generation 152024.07.3108:20:08.332 Tester Best result 572.0037530596592 produced at generation 0. Next generation 16
Другой вопрос: почему менеджер агентов тестирования дает добавить сетевых агентовтолькоровно половину от имеющихся локальных агентов? У меня комп в сети запущен только ради теста, никто на нем не работает. Получается половина мощности простаивает.
Получается доверять генетической оптимизации нельзя. Запустил один раз: нашел более-менее приличный результат. Потом запустил несколько раз с другими комбинациями параметров, в которые обязательно входил результат первой оптимизации. Все последующие выродились, даже близко не достигнув результат первой.
Штатный ГА сваливается в локальный экстремум и не может из него выбраться. Поэтому и существуют разные алгоритмы оптимизации.
Получается доверять генетической оптимизации нельзя. Запустил один раз: нашел более-менее приличный результат. Потом запустил несколько раз с другими комбинациями параметров, в которые обязательно входил результат первой оптимизации.
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Вы проверяли, влияет ли изменение каждого параметра на результаты одного прохода? Если какие-то параметры или не влияют на результат, или очень слабо влияют, или влияют только в небольшой области значений из указанного им диапазона возможных значений, или влияют только при определённых комбинациях значений других параметров, то это может приводить к вырождению популяции (=застревание в локальном экстремуме)
Другой вопрос: почему менеджер агентов тестирования дает добавить сетевых агентовтолькоровно половину от имеющихся локальных агентов? У меня комп в сети запущен только ради теста, никто на нем не работает. Получается половина мощности простаивает.
Тут ответ простой: у вас у процессора 4 физических ядра и 8 логических. Грубо говоря, пара логических ядер использует одно физическое. Локальные агенты создаются по количеству логических ядер. Сетевые агенты создаются по умолчанию по количеству физических ядер. Сетевые агенты будут работать примерно в два раза быстрее локальных (если конечно, во время использования сетевых агентов не используются локальные и наоборот). В конечном итоге всё упирается в ресурсы имеющегося процессора. В обоих вариантах он задействуется почти на полную мощность. Кажется, пару лет назад я выбирал, как лучше организовать тестирование на нескольких компьютерах, и какой из них делать главным. Там получалось, что преимуществ использования восьми локальных агентов по сравнению с использованием этого компьютера как поставщика четырёх сетевых агентов не было обнаружено.
Если вы хотите использовать сетевых агентов только самостоятельно, а не продавать их мощности через MQL Cloud Network, то, если я правильно помню, вы можете добавить сколько угодно служб сетевых агентов. Можно сделать и 8, и 12, и 16... Продавать же мощности сетевых агентов можно только если их не больше, чем количество физических ядер процессора.
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Вы проверяли, влияет ли изменение каждого параметра на результаты одного прохода? Если какие-то параметры или не влияют на результат, или очень слабо влияют, или влияют только в небольшой области значений из указанного им диапазона возможных значений, или влияют только при определённых комбинациях значений других параметров, то это может приводить к вырождению популяции (=застревание в локальном экстремуме)
Нельзя ставить знак равенства между вырождением популяции и застреванию в локале. Вырождение популяции означает отсутствие новых решений и забивание всей популяции решениями с близким значением ФФ - этим генетика особо не страдает, мутация периодически создаёт новые решения, которые встряхивают популяцию.
Другое дело, что проблема с застреванием в локале действительно может быть. Тут может помочь либо искусственное сглаживание ФФ какими нибудь приёмами или вообще переделка формулы ФФ, либо использовать самописные алгоритмы, благо MQL5 позволяет это делать.
Лекарством (не панацея) от застревания может быть уменьшение шага параметров - уменьшение дискретности задачи за счёт увеличения пространства поиска (поэтому не бесплатное лекарство).
Я понимаю, что такие проблемы есть. Но так и не получил объяснения, почему в нулевом поколении много проходов (у меня около 300), а в последующих - стабильно не более количества имеющихся агентов (в моем случае 7). Разве не правильнее скрестить лучшего из 0-го еще с 300, и т.д.?
Ivan Titov #: Я понимаю, что такие проблемы есть. Но так и не получил объяснения, почему в нулевом поколении много проходов (у меня около 300), а в последующих - стабильно не более количества имеющихся агентов (в моем случае 7). Разве не правильнее скрестить лучшего из 0-го еще с 300, и т.д.?
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Попробуйте сократить диапазоны перебора параметров или увеличить размеры шага для параметров, чтобы количество комбинаций стало поменьше (~1000), и запустите полный перебор. Будут ли в этом случае все проходы давать разные результаты?
И, кстати, какой критерий оптимизации у вас используется? Ваш кастомный или один из стандартных?
С преждевременным вырождением популяции параметров генетической оптимизации сталкиваться приходилось
Получается доверять генетической оптимизации нельзя. Запустил один раз: нашел более-менее приличный результат. Потом запустил несколько раз с другими комбинациями параметров, в которые обязательно входил результат первой оптимизации. Все последующие выродились, даже близко не достигнув результат первой. Причем поведение последующих одинаковое: каждый раз на новом поколении запускает проходов не больше количества имеющихся агентов. И каждый раз новые поколения не находят результат выше 0-го. Что не удивительно - при таком ничтожно малом количестве новых проходов.
Другой вопрос: почему менеджер агентов тестирования дает добавить сетевых агентов только ровно половину от имеющихся локальных агентов? У меня комп в сети запущен только ради теста, никто на нем не работает. Получается половина мощности простаивает.
Получается доверять генетической оптимизации нельзя. Запустил один раз: нашел более-менее приличный результат. Потом запустил несколько раз с другими комбинациями параметров, в которые обязательно входил результат первой оптимизации. Все последующие выродились, даже близко не достигнув результат первой.
Получается доверять генетической оптимизации нельзя. Запустил один раз: нашел более-менее приличный результат. Потом запустил несколько раз с другими комбинациями параметров, в которые обязательно входил результат первой оптимизации.
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Вы проверяли, влияет ли изменение каждого параметра на результаты одного прохода? Если какие-то параметры или не влияют на результат, или очень слабо влияют, или влияют только в небольшой области значений из указанного им диапазона возможных значений, или влияют только при определённых комбинациях значений других параметров, то это может приводить к вырождению популяции (=застревание в локальном экстремуме)
Другой вопрос: почему менеджер агентов тестирования дает добавить сетевых агентов только ровно половину от имеющихся локальных агентов? У меня комп в сети запущен только ради теста, никто на нем не работает. Получается половина мощности простаивает.
Тут ответ простой: у вас у процессора 4 физических ядра и 8 логических. Грубо говоря, пара логических ядер использует одно физическое. Локальные агенты создаются по количеству логических ядер. Сетевые агенты создаются по умолчанию по количеству физических ядер. Сетевые агенты будут работать примерно в два раза быстрее локальных (если конечно, во время использования сетевых агентов не используются локальные и наоборот). В конечном итоге всё упирается в ресурсы имеющегося процессора. В обоих вариантах он задействуется почти на полную мощность. Кажется, пару лет назад я выбирал, как лучше организовать тестирование на нескольких компьютерах, и какой из них делать главным. Там получалось, что преимуществ использования восьми локальных агентов по сравнению с использованием этого компьютера как поставщика четырёх сетевых агентов не было обнаружено.
Если вы хотите использовать сетевых агентов только самостоятельно, а не продавать их мощности через MQL Cloud Network, то, если я правильно помню, вы можете добавить сколько угодно служб сетевых агентов. Можно сделать и 8, и 12, и 16... Продавать же мощности сетевых агентов можно только если их не больше, чем количество физических ядер процессора.
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Вы проверяли, влияет ли изменение каждого параметра на результаты одного прохода? Если какие-то параметры или не влияют на результат, или очень слабо влияют, или влияют только в небольшой области значений из указанного им диапазона возможных значений, или влияют только при определённых комбинациях значений других параметров, то это может приводить к вырождению популяции (=застревание в локальном экстремуме)
Нельзя ставить знак равенства между вырождением популяции и застреванию в локале. Вырождение популяции означает отсутствие новых решений и забивание всей популяции решениями с близким значением ФФ - этим генетика особо не страдает, мутация периодически создаёт новые решения, которые встряхивают популяцию.
Другое дело, что проблема с застреванием в локале действительно может быть. Тут может помочь либо искусственное сглаживание ФФ какими нибудь приёмами или вообще переделка формулы ФФ, либо использовать самописные алгоритмы, благо MQL5 позволяет это делать.
Я понимаю, что такие проблемы есть. Но так и не получил объяснения, почему в нулевом поколении много проходов (у меня около 300), а в последующих - стабильно не более количества имеющихся агентов (в моем случае 7). Разве не правильнее скрестить лучшего из 0-го еще с 300, и т.д.?
Сколько у вас перед запуском оптимизации показывается возможных комбинаций параметров (в последней строке на вкладке "Параметры"), среди которых генетический алгоритм будет выбирать небольшую часть для первого поколения?
Сотни тысяч.
Сотни тысяч.
Сотни тысяч.