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

 
Я же говорил что в голове каша, вот и залез не в ту степь.
Хеш можно применить к поиску дубликатов внутри колонии, и функцию нахождения хеша можно сделать простую и быструю, т.к. даже 1-2 дубликата погоды не сделают и не испортят результата.
 

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

Нужно стараться сократить количество запусков FF при требуемой точности результата. Для этого алгоритм имеет гибкие настройки. Кроме того, время поиска можно ещё уменьшить за счет совершенствования поисковых качеств ГА вообще и операторов в частности. Рекомендую исследовательский потенциал направить именно в этих направлениях.

 
joo:

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

Нужно стараться сократить количество запусков FF при требуемой точности результата. Для этого алгоритм имеет гибкие настройки. Кроме того, время поиска можно ещё уменьшить за счет совершенствования поисковых качеств ГА вообще и операторов в частности. Рекомендую исследовательский потенциал направить именно в этих направлениях.


Вроде dll теперь не будет быстрее mql 5.
Ладно, как напишу библиотеку проведу тесты, потом напишу что вышло))

 

Важное замечание к статье.

Не используйте параметры алгоритма

FFNormalizeDigits и GeneNormalizeDigits

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

Другими словами введение операции нормализации в алгоритм было ошибкой.

Не путать с операцией дискретизации управляемой параметром Precision!

 
Важное замечание к статье.

Не используйте параметры алгоритма

FFNormalizeDigits и GeneNormalizeDigits

Не стоит нормализовать значение фитнес-функции и генов. Нормализация приводит к снижению поисковой способности алгоритма и увеличению количества запусков FF. Причем, чем больше знаков после запятой отброшено, тем сильнее проявляется негативное влияние на алгоритм.

Другими словами, введение операции нормализации в алгоритм было ошибкой.

Не путать с операцией оцифровки, управляемой в параметре Precision!

 
joo:

Важное замечание к статье.

Не используйте параметры алгоритма

FFNormalizeDigits и GeneNormalizeDigits

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

Другими словами введение операции нормализации в алгоритм было ошибкой.

Не путать с операцией дискретизации управляемой параметром Precision!

Так в сомой библиотеке UGAlib тоже лучше убрать нормализацию или только в FF.
 
Serj_Che:
Так в сомой библиотеке UGAlib тоже лучше убрать нормализацию или только в FF.
FFNormalizeDigits  используется в FF для нормализации значения приспособленности а GeneNormalizeDigits  используется  в самом алгоритме для нормализации генов. И там и там нормализацию делать не нужно.
 
joo:
FFNormalizeDigits  используется в FF для нормализации значения приспособленности а GeneNormalizeDigits  используется  в самом алгоритме для нормализации генов. И там и там нормализацию делать не нужно.

Понятно. Я конечно сам подправлю, но если не трудно выложи подправленную версию UGAlib.

Боюсь ошибок наделаю. 

 
Обновил библиотеку UGA и примеры к статье. Текущая свободная авторская версия 1.1.0 доступна по ссылкам в тексте в конце статьи.
 

Большое спасибо автору за библиотеку!

Добавьте строчку "cnt++;" в цикле функции поиска родителей, а то может в вечный цикл уйти!

 //Отбор двух родителей.

void SelectTwoParents

(

int &address_mama,

int &address_papa

)

{

  //-----------------------Переменные-------------------------------------

  int cnt=1;

  address_mama=0;//адрес материнской особи в популяции

  address_papa=0;//адрес отцовской особи в популяции

  //----------------------------------------------------------------------

  //----------------------------Отбор родителей--------------------------

  //Десять попыток выбрать разных родителей.

  while (cnt<=10)

  {

    //Для материнской особи

    address_mama=NaturalSelection();

    //Для отцовской особи

    address_papa=NaturalSelection();

    if (address_mama!=address_papa)

      break;

    cnt++; 

  }

  //---------------------------------------------------------------------

}