Автор работы: Пользователь скрыл имя, 26 Ноября 2013 в 21:33, курсовая работа
Целью данного проекта является реализация программы решения задачи маршрутизации. Данная система предназначена для предприятий, которые работают с большим количеством заказчиков, расположенных относительно друг друга в совершенном различном порядке. Данный программный продукт предназначен прежде всего для компаний, которые хотят оптимизировать маршрут и порядок обработки заказов.
ВВЕДЕНИЕ …………………………………………………………..………......3
1.ПОСТАНОВКА ЗАДАЧИ……….…………………………………………….4
2.ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ……………………………………………...5
       2.1 Изучение математических методов решения задач...…...…………….5
       2.2 Метод ветвей и границ ………………………………………………… 6
       2.3 Метод динамического программирования…………………………….12          
3.ПРОЕКТИРОВАНИЕ АРХИТЕКТУРЫ РАЗРАБАТЫВАЕМЫХ     ПРОГРАММНЫХ СРЕДСТВ…………………………………………………..14
         3.1 Схема взаимодействия программ……………………………………..14
         3.2 Формат  исходных данных и результаты решения задачи…………..15
        3.3 Требования к программному изделию………………………….........16
         3.4 Требования к программной документации…..……………………....16
4. РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ………………………………………...17
ЭКСПЕРИМЕНТАЛЬНЫЕ РАСЧЕТЫ……………………………………..20
   5.1 Контрольные примеры для решения на ЭВМ………………………..20
   5.2 Экспериментальные  расчеты………………………………………….28
ЗАКЛЮЧЕНИЕ………………………………………………………………….30
ЛИТЕРАТУРА…………………………………………………………………...31
ПРИЛОЖЕНИЕ………………………………………………………………….32
Модуль метода ветвей и границ: при передаче управления данному модулю осуществляется составления поиск кратчайшего пути по методу ветвей и границ.
Модуль вывода результатов: осуществляется вывод результатов работы программы на экран.
На рис.1 показана схема взаимодействия модулей.
3.2 Форматы исходных данных и результатов решения задачи
Приведем описание форматов исходных данных и результатов работы программы.
Модуль получения исходных данных: исходные данные представляются в виде перечня городов, которые вводятся либо с помощью клавиатуры.
Модуль сравнения и управления: здесь осуществляется присвоение каждому городу своего номера. В данном модуле данные представляются уже в виде двумерного массива чисел, списка номеров городов, а также длинны кратчайшего пути для каждого из методов.
Модули метода динамического программирования и метода ветвей и границ: на входе – двумерный массив данных, а после выполнения поиска кратчайшего пути получаем список номеров городов и длину кратчайшего пути.
Модуль вывода результатов: результаты выводятся в виде списка городов и длинны кратчайшего пути.
Входными данными для программы является матрица расстояний и перечень пунктов назначения. Выходными данными является порядок посещения пунктов в виде нумерованного списка.
Требования к технических средствам:
Требования к программным средствам:
Состав программного продукта:
- подпрограмма решения математической задачи методом ветвей и границ и методом динамического программирования;
 
Перечень программных документов:
Пользовательский интерфейс разработан, используя язык объектно-ориентированного программирования Delphi 7. Запускается программа с помощью файла Project1.exe. Исходя из этого, пользователю рекомендуется установить среду BorlandDelphi 7.
При запуске программы открывается окно, представленное на рис.1.
Рис.1 Главное окно
В этом окне пользователь из выпадающего списка должен выбрать города, которые нужно посетить. После выбора каждого из городов он появляется в списке выбранных городов(Рис.2).
Затем для подсчета оптимального маршрута необходимо нажать кнопку “Calculate”.
После нажатия этой кнопки происходит вычисление оптимального маршрута одним из методов в соответствии с количеством выбранных городов.
На экране появляется еще 2 окна, первое из которых это форма в которой отображается платежная матрица(Рис.3), а второе окно – это окно
вывода результатов(Рис.4). Оно содержит два поля: первое - отображает оптимальный маршрут, второе – стоимость данного маршрута.
Рис.2. Выбор городов
Рис.3 Платежная матрица
Рис.4 Окно вывода результатов
Если пользователю необходимо изменить платежную матрицу, то он должен в главном окне нажать кнопку “Change Data”, при этом произойдет открытие окна с платежной матрицей(Рис.5). В ней можно произвольно изменять стоимости путей, названия городов и их количество.
Рис.5 Окно изменения данных.
После корректировки таблицы для сохранения изменений необходимо жать кнопку “Save Data”, в случае если пользователь хочет восстановить данные не закрывая при этом окно необходимо нажать кнопку “Load Data”.
Необходимо также упомянуть что считывание всех данных в таблицу происходит из файла “temp.txt”, по этому необходимо что бы он размещался в одной папке с программой.
5.1 Контрольные примеры для решения на ЭВМ
Контроль пример №1
j i  | 
  1  | 
  2  | 
  3  | 
  4  | 
