Задача коммивояжера является NP-трудной задачей.
Поскольку решение исходной задачи является циклом, то окончательное решение не может быть представлено в виде дерева. Поэтому в рамках данного курса при поиске решения исходной задачи ребро из конечной вершины в начальную не будет отображаться, но будет учитываться при получении окончательного веса решения.
Методы решения
Метод ближайшего соседа и метод ближайшего города относятся к жадным методам поиска решения. Эти методы предназначены для работы на графах, в которых выполняется неравенство треугольника (в частности для евклидовой задачи коммивояжера), только в этом случае гарантируется ε‑оптимальность получаемого решения. [5].
Более подробно данный метод и оценку получаемого решения можно посмотреть в работе [5].
Шаг 1. Произвольно выбираем вершину
Шаг 2. Находим вершину
Шаг 3. Повторяем Шаг 2 до тех пор пока
Указания по отображению процесса поиска решения:
Режим демонстрации:
Для каждой вершины
Режим обучения:
Пользователь выбирает следующее добавляемое в цикл ребро, если ребро выбрано правильно, что оно выделяется цветом, если не правильно, то пользователь предупреждается об этом.
Более подробно данный метод и оценку получаемого решения можно посмотреть в работе [5].
Шаг 1. S=1, произвольно выбираем вершину
Шаг 2. Для каждой вершины
Шаг 3. Выбрать такую вершину
Шаг 4. Повторяем шаги 2 и 3 тех пор пока
Указания по отображению процесса поиска решения:
Режим демонстрации:
Для каждой вершины
Режим обучения:
Пользователь выбирает следующее добавляемое в цикл ребро, если ребро выбрано правильно, что оно выделяется цветом, если не правильно, то пользователь предупреждается об этом.
Более подробно с данным методом можно ознакомиться в работе [2].
Шаг 1. Выбираем шаг штрафования F.
Шаг 2. По матрице весов
Шаг 3. Если
Штрафуем все вершины, имеющие степени больше двух:
Замечание: для упрощения работы алгоритма можно изначально выбрать начальную и конечную вершину гамильтонова пути, для этого ко всем элементам матрицы
Указания по отображению процесса поиска решения:
Режим демонстрации:
На каждом шаге: отображать полученный остов (сам процесс построения не отображать), выделять цветом штрафуемые вершины, отображать веса ребер.
Режим обучения:
На начальном этапе пользователь задает значение штрафа. В построенном остове пользователь отмечает вершины, которые необходимо штрафовать. Если вершина выбрана правильно, то она выделяется цветом и соответственно изменяются веса смежных ребер. Если вершина выбрана не правильно, то пользователь предупреждается об этом.
Более подробно с данным методом можно ознакомиться в работах [1, 3].
Шаг 1. Построить минимальный остов.
Шаг 2. Строим кратчайшее эйлерово дерево путем удвоения каждого ребра остова.
Шаг 3. s=1, выбрать произвольную вершину
Шаг 4. Если s=n, выход.
Иначе, выбираем смежную с
Если все смежные вершины посещены, то достаем вершину из стека
Указания по отображению процесса поиска решения:
Режим демонстрации:
Отобразить полученный остов (сам процесс построения не отображать). На каждом шаге: выделять цветом добавляемое в цикл ребро, отображать содержимое стека и текущую длину строящегося цикла.
Режим обучения:
Пользователь выбирает добавляемые в цикл вершины. Если вершина выбрана правильно, то добавляемое ребро выделяется цветом, иначе пользователь предупреждается о неправильном выборе.