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

 
ivandurak:
Подскажите ПЛЗ по какому критерию и сколько убивать  потомков . Сколько родителей и потомков должно быть в зависимости от кол-ва оптимизируемых параметров .С какой эпохи можно допустить инцест . В целом не совсем понятно по какому принципу убивать родителей .Просто к сожалению ваш труд не совсем подходит для моих целей , а так огромное спасибо с кисточкой .

Никого убивать не надо. Может работать даже с одной хромосомой (сам с собой скрещиваться). А так в среднем 50 хромосом хватает для любых целей.

Вы просто не разобрались в алгоритме.

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

 

 
ivandurak:

1. Подскажите ПЛЗ....

2. по какому критерию и сколько убивать  потомков .

3. Сколько родителей и потомков должно быть в зависимости от кол-ва оптимизируемых параметров .

4. С какой эпохи можно допустить инцест .

5. В целом не совсем понятно по какому принципу убивать родителей .

6. Просто к сожалению ваш труд не совсем подходит для моих целей , а так огромное спасибо с кисточкой .

1. Мне не совсем понятна цель Вашего поста. Если нужны советы по реализации Вашего алгоритма, то нужны детали, общий концепт, так сказать, что бы было что обсуждать.

Если же вопросы касаются алгоритма, описанного в статье, то см. 2, 3, 4, 5, 6.

2. Потомки не убиваются. Уничтожаются дубликаты родителей и их потомков.

3. 50 особей в основной части популяции - наиболее общеупотребительное значение.

4. Скрещивание "с самим собой" не допускается. Но если очень нужно (популяция "вымирает") - то можно. :)  делается несколько попыток найти подходящего "партнёра".

5. Родители не "убиваются" абы как или при каких то условиях, а замещаются потомками (ровно половина популяции замещается потомками - если, конечно популяция полная).

6. Если задача очень "специфична" - возможно (если это возможно конечно вообще) постарайтесь сначала найти аналитическое решение.

 

Спз ,что оперативно откликнулись. Нужна генетика для разлиных экпериментов . Ваша бибилиотека как мне кажется не очень удобна в использовании поетому пишу свою .К сожалению в сети плохо описан весь алгоритм в основном только опреаторы ГА , если кинете ссылку на описание ( на русском) буду весьма признателен . Ниже опишу как я все это вижу ,если не трудно поправьте .

1 Случайным образом создаем родительские особи , не менее 50.

2 Порождая от них при помощи скрещивания и мутаций  колонию потомков числом не менее ..... нигде описания не нашел.

3 Ищем дубликаты   , родительский удаляем

5 При необходимости доукомплектовывает колонии потомков и родителей . Родители создаются случайным образом потомки естественным .  

4 Прогоняем всех через ФФ . ФФ вынесена за пределы ГА.

5 Строим всех по ранжиру . Самому лучшему присваиваем статус рэмбо .Чем выше ранжир тем более вероятно стать папой .

6 Делим всю толпу индивидов на сильных и слабых .Сильные будут родителями на следующем шаге.

7 Вырезаем часть колонии потомком (самых не приспособленных). С маленькой вероятностью вырезаем часть колонии родителей .Ну типа случайная смерть .Рэмбо чистке кадров не подлежит

8 Эпоха на этом закончилась .

9 Если в течении ....(уточнить ) один и тот же индивид держит флаг Рэмбо - расчеты заканчиваются ГА сошелся , иначе перейти к п 3.

 

 
ivandurak:
....
Извините, но у меня складывается впечатление, что Вам необходимо перечитать статью ещё разок.
 
С грехом пополам написал своего ГА . Только зараза застревает в локальных экстремумах . Не подскажете общих рекомендаций как этого избегать .
 
ivandurak:
С грехом пополам написал своего ГА . Только зараза застревает в локальных экстремумах . Не подскажете общих рекомендаций как этого избегать .

Это не зараза, это особая, "генетическая" магия. :)

Какую функцию используете в качестве FF?

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

Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
  • www.mql5.com
Тестовая многопеременная многоэкстремальная функция. - MQL4 форум
 
Прошу простиь за назойливость , но вопрос принципиальный . Взят пример из вашей статьи , написал скрипт для проверки . Ответ не совпадает с примером , тут либо лыжи не едут либо проблема в прокладке между стулом и клавой . Если не трудно натыкайте как котенка , второй день сижу не могу ошибку найти . С уважением 
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("Решение 1 наверно правильно  = ",y) ;
//-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   y=pow((cos(2-pow(x1,2))-1.1),2)+pow((sin(0.5-x1)-1.2),2)-pow((cos(2-pow(x2,2))-1.1),2)+pow((sin(0.5-x2)-1.2),2);
   Print("Решение 2 мое  = ",y) ;
  }
 
ivandurak:
Прошу простиь за назойливость , но вопрос принципиальный . Взят пример из вашей статьи , написал скрипт для проверки . Ответ не совпадает с примером , тут либо лыжи не едут либо проблема в прокладке между стулом и клавой . Если не трудно натыкайте как котенка , второй день сижу не могу ошибку найти . С уважением 
Точно, прокладку надо менять. Извините.
 
ivandurak:
Прошу простиь за назойливость , но вопрос принципиальный . Взят пример из вашей статьи , написал скрипт для проверки . Ответ не совпадает с примером , тут либо лыжи не едут либо проблема в прокладке между стулом и клавой . Если не трудно натыкайте как котенка , второй день сижу не могу ошибку найти . С уважением 

Если нет уверенности в самой ФФ, в смысле вы не уверены что ваши экстремумы являются таковыми, можете прогнать функцию в тестере, тестерный ГА в этом смысле довольно хорош, и находит довольно точное решение, правда лишь при малом количестве параметров (1,2).

В целом же нужно понимать что ГА находит не точное, а робастное решение. Т.е. решение которое довольно удачное по сравнению с полем возможных решений.

 
ivandurak:
Прошу простиь за назойливость , но вопрос принципиальный . Взят пример из вашей статьи , написал скрипт для проверки . Ответ не совпадает с примером , тут либо лыжи не едут либо проблема в прокладке между стулом и клавой . Если не трудно натыкайте как котенка , второй день сижу не могу ошибку найти . С уважением 
void OnStart()
  {
   double y,x1,x2 ;
   x1=-3.315699;
   x2=-3.072485;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11e1, 0.2e1)+pow(sin(0.5e0*(double)x1)-0.12e1,0.2e1) - 
       pow(cos((double)(2*x2*x2))-0.11e1, 0.2e1)+pow(sin(0.5e0*(double)x2)-0.12e1,0.2e1);
   Print("Решение 1 правильно  = ",y) ;
   //-------------------------------------------------------------------
   x1=2.252170;
   x2=-4.5171187;
   //y=pow((cos(2.0-pow(x1,2.0))-1.1),2.0)+pow((sin(0.5-x1)-1.2),2.0)-
   //  pow((cos(2.0-pow(x2,2.0))-1.1),2.0)+pow((sin(0.5-x2)-1.2),2.0);
   y=  pow(cos((double)(2*x1*x1))-0.11e1, 0.2e1)+pow(sin(0.5e0*(double)x1)-0.12e1,0.2e1) - 
       pow(cos((double)(2*x2*x2))-0.11e1, 0.2e1)+pow(sin(0.5e0*(double)x2)-0.12e1,0.2e1);
   Print("Решение 2 НЕправильно  = ",y) ;
  }
А у меня совпадает почему то. Наверное потому, что я использовал функцию как в статье.