1  | 
  ∞  | 
  4  | 
  3  | 
  4  | 
2  | 
  2  | 
  ∞  | 
  5  | 
  2  | 
3  | 
  6  | 
  2  | 
  ∞  | 
  1  | 
4  | 
  1  | 
  5  | 
  4  | 
  ∞  | 
Сначала определяем значения В(i, {j}):
В(2, {3}) = 5 + 6 = 11; В(3, {2}) = 2 + 2 = 4; В(4, {2}) = 5 + 2 = 7;
В(2, {4}) = 2 + 1 = 3; В(3, {4}) = 1 + 1 = 2; В(4, {3}) = 4 + 6 = 10.
Далее по формуле последовательно получаем (в левой части каждого из ниже записанных равенств выделены те значения параметра j, на которых при подсчете реализуется указанный в правой части минимум):
В(2, {3, 4}) = min [s23 + B(3,{4}); s24 + B(4,{3})] = min(5 + 2; 2 + 10)=7;
В(3, {2, 4}) = min [s32 +B(2,{ 4}); s34 + B(4,{ 2})] = min(2 + 3; 1 + 7 )=5;
В(4, {2, 3}) = min [s42 + B(2,{ 3}); s43 + B(3,{ 2})] = min(5 + 11; 4 +4)=8;
В(1, {2, 3, 4}) = min [s12 + B(2,{3,4}) s13 + B(3,{ 2,4}) s14 + B(4,{2,3 })] =
= min (4 +7; 3 +5; 4 + 8 ) = 8.
Итак, оптимальное значение критерия 
в рассматриваемом примере 
Выполненные выделения позволяют определить оптимальный маршрут. Он следующий:
1 ®® 3 ®® 2 ®® 4 ®® 1.
j i  | 
  1  | 
  2  | 
  3  | 
  4  | 
  5  | 
  6  | 
1  | 
  ∞  | 
  26  | 
  42  | 
  15  | 
  29  | 
  25  | 
2  | 
  7  | 
  ∞  | 
  16  | 
  1  | 
  30  | 
  25  | 
3  | 
  20  | 
  13  | 
  ∞  | 
  35  | 
  5  | 
  0  | 
4  | 
  21  | 
  16  | 
  25  | 
  ∞  | 
  18  | 
  18  | 
5  | 
  12  | 
  46  | 
  27  | 
  48  | 
  ∞  | 
  5  | 
6  | 
  23  | 
  5  | 
  5  | 
  9  | 
  5  | 
  ∞  | 
Контроль пример №2
Найдем нижнюю границу длин множества всех маршрутов. Вычтем из каждой строки число, равное минимальному элементу этой строки, далее вычтем из каждого столбца число, равное минимальному элементу этого столбца, и таким образом приведем матрицу по строкам и столбцам. Минимумы по строкам: r1=15, r2=1, r3=0, r4=16, r5=5, r6=5.
После их вычитания по строкам получим:
1  | 
  2  | 
  3  | 
  4  | 
  5  | 
  6  | |
1  | 
  ∞  | 
  11  | 
  27  | 
  0  | 
  14  | 
  10  | 
