Кадура (Математическое моделирование процессов перевозки грузов железнодорожным транспортом на основе использования задачи коммивояжера), страница 7
Описание файла
Файл "Кадура" внутри архива находится в папке "Математическое моделирование процессов перевозки грузов железнодорожным транспортом на основе использования задачи коммивояжера". Документ из архива "Математическое моделирование процессов перевозки грузов железнодорожным транспортом на основе использования задачи коммивояжера", который расположен в категории "". Всё это находится в предмете "дипломы и вкр" из 8 семестр, которые можно найти в файловом архиве ДВГУПС. Не смотря на прямую связь этого архива с ДВГУПС, его также можно найти и в других разделах. .
Онлайн просмотр документа "Кадура"
Текст 7 страницы из документа "Кадура"
Сумма констант приведения Н1=79. Критерий J ограничивает снизу величина Н1 (J) =6241. Лучшим кандидатом на ветвление является элемент (а1,2). Включая данное звено в частичное решение необходимо наложить запрет для предотвращения преждевременного образования маршрута.
Рисунок 15-Матрица после приведения и подсчета нулей
Производя дальнейшее ветвление по элементу (1, ) и запрещая недопустимый элемент (2,1), приходим к матрице 2 на 2 (рисунок 15, в)) и новому рекорду R: ,2,3,1, , со значением критерия качества J=7396. Весь процесс ветвления изображен на рисунке 16. Ветвление из узлов 2 и 4 не производится, т.к. и
Рисунок 16- Первое дерево вариантов решений рассматриваемого примера
Возьмем теперь второго коммивояжера. Матрица соответствующей задачи будет выглядеть так:
После приведения (сумма констант равна 79) и подсчета весов нулей имеем соответственно рисунок 17, а) и б).
Рисунок 17-Матрица после приведения
Произведем ветвление с использованием элемента (3,1). Вычеркнем строку 3 и столбец 1. Запретим элемент (1,3) чтобы не прийти к недопустимому циклу 3,1,3. В результате получим матрицу на рисунке 18.
Рисунок 18- Матрица с ветвлением
Выполнив приведение (сумма констант равна 14) получим матрицу на рисунке 18 (б). Дерево поиска изображено на рисунке 19.
Рисунке 19-Второе дерево вариантов решений рассматриваемого примера
Видно, что продолжать дальнейшее ветвление из узлов 2 и 3 не имеет смысла, поскольку значения нижних границ в этих узлах превосходят значение критерия качества текущего рекорда.
Осталось рассмотреть последний случай - когда т = 2, т.е. задействуются оба коммивояжера.
Приводим матрицу на рисунке 12, сумма констант приведения равна 95. Находим веса нулей (рисунок 20).
Рисунок 20-Приведенная матрица
Нуль ( ,2) с весом 11 выбирается для ветвления. Соответственно нижняя граница множества увеличивается на 11. Оценку снизу множества ( ,2) можно увеличить на 3, вычеркнув соответствующие строку и столбец, и запретив элемент (2,b2) чтобы исключить возможность формирования не удовлетворяющего условию маршрута ,2,b2. В результате будет образована матрица на рисунке 21.
Рисунок 21-Матрица с подсчетом веса ее нулей
Далее проведем ветвление по нулю (а2,3), имеющему наибольший вес 28. При этом следует запретить элемент (ЗД) по той же причине, что и в прошлый раз. Получим матрицу, которая не требует приведения. После подсчета весов нулей имеем рисунке 21(б).
Остановимся теперь на кандидате (1, ) для последующего разбиения на подмножества. Делая необходимые вычеркивания и полагая (3,1) = , приходим к матрице 2 на 2, и проводим исчерпывающую оценку. Текущий рекорд заменяется новым значением R с меньшим значением критерия качества:
-
-
J=6076.
Рисунок 22-Третье дерево примера
Процесс разбиения на подмножества изображен графически на рисунке 22. Начав просмотр в обратном порядке тех узлов дерева, из которых не производилось ветвление, находим узел 6, имеющий оценку 5000. Продолжаем ветвление из данного узла.
Выпишем матрицу в узле 6, а затем приведем ее и подсчитаем веса нулей.
Рисунок 23-Матрица для узла 2
Выбираем элемент (1 , ) и разбиваем подмножество в узле 6 на два подмножества: и В вершине 81 порядок матрицы, на элемент (2,1) которой наложен запрет, равен 2, а значит можно сформировать очередное допустимое решение:
-
, 2, ,
-
, 3, 1, , , J=5100
Получили оптимальный набор маршрутов, т.к. значения критерия качества текущего рекорда, а также нижних оценок множеств, еще не разбитых на две части, превосходят значение критерия качества данного решения.
2.4 Эвристический алгоритм
Эвристический метод представляет собой комбинацию метода статистических испытаний решения задачи коммивояжера, приспособленного для решения обсуждаемой задачи, и еще четырех алгоритмов, которые, в свою очередь, тоже являются эвристическими. Один из них - метод ближайшего соседа, описанный в первой главе, развитый на случай нескольких коммивояжеров. Другие два - адаптация модифицированных эвристик типа Лина-Кернигана. И, наконец, четвертый - специальный метод оптимизации плана задачи нескольких коммивояжеров.
Приведем сначала порядок работы предлагаемого эвристического метода, затем подробно опишем составляющие его алгоритмы.
-
На входе имеется количество городов п, количество коммивояжеров матрица весов исходного графа s, и максимальное количество итераций IterNum. Составляем произвольное решение R задачи нескольких коммивояжеров - начальное приближение оптимального решения. С этой целью произвольным образом выбираются несколько коммивояжеров среди s имеющихся, количество городов для каждого маршрута, а также сами города. Подсчитываются длины маршрутов, сумма длин Jl, длина максимального маршрута J2 и значение критерия качества J = .
-
Полагаем номер итерации k равным 0. Будем обозначать через RТ и Jт решение задачи и значение критерия качества соответственно, полученные на текущей итерации, а через J и R - значение критерия качества и решение, лучшее из встретившихся (ближайшее к оптимальному), используемое как эталон для сравнения с другими решениями в процессе работы алгоритма. В данный момент эталоном является решение, полученное на первом шаге алгоритма.
-
Начало итерационного процесса. Если k< IterNum, то k = k +1. Иначе, когда в течение IterNum итераций улучшения решения не произошло, переход к шагу 11.
-
С вероятностью одна вторая формируем новое решение задачи, либо улучшаем ранее полученное. Генерируем вероятность - случайное число Рх в интервале (0,1). Если Рх >0,5, переходим к шагу 5 (формируем новое решение), иначе к шагу 7 (улучшаем имеющееся решение).
-
Случайным образом выбираем т<min{п,s} коммивояжеров из 5 имеющихся и количество городов для каждого маршрута, т - текущее количество коммивояжеров. Генерируем случайную последовательность городов.
-
Генерируем случайное число Р2 в интервале (0,1). Если Р2>0,1, применяем Алгоритм №1 (метод ближайшего соседа). В противном случае используем модифицированный прием метода статистических испытаний решения задачи коммивояжера - формируем новое произвольное решение R задачи, используя данные, полученные на шаге 5. Переход к шагу 8.
-
Генерируем вероятность Р3. Если 0 < Р3 < 0,3, то применяем Алгоритм №2; если 0,3 <Р3 <0,6, применяется Алгоритм №3. Иначе выполняется Алгоритм №4.
-
Подсчитываем длину каждого маршрута решения Rт, находим сумму длин, выделяем максимальную длину. Вычисляем значение Jт.
-
Сравниваем J и JT. Если J< JT , то k = 0, и эталоном для сравнения
становится новое решение Rт: R = RТ, J = JТ. В противном случае остается прежний эталон R.
-
Переход к шагу 3.
-
Выводим результат - решение Я и значение критерия качества 3, заканчиваем работу алгоритма.
Вопрос выбора вероятностей применения алгоритмов не решался. Р1, Р2 и Р3 назначены приблизительно. Условием окончания эвристического поиска является отсутствие улучшения рекорда в течение IterNum итераций. Получение результата, максимально приближающегося к оптимальному решению, очевидно, обеспечивает максимальное увеличение этого числа в разумных пределах.
Алгоритм №1 (развитие метода ближайшего соседа)
1. На пятом этапе вышеизложенного алгоритма были выбраны несколько коммивояжеров из s имеющихся, было определено, сколько пунктов посетит каждый коммивояжер. Теперь для каждого коммивояжера следует определить, в каких именно пунктах он должен побывать, а также последовательность посещения указанных пунктов (небазовых вершин). Далее будем рассматривать поочередно i-го выбранного коммивояжера, i = 1..m. Начальное значение i = 0.
-
i = i + 1. Среди еще не включенных в маршруты небазовых вершин находим такую вершину р, что длина дуги ( ) минимальна. Включаем в маршрут i-го коммивояжера эту вершину вслед за . Присвоим j (текущее количество вершин в маршруте) значение 1.
-
Если , переход к шагу 4. В противном случае - к шагу 5.
-
Если i<m, переход к шагу 2; иначе решение задачи нескольких коммивояжеров по методу ближайшего соседа сформировано, заканчиваем работу.
-
j = j + 1. Среди еще не содержащихся в маршрутах небазовых вершин находим вершину y, такую, что длина дуги (х,у), где х - последний выбранный пункт, наименьшая. Расположим вершину у в маршруте сразу после вершины х. Переход к шагу 3.
Описанный алгоритм №1 вообще говоря не даёт оптимального решения, а иногда даёт и чрезмерно плохие решения. Однако, за исключением специально подобранных случаев, его применение имеет смысл. Результаты работы алгоритма существенно зависят от исходных данных, а именно от количества и порядка рассмотрения выделенных коммивояжеров, от количества городов в маршрутах и сгенерированной на шаге s эвристического алгоритма последовательности городов, где ведется поиск очередного пункта для включения в маршрут. Изменяя исходные данные, получим обширное множество различных вариантов решения задачи нескольких коммивояжеров по методу ближайшего соседа.
Алгоритм №2.
Этот алгоритм, являясь развитием эвристики Лина-Кернигана, использует перестановки вершин маршрутов (см. рис. 2.17). Адаптация данной эвристики заключается в ее применении к каждому маршруту в составе допустимого решения задачи нескольких коммивояжеров. Из всевозможных перестановок местами вершин в маршруте выбираем приводящую к максимальному уменыне- нию его длины. Будем повторять процедуру поиска оптимальной перестановки до тех пор, пока удается выделить таковую.
Рисунок 24- Иллюстрация к перестановке вершин Vi и Vj маршрута
Пусть представляет длину дуги .
Длина нового маршрута отличается от длины старого на величину :