Компьютерная реализация задачи о коммивояжере
Рассмотрение математической постановки и компьютерной реализации известной экономической задачи о коммивояжере. Разработка оригинального алгоритма решения задачи, обеспечивающий получение оптимального маршрута с минимальными экономическими затратами.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | статья |
Язык | русский |
Дата добавления | 27.12.2018 |
Размер файла | 233,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Днепропетровский национальный университет им. О. Гончара
КОМПЬЮТЕРНАЯ РЕАЛИЗАЦИЯ ЗАДАЧИ О КОММИВОЯЖЕРЕ
Б.А. Бигеев, к.т.н.
Аннотация
экономический задача коммивояжер компьютерный
В статье представлены математическая постановка и компьютерная реализация известной экономической задачи о коммивояжере. Разработан оригинальный алгоритм решения задачи, обеспечивающий получение оптимального маршрута с минимальными экономическими затратами.
Ключевые слова: задача о коммивояжере, маршрут, алгоритм, экономические затраты.
Annotation
The article gives the mathematical definition and computer realization of a well-known economic task about a commercial traveler. The unique algorithm of coving the problem that provides the fully satisfactory rout with minimum economic costs.
Введение
В статье представлена задача о коммивояжере - бродячем торговце, который покинул город (которому мы присваиваем имя «С»), объехав еще N городов и вернулся снова в город с именем «С». В его распоряжении есть дороги, соединяющие эти города. Он должен выбрать свой маршрут - порядок посещения городов так, чтобы путь, который ему надлежит пройти, был минимальным. Основное условие этой задачи состоит в том, что в каждом городе коммивояжер может побывать только 1 раз - это условие будем называть условием (?). Естественно, что расстояние между двумя городами - функция f(xi, xj) - определено. Добавление города с именем «С» расширяет сферу практического применения в экономике задачи о коммивояжере.
Функция f(xi, xj) может означать не только расстояние, но и, например, время, издержки в пути; да и сам коммивояжер может быть некоторым транспортным средством, развозящем товары поN пунктам доставки.
Математическая постановка задачи
Длина l пути S определяется формулой
. (1)
а) Сумма в выражении (1) распространена по всем индексам i, j, удовлетворяет условию (?).
б) Путь из пункта i в пункт j может не совпадать по затратам пути из пункта j в пункт i. Это значит, что
. (2)
Эта задача не удовлетворяет принципу оптимальности Беллмана и не может решаться методами динамического программирования. Но функция f(xi, xj) и функция пути l(x1,…,xN) в этой задаче определены на конечном множестве точек, следовательно задача сводится к перебору всех возможных маршрутов и проблема носит чисто вычислительный характер. Однако именно вычислительные трудности здесь огромны: число возможных маршрутов между N пунктами доставки равно N!.
Техническая постановки задачи
1. Имеется N пунктов доставки, куда следует завести заданные объемы грузов.
2. Имеется «Матрица расстояний» между пунктами доставки.
3. Имеется «Матрица весов» для каждого пути, отражающая характер дорог, их пропускную способность и загруженность.
4. Расходы на преодоление пути между пунктами i и j вычисляются по формуле:
(3)
где Gij - вес транспортного средства с грузом, соответствующим участку пути между пунктами i и j.
lij - длина пути между пунктами i и j.
vij - весовой коэффициент участка пути между пунктами i и j.
kz - коэффициент затрат, отражающий расход топлива на единицу пути и амортизационные отчисления транспортного средства.
Найти оптимальный порядок обхода пунктов доставки, чтобы затраты на доставку были минимальными.
На данном этапе разработки компьютерной реализации число пунктов доставки ограничено, N Ј 9.
Результаты
Задача о коммивояжере принципиально состоит из двух вычислительных процессов.
Первый процесс это генерация перестановок (возможных маршрутов) из N элементов по N. Количество таких перестановок, как уже было сказано, составляет N!.
Второй процесс это вычисление затрат на преодолении текущего маршрута.
Процедура генерации перестановок относится к числу исключительно сложных программистских задач. Нами разработаны два алгоритма генерации перестановок. В первом алгоритме члены натурального ряда от 1 до N! преобразуются в соответствующие перестановки. Второй алгоритм построен на использовании рекуррентного вызова процедур. Это означает, что при генерации перестановок процедура N раз вызывает сама себя. И каждый такой вызов дожжен не начинать процесс заново, а продолжить предыдущее. Оба алгоритма характеризуются высоким уровнем программирования.
Мы установили, что генератор по первому алгоритму дает выигрыш при использовании устаревших компьютеров с малой оперативной памятью. На современной технике второй алгоритм дает 40-ка процентный выигрыш во времени. Следует также подчеркнуть, что каждый из алгоритмов обладает исключительной производительностью: 9! перестановок (362880) он генерирует на современном компьютере за 5 - 6 секунд. Текст одной из процедур приведен ниже.
Sub Perestanovki()
' Перебор всех перестановок из n элементов по n
' достигается путем преобразования натурального ряда
' чисел от 1 до n! в перестановки
Dim n As Integer
Dim a As String
Dim p(10), po(10), pf(10) As Long
' p(n) - целевой массив
' pо(n) - контрольный массив
n = Cells(1, 1).Value
Application.ScreenUpdating = False
' первичные присвоения
J = 1
For i = 1 To n
J = J * i
pf(i) = J ' накопление факториалов от 1 до n
Next i
k = J
Cells(5, 1) = J
m = 1
For i = 1 To k ' цикл от 1 до n!
For J = 1 To n
po(J) = J ' числа от 1 до n
Next J
ii = i
For J = n - 1 To 2 Step -1
' элемент натурального ряда делится в цикле
' последовательно на (n-1)!, (n-2)!,..., 2!,
' чтобы получить первые n-2 индекса
kk = pf(J)
L = Int((2 * (ii - 1) + 1) / (2 * kk)) + 1
ii = ii - kk * (L - 1)
jk = n - J
If jk > 1 Then
t = 0
For LL = 1 To n
If po(LL) > 0 Then
t = t + 1
If t = L Then
L = LL
Exit For
End If
End If
Next LL
End If
p(jk) = L
po(L) = 0
Next J
' получение двух последних индексов
m = 3 - m ' m принимает значения 1,2,1,2,...
ji = m
For J = 1 To n
ij = po(J)
If ij > 0 Then
p(n + 1 - ji) = ij
ji = 3 - ji
End If
Next J
' свертка массива p(n) для компактно печати
a = ""
For J = 1 To n
a = a & Trim(Str(p(J)))
Next J
Next i
End Sub
Программа, реализующая расчет затрат на преодолении маршрута зависит от экранной реализации процесса вычислений, от размещения исходных данных. Вот примерный вид листа Excel с данными к задаче.
Процедуру расчета затрат мы также написали в двух вариантах. В первом варианте использовано чтение данных из матриц расстояний и весов с помощью вычисляемых индексов. Во втором случае использован конечный автомат, таблица переходов которого содержит всю информации о ячейках матриц весов и расстояний. Процедуры эквивалентны. Кроме вычисления затрат на маршруте, процедура обеспечивает печать текущего маршрута, если он лучше предыдущих и индикацию процесса поиска решения. Два последних обстоятельства существенно замедляют работу программы: на обработку маршрута затрачивается времени в 30 - 40 раз больше, чем на генерацию перестановки (маршрута). Поэтому имеется возможность отказаться от индикации.
Выводы
? разработаны два оригинальных алгоритма генерации перестановок из N элементов по N, производительность которых составляет примерно 80000 перестановок в секунду;
? разработана техническая схема задачи о коммивояжере. При этом учтены длины и класс дорог, изменение веса груза в процессе его развозки по пунктам, а также норму затрат транспортного средства. Все это реализовано в виде программного модуля расчета затрат;
? программа автоматически настраивается на количество пунктов доставки по объему исходных таблиц (в рамках ограничений от 1 до 9);
? программа может использоваться не только для доставки грузов на пункты доставки, но и сбор грузов от производителей (например, для объезда молочных ферм), если грузы доставки брать со знаком минус;
? обеспечена наглядность представления результатов расчета;
? использован индикатор работы программы, что особенно важно при длительных расчетах
Список использованных источников
1. Моисеев Н.Н., Иванилов Ю.П., Столярова Е.М. Методы оптимизации. М.: «Наука», Главная редакция физико-математической литературы, 1978. 352 с.
2. Романовский И.В. Алгоритмы решения экстремальных задач. М.: Главная редакция физико-математической литературы изд-ва «Наука», 1977.
3. Гавурин М.К. Лекции по методам вычислений. М.: Главная редакция физико-математической литературы изд-ва «Наука», 1971.
4. Кузин Л.Т. Основы кибернетики: В 2-х т. Т.2. Основы кибернетических моделей: Учеб. пособие для вузов. - Энергия, 1979. 584 с.
5. Марюта А.Н., Смирнов С.А. Эвристический системный анализ экономики: Монография. - Днепропетровск: Наука и образование, 2004. 294 с.
Размещено на Allbest.ru
...Подобные документы
Разработка, макетирование и реализация экспертной системы для решения задачи о коммивояжере, используя возможности языка Prolog. Составление графа "Карта Саратовской области" и решение проблемы поиска кратчайшего пути между двумя пунктами на карте.
курсовая работа [366,4 K], добавлен 12.05.2009Поиск верхних и нижних границ для оптимального значения на подобласти допустимых решений. Методы и проблемы решения задач нелинейного программирования. Написание и отладка программы. Создание программы для решения задачи "коммивояжёра" прямым алгоритмом.
курсовая работа [176,9 K], добавлен 22.01.2016Постановка задачи о коммивояжере. Нахождение оптимального решения с применением метода ветвей и границ. Основной принцип этого метода, порядок его применения. Использование метода верхних оценок в процедуре построения дерева возможных вариантов.
курсовая работа [167,8 K], добавлен 01.10.2009Сущность теории графов и сетевого моделирования. Выбор оптимального пути и стоимости переезда коммивояжера с помощью метода ветвей и границ. Разработка программы выбора самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу.
курсовая работа [3,5 M], добавлен 08.08.2013Программные продукты для решения задачи построения оптимального маршрута. Выбор аппаратных и программных средств для построения маршрута обхода пациентов. Математическая модель муравьиного алгоритма: состав, структура, тестирование, отладка, реализация.
дипломная работа [1,9 M], добавлен 03.12.2017Особенности метода неопределенных множителей Лагранжа, градиентного метода и метода перебора и динамического программирования. Конструирование алгоритма решения задачи. Структурная схема алгоритма сценария диалога и описание его программной реализации.
курсовая работа [1010,4 K], добавлен 10.08.2014Особенности решения транспортной задачи распределительным методом и анализ результатов. Построение математической модели, алгоритма. Создание программы для решения транспортной задачи распределительным методом в программной среде Borland Delphi 7.
курсовая работа [1000,7 K], добавлен 23.06.2012Создание и реализация алгоритма решения транспортной задачи методом наименьших стоимостей. Схема алгоритма основной программы. Основные шаги алгоритма решения транспортной задачи. Инструкция по эксплуатации программы и обзор результатов ее выполнения.
курсовая работа [2,0 M], добавлен 12.02.2013Описание алгоритма решения транспортной задачи по планированию перевозки зерна. Ход решения задачи вручную, в программе TORA методом наименьшего элемента, с помощью MS Excel. Разработка программы для решения задачи в общем виде средствами Delphi.
курсовая работа [2,5 M], добавлен 22.11.2012Краткий обзор решения транспортных задач. Экономическая интерпретация поставленной задачи. Разработка и описание алгоритма решения задачи. Построение математической модели. Решение задачи вручную и с помощью ЭВМ. Анализ модели на чувствительность.
курсовая работа [844,3 K], добавлен 16.06.2011Использование математических и программных средств моделирования при решении задачи минимизации транспортных издержек. Использование метода потенциалов, разработка алгоритма программы на языке программирования Turbo Pascal 7.0. Методы реализации.
курсовая работа [156,6 K], добавлен 16.02.2016Характеристика задачи АВ01, ее выходная и входная информация, выбор и обоснование состава технических средств и средств программной реализации. Разработка алгоритма и программы решения задачи АВ01, руководства пользователя и контрольный пример решения.
курсовая работа [2,1 M], добавлен 21.12.2011Описание предметной области решаемой задачи. Входные документы, необходимые для решения задачи, ее функции. Разработка информационного обеспечения задачи и реквизиты входной информации. Технология и алгоритмов решения задачи и их машинная реализация.
контрольная работа [15,1 K], добавлен 21.10.2010Общая характеристика динамического программирования: задачи о коммивояжере, о назначении, о теории расписаний. Численные методы ветвей и границ, методы отсечения. Задачи целостного программирования с булевыми переменными. Аддиктивный метод Балаша.
учебное пособие [534,1 K], добавлен 11.07.2010Требования к техническим, программным средствам разработки и функционированию программы. Обоснование выбранного языка программирования. Описание алгоритма решения задачи, тестирование ее основных функций. Понятие дружелюбного пользовательского интерфейса.
курсовая работа [85,9 K], добавлен 31.10.2014Методика и основные этапы реализации, информационное обеспечение компьютерной системы поддержки составления учебного плана. Разработка алгоритмов решения функциональной задачи, программного обеспечения. Расчет сметы затрат и экономической эффективности.
дипломная работа [2,4 M], добавлен 21.04.2014Описание математических методов решения задачи оптимизации. Рассмотрение использования линейного программирования для решения транспортной задачи. Применение симплекс-метода, разработка разработать компьютерной модели в Microsoft Office Excel 2010.
курсовая работа [1,5 M], добавлен 24.05.2015Транспортная задача как одна из самых распространенных специальных задач линейного программирования: понятие, основное назначение. Формальное описание метода минимального элемента. Характеристика этапов разработки алгоритма решения поставленной задачи.
курсовая работа [713,3 K], добавлен 19.10.2012Обзор методов и подходов решения поставленной задачи аппроксимации логического вывода экспертной системы. Разработка и описание метода сетевого оператора для решения данной задачи. Разработка алгоритма решения. Проведение вычислительного эксперимента.
дипломная работа [1,5 M], добавлен 23.02.2015Задачи, решаемые методом динамического программирования. Основные этапы нахождения деревянного алгоритма решения задачи. Выполнение алгоритма Прима. Построение Эйлерового цикла. Решение задач средствами Excel. Алгоритм основной программы - Derevo.
курсовая работа [586,3 K], добавлен 04.04.2015