Московский государственный университет путей сообщения
Опубликован: 10.10.2014 | Доступ: свободный | Студентов: 688 / 130 | Длительность: 22:10:00
Лекция 1:

Введение.Основы генетических алгоритмов

1.3. Представление вещественных решений в двоичной форме

В предыдущем примере мы рассматривали только целочисленные решения. Обобщим ГА на случай вещественных чисел на примере функции f(x)=(1,85-x)*\cos(3,5x-0,5), представленной на рис.1.5 [14]. Рассматривается та же задача: необходимо найти вещественное x\in [-10,+10], которое максимизирует f(x), т.е. такое x_0, для которого f(x_0)\ge f(x) для всех x\in [-10,+10].

Пример функции с популяцией особей в начале эволюции

Рис. 1.5. Пример функции с популяцией особей в начале эволюции

Для решения этой задачи с помощью ГА будем использовать представления вещественного решения (хромосомы) в виде двоичного вектора [15], который применяется в классическом простом ГА. Его длина зависит от требуемой точности решения, которую в данном случае положим, например, равной 3 знакам после запятой.

Поскольку отрезок области решения имеет длину 20, для достижения заданной точности отрезок [a,c]=[-10,+10] должен быть разбит на равные части (маленькие отрезки), число которых должно быть не менее 20*1000. В качестве двоичного представления используем двоичный код номера (маленького) отрезка. Этот код позволяет определить соответствующее ему вещественное число, если известны границы области решения. Отсюда следует, что двоичный вектор для кодирования вещественного решения должен иметь 15 бит, поскольку

16384=2^{14}<20000\le2^{15}=32768

Отсюда следует, что для обеспечения необходимой точности требуется разбить отрезок [-10,+10] на 32768 частей. Отображение из двоичного представления (b_{14} b_{13}\dots b_0)\ (b_i\in \{0,1\} в вещественное число из отрезка [a,c]=[-10,+10] выполняется в два шага.

  1. Перевод двоичного числа в десятичное:
    (<b_{14} b_{13}\dots b_0>)_2=\left(\sum_{i=0}^{14} b_i 2^i \right)_{10}=X'
  2. Вычисление соответствующего вещественного числа x:
    x=a+x'\cdot\frac{(c-a)}{2^{15}-1}=-10+x'\cdot\frac{20}{2^{15}-1},
    , где (– 10) левая граница области решения. Естественно хромосомы (000000000000000) и (111111111111111) представляют границы отрезка –10 и +10 соответственно.

Очевидно, при данном двоичном представлении вещественных чисел можно использовать классический простой ГА. На рис.1.6,рис.1.7,рис.1.8 представлено расположение особей (потенциальных решений) на различных этапах ГА в процессе поиска решения[14]. На рис.1.5 показана начальная популяция потенциальных решений, которая равномерно покрывает область поиска решения. Далее явно видно, как постепенно с увеличением номера поколения особи "конденсируются" в окрестностях экстремумов и, в конечном счете, находится лучшее решение.

Начальная "конденсация" особей популяции в окрестностях экстремумов

Рис. 1.6. Начальная "конденсация" особей популяции в окрестностях экстремумов
"Конденсация" особей в окрестностях экстремумов

Рис. 1.7. "Конденсация" особей в окрестностях экстремумов
Положение особей популяции в конце эволюции

Рис. 1.8. Положение особей популяции в конце эволюции

Для сокращения длины хромосом иногда применяют логарифмическое кодирование, при котором первый бит (a) кодовой последовательности используется для знака показательной функции, второй бит (b) – для знака степени этой функции, и остальные биты (str) представляют значение самой степени [16]. Таким образом, двоичный код <a\ b\ str> представляет вещественное число (-1)^a e^{(-1)^b [str]_{10}}. Здесь [str]_{10} означает десятичное число, представленное двоичным кодом str.

Например, двоичный код <10101> представляет вещественное число (-1)^0 e^{(-1)^1 [101]_{10}} =e^{-6}=0,002478752. Следует отметить, что при таком кодировании пять битов позволяет кодировать вещественные числа из интервала [-e^7,e^7], что значительно больше, чем это позволяет, например, метод кодирования, представленный ранее.