Тема 3. Лекция 11. Основные понятия генетических алгоритмов 1

реклама
Тема 3. Лекция 11. Основные понятия генетических алгоритмов
1. Основные понятия и блок-схема генетического алгоритма
2. Кодирование фенотипов в хромосомы
1. Основные понятия и блок-схема генетического алгоритма
Чарльз Дарвин в работе «Происхождение видов» заложил основные
принципы эволюционной теории. Самым важным его выводом был вывод об
основной направляющей силе эволюции - ею признавался естественный
отбор. Вторым, не менее важным, был вывод об изменчивости организмов.
Именно отбор наилучших объектов в процессе их изменения является
ключевой эвристикой всех известных математических эволюционных
методов, предназначенных для решения оптимизационных задач. Следует
отметить еще одну важную особенность модели природной эволюции —
отбор лучших объектов ведется сразу на всем множестве альтернативных
объектов. Это означает, что каждая родительская пара порождает
собственную разветвляющуюся цепочку эволюции, т.е. поиск лучших объектов ведется параллельно для каждой цепочки. Если проводить аналогию
между природным отбором и математическими методами поиска лучшей
альтернативы (экстремума) на множестве альтернатив, например методом
случайного поиска или градиентными методами, где поиск ведется
линейно-последовательно, то преимущества эволюционного поиска
становятся вполне очевидными, по крайней мере с точки зрения
существенного уменьшения времени поиска.
Использование идеи эволюционного отбора привело математиков к
созданию трех основных направлений эволюционного моделирования:
эволюционные стратегии, эволюционное программирование, генетические
алгоритмы. Эти направления возникли практически независимо друг от
друга и различаются между собой способами реализации этапов
эволюционного отбора. Развитие каждого направления, в том числе за счет
взаимного проникновения методов одного направления в другое, и не в
полной мере установившаяся терминология в данной области приводят к
размытости границ между ними, поэтому знакомство с эволюционными
алгоритмами целесообразно начать с так называемого классического
(простого) генетического алгоритма. В дальнейшем для краткости будем
употреблять термин «генетический алгоритм» вместо «классический
генетический алгоритм», кроме специально оговариваемых случаев.
Генетический алгоритм — самый известный на сегодняшним день из
эволюционных алгоритмов, он представляет собой модель размножения
живых организмов. Идею генетических алгоритмов высказал американский
ученый Дж. Холланд в конце 1960-х — начале 1970-х гг. Он заинтересовался
свойствами процессов естественной эволюции, посредством которой в
природе решаются сложные задачи совершенствования живых организмов.
Как известно, происходит это путем эволюционирования хромосом живых
организмов: внутри популяции живых особей осуществляется отбор
наиболее приспособленных и жизнестойких.
Целью исследований Холланда было составление алгоритмов,
оперировавших последовательностями 0 и 1 (двоичных чисел), получивших
название хромосом. Эти алгоритмы имитировали эволюционные процессы в
«поколениях» таких хромосом. В них были реализованы механизмы селекции
(отбора) и репродукции (воспроизведения), аналогичные применяемым при
естественной эволюции. Так же как и в природе, генетические алгоритмы
осуществляли поиск «хороших» хромосом без использования какой-либо
информации о характере решаемой задачи. Требовалась только некая оценка
каждой хромосомы, отражающая ее приспособленность к развитию в
нужном направлении. Таким образом, осуществлялся поиск «лучших»
хромосом и соответственно выбор лучших «особей» (оптимальных или
близких к оптимальным) из некоторого множества (популяции) альтернатив.
Существует математическое доказательство, которое объясняет причину
эффективности такого подхода (так называемая теорема схем — Schema
Theorem). Рассмотрим основные, заимствованные из генетики понятия,
используемые в генетических алгоритмах.
Популяция — конечное множество альтернативных вариантов или
особей.
Особи, входящие в популяцию, в генетических алгоритмах
представляются хромосомами, в большинстве случаев одной хромосомой.
Хромосома — упорядоченная последовательность генов, значение
(аллель) которых выбирается из множества {0, 1}.
Генотип, или структура, — это набор хромосом данной особи.
Следовательно, особями популяции могут быть генотипы или единичные
хромосомы в довольно распространенном случае, когда генотип состоит из
одной хромосомы.
Локус, или позиция, указывает место размещения данного гена в
хромосоме. Множество позиций генов — это локи.
В теории выбора принято рассматривать множество альтернативных
решений или пространство поиска, каждая точка которого является
возможным решением. Для того чтобы воспользоваться генетическим
алгоритмом, необходимо прежде всего уметь преобразовывать (кодировать)
точки пространства поиска (фенотипы) в генотипы или отдельные
хромосомы. По окончании работы генетического алгоритма необходимо
обратное преобразование (декодирование) хромосом в точки решений.
Генетический алгоритм работает следующим образом. В первом
поколении все хромосомы генерируются случайно, т.е. из исходной
(генеральной) популяции создается случайная выборка хромосом
определенного объема (этап генерации начальной популяции). Определяется
их приспособленность или «полезность» с точки зрения цели решаемой
задачи. Приспособленность отображается в виде числовой функции
(критерия). Отбираются хромосомы из начальной выборки с учетом их
приспособленности, и только эти хромосомы участвуют в создании новой
популяции или популяции нового поколения (этап селекции). Далее генетический алгоритм начинать генерировать новую популяцию (этап
репродукции). Обычно размер выборочной популяции постоянен в различных
поколениях. Репродукция состоит из трех генетических операторов (порядок
применения неважен): кроссовер, мутация, инверсия.
Кроссовер является наиболее важным генетическим оператором. Он
генерирует новую хромосому, объединяя генетический материал двух
родительских. Существует несколько вариантов реализации кроссовера. Они
будут рассмотрены ниже.
Мутация представляет собой случайное изменение хромосомы. Если
кроссовер обязательный оператор, то мутация может и не использоваться.
Такой подход соответствует природной, естественной эволюции, где мутация
— довольно редкое явление.
Инверсия инвертирует (изменяет) порядок бит в хромосоме путем
циклической перестановки (случайное количество раз). Многие
модификации генетических алгоритмов обходятся бет данного генетического
оператора.
После образования такого же числа хромосом в новой популяции, что и
в исходной, новое поколение полностью замещает предыдущее и итерация
повторяется. В процессе моделировании эволюционных изменений решения
(популяции) становятся все более близкими к оптимальным с точки зрения
критерия приспособленности, изменения критерия на каждой итерации
уменьшаются. В отличие, например, от алгоритма полного перебора генетический алгоритм не гарантирует нахождения точного оптимального
решения. Можно быстро найти хорошее решение, но оно не всегда будет
оптимальным. Однако большинство реальных оптимизационных задач не
требует нахождения оптимального решения.
Рис. 1. Блок-схема генетического алгоритма
Блок-схема генетического алгоритма может быть представлена в виде
рис. 1. Чтобы понять принципы работы генетического алгоритма,
рассмотрим простой пример реализации этапов этой блок-схемы для поиска
экстремума функции.
Пример работы генетического алгоритма
Рассмотрим задачу отыскания экстремума функции
𝑦 = −2𝑥 2 + 16𝑥 + 50
(1)
на отрезке χ ∈ [0,7]. Очевидно, что эта задача легко решается с использованием необходимого условия экстремума и хопт = 4, однако на этом
простом примере удобно проиллюстрировать принципы работы
генетического алгоритма (см. рис. 1).
Представим непрерывный отрезок его дискретными значениями:
𝑥0 = 0; 𝑥1 = 0,5; 𝑥2 = 1.0; 𝑥3 = 1,5; 𝑥4 = 2.0; 𝑥5 = 2,5; 𝑥6 = 3,0; 𝑥7 = 3,5;
𝑥8 = 4,0; 𝑥9 = 4,5; 𝑥10 = 5,0; 𝑥11 = 5,5; 𝑥12 = 6,0; 𝑥13 = 6,5; 𝑥14 = 7,0;
Эти значения будем рассматривать как фенотипы, представляющие
пространство поиска или множество альтернативных вариантов.
Первый этап блок-схемы генетического алгоритма (см. рис.1), т.е.
кодирование фенотипов в хромосомы проще всего представить двоичным
кодом десятичных значений индексов фенотипов. Очевидно, что для этого
потребуется четыре двоичных разряда. Соответствие фенотипов и генотипов
(хромосом) показано в табл. 1.
Т а б ли ц а 1
Соответствие между фенотипами и генотипами
Фенотип
Генотип
Фенотип
Генотип
0
0000
4,0
1000
0,5
0001
4,5
1001
1,0
0010
5,0
1010
1,5
0011
5,5
1011
2,0
0100
6,0
1100
2,5
0101
6,5
1101
3,0
0110
7,0
1110
3,5
0111
-
Второй этап блок-схемы (см. рис. 1) — генерация начальной
выборочной популяции особей, или генотипов, - ставит перед нами две
задачи: а) какого размера должна быть начальная выборка; б) каким методом
ее определять? В классическом генетическом алгоритме принято определять
выборку случайным образом. Пусть в рассматриваемом примере начальная
выборка состоит из шести хромосом. Значение генов (аллели) можно определить подбрасыванием монеты 4 х 6 = 24 раза; выпадение «орла» будет
соответствовать 1, выпадение «решки» — 0. Пусть случайный выбор
определил следующие шесть хромосом начальной выборки (начальной
популяции):
ch1=(0000); ch2=(1101); ch3=(0100);
ch4=(1010); ch5=(0001); ch6=(0011).
Следующий этап — декодирование — необходим для вычисления
значений функции приспособленности, по которым определяется
приспособленность полученной популяции. В нашем примере функция
приспособленности - это функция 𝑦 = −2𝑥 2 + 16𝑥 + 50, значения которой
необходимо вычислить для каждого фенотипа, т.е. значения х,
соответствующего хромосомам из выборки. В примере значения функции
приспособленности легко вычисляются с помощью табл. 1:
у1 = 50; у2 = 69,5; у3 = 74; у4 = 80; у5 = 57,5; у6 = 69,5.
В качестве показателя приспособленности в классическом генетическом алгоритме обычно используется среднее значение функции
приспособленности популяции:
𝑁
1
𝑦̅ = ∑ 𝑦𝑖 .
𝑁
𝑖=1
В примере это значение равно 𝑦̅ = 66,75. Среднее значение функции
приспособленности можно использовать для оценки завершенности процесса
поиска. Как и во многих поисковых алгоритмах, прекращение существенного
роста у в процессе поиска говорит об окончании этого процесса. Формально
это отображается следующим выражением:
|𝑦̅𝑖+1 − 𝑦̅𝑖 | ≤ 𝜀,
(2)
где i — номер итерации поиска; ε — заданная точность поиска.
Выполнение условия (2) на определенной итерации свидетельствует о
сходимости алгоритма поиска.
Очевидно, что на первой итерации поиск не прекращается. Следующий
этап блок-схемы алгоритма — селекция хромосом текущей популяции.
Селекция
нужна
для
создания
условий
преимущества
более
приспособленным хромосомам в процессе репродукции новой популяции.
Одним из употребительных методов селекции является метод рулетки,
который позволяет в процессе случайного выбора хромосом для
скрещивания выбирать из начальной популяции более приспособленные
хромосомы с большей вероятностью. С помощью этого метода отберем для
нашего примера наиболее приспособленные хромосомы. Для каждой из
шести хромосом начальной популяции зададим вероятность выбора в
следующем виде:
𝑝(𝑐ℎ𝑖 ) =
𝑦𝑖
∑6𝑛=1 𝑦𝑖
,
т.е. пропорционально относительной приспособленности. Затем
разобьем числовой промежуток [0, 100] на интервалы длиной 𝜈(𝑐ℎ𝑖 ) =
𝑝(𝑐ℎ𝑖 ) ⋅ 100. Для рассматриваемого примера длины интервалов имеют
следующие значения:
𝜈(𝑐ℎ1 ) = 12,48; 𝜈(𝑐ℎ2 ) = 17,35; 𝜈(𝑐ℎ3 ) = 18,48; 𝜈(𝑐ℎ4 ) = 19,98;
𝜈(𝑐ℎ5 ) == 14,36; 𝜈(𝑐ℎ6 ) = 17,35.
Эти интервалы располагаются на промежутке [0, 100] в соответствии с
рис. 2.
Номер интервала
1
2
3
4
5
6
0
12,48
29,83
48,31
68,29
100
Рис. 2. Интервалы для рассматриваемого примера
82,65
Каждому номеру интервала соответствует номер хромосомы из
начальной выборки. Методом рулетки осуществляется таком выбор
хромосом, который учитывает их приспособленность. Это обеспечивается
зависимостью вероятности попадания в интервал от его длины.
Случайный выбор хромосом можно реализовать, например, с помощью
метода Монте-Карло, суть которого заключается в генерировании значений
равномерно распределенной случайной величины на отрезке [0; 1] заданное
число раз (в нашем случае шесть раз). Это можно реализовать, например, с
помощью генератора псевдослучайных чисел, имеющегося в программном
обеспечении ЭВМ. Получаемое каждый раз число E (0 ≤ E ≤ 1)
преобразуется к требуемому интервалу [а, Ь] при помощи формулы𝐸 ′ = 𝑎 +
𝐸 ⋅ (𝑏 − 𝑎). В рассматриваемом примере а = 0, b = 100.
Выбирая теперь шесть раз случайным образом число из промежутка [0,
100] по методу Монте-Карло и фиксируя попадание этого числа в один из
промежутков,
выберем
хромосомы
из
начальной
популяции
соответствующие номеру промежутка. Таким образом будет образован так
называемый родительский пул — набор хромосом, на основе которых
формируются родительские пары хромосом. Пусть метод Монте-Карло
сформировал следующий родительский пул:
ch2 = (1101); ch2 = (1101); ch2 = (1101); ch5 = (0001); ch3 = (0100); ch4 = (1010).
Множество всех возможных родительских пар определяется прямым
произведением:
{𝑐ℎ2 , 𝑐ℎ2 , 𝑐ℎ2 , 𝑐ℎ5 , 𝑐ℎ3 , 𝑐ℎ4 , } × {𝑐ℎ2 , 𝑐ℎ2 , 𝑐ℎ2 , 𝑐ℎ5 , 𝑐ℎ3 , 𝑐ℎ4 } =
= {(𝑐ℎ2 , 𝑐ℎ2 ); (𝑐ℎ2 , 𝑐ℎ2 );
(𝑐ℎ2 , 𝑐ℎ2 ); (𝑐ℎ2 , 𝑐ℎ5 ); (𝑐ℎ2 , 𝑐ℎ3 ); (𝑐ℎ2 , 𝑐ℎ4 ); … ; (𝑐ℎ4 , 𝑐ℎ4 )}.
Из полученных 36 возможных пар хромосом выбирается случайным
образом шесть пар, например:
0001 0001 1010 0100 1101 0100
(3)
)(
)(
)(
)(
)(
)
0001 1101 1101 1101 1101 1101
Метод рулетки, использованный в примере для выполнения этапа
селекции хромосом, не единственный. Другие методы будут рассмотрены в
разд. 5.
Теперь по ходу алгоритма можно переходить к следующему этапу —
репродукции или применению генетических операторов (см. рис. 1).
Рассмотрим в примере только один, обязательный оператор —
кроссовер и только одну его модификацию. Применение рассматриваемого
оператора кроссовера к каждой паре хромосом из родительского пула
порождает новую хромосому, у которой первая половина аллелей
заимствуется у первого родителя, а вторая — у второго. Применение такого
кроссовера к родительскому пулу (3) порождает новую (текущую)
популяцию:
(
ch1 = (0001); ch2 = (0001);
ch3 = (1001); ch4 = (0101);
ch5 = (1101); ch6 = (0101).
Соответствующие значения функции приспособленности хромосом
полученной текущей популяции равны:
у1 = 57,5; у2 = 57,5; у3 = 81,5; у4 = 77,5; у5 = 69,5; у6 = 77,5.
Средняя приспособленность или приспособленность текущей
популяции составляет у̅ = 70,17. Как видно, уже после первой итерации
работы генетического алгоритма средняя приспособленность выросла, что
свидетельствует о правильном направлении поиска. С текущей популяцией
продолжается работа алгоритма, так как условие его завершения, например,
по
критерию
(2)
прироста
средней
приспособленности
при
𝜀 = 0,5 не выполнены.
Продолжая работу с алгоритмом и выполняя с текущей популяцией те
же действия, что и с начальной, получим новую текущую популяцию,
значение функции приспособленности которой следует ожидать выше, чем у
предыдущей. Однако не следует рассчитывать на то, что в некоторой
очередной популяции обязательно будут присутствовать только хромосомы
(1000), соответствующие максимальному значению функции. Генетический
алгоритм обеспечивает лишь приближение к оптимуму, при этом предлагает
сразу несколько (в примере — шесть) решений, поэтому необходим
последний этап алгоритма — выбор наилучшей хромосомы, который
применяется после выполнения условий завершения работы. Лучшим
решением считается хромосома с наибольшим значением функции
приспособленности.
2. Кодирование фенотипов в хромосомы
Этап кодирования фенотипов в хромосомы — один из важнейших в
реализации генетических алгоритмов, поскольку выбор метода кодирования
оказывает самое существенное влияние на эффективность его работы.
Как известно, задачи оптимизации, на решение которых и направлены
в основном генетические алгоритмы, можно разделить на два больших
класса: задачи оптимизации в непрерывном пространстве поиска и задачи
оптимизации в дискретном пространстве поиска. В непрерывных задачах
точки пространства поиска, т.е. фенотипы, всегда представлены
действительными числами. Многие дискретные задачи, например
комбинаторные
задачи
о
назначении,
задачи
динамического
программирования, могут быть представлены как задачи оптимального
выбора на графах. Сюда же относятся и собственно оптимальные задачи выбора на графах. Таким образом, в дискретных задачах оптимизации
пространство поиска может иметь графовое представление, а точками
пространства поиска (фенотипами) являются соответствующие подграфы.
Методы кодирования фенотипов (соответственно методы декодирования генотипов в фенотипы) мы будем рассматривать в двух
направлениях: представление чисел и представление подграфов
соответствующими хромосомами.
Представление чисел хромосомами
В классическом генетическом алгоритме применяется двоичное
кодирование хромосом, при котором значения генов в хромосоме (аллель)
выбирается из множества {0,1}. Существует множество методов двоичного
кодирования, обладающих своими достоинствами и недостатками.
Рассмотрим некоторые из них.
В примере из разд. 2 при поиске максимума функции одной переменной
был использован способ записи десятичных чисел в двоичной системе
счисления, где каждый бит двоичного кода соответствует очередной степени
цифры 2. В общем виде произвольное действительное число
𝑎𝑛 𝑎𝑛−1 … 𝑎0 𝑎−1 … 𝑎−𝑚 , записанное в системе счисления с основанием
представляет собой разложение по степеням основания этой системы:
𝑎𝑛 𝑎𝑛−1 … 𝑎0 𝑎−1 … 𝑎−𝑚 = 𝑎𝑛 𝑞 𝑛 + 𝑎𝑛−1 𝑞 𝑛−1 + ⋯ + 𝑎0 𝑞 0 + ⋯ 𝑎−𝑚 𝑞 −𝑚 .
При двоичном кодировании хромосом 𝑎𝑖 ∈ {0,1} и 𝑞 = 2. Например,
число 19,5 может быть представлено двоичной последовательностью или
кодом (1 0 0 1 1 1), определенным следующим выражением:
1 ⋅ 24 + 0 ⋅ 23 + 0 ⋅ 22 + 1 ⋅ 21 + 1 ⋅ 20 + 1 ⋅ 2−1 = 19,5.
При этом соответствие каждого бита двоичного кода степени числа 2
строго фиксировано. Заметим, что если бы в примере разд. 2 нас
интересовало решение с точностью, превышающей 0,5, то промежуток от 0
до 7 необходимо было бы разбить на большее количество подынтервалов.
Соответственно для кодирования потребовались более длинные хромосомы.
Аналогично расширение области определения переменной х также потребует
применения более длинных хромосом. Отсюда можно сделать вывод: длина
хромосом зависит от ширины области определения хи от требуемой точности
решения. Более того, область определения может содержать большие по
абсолютной величине числа даже при небольшой длине промежутка, а также
отрицательные числа.
Последнее обстоятельство потребовало бы введения еще одного гена,
определяющего знак числа, например, в первом бите (локусе) хромосомы.
Однако этот ген имел бы доминирующее влияние на изменение функции
приспособленности в процессе репродукции, что привело бы к большим,
вообще говоря, нежелательным скачкам в пространстве поиска. В этой связи
обычно прибегают к следующей нормировке переменной 𝑥 ∈ [𝑎, 𝑏]: 𝑥 𝐻 = 𝑥 −
𝑎. Нормированная область определения принимает вид:
[0, (b − a)].
Пусть теперь требуется найти максимум функции f(х) на промежутке
[а, b] с точностью до q знаков после запятой. В такой ситуации требуется
разбить промежуток [а, b] на (b-a) одинаковых подынтервалов. Это означает
применение дискретизации с шагом 𝑟 = 10−𝑞 . Наименьшее натуральное
число m, удовлетворяющее неравенству
(𝑏 − 𝑎) ∙ 10𝑞 ≤ 2𝑚 − 1,
(4)
определяет необходимую и достаточную длину двоичной последовательности, требуемой для кодирования числа из промежутка [а, b] с
шагом r. Каждой такой двоичной последовательности соответствует
десятичное значение числа, представляемого данным кодом. Пусть у
обозначает десятичное значение сдвига двоичной последовательности,
кодирующей число х; тогда выражение для декодирования имеет вид:
𝑏−𝑎
.
2𝑚 − 1
Рассмотрим пример кодирования и декодирования промежутка [-5; 10]
с точностью до целых чисел, q=0. Разобьем промежуток на (10 + 5) ∙ 100 =
15 подынтервалов. Шаг дискретизации r = 1. В данном случае решение
уравнения (4) дает m = 4 – необходимую и достаточную длину двоичной
последовательности. Результаты кодирования и декодирования показаны в
табл. 2.
𝑥 =𝑎+𝑦
Т а б ли ц а 2
Результаты кодирования и декодирования
Нормативное
значение
переменной xH
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Кодированные
значения xH
(генотип)
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Десятичное
значение сдвига
у
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
х (фенотип)
-5
-4
-3
-2
-1
0
1
2
3
4
5
6
7
8
9
10
Таким образом, при кодировании одной переменной (поиск экстремума
функции одной переменной y=f(х) значение этой переменной (фенотип)
отображается хромосомой в виде бинарного вектора. При оптимизации
функции нескольких переменных у =f(х1 ..., х2) фенотип будет представлен не
одним числом, а последовательностью чисел – значений соответствующих
переменных. Процедура нормирования в этом случае выполняется для
каждой переменной xi. Аналогично определяется и длина кодирующей
последовательности.
Рассмотрим кодирование и декодирование на примере функции двух
переменных с областью определения𝑥1 ∈ [−5,10] и 𝑥2 ∈. Пусть требования к
точности решения q = 0 одинаковы для той и другой переменной. Все
необходимые расчеты для первой переменной уже получены в предыдущем
примере. Для второй переменной необходимо выделить 15 подынтервалов
одинаковой длины. Решение уравнения (4) для второй переменной также
определяет m = 4. Результаты кодирования и декодирования для второй
переменной показаны в табл. 3.
Т а б ли ц а 3
Результаты кодирования для переменной 𝒙𝟐
Нормативное
значение
переменной 𝑥 𝐻 2
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Кодированные
значения xH
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Десятичное
значение сдвига
у
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
𝑥2
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
Пространство поиска в рассматриваемом случае будет представлять
собой множество дискретных точек 𝑥̅ = (𝑥1 , 𝑥2 ) с двумя координатами
(фенотипами), определяемых выражением 𝑥̅ ∈ 𝑋1 × 𝑋2 , где знак × означает
прямое произведение множеств 𝑋1 и 𝑋2 . Соответствующее прямое
произведение множеств двоичных кодов будет определять множество
генотипов популяции. При этом можно рассматривать двоякое
представление генотипов:
 в виде одной хромосомы, состоящей из двух фрагментов, например,
фенотип (2; 95) представляется генотипом
(0 1 1 1 1 0 1 0);
 в виде матрицы, состоящей из двух хромосом, например, фенотип (2;
95) представляется генотипом
0 1 1 1
(
)
1 0 1 0
Такое разнообразие представлений позволяет расширить возможности
применения различных типов операторов репродукции. Приведенные
примеры можно распространить и на функции n переменных.
Отмечаемым недостатком приведенного метода кодирования является
неодинаковый вес битов строки. В результате изменения в старших разрядах
при выполнении операции мутации приводят к большим скачкам в
пространстве поиска по сравнению с изменениями в младших разрядах.
Нельзя определенно сказать, как эта особенность влияет на работу
генетического алгоритма, однако в ряде случаев (вообще говоря, выходящих
за рамки классического генетического алгоритма) для кодирования применяется код Грея, который характеризуется тем, что двоичные последовательности, соответствующие двум последовательным целым числам,
отличаются только одним битом.
Рассмотрим следующий пример. В табл. 4 представлена система
кодирования и декодирования хромосом в числа из промежутка [a; b] с
использованием кода Грея.
Т а б ли ц а 4
Система кодирования и декодирования хромосом
с использованием кода Грея
Код Грея
Двоичный код
0000
0001
0011
0010
0110
0111
0101
0100
1100
1101
1111
1110
1010
1011
1001
1000
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
Десятичное
знание сдвига
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Вещественное
значение координаты
𝑎
𝑎 + 1(𝑏 − 𝑎)/15
𝑎 + 2(𝑏 − 𝑎)/15
𝑎 + 3(𝑏 − 𝑎)/15
𝑎 + 4(𝑏 − 𝑎)/15
𝑎 + 5(𝑏 − 𝑎)/15
𝑎 + 6(𝑏 − 𝑎)/15
𝑎 + 7(𝑏 − 𝑎)/15
𝑎 + 8(𝑏 − 𝑎)/15
𝑎 + 9(𝑏 − 𝑎)/15
𝑎 + 10(𝑏 − 𝑎)/15
𝑎 + 11(𝑏 − 𝑎)/15
𝑎 + 12(𝑏 − 𝑎)/15
𝑎 + 13(𝑏 − 𝑎)/15
𝑎 + 14(𝑏 − 𝑎)/15
𝑎 + 15(𝑏 − 𝑎)/15
От кода Грея переходим к двоичному коду, а от него — к натуральным
целым числам. Отношение полученного числа к максимальному числу,
доступному для кодирования данным количеством разрядов хромосомы (в
примере это число 15), и дает искомое значение сдвига переменной
относительно левой границы а допустимого промежутка, нормированного на
ширину промежутка b – a.
С помощью табл. 4 можно проиллюстрировать преимущества кода
Грея по сравнению с двоичным кодом, который при некотором стечении
обстоятельств порождает своеобразные тупики для поискового процесса.
Рассмотрим любые три рядом стоящие строки из табл. 3, например,
кодирующие сдвиг в 4, 5 и 6 единиц.
Предположим, что хромосома, стоящая в пятой строке и кодирующая
число 5 — оптимальная хромосома, а соответствующий ей фенотип есть
решение некоторой задачи. Лучшая особь из текущей популяции содержит
хромосому из строки 4. Такая ситуация благоприятна для обоих кодов.
Достаточно выполнить всего лишь одну операцию — заменить в четвертом
разряде текущей хромосомы 0 на 1 — и решение будет найдено. Более
интересный случай получается, если лучшая текущая хромосома находится в
строке Для кода Грея эта ситуация ничуть не сложнее предыдущей — замена
0 на 1 в третьем разряде этой хромосомы сразу приводит к оптимальному
решению. В то же время двоичный код вызывает необходимость выполнить
последовательно две операции — заменить 1 на 0 в третьем разряде и 0 на 1 в
четвертом. С какой бы из них мы ни начали, результат первой операции не
приблизит нас к решению (первый вариант замены переместит текущее
решение в четвертую строку, а второй — в седьмую). Иначе говоря, если
привлечь геометрическую интерпретацию, код Грея гарантирует, что две
соседние, принадлежащие одному ребру, вершины гиперкуба, на котором
осуществляется поиск, всегда декодируются в две ближайшие точки
пространства вещественных чисел, отстоящие друг от друга на одну дискрету
точности. Двоичный код подобным свойством не обладает.
В случаях когда при двоичной кодировке получаются слишком
длинные хромосомы, используется так называемое логарифмическое
кодирование,
рассматриваемое
как
модификация
классического
генетического алгоритма.
При логарифмическом кодировании первый бит (α) кодовой
последовательности — это бит знака показательной функции, второй бит (β)
— бит знака степени этой функции, а остальные биты (bin) представляют
значения самой степени:
(𝛼𝛽𝑏𝑖𝑛) = (−1)𝛽 exp[(−1)𝛼 (𝑏𝑖𝑛)10 ],
где (𝑏𝑖𝑛)10 — десятичное значение числа, закодированного в виде
двоичной последовательности bin. Например, (10110) представляет собой
кодовую последовательность числа
𝑥1 = (−1)0 exp[(−1)1 (010)10 ] = exp(−6) = 0.002478752,
а (01010) представляет собой кодовую последовательность числа
𝑥2 = (−1)1 exp[(−1)0 (010)10 ] = − exp(2) = −7.389056099.
Заметим, что таким образом с помощью пяти битов можно закодировать числа из промежутка [-exp(7), ехр(7)]. Это значительно больший
промежуток, чем соответствующий промежуток, получаемый при обычном
двоичном кодировании.
Еще одна модификация классического генетического алгоритма
основана на кодировании действительными, а не двоичными числами. Это
означает, что гены хромосом принимают действительные значения (аллели
являются действительными числами). Более того, находят применение
генетические алгоритмы, гены которых представлены нечеткими числами.
Представление графов хромосомами
Кодирование фенотипов в виде графов имеет естественную основу в
виде соответствующих матриц смежности или инциденций. Необходимо
сразу заметить, что в этом случае генотип представляется не одной
хромосомой, а несколькими. Для примера рассмотрим граф, представленный
на рис. 3.
Рис. 3. Пример графа
Соответствующая ему матрица смежности имеет вид (табл. 5).
Т а б ли ц а 5
Матрица смежности
0
1
0
1
0
1
0
0
0
1
0
0
0
1
0
1
0
1
0
0
0
1
0
0
0
Каждую строку такой матрицы можно рассматривать как хромосому
генотипа кодируемой особи.
Здесь необходимо отметить, что фенотип, представленный графом,
всегда является подграфом более общего графа всех решений, допустимых с
точки зрения выполнения определенных свойств. Поясним это следующим
примером.
Пусть инвестор имеет четыре проекта, каждый из которых может быть
внедрен на одном из четырех предприятий. Распределение прибыли (𝑎𝑖𝑗 )
инвестора от внедрения одного из проектов на одном из предприятий
показано в табл.
Т а б ли ц а 6
Распределение прибыли (𝒂𝒊𝒋 ) инвестора от внедрения одного из
проектов на одном из предприятий
Прибыль на предприятии
Номер
проекта
1
2
3
4
1
100
150
90
200
2
200
100
70
150
3
250
80
70
100
4
190
100
120
200
Необходимо назначить по одному проекту на каждое предприятие так,
чтобы получить максимальную суммарную прибыль инвестора. Общее число
вариантов размещений проектов по предприятиям Pn = n! = 4! = 24. В общем
случае (п (число строк, проектов) и т (число столбцов, предприятий)) это
число перестановок из п по т. Задачу можно отобразить двудольным графом
(рис. 4).
Рис. 4. Двудольный граф
Здесь левые вершины — проекты, правые — предприятия. Пусть 𝑥𝑖𝑗 –
бинарная переменная, отображающая факт назначения i-го проекта на j-е
предприятие, если 𝑥𝑖𝑗 = 1. В противном случае 𝑥𝑖𝑗 = 0.
Формальная постановка задачи имеет вид:
4
4
∑ ∑ 𝑎𝑖𝑗 𝑥𝑖𝑗 → 𝑚𝑎𝑥 .
(5)
𝑖=1 𝑗=1
4
∑ 𝑥𝑖𝑗 = 1, ∀𝑗;
𝑖=1
4
∑ 𝑥𝑖𝑗 = 1, ∀𝑖, 𝑥𝑖𝑗 ∈ {0,1}.
(6)
𝑗=1
Вообще говоря, матрица смежности двудольного графа, изображенного
на рис. 4, имеет размерность 8 × 8. Однако информативная часть этой
матрицы, а точнее, часть, содержащая изменяющиеся решения, отвечающие
условиям (6), будет иметь меньшую размерность, равную 4 × 4. Так,
например, двудольный граф решения задачи можно представить следующей
матрицей.
Т а б ли ц а 6
Двудольный граф решения задачи
Номер
предприятия
Номер
проекта
1
2
3
4
1
2
3
4
1
0
0
0
0
0
1
0
0
1
0
0
0
0
0
1
Этой матрице соответствует подграф исходного двудольного графа,
показанный на рис. 5.
Рис. 5. Подграф-решение, удовлетворяющий условиям (6)
Матрицу, представленную табл. 7, можно рассматривать как генотип,
состоящий из 4 хромосом и рассматриваемый как одна из точек пространства
поиска решения, удовлетворяющего постановке (5 — 6).
Иные свойства решений будут, если представляющие их подграфы
должны являться, например, маршрутами, цепями или циклами.
Отображение этих свойств - чередования инцидентных элементов графа,
отсутствия повтора ребер в цепи, замкнутости - может вызывать
определенные затруднения при кодировании. В некоторых задачах, например
в задачах раскрашивания графа, применяются специальные методы
кодирования, в принципе не связанные с матричным представлением
генотипов.
Тем не менее свойства решений, представленные равенствами (6),
охватывают достаточно большой класс задач оптимизации, что позволяет
рассматривать матричное представление фенотипов. Сюда относятся:
транспортная задача, задача о размещении и раскрое, задачи составления
расписания, задачи о назначении и ряд других задач, часто используемых в
экономике.
1.
2.
3.
4.
5.
Литература
Абдикеев Н.М. Проектирование интеллектуальных систем в
экономике: Учебник / Под ред. Н.П. Тихомирова. – М.: «Экзамен»,
2004.
Андрейчиков
А.В.,
Андрейчикова
О.Н.
Интеллектуальные
информационные системы. Финансы и статистика – М.: 2004.
Матвеев М.Г. Модели и методы искуственного интеллекта.
Применение в экономике: учебное пособие / М.Г. Матвеев, А.С.
Свиридов, Н.А. Олейникова. – М.: Финансы и статистика; ИНФРА-М,
2008. – 448 с.
Романов В. П.
Интеллектуальные информационные системы в
экономике: Учеб. Пособие/ Под ред. дэн, проф Н.П. Тихомирова.-М.:
Экзамен, 2003. – 496с.
Сахнюк П.А. Интеллектуальные системы и технологии: Учебное
пособие. – Ставрополь: Агрус 2012. - 93 с.
Скачать