Методы кодирования хромосом: двоичное, логарифмическое, код Грея

Двоичное кодирование является, наверное, самым популярным способом кодирования чисел. Так, в классической реализации генетического алгоритма применяется именно этот метод. Напомним, что двоичное кодирование основано на известном способе записи десятичных чисел в двоичной системе, где каждый бит двоичного кода соответствует очередной степени цифры 2. Например, двоичная последовательность 10011 представляет собой код числа 19:

1*2^4~+~0*2^3~+~0*2^2~+~1*2^1~+~1*2^0~=~19

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

Некоторые значения кода Грея приведены в этой таблице:

Десятичное число Двоичное кодирование Код Грея
0 0000 0000
1 0001 0001
2 0010 0011
3 0011 0010
4 0100 0110
5 0101 0111
6 0110 0101
7 0111 0100
8 1000 1100
9 1001 1101
10 1010 1111
11 1011 1110
12 1100 1010
1101 1011
14 1110 1001
15 1111 1000

Логарифмическое кодирование – применяется в генетических алгоритмах для уменьшения длины хромосом. Оно используется, главным образом, в задачах многомерной оптимизации с большими пространствами поиска решений.

При логарифмическом кодировании первый бит alpha кодовой последовательности – это бит знака показательной санкции, второй бит beta – бит знака степени этой функции, а остальные биты BIN представляют значение самой степени:

delim{[}{alpha beta~~BIN}{]}~=~{{(-1)}^beta}*~{e}^{{{(-1)}^alpha}BIN_10}

где BIN_10 означает десятичное значение числа, закодированного в виде двоичной последовательности BIN. Приведем следующий пример. Дана закодированная последовательность, 10110. Согласно, приведенной формуле это последовательность расшифровывается следующим образом:

X~=~{{(-1)}^0}*~{e}^{{{(-1)}^1}delim{[}{110}{]}_10}~=~0.002478752

Следующий пример. Дана закодированная последовательность, 01010. Тогда:

X~=~{{(-1)}^1}*~{e}^{{{(-1)}^0}delim{[}{010}{]}_10}~=~-7.389056099

Заметим, что таким образом с помощью пяти битов можно закодировать числа из интервала delim{[}{-e^7,e^7}{]}. Это значительно больший интервал, чем delim{[}{0,31}{]} для двоичного кодирования.

Прокрутить вверх