
- •Исследование генетического алгоритма
- •1.1 Основные понятия га
- •1.2 Принцип работы га
- •Разработка и реализация генетического алгоритма
- •1.3.1 Формальное представление программы
- •1.3.2 Спецификация программы
- •1.3.3 Листинг программы
- •1.3.4 Результаты тестирования программы
- •Изучение различных кодировок генотипа
- •2.1 Генетический алгоритм с двоичным кодированием
- •2.2 Генетический алгоритм с кодом Грэя
- •2.3 Изучение генетического алгоритма. Изучение различных кодировок генотипа
- •2.3.1 Формальное представление программы
- •2.3.2 Спецификация программы
- •Результаты тестирования программы
- •Введение новых генетических операторов
- •3.1. Оператор скрещивания.
- •3.2. Оператор мутации.
- •3.3. Оператор инверсии.
- •3.4. Оператор популяционного всплеска.
- •3.5. Оператор уплотнения сетки целочисленного кодирования.
- •3.6 Изучение генетических операторов
- •2.3.1 Формальное представление программы
- •2.3.2 Спецификация программы
- •2.3.3 Результаты тестирования программы
- •Исследование схемы «генетический алгоритм – классический метод оптимизации»
- •4.1 Пример работы га и анализа результатов.
- •Изучение схемы «генетический алгоритм – классический метод оптимизации»
- •4.2.1 Формальное представление программы
- •4.2.2 Спецификация программы
- •4.2.3 Результаты тестирования программы
- •Заключение
- •Список литературы
3.2. Оператор мутации.
Сразу после скрещивания на потомках применяется мутация, которая предназначена для внесения случайных изменений в хромосомы особей. Это позволяет алгоритму «выбираться» из локальных экстремумов и, тем самым, эффективнее охватывать пространство поиска. Так же, как и для оператора скрещивания, имеет смысл определить вероятность применения мутации pm. Рассмотрим различные операторы мутации в зависимости от способа кодирования генетической информации.
Целочисленное кодирование. В случае целочисленного кодирования мутация изменяет отдельные разряды в хромосоме. Для этого каждый разряд инвертируется с вероятностью pm. Ниже приведен пример мутации на псевдокоде:
ДЛЯ КАЖДОГО ПОТОМКА k ПОСЛЕ СКРЕЩИВАНИЯ
{
ДЛЯ КАЖДОГО i РАЗРЯДА В ХРОМОСОМЕ k
{
ЕСЛИ (PM > RANDOM)
{
БИТОВАЯ_МУТАЦИЯ (ОСОБЬ[k], i);
}
}
}
В силу того, что применение мутации разыгрывается столько раз, сколько разрядов содержится в хромосоме, значение pm выбирают небольшим, чтобы сильно не разрушать «хороший» генотип хромосом. Один из типичных вариантов pm = L–1, где L – длина хромосомы в битах, в этом случае каждая хромосома мутирует в среднем один раз.
Вещественное кодирование. Оператор мутации для вещественного кодирования изменяет содержимое каждого гена с вероятностью pm. При этом величина изменения выбирается случайно в некотором диапазоне [-; +], например, [-0,5; 0,5], и может иметь как равномерное, так и любое другое распределение, к примеру, нормальное с нулевым ожиданием и единичной дисперсией. Таким образом, пример мутации для вещественного кодирования на псевдоязыке выглядит следующим образом (RND – случайное число, распределенное по заданному закону):
ДЛЯ КАЖДОГО ПОТОМКА k ПОСЛЕ СКРЕЩИВАНИЯ
{
ДЛЯ КАЖДОГО i ГЕНА В ХРОМОСОМЕ k
{
ЕСЛИ (PM > RANDOM)
{
ОСОБЬ[k].ГЕН[i] = ОСОБЬ[k].ГЕН[i] + RND;
}
}
}
Для того чтобы избежать сильных изменений содержимого хромосомы в результате мутации значение вероятности pm выбирается небольшим, порядка 1÷10 %.
3.3. Оператор инверсии.
Инверсия встречается в некоторых модификациях ГА [4] и используется с той же целью, что и мутация. Он представляет собой инверсию только одного случайно выбранного бита хромосомы:
ДЛЯ КАЖДОЙ k ОСОБИ В ПОПУЛЯЦИИ
{
ЕСЛИ (PI > RANDOM)
{
БИТОВАЯ_МУТАЦИЯ (ОСОБЬ[k], RANDOM*ДЛИНА_ХРОМОСОМЫ_В_БИТАХ);
}
}
Схематически механизм инверсии представлен на рис. 19.
Рисунок 19. Пример работы инверсии для целочисленного кодирования
3.4. Оператор популяционного всплеска.
Если разница приспособленности наилучшей и наихудшей особей в популяции меньше определенного малого значения и это неравенство сохраняется в течение нескольких поколений, то говорят, что такая популяция выродилась. Говоря другими словами, алгоритм сошелся в окрестности какого-то предполагаемого минимума. В то же время операторы скрещивания, мутации и инверсии оказываются неспособны дать популяции свежий «генный материал». Во избежание такой ситуации, как правило, вводятся различные модификации, например оператор популяционного всплеска.
Принцип его действия такой: когда становится ясно, что популяция выродилась, случайным образом выбирается некоторое количество особей (обычно не более 50% популяции). Затем выбранные особи инициализируется случайными точками поискового пространства (см. разд. 5.1) и помещаются обратно в популяцию на свои места. Таким образом, алгоритм получает новых особей, среди которых, возможно, будут хорошие решения.