Материалы

Решение комбинаторных задач с помощью генетических алгоритмов


Рисунок 4.

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

После подсчета вероятностей стать родителем для особей популяции необходимо породить новую популяцию. Обычно в процедуру порождения входят две стадии: скрещивание (обмен частями цепочек генов родителей) и мутация (случайное изменение одного или нескольких генов). Поскольку в данной задаче на особь накладываются строгое ограничение не повторяемости чисел, отдельное использование мутации, вероятно, не целесообразно и можно ограничиться только скрещиванием. Начиная порождение новой популяции, первым делом необходимо выбрать родителей. Выбор родителей осуществляется на основе генерации случайного числа и исходя из посчитанной вероятности стать родителем особей популяции. Таким образом наиболее часто выбираются наиболее приспособленные особи, что в свою очередь увеличивает вероятность того, что в новой популяции особи будут еще более приспособленные. То, что в качестве родителя особь выбирается с некоторой вероятностью (а не точный выбор самой приспособленной особи), помогает избежать попадания в область локального оптимума. После выбора родителей производится скрещивание. Т.е. выбирается точка разрыва цепочек генов родителей и заменяется часть цепочки генов одного родителя на часть цепочки генов другого. (Кроме этого возможны и другие методы - двухточечный кроссовер и равномерный кроссовер - вполне достойные альтернативы одноточечному оператору. В двухточечном кроссовере выбираются две точки разрыва, и родительские хромосомы обмениваются сегментом цепочки генов, который находится между двумя этими точками. В равномерном кроссовере, каждый бит первого родителя наследуется первым потомком с заданной вероятностью; в противном случае этот бит передается второму потомку). После этого необходимо убедиться, что новая особь соответствует накладываемым ограничениям, для этого, просматриваются все десять чисел новой особи, дублирующие числа заменяются теми, которые еще не были задействованы. Эта операция не является классическим скрещивание и представляет собой некую ее адаптацию к данной задаче, которую можно рассматривать как скрещивание с мутацией. После порождения новой популяции она замещает старую. (Конечно это не единственный вариант изменения популяции, кроме полного замещение родителей, например, возможно наращивание популяции).

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

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

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

1)      4*5*2*9 =360

10+7+3+6+8+1 = 35

fitness = 2,777778

2) 1*5*6*4*3 = 360

7+9+10+8+2 = 36

fitness = 0

3) 5*4*6*1*3 = 360

8+7+2+10+9 = 36

fitness = 0

 

 

1 2
Общее время работы: 18.45908164978 мс
Использование памяти: 656 КБ