Как генетические алгоритмы c могут разрабатывать решения с числовыми данными? - PullRequest
3 голосов
/ 09 апреля 2020

Я знаком с GA в контексте строк или текста, но не с числовыми данными.

Для строк я понимаю, как будут применяться кроссовер и мутация:

ParentA = abcdef
ParentB = uvwxyz

Using one-point crossover:
ChildA = abwxyz (pivot after 2nd gene)
ChildB = uvcdef

Using random gene mutation (after crossover):
ChildA = abwgyz (4th gene mutated)
ChildB = uvcdef (no genes mutated)

Для строки, у меня есть дискретный алфавит для go, но как эти операторы будут применяться к непрерывным числовым данным?

Например, хромосомы, представленные в виде точек в 4-пространстве (каждая ось является геном):

ParentA = [19, 58, 21, 54]
ParentB = [65, 21, 59, 11]

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

ChildA = [19, 58, 59, 11] (pivot after 2nd gene)
ChildB = [65, 21, 21, 54]

У меня такое ощущение, что все в порядке, но мое наивное представление о мутации, рандомизации ген, кажется неправильным:

ChildA = [12, 58, 59, 11] (1st gene mutated)
ChildB = [65, 89, 34, 54] (2nd and 3rd genes mutated)

Я просто не уверен, как алгоритмы geneti c могут быть применены к таким цифрам c. Я знаю, что мне нужно для GA, но не знаю, как применять операторов. Например, рассмотрим проблему минимизации функции Растригина в 4-х измерениях: пространство поиска равно [-512, 512] в каждом измерении, а функция пригодности - это функция Растригина. Я не знаю, как операторы, как я описал здесь, могут помочь найти более подходящую хромосому.

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

Обновление для Bounty

Я выполнил реализацию GA для непрерывных числовых данных с использованием скоростей мутаций и кроссоверов, как я описал здесь. Задачей оптимизации является функция Стиблински-Тана в двух измерениях, потому что ее легко построить на графике. Я также использую стандартные стратегии выбора элиты и турнира.

Я считаю, что лучший фитнес для населения действительно сходится к решению, а средний фитнес на самом деле не очень.

Здесь я построил область поиска на протяжении десяти поколений: черная точка является подходящим решением, а красная 'x' - глобальный оптимум:

enter image description here

Оператор кроссовера как я описал, кажется, работает хорошо, но оператор мутации (рандомизируя оба, или ни одно из положений x или y хромосомы), похоже, создает шаблоны перекрестия и штриховки.

Я пробежался в 50 измерений, чтобы продлить сходимость (так как в двух измерениях она сходится в одном поколении) и нанесла ее на график:

enter image description here

Здесь ось Y представляет, насколько близко решение было к глобальному оптимуму (так как оптимальный известен), это всего лишь доля actual output / expected output. Это процент. Зеленая линия - лучшая популяция (цель приблизительно 96-97%), синяя - средняя численность населения (цель колеблется на 65-85%).

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

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

Просто добавлю: Я задаю этот вопрос, потому что мне интересно использовать GA для оптимизации весов нейронных сетей для обучения сети вместо обратного распространения. Если вы знаете что-нибудь об этом, любой источник, который также ответит на мой вопрос.

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

Вы можете рассмотреть возможность использования полиномиальной мутации, которая является оператором по умолчанию в очень популярном алгоритме NSGA-II , а также в нескольких других алгоритмах с реально кодированным генетиком c. Я также использовал это широко. Вы можете найти полное описание этого здесь (см. Раздел 2) и python реализации здесь (поиск mutPolynomialBounded).

По сути, полиномиальное распределение вероятностей используется для возмущения решения в окрестности родителя. У него есть параметр η , который определяет, насколько вероятно, что мутант будет близок к родителю. Вероятность сходства мутанта с родителем уменьшается с уменьшением η . [20, 100] является общим диапазоном для η .

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

0 голосов
/ 10 апреля 2020

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

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

В этой статье они мутируют, как вы однако предложим, используя генератор случайных чисел: Geneti c Алгоритм решения простой задачи математического равенства .

...