Рекомбинация в генетическом алгоритме? - PullRequest
0 голосов
/ 27 октября 2018

Я пишу приложение с использованием генетического алгоритма, где я использую два гена человека, которые являются действительными числами (удваивается, так как я пишу это на Java).Поэтому мне было интересно, как лучше всего провести рекомбинацию, используя реальные числа, а не биты.

Я попытался сделать это следующим образом:

Если бы p1 = (x1, y1) и p2 = (x2, y2) были родителямии r было случайным числом от 0 до 1, тогда я получал бы детей следующим образом:

c1 = (  r*x1   + (1-r)*x2 ,   r*y1   + (1-r)*y2)
c2 = ((1-r)*x1 +   r*x2   , (1-r)*y1 +   r*y2  )

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

Так что я был бы признателен, если бы кто-нибудь мог дать мне другую идею или подсказку.

1 Ответ

0 голосов
/ 23 ноября 2018

Я согласен со всеми комментариями.Возможно, вы могли бы интегрировать свой генетический алгоритм с локальным поиском (т.е. реализовать локальный поиск для каждого ребенка после кроссовера / мутации).Эта техника была показана полезной в различных журнальных статьях.

В отличие от кроссовера / мутации, локальный поиск изменит решение только в случае улучшения, в противном случае решение останется неизменным.

В вашем случае локальный поиск решения (x1, y1) может представлять собой исчерпывающее тестирование «x1 +/- 0,01 (и / или любого другого небольшого количества, может проверить более 1 значения влокальный поиск) и y1 остается неизменным ", а в противном случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...