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

Генетические алгоритмы для задач комбинаторной оптимизации

2.2. Задача о покрытии

Задано множество элементов S и множество подмножеств F=\{F_1,\dots,F_n\} этого множества S. Необходимо найти минимальное число подмножеств из F таких, чтобы объединение этих подмножеств содержало все элементы множества S. Задача имеет простую экономическую интерпретацию: пусть, например, имеется некоторое количество клиентов и для их обслуживания необходимо выбрать некоторое количество сервисных центров. Требуется найти минимальное число центров, способных обслуживать всех клиентов.

Очевидно, здесь решение можно также представить двоичным вектором

X=(x_1,\dots,x_n), где

x_i=1, если подмножество F_i входит в покрытие;

x_i=0, если F_i не входит в покрытие;

и при этом

\bigcup_{i=1,\dots,n} x_i F_i=S,
\sum_{i=1}^n x_i=\min

Поскольку решение задачи, как было показано выше, представляется двоичным вектором, то при его поиске можно использовать простой ГА со стандартными операторами кроссинговера и мутации.

2.3. Задача коммивояжера

Напомним неформальную постановку этой классической задачи. Коммивояжер (бродячий торговец) должен выйти из первого города, посетить по одному разу в некотором порядке все города и вернуться в исходный город. На рис.2.1 приведен пример задачи для четырех городов.

Расстояния между городами известны. В каком порядке следует обходить города, чтобы замкнутый путь (тур) коммивояжера был кратчайшим?

Задача коммивояжера

Рис. 2.1. Задача коммивояжера

В формальной постановке задачи коммивояжера (ЗК): имеется полный взвешенный ориентированный граф G без петель с множеством вершин N=\{1,2,\dots,n\}; веса всех дуг неотрицательны; в этом графе требуется найти гамильтонов цикл с минимальной длиной. Исходная информация по ЗК представляется в виде n\times n матрицы S=[s_{i,j}],s_{i,j} вес дуги (i,j) графа G, i=\overline{1,n}, j=\overline{1,n}, i\ne j; все элементы главной диагонали нулевые s_{ii}=0(но в некоторых постановках полагаются s_{ii}=\infty). Обычно s_{ij} интерпретируется как расстояние между городами i и j. С учетом других возможных интерпретаций на матрицу S требование симметричности не налагается. Например, в случае интерпретации s_{ij} как стоимости проезда, в общем случае может быть s_{ij}\ne s_{ji}. В общем случае не считается обязательным и выполнение неравенства треугольника s_{ij}+ s_{jk}\ge s_{ik}.

Тур коммивояжера может быть описан циклической перестановкой t=(j_1,j_2,\dots,j_n,j_1), причём все j_1,\dots,j_n– попарно различны; повторяющийся в начале и в конце номер города j_1, показывает, что перестановка циклическая. Пространством поиска решений этой задачи является множество перестановок n городов. Любая простая (одиночная) перестановка n городов даёт решение, являющееся полным туром из n городов. Оптимальным решением является перестановка, которая даёт минимальную стоимость тура. Очевидно, размерность пространства поиска для несимметричной задачи равна (n-1)!. Известно, что эта задача является NP – полной, т.е. переборной. Она имеет многочисленные практические приложения, в которых число "городов" может быть достаточно большим. Например, при производстве сложных деталей задача сверления отверстий может иметь сотни и тысячи "городов". При производстве СБИС возникают задачи (например, по внесению примесей в полупроводник) с числом "городов" около миллиона. За последние десятилетия разработано достаточно много алгоритмов решения этой задачи, дающих субоптимальное решение. В последнее десятилетие эта задача является базовой для исследования ГА в области комбинаторной оптимизации.

Очевидно, что двоичное представление тура при решении ЗК нецелесообразно. Действительно если мы интересуемся оптимальной перестановкой городов, т.е. (i_1,i_2, \dots , i_n) и используем двоичное представление в виде одного бинарного вектора, то изменение даже в одном бите двоичного кода перестановки может дать двоичный вектор, не принадлежащий к области решения, т.е. не являющейся перестановкой n городов.

Для решения ЗК с помощью генетических алгоритмов разработаны специальные методы представления (кодирования) решений и соответствующие проблемно-ориентированные генетические операторы [2,3,4]. В основном используются три способа представления тура при решении ЗК с использованием ГА: 1) представление порядка; 2) представление соседства; 3) представление путей. Для каждого из этих представлений разработаны свои "генетические" операторы. Оператор мутации относительно легко определить на этих представлениях в виде одиночной перестановки соседних городов в туре. Поэтому в дальнейшем мы, в основном, рассмотрим операторы кроссинговера.

2.3.1. Упорядоченное представление.

В этом случае тур представляется списком из n городов, где i-й элемент списка имеет номер от 1 до n-i+1. При этом используется базовый упорядоченный список городов L, который служит для ссылок упорядоченного представления. Фактически мы рассматривали этот метод кодирования решения при решении задачи об укладке рюкзака.

Рассмотрим его на конкретном примере тура T= (1-2-4-3-8-5-9-6-7), для которого упорядоченный список L= (1 2 3 4 5 6 7 8 9). Тогда данный тур при этом упорядоченном списке представляется следующим списком ссылок e=(1 1 2 1 4 1 3 1 1), который интерпретируется следующим образом. Здесь жирным курсивом выделен текущий указатель в списке e.

Первый номер из списка e равен 1, поэтому помещаем в тур 1-й город из базового списка L, удаляем его из L и сдвигаем указатель по e. Тогда получаем:

тур T_1=(1), базовый список L_1= (2 3 4 5 6 7 8 9) , указатель e=(1 1 2 1 4 1 3 1 1).

Следующий номер по указателю e также равен 1, поэтому снова помещаем в тур 1-й город из базового списка L, удаляем его из L и сдвигаем указатель по e.

В результате получаем :

текущий тур T_2=( 1-2), L_1= (3 4 5 6 7 8 9) и указатель в e сдвигается на третью позицию e= (1 1 2 1 4 1 3 1 1). Следующий номер списка е равен 2, поэтому мы берем и удаляем 2-й город из текущего базового списка L и добавляем его в тур и передвигаем указатель по e. Имеем:

текущий тур T_3=(1-2-4), L = (3 5 6 7 8 9), e = (1 1 2 1 4 1 3 1 1).

Продолжая этот процесс, в результате декодирования по данному коду e=(1 1 2 1 4 1 3 1 1), базовому списку L= (1 2 3 4 5 6 7 8 9) будет построен тур T= (1-2-4-3-8-5-9-6-7) .

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

Например, для родителей

e_1= (1 1 2 1 | 4 1 3 1 1) и e_2 = (5 1 5 5 | 5 3 3 2 1),

которые соответствуют турам

T_1=(1-2-4-3-8-5-9-6-7) и T_2=(5-1-7-8-9-4-6-3-2),

имеем следующих потомков при скрещивании

O_1= (1 1 2 1 5 3 3 2 1) и O_2= (5 1 5 5 4 1 3 1 1),

которые представляют туры

T_3=(1-2-4-3-9-7-8-6-5) и T_4=(5-1-7-8-6-2-9-3-4).

Очевидно, что частичные туры слева от точки кроссинговера не изменяются, в тоже время частичные туры справа от нее разрываются случайным образом (сохраняя корректность решения). К сожалению, машинные эксперименты по решению ЗК на основе этого представления решений с использованием классического кроссинговера показывают посредственные результаты [4].