GA может обрабатывать хромосомы с переменной длиной. Фактический Человек может быть очень сложным. например, он может содержать некоторое количество битов фиксированной длины, строки символов (без фиксированной длины) и, возможно, некоторый набор пар сопряженных комплексных чисел. Кроме того, пары сопряженных комплексных чисел должны всегда сохранять некоторые условия. Это можно сделать, но чем сложнее становится индивидуум, тем сложнее становятся генетические операции (например, переход, мутация). Вероятно, функция Fitness заняла бы еще несколько строк кода. Но это все еще возможно.
Возможно, как и предполагалось, вы можете выбрать представление пути с кодовым номером, но это все еще можно сделать с вашим примером, закодированным как Усама ALASSIRY предложил: UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU .
Для перехода:
- разрешить мутирующему оператору считывать текущую длину1 данного человека,
- генерирует два случайных числа x1, y1, оба x1, y1 = <длина1 и x1! = Y1 (это ваши точки нарезки для индивидуума 1), </li>
- сделать то же самое для индивидуума 2, теперь у вас есть две пары (x1, y1) и (x2, y2),
- скопировать из индивидуума 1 то, что находится между x1 и y1, и вставить его в индивидуума 2 между значениями x2 и y2. Новая версия Individual 2 может изменить свою длину, так как количество генов между x1y1 и x2y2 может отличаться, но это нормально,
- то, что было в исходной версии индивида 2 между x2y2, должно быть вставлено в новую версию индивида 1 между x1y1 (его длина также изменится),
Чтобы было понятно:
родитель A: UUUULLLLLLLLDDDRRRDLLLLLLLLLLUUUULUUU
родитель B: DRRRRLULUDDDR
вы генерируете случайные пары pairA (4,18), pairB (0,5)
предполагая, что вы считаете гены от 0, вы меняете следующие строки:
UUUU LLLLLLLLDDDRRRD LLLLLLLLLLUUUULUUU
DRRRRL ULUDDDR
Итак, после перехода вы получите
UUUU DRRRRL LLLLLLLLLLUUUULUUU
LLLLLLLLDDDRRRD ULUDDDR
Теперь вы только что перешли. Вы можете использовать также одну точку резки или умножить точки.
Что касается мутации:
- генерирует число от 0 до длины индивидуума,
- генерирует число от 1 до 4 и обновляет этот ген. (если сгенерировано 1, замените его на U, 2-D, 3-L, 4-R)
Вы только что сделали мутацию. Вы также можете мутировать более одного гена.
Но, как я уже сказал, есть и другие возможности.