Выясним, что можно считать решением задачи коммивояжера. Очевидно, что каким-либо решением будет любой маршрут между городами, удовлетворяющий следующим условиям: он пересекает все без исключений города и не один не пересекает больше одного раза. Закодировать такой маршрут можно в виде последовательности номеров городов, начиная с самого первого, в конце последовательности номер.
Алгоритм муравьиной колонии - один из эффективных полиномиальных алгоритмов для нахождения приближённых решений задачи коммивояжёра, а также аналогичных задач поиска маршрутов на графах. Суть подхода заключается в анализе и использовании модели поведения муравьёв, ищущих пути от колонии к источнику питания и представляет собой мета эвристическую оптимизацию предпоследнего города, так как маршрут замкнут и последним будет город, с которого он начинался. Очевидно, что в этой последовательности не будет повторяющихся значений.
Пусть для простоты примера количество городов N = 8, тогда одной из
возможных последовательностей городов будет путь, изображенный на рис. 2.3.1.
Рисунок 2.3.1. - Пример маршрута коммивояжера при обходе 8 городов
Закодируем города числами от 1 до 8. Тогда тот же самый путь примет вид.
Теперь нам нужно представить решение в виде хромосомы. Выше мы уже
закодировали решение в виде последовательности номеров городов, теперь осталось
перекодировать ее хромосому. Для определенности будем считать, что мы кодируем
в хромосому в виде битового вектора. Очевидно, что длина гена в битах в
хромосоме будет равна:
понадобиться 3 бита. Кодируем последовательность с помощью двоичного
кодирования
Таблица 2.3.1 - Кодирование последовательности городов с помощью
двоичного кодирования.
|
000 |
101 |
001 |
100 |
011 |
111 |
010 |
110 |
|
1 |
6 |
2 |
5 |
4 |
8 |
3 |
7 |
Однако представив решение таким образом, мы не учли несколько существенных факторов:
1. при случайной генерации начальной популяции может возникнуть
хромосома, в которой будут повторяющиеся значения генов:
000 010
100 101 110 010.
. хромосомы с повторяющимися генами может дать кроссинговер или мутация.
Есть несколько способов решения этого недостатка кодирования, но все они ведут к излишнему потреблению вычислительных ресурсов, т.к. надо дополнительно проверять хромосомы. Один из способов - проверять на повторяющиеся значения внутри функции приспособленности, и, встретив такие, заменять их на те значения, которых нет в хромосоме. Второй способ - ничего не проверять, а присвоить таким хромосомам очень низкое значение функции приспособленности, но в этом случае генетический алгоритм начинает крайне неэффективно работать.
Вообще говоря, для генетических алгоритмов очень важен вопрос кодирования решений в последовательность генов. От того, насколько оно удачно, зависит качество работы алгоритма. Самое главное, и обязательное, требование к кодированию - хромосома должна однозначно представлять некоторое решение, чтобы не было возможности трактовать одну и ту же хромосому по-разному. Желательно, чтобы хромосомы занимали как можно меньше бит, были короче. Так же важным условием является простота кодирования. От этого зависит скорость работы.
После кодирования запускается генетический алгоритм с желаемыми
параметрами.
2.4 Реализация генетического алгоритма для решения задачи коммивояжера с
использованием пакета MATLAB 7.5
Пакет MALAB 7.5 предоставляет встроенную панель инструментов Genethic Algorithm and Direct Search Toolbox™, которая предназначена для расширенияфункциональных возможностей пакета генетическими алгоритмами. Работать с данной панелью инструментов можно двумя способами: с консоли или вызвав панель Genethic Algorithm Tool с помощью команды gatool. По сути, оба способа являются идентичными с той разницей, что используя панель Genethic Algorithm Tool, любые параметры генетического алгоритма настраиваются с использованием графической оболочки.
Рассмотрим встроенные функции для работы с генетическими алгоритмами [9]:
[x fval reason output population scores] =
ga(@fitnessfun, nvars, options) - функция для нахождения минимума целевой функции; Входные параметры:
@fitnessfun - указатель функции в М-файле, по которой производится расчет
функции приспособленности;- число независимых переменных для функции
приспособленности;- настраиваемые параметры генетического алгоритма; Выходные
параметры: x - конечная точка расчета; fval - значение функции
приспособленности в точке x; o reason - причина остановки алгоритма; output -
структура с информацией о эффективности работы алгоритма для каждого
выполненного поколения;- состояние последнего семейства; o scores - конечное
состояние;= gaoptimget(options, ’Name’) - возвращает параметры используемого генетического
алгоритма; Входные параметры:- структура с параметрами генетического
алгоритма;’Name’- имя параметра, значение которого нужно извлечь;
Выходные параметры:
val - значение запрашиваемого параметра;
options = gaoptimset(’param1’, value1, ’param2’,
value2, ...) - устанавливает параметры генетического алгоритма;
Входные параметры:
’param1’ - имя параметра;- устанавливаемое значение;
Выходные параметры:
- структура с параметрами генетического алгоритма.
Для решения задачи коммивояжера будем генерировать города случайным образом в отрезке [0, 1], при этом расстояния между городами подчиняются правилу треугольника.
Используявстроенные функции MATLAB, реализуем генетический алгоритм со следующими характеристиками и ограничениями:
1. Хромосома представлена в виде бинарного вектора;
2. Размер популяции - 50 особей;
. Для расчета функции приспособленности используется стандартная функция travelling_salesman_fitness, принимающая в качестве аргумента хромосому (то есть одна из возможных перестановок городов) и возвращающая значение функции приспособленности для нее;
4. Кроссинговер: применяемая стратегия - генерация перестановок (используется стандартная функция crossover_permuation), вероятность кроссинговера - 0.8;
. Мутации: стратегия - так же применяется стандартная функция mutate_permutation, которая с определенной вероятностью генерирует перестановки в векторе пути, вероятность мутации - 0.2. Величина мутации такая большая, так как используется относительно небольшая популяция и велика вероятность попадания в локальный минимум;
. Применяется стратегия элитарности; из каждой предыдущей популяции остается 2 наилучшие особи;
7. Критерием остановки выполнения алгоритма является сохранение значений функции приспособленности на протяжении 50 поколений (для количества городов >100), 1000 поколений (для 100 - 400 городов), 7500 поколений (>400 городов);
Сравним эффективность решения задачи коммивояжера с помощью генетического алгоритма с эффективными методами решения на одинаковых наборах данных. Для решения задачи коммивояжера с помощью минимального остова без(с) оптимизацией была использована программа, написанная на С++. В качестве алгоритма построения минимального остова был использован алгоритм Прима. Далее к решению, полученному с помощью минимального остова, применялась оптимизация: для участка пути длинной
генетический алгоритм оптимизация коммивояжер
2 + 1,
где k - шаг оптимизации, генерировались всевозможные перестановки, то есть вокруг города i генерировались перестановки в участке пути, в который входят города
− … … + . Количество перестановок тогда будет равно 2 − 1 !.
Таблица 2.4.1 - Сравнение точности решения задачи коммивояжера с помощью генетических алгоритмов с эффективными методами решения на одинаковых наборах данных.
|
Количество городов |
Точное решение |
Генетический алгоритм |
Решение с помощью минимального остова |
Оптимизация решения с помощью минимального остова (k = 3) |
Оптимизация решения с помощью минимального остова (k = 5) |
|
5 |
1,4274 |
1,4274 |
1,4608 |
1,4608 |
- |
|
10 |
3,1710 |
3,1710 |
3,5153 |
3,1710 |
3,1710 |
|
15 |
3,2265 |
3,2266 |
3,3323 |
3,2265 |
3,2265 |
|
20 |
- |
3,9634 |
5,5095 |
4,7750 |
4,7750 |
|
50 |
- |
5,8946 |
7,9498 |
6,6888 |
6,2239 |
|
100 |
- |
8,7381 |
10,790 |
10,051 |
9,3428 |
|
200 |
- |
11,9872 |
15,1465 |
13,7863 |
12,8208 |
|
400 |
- |
16,3385 |
20,6697 |
18,8074 |
17,4822 |
|
800 |
- |
23,4532 |
29,5846 |
27,0346 |
25,5666 |
|
1600 |
- |
33,2398 |
41,2549 |
37,8895 |
35,2624 |
|
3200 |
- |
- |
58,0455 |
53,1781 |
49,6798 |
|
6400 |
- |
- |
81,5697 |
75,82 |
72,8593 |
|
10000 |
- |
- |
101,539 |
93,6233 |
89,4984 |
Таблица 2.4.2 - Сравнение времени решения задачи коммивояжера с помощью генетических алгоритмов с эффективными методами решения на одинаковых наборах данных (время в мс).
|
Количество городов |
Точное решение |
Генетический алгоритм |
Решение с помощью минимального остова |
Оптимизация решения с помощью минимального остова (k = 3) |
Оптимизация решения с помощью минимального остова (k = 5) |
|
1 |
2 |
3 |
4 |
5 |
6 |
|
5 |
0 |
82 |
0 |
0 |
- |
|
10 |
15 |
1061 |
0 |
0 |
50 |
|
15 |
1532 |
0 |
0 |
421 |
|
|
20 |
- |
2593 |
0 |
0 |
968 |
Таблица 2.4.3 - Сравнение времени решения задачи коммивояжера с помощью генетических алгоритмов с эффективными методами решения на одинаковых наборах данных (время в мс, продолжение.
|
1 |
2 |
3 |
4 |
5 |
6 |
|
50 |
- |
3812 |
0 |
15 |
1921 |
|
100 |
- |
6734 |
0 |
15 |
6890 |
|
200 |
- |
25719 |
0 |
46 |
13761 |
|
400 |
- |
145414 |
31 |
93 |
21906 |
|
800 |
- |
480854 |
78 |
156 |
49218 |
|
1600 |
- |
1465773 |
343 |
617 |
93233 |
|
3200 |
- |
- |
1343 |
2089 |
189639 |
|
6400 |
- |
- |
6343 |
7456 |
386234 |
|
10000 |
- |
- |
26781 |
30421 |
586580 |
Анализируя табл. 2.4.2 и табл. 2.4.3, очевидно, что генетический алгоритм
находит более точное решение по сравнению с решением задачи с помощью
минимального остова даже с оптимизацией. Однако при решении задачи коммивояжера
с помощью генетического алгоритма возникает ряд проблем - нужно менять условие
остановки алгоритма в зависимости от числа городов, поскольку генетические
алгоритмы имеют относительно плохую сходимость при большой длине хромосомы; так
же генетические алгоритмы имеют не очень хорошие показатели по времени (рис.
2.4.1.).
Согласно исследованиям генетические алгоритмы имеют трудоемкость в среднем
(nт),
где n - длина хромосомы (то есть количество городов), m - отражает влияние размера популяции и вероятностей генетических операторов. Узким местом генетических алгоритмов является многократное вычисление значения функции приспособленности.
Количество вычислений равняется:
Попробуем взять в качестве исходных данных для решения задачи
коммивояжера генетическим алгоритмом полученные решения с помощью минимального
остова с и без оптимизации (табл. 2.4.4. и табл. 2.4.5.). При больших
количествах городов также приходится менять условие остановки алгоритма.
Таблица 2.4.4.- Сравнение точности решения задачи коммивояжера с помощью генетических алгоритмов с эффективными методами решения
Таблица 2.4.5. - Сравнение времени решения задачи коммивояжера с помощью генетических алгоритмов с эффективными методами решения (время в мс). Набор данных - решение задачи, полученное с помощью эффективных способов
Очевидно, что решение имеет лучшее качество, но количество шагов для оптимизации, взятых для решения задачи с помощью минимального остова, никак не влияет на него. Из этого можно сделать вывод, что генетические алгоритмы можно применять после эффективных способов решения для увеличения точности. Время выполнения так же значительно сократилось.
На основе полученных результатов можно сделать следующий вывод: пусть есть задача, для которой может быть получено некоторое приближенное решение, тогда для того, чтобы улучшить полученное решение, его можно подать на вход генетическому алгоритму. Решение, полученное таким способом, будет более точным.
В силу особенностей своей реализации, генетические алгоритмы хорошо
поддаются распараллеливанию, исходя из этого, исследуем их эффективность в
таком случае.
2.5 Развитие генетических алгоритмов в сторону модели с несколькими
взаимодействующими популяциями
.5.1 Модель миграции генетических алгоритмов
Генетические алгоритмы применяются и при параллельных вычислениях (parallel implementations).
Первым подходом является распараллеливание отдельных шагов алгоритма: селекции и репликации, мутации, вычисление функции приспособленности. При этом популяция разделяется на блоки, над каждым из которых работает отдельный поток.