Многократные итерации выбора турнира в генетическом алгоритме - PullRequest
1 голос
/ 20 июля 2009

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

Я знаю, что вы начинаете выбирать случайные пары (или k участников) и помещаете победителя в пул спаривания. Вы продолжаете делать это до тех пор, пока брачный пул не будет заполнен.

Однако я не уверен, что произойдет потом.

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

Спасибо.

Ответы [ 3 ]

4 голосов
/ 20 июля 2009

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

Что касается брачного пула, то это зависит от того, кого вы ищете, от решений, которые вы ищете, и если у вас есть способ объединить людей таким образом, есть больше шансов, что они произведут лучше индивидуум.

Вы можете использовать случайное спаривание, но это даст вам «худшие» решения - хуже, потому что вы не представляете, будут ли они производить лучшего человека или нет. Это все еще будут хорошие решения, и когда я начинал писать эти алгоритмы, я всегда использовал случайное спаривание, но сразу после получения нового человека из двух старых я сравнил производительность трех и отбросил худшее, в итоге получая 2 родителя иногда (и выбрасывают 1-летнего ребенка) или заканчивают с 1 родителем и 1 ребенком.

Но чтобы быть более эффективным, И если вы знаете, как объединить людей, чтобы они могли найти лучшее решение (и это может быть очень сложно), вы можете использовать функцию сходства, которая берет 2 человека и возвращает сходство между их. Сложная задача - определить сродство. В зависимости от проблемы, он может быть очень разным. Например, если я возьму задачу коммивояжера, я получу наилучшие решения при спаривании человека с меньшим сходством. Так что моя функция сходства вернула 1 - сходство.

Таким образом, я мог бы сократить количество итераций на 80% и получить очень хорошие решения.

Но имейте в виду, что чем больше ваш пул, тем дольше будет выполняться функция сродства - функции сродства могут быть O (n²) или даже O (n³), и в этом случае это может быть узким местом ваш алгоритм. В этом случае может быть лучше использовать случайное сопряжение.

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

2 голосов
/ 20 июля 2009

Это не хороший совет, но ...

Однако я не уверен, что произойдет потом.

Делай что хочешь. Вы можете мутировать их всех ... или вы можете спаривать каждую пару, которую выберете в турнире. Используйте тот, который работает лучше всего. Будьте креативны.

Как заметил кто-то на этом форуме: маленький грязный секрет о ГА состоит в том, что это больше искусство, чем наука.

Кроме того, чтобы получить действительно хороший совет, вам понадобится более подробное описание проблемы, которую вы хотите решить.

1 голос
/ 16 сентября 2009

Традиционно после выявления победителей турнира они формируют следующее поколение. Все процессы мутации, отбора и т. Д. Продолжаются циклично.

...