Обсуждение статьи "Генетические алгоритмы - это просто!" - страница 15

 
Alexey_74:

Андрей, ещё вопрос.  

 Можно ли сказать, что такие значения этих переменных годятся для большинства задач оптимизации?

Можно.

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

 
Alexey_74:

Андрей, ещё вопрос.  

 Можно ли сказать, что такие значения этих переменных годятся для большинства задач оптимизации? Как пишут в некоторых источниках "... 90% задач могут быть решены с использованием обычного перцептрона".

ЗаГАште ГА :)

Алгоритм однопоточный, легко встраивается в советник, запускаете в тестере и устраиваете соревнования среди ГА бу-га-га.

 

Замечательно. 

Андрей, Вы знаете, дивлюсь своей наглости, но вынужден озвучить некоторую "критику"  ))

В коде UGA в трех местах вызывается функция ServiceFunction(). Но это ни к чему. На экране, конечно, динамика видна, но настолько быстро, что увидеть и оценить всё равно не получится. В теле UGA() её вызов можно убрать. Вполне достаточно вызвать её 1 раз после вызова UGA().

"... а скрипач не нужен, он только лишнее топливо жрет" (кин дза дза (с)) 

  ts=GetTickCount();
  UGA( ... );
  ts=GetTickCount()-ts;
  ServiceFunction();
 
опять же-не принципиально. для того она и сервисная функция, что бы использовать её для отладки, визуализации или ещё для чего, а можно вообще не использовать-кому как нравится. :)
 

Провел эксперимент. Сделал сумму трёх синусоид с "частотами" 47, 81, 187. Получилось вот это

 

Далее запустил поиск прямым перебором (3 цикла, 2 вложенных), правда, с прерыванием по достижении значения коэффициента корреляции = 1.0. Без этого условия вся эта ерунда вертелась бы в разы дольше. А так справилась за 375 секунд (чуть больше 6 минут).

ГА справился за 2 секунды. ))

Но есть вопрос. Вот результат.

 

Последние 2 цифры: 2747 - количество вызовов FF; 506 - количество "состояний", когда коэффициент корреляции r был равен 1.0. Получается, что алгоритм мог отработать ещё быстрее, поскольку r не может быть больше 1.0 и после первого же достижения r=1 задача считается выполненной. Но алгоритм достиг состояния r=1.0 506 раз. 

Вот такие были параметры 

параметры 

И такая FF

void FitnessFunction(int chromos)
{
  int cnt = 1;

  while(cnt<=GeneCount)
  {
    F1=Colony[cnt][chromos]; cnt++;
    F2=Colony[cnt][chromos]; cnt++;
    F3=Colony[cnt][chromos]; cnt++;

    Fill(sum);
    r=Pirson(sin,sum,nobs);
    if(r>0.99999999) count++;
  }
  AmountStartsFF++;

  Colony[0][chromos]=r;
}

 Вопрос - можно как-то объяснить алгоритму, что (иногда) можно (нужно) завершаться раньше. Или этого категорически делать нельзя, а надо ждать когда достигнется сходимость?

 

Ну вот, давно хотелось знать ответ на вопрос "сколько". На этот раз взял моментум и натравил на него 50 синусоид. Диапазон значений 1-500. Т.о. если не ошибаюсь, при прямом переборе получается 500^50, т.е. 8.8817841970012523233890533447266e+134 итераций (если мне мой калькулятор не соврал). Понятно, что в секунды (минуты, часы, дни, года) можно не переводить. Результат увидели бы только далекие потомки. ГА справился за 1 ч. 20 мин. Обалдеть. Дополнительно оказалось, что коэффициент корреляции суммы 50-ти синусоид с моментумом составляет 0.5275. Почему "дополнительно"? Потому что ранее у меня не было ни единой возможности проверить сей момент. А в некоторых случаях наводит на некоторые размышления...

На синусоидах я не зациклился, просто это все есть под руками. К тому же, поскольку цель - достижение максимального подобия непрерывных сигналов, результат - это самое подобие, другими словами результат однозначен, к тому же, легко проверяем.

 

Андрей, ещё раз огромное спасибо за Ваш Продукт. Хотелось бы в ближайшем будущем зачесть ещё одну Вашу статью. ГА с элитным отбором.  )) 

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Основы языка / Типы данных / Целые типы / Типы char, short, int и long - Документация по MQL5
 
Alexey_74:
...

 Вопрос - можно как-то объяснить алгоритму, что (иногда) можно (нужно) завершаться раньше. Или этого категорически делать нельзя, а надо ждать когда достигнется сходимость?

Можно. И даже нужно. Если известно хоть что то об исследуемой функции (как в Вашей задаче: FF<=1), то эту информацию необходимо активно юзать, что бы гарантированно избежать лишних вычислений, а значит - сократить время поиска.

В данной реализации нет рычагов управления алгоритмом из вне, но достаточно просто добавить функцию управления флагом принудительного останова.

В следующем поколении алгоритма, о котором готовится статья-продолжение, есть гораздо большие возможности по управлению алгоритмом из вне (он вообще работает по инициации и под управлением из вне, а не как сейчас - FF запускается самим алгоритмом, а значит нет возможности, без доработки использовать в автооптимизирующихся совах).

 
Alexey_74:

....

Андрей, ещё раз огромное спасибо за Ваш Продукт. Хотелось бы в ближайшем будущем зачесть ещё одну Вашу статью. ГА с элитным отбором.  )) 

Спасибо за спасибо. :)

Продолжение будет, непременно.

И, удачи в поисках оптимума! В жизни, работе, в л... Во всём.

 
Боюсь спросить... )) Правильно ли я понял? Следующее поколение алгоритма можно будет оформить в виде DLL? 
 
да
Причина обращения: