Первый шаг - выбрать представление решений. Наиболее широко используется двоичное кодирование. Например, ваш x может выглядеть:
1 0 0 1 1 1 1 0 | 0 0 0 0 0 0 0 0 0 0 1 1 1
Первые 8 битов кодировали целую часть числа, оставшиеся 13 битов кодировали часть числа после точки. В этом примере двоичная строка, кодирующая число 158.0007.
Кроссовер может выглядеть
1 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 1 1 1 - 158.0007
1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 - 225.0008
Самый простой оператор кроссовера - это одна точка разделения. Вы генерируете одно число от 1 до длины строки - 1. И до этого момента вы получаете биты из одной строки, а с этой точки - из второй строки. В этом примере мы выбираем для точки разделения 4 позицию. Потомство будет выглядеть так:
1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 - 145.0008
Мутация меняется с выбранной вероятностью на несколько бит.
Функция пригодности может быть значением функции квадратного уравнения (если вы попытаетесь найти максимум) в x, а x получается как декодирование строки битов.
И немного теории под конец. У вас есть два набора. Один набор - это пространство поиска (пространство с двоичными строками), а второй набор - пространство с решением. Индивидуальный объект из области поиска декодируется в решение в пространстве решений (в нашем случае значение x закодировано двоичной строкой). Пространство поиска представляет генотип, а расшифрованное решение - фенотип. Операторы генетики работают с индивидуальным пространством поиска (в данном случае с двоичной строкой) и функцией пригодности, используя декодированное решение.
person
viceriel
schedule
12.12.2016