2  | 
  6  | 
  ∞  | 
  15  | 
  0  | 
  29  | 
  24  | 
3  | 
  20  | 
  13  | 
  ∞  | 
  35  | 
  5  | 
  0  | 
4  | 
  5  | 
  0  | 
  9  | 
  ∞  | 
  2  | 
  2  | 
5  | 
  7  | 
  41  | 
  22  | 
  43  | 
  ∞  | 
  0  | 
6  | 
  18  | 
  0  | 
  0  | 
  4  | 
  0  | 
  ∞  | 
Минимумы по столбцам: h1=5, h2=h3=h4=h5=h6.
После их вычитания по столбцам получим приведенную матрицу:
1  | 
  2  | 
  3  | 
  4  | 
  5  | 
  6  | |
1  | 
  ∞  | 
  11  | 
  27  | 
  0  | 
  14  | 
  10  | 
2  | 
  1  | 
  ∞  | 
  15  | 
  0  | 
  29  | 
  24  | 
3  | 
  15  | 
  13  | 
  ∞  | 
  35  | 
  5  | 
  0  | 
4  | 
  0  | 
  0  | 
  9  | 
  ∞  | 
  2  | 
  2  | 
5  | 
  2  | 
  41  | 
  22  | 
  43  | 
  ∞  | 
  0  | 
6  | 
  13  | 
  0  | 
  0  | 
  4  | 
  0  | 
  ∞  | 
Найдем нижнюю границу φ(Z) = 15+1+0+16+5+5+5 = 47.
Для выделения претендентов на включение во множество 
дуг, по которым производится ветвление, 
найдем степени Θij нулевых элементов 
этой матрицы (суммы минимумов по строке 
и столбцу). Θ14 
= 10 + 0,  
Θ24 = 1 + 0, Θ36 
= 5+0, Θ41 = 0 + 1, Θ42 
= 0 + 0, Θ56 = 2 + 0, Θ62 
= 0 + 0,  
Θ63 = 0 + 9, Θ65 
= 0 + 2. Наибольшая степень Θ14 
= 10. Ветвление проводим по дуге (1, 4).
Нижняя граница для множества остается равной 47. Для всех маршрутов множества из города A мы не перемещаемся в город D. В матрице это обозначается выставлением в ячейку (1, 4) знака ∞. В этом случае выход из города A добавляет к оценке нижней границы по крайней мере наименьший элемент первой строки. φ ( ) = 47 + 10.
В матрице, соответствующей полагаем c14= ∞.
1  | 
  2  | 
  3  | 
  4  | 
  5  | 
  6  | |
1  | 
  ∞  | 
  11  | 
  27  | 
  ∞  | 
  14  | 
  10  | 
2  | 
  1  | 
  ∞  | 
  15  | 
  0  | 
  29  | 
  24  | 
3  | 
  15  | 
  13  | 
  ∞  | 
  35  | 
  5  | 
  0  | 
4  | 
  0  | 
  0  | 
  9  | 
  ∞  | 
  2  | 
  2  | 
5  | 
  2  | 
  41  | 
  22  | 
  43  | 
  ∞  | 
  0  | 
6  | 
  13  | 
  0  | 
  0  | 
  4  | 
  0  | 
  ∞  | 
После проведения процедуры приведения с r1=10 получим новую нижнюю границу 57 + 10 = 67.
В матрице, соответствующей , вычеркиваем первую строку и четвертый столбец и положим c41= ∞, чтобы предотвратить появления цикла 1→ 4 → 1. Получим новую платежную матрицу {c1ij}:
1  | 
  2  | 
  3  | 
  5  | 
  6  | |
2  | 
  1  | 
  ∞  | 
  15  | 
  29  | 
  24  | 
3  | 
  15  | 
  13  | 
  ∞  | 
  5  | 
  0  | 
4  | 
  ∞  | 
  0  | 
  9  | 
  2  | 
  2  | 
5  | 
  2  | 
  41  | 
  22  | 
  ∞  | 
  0  | 
6  | 
  13  | 
  0  | 
  0  | 
  0  | 
  ∞  |