Кодирование признаков, представленных целыми числами
Для кодирования таких признаков можно использовать самый простой вариант – битовое значение этого признака. Тогда нам будет весьма просто использовать ген определенной длины, достаточной для представления всех возможных значений такого признака. Но, к сожалению, такое кодирование не лишено недостатков. Основной недостаток заключается в том, что соседние числа отличаются в значениях нескольких битов, так например числа 7 и 8 в битовом представлении различаются в 4-х позициях, что затрудняет функционирование генетического алгоритма и увеличивает время, необходимое для его сходимости. Для того, чтобы избежать эту проблему лучше использовать кодирование, при котором соседние числа отличаются меньшим количеством позиций, в идеале значением одного бита. Таким кодом является код Грея, который целесообразно использовать в реализации генетического алгоритма. Значения кодов Грея рассмотрены в таблице ниже:
Двоичное кодирование | Кодирование по коду Грея | ||||
Десятичный код | Двоичное значение | Шестнадцатеричное значение | Десятичный код | Двоичное значение | Шестнадцатеричное значение |
0h | 0h | ||||
1h | 1h | ||||
2h | 3h | ||||
3h | 2h | ||||
4h | 6h | ||||
5h | 7h | ||||
6h | 5h | ||||
7h | 4h | ||||
8h | Ch | ||||
9h | Dh | ||||
Ah | Fh | ||||
Bh | Eh | ||||
Ch | Ah | ||||
Dh | Bh | ||||
Eh | 9h | ||||
Fh | 8h |
Таблица 1. Соответствие десятичных кодов и кодов Грея.
Таким образом, при кодировании целочисленного признака мы разбиваем его на тетрады и каждую тетраду преобразуем по коду Грея.
В практических реализациях генетических алгоритмов обычно не возникает необходимости преобразовывать значения признака в значение гена. На практике имеет место обратная задача, когда по значению гена необходимо определить значение соответствующего ему признака.
Таким образом, задача декодирования значения генов, которым соответствуют целочисленные признаки, тривиальна.