2013-05-26 5 views
2

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

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

У меня будет две переменные, которые я хочу кодировать в хромосоме для представления решения. Если каждая переменная может быть представлена ​​8-битовым числом, я бы сделал 16-битную двоичную кодированную хромосому (строка из 1 и 0).

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

+0

Вы не просто случайно выбираете бит из двух родителей. Вы проходите бит в порядке. Если оба родителя имеют 1 в одной и той же позиции бит, ген передается. Если оба родителя имеют нуль в одной и той же позиции бит, ген не передается. Только если один родитель имеет 1, а другой - ноль, случайный выбор вступает в игру. –

+0

Спасибо за ваш ответ, если бы это был ответ, я бы отметил его как правильно! – Zach

+0

Что описывает Гилберт ЛеБланк, называется UniformCrossover. Я бы не рекомендовал использовать его, поскольку он очень разрушительный и не сохраняет более крупные фрагменты одного родителя. Рекомендуется использовать одноточечный кроссовер. Там вы выбираете точку пересечения в своих строках и выбираете первую половину от первого родителя и вторую половину от второго родителя. Точка выбирается случайным образом. – Andreas

ответ

6

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

Для двоичного кодирования я бы использовал Single Point Crossover и Bit Flip Mutation. Для вещественного кодирования я бы использовал Blend-Alpha-Beta Crossover (BLX-a-b) или Simulated Binary Crossover (SBX) и Normal Distributed Mutation. Вы можете попробовать некоторые из этих и многих других операторов на SingleObjectiveTestFunctions в HeuristicLab.

+0

HeuristicLab выглядит как удивительная часть программного обеспечения. Я загружаю его сейчас. Я, конечно, попробую настоящую ценную кодировку. Спасибо за ваш ответ! – Zach

Смежные вопросы