Метод гілок та меж для рішення задач цілочисельного програмування
Практична реалізація задачі Гамільтона про мандрівника методом гілок та меж. Математична модель задачі комівояжера, її вирішення за допомогою алгоритму Літтла. Програмне знаходження сумарних мінімальних характеристик (відстані, вартості проїзду).
Рубрика | Математика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 30.09.2014 |
Размер файла | 112,5 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru
Размещено на http://www.allbest.ru
Міністерство внутрішніх справ України
Харківський національний університет внутрішніх справ
ННІ Психології,менеджменту,соціальних та інформаційних технологій
Курсова робота з дисципліни:
«Вища математика»
на тему:
"Метод гілок та меж для рішення задач цілочисельного програмування"
Виконав: курсант групи
ІПТ-09-2 Руденко С.В.
Перевірив: доцент кафедри ПМ та
аналітичного забезпечення ОВС
Соколовська О.Г.
Харків 2011
План
Вступ
Постановка задачі
Математична модель задачі комівояжера
Алгоритм рішення
Висновки
Список використаної літератури
Вступ
У 1859 р. Сер Вільям Гамільтон, знаменитий математик, який дав світу теорію комплексного числа і кватерніони, запропонував дитячу головоломку, в якій пропонувалося здійснити «кругове подорож» по 20 містах, розташованих у різних частинах земної кулі. Кожне місто з'єднувався дорогами з трьома сусідніми так, що дорожня мережа утворювала 30 ребер додекаедра, у вершинах якого знаходилися міста a, b,... t. Обов'язковою умовою було вимога: кожне місто за винятком першого можна відвідати один раз.
Гамильтонова завдання про мандрівника нерідко перетворюється на задачу про комівояжера. Комівояжер - не вільно мандрівний турист, а ділова людина, обмежений тимчасовими, грошовими або будь-якими іншими ресурсами. Гамильтонова завдання може стати завданням про комівояжера, якщо кожне з ребер забезпечити числовою характеристикою. Це може бути кілометраж, час на дорогу, вартість квитка, витрата пального і т.д. Таким чином, умовні характеристики дадуть числовий ряд, елементи якого можуть бути розподілені між ребрами як завгодно.
Постановка завдання
Розглянемо задачу про комівояжера.
Є n міст, відстані (вартість проїзду, витрата пального на дорогу і т.д.) між якими відомі. Комівояжер повинен пройти всі n міст по одному разу, повернувшись в те місто, з якого почав. Потрібно знайти такий маршрут руху, при якому сумарний пройдене відстань (вартість проїзду і т.д.) буде мінімальним.
Очевидно, що завдання комівояжера - це проблема віднайдення найкоротшого гамильтонова циклу в повному графі.
Можна запропонувати наступну просту схему розв'язання задачі комівояжера: згенерувати всі n! можливих перестановок вершин повного графа, підрахувати для кожної перестановки довжину маршруту і вибрати найкоротший. Однак, n! із зростанням n росте швидше, ніж будь-який поліном від n, і навіть швидше, ніж . Таким чином, рішення задачі комівояжера методом повного перебору виявляється практично нездійсненним, навіть при досить невеликих n.
Вирішити задачу комівояжера також можна за допомогою алгоритму Крускала і «дерев'яного» алгоритму. Ці методи прискорюють розробку алгоритму в порівнянні з методом повного перебору, проте не завжди дають оптимальне рішення.
Існує метод розв'язання задачі комівояжера, який дає оптимальне рішення. Цей метод називається методом гілок і меж. Рішення задачі комівояжера методом гілок і меж по-іншому називають алгоритмом Літтла.
Якщо вважати міста вершинами графа, а комунікації (i, j) - його дугами, то вимога знаходження мінімального шляху, що проходить один і тільки один раз через кожне місто, і повернення назад, можна розглядати як знаходження на графі гамильтонова контуру мінімальної довжини.
Для практичної реалізації ідеї методу гілок і меж стосовно до задачі комівояжера потрібно знайти метод визначення нижніх меж підмножини і розбиття множини гамільтонових контурів на підмножини (розгалуження).
Визначення нижніх меж базується на тому твердженні, що якщо до всіх елементів i-го рядка або j-го стовпця матриці C додати або відняти число, то завдання залишиться еквівалентної колишньою, тобто оптимальність маршруту комівояжера не зміниться, а довжина будь-якого гамильтонова контуру зміниться на дану величину .
Опишемо алгоритм Літтла для знаходження мінімального гамильтонова контуру для графа з n вершинами. Граф представляють у вигляді матриці його дуг. Якщо між вершинами Xi і Xj немає дуги, то ставиться символ «?».
Алгоритм Літтла для розв'язання задачі комівояжера можна сформулювати у вигляді наступних правил:
1. Знаходимо в кожному рядку матриці мінімальний елемент і віднімаємо його з усіх елементів відповідного рядка. Отримаємо матрицю, наведену по рядках, з елементами
.
2. Якщо в матриці , наведеної по рядках, виявляться стовпці, що не містять нуля, то наводимо її по стовпцях. Для цього в кожному стовпці матриці вибираємо мінімальний елемент, і віднімаємо його з усіх елементів відповідного стовпця. Отримаємо матрицю
,
кожен рядок і стовпець, якої містить хоча б один нуль. Така матриця називається наведеної по рядках і стовпцях.
3. Підсумовуємо елементи і , отримаємо константу приведення
,
яка буде нижньою межею множини всіх допустимих гамільтонових контурів, тобто
.
4. Знаходимо ступеня нулів для наведеної по рядках і стовпцях матриці. Для цього подумки нулі в Матіца замінюємо на знак «?» і знаходимо суму мінімальних елементів рядка і стовпця, відповідних цьому нулю. Записуємо її в правому верхньому кутку клітки:
.
5. Вибираємо дугу , для якої ступінь нульового елемента досягає максимального значення
.
6. Розбиваємо безліч всіх гамільтонових контурів на дві підмножини і . Підмножина гамільтонових контурів містить дугу , - її не містить. Для отримання матриці контурів , що включають дугу , викреслюємо в матриці рядок і стовпець . Щоб не допустити утворення негамільтонова контуру, замінимо симетричний елемент на знак «?».
7. Наводимо матрицю гамільтонових контурів . Нехай - константа її приведення. Тоді нижня межа множина визначиться так:
.
8. Знаходимо множину гамільтонових контурів, що не включають дугу. Виняток дуги досягається заміною елемента в матриці на ?.
9. Робимо приведення матриці гамільтонових контурів. Нехай - константа її приведення. Нижня межа множина визначається так:
.
10. Порівнюємо нижні множини, підмножини гамільтонових контурів і. Якщо , то подальшого розгалуження в першу чергу підлягає множина . Якщо ж , то розбиття підлягає множина .
Процес розбиття множин на підмножини супроводжується побудовою дерева розгалужень.
11. Якщо в результаті розгалужень отримуємо матрицю , то визначаємо отриманий розгалуженням гамільтонів контур і його довжину.
12. Порівнюємо довжину гамильтонова контуру з нижніми межами обірваних гілок. Якщо довжина контуру не перевищує їх нижніх меж, то завдання виконане. В іншому випадку розвиваємо гілки підмножин з нижньою межею, меншою отриманого контуру, до тих пір, поки не отримаємо маршрут з меншою довжиною або не переконаємося, що такого не існує.
Математична модель задачі комівояжера
Завдання комівояжера може бути сформульована як цілочисельна введенням булевих змінних , якщо маршрут включає переїзд з міста i безпосередньо в місто j і в іншому випадку. Тоді можна задати математичну модель задачі, тобто записати цільову функцію і систему обмежень:
(1)
Умови (2) - (4) в сукупності забезпечують, що кожна змінна дорівнює або нулю, або одиниці. При цьому обмеження (2), (3) висловлюють умови, що комівояжер побуває в кожному місті один раз на нього прибувши (обмеження (2)), і один раз з нього виїхавши (обмеження (3)).
Проте цих обмежень не достатньо для постановки задачі комівояжера, так як вони не виключають рішення, де замість простого циклу, що проходить через n вершин, відшукуються 2 і більше окремих циклу (підциклу), що проходить через менше число вершин. Тому завдання, описана рівняннями (2) - (4) повинна бути доповнена обмеженнями, що забезпечують зв'язність шуканого циклу.
Для того, щоб виключити при постановці завдання всі можливі підцикли в систему обмежень задачі включають такі обмеження:
, Де , і .
Алгоритм рішення
Дана матриця відстаней, представлена в таблиці 1. Необхідно за допомогою алгоритму Літтла вирішити завдання комівояжера.
Табл.1
ji |
1 |
2 |
3 |
4 |
5 |
6 |
|
1 |
? |
7 |
16 |
21 |
2 |
17 |
|
2 |
13 |
? |
21 |
15 |
43 |
23 |
|
3 |
25 |
3 |
? |
31 |
17 |
9 |
|
4 |
13 |
10 |
27 |
? |
33 |
12 |
|
5 |
9 |
2 |
19 |
14 |
? |
51 |
|
6 |
42 |
17 |
5 |
9 |
23 |
? |
1) Праворуч до таблиці приєднуємо стовпець Ui, в якому записуємо мінімальні елементи відповідних рядків. Віднімаємо елементи Ui з відповідних елементів рядка матриці.
ji |
1 |
2 |
3 |
4 |
5 |
6 |
Ui |
|
1 |
? |
7 |
16 |
21 |
2 |
17 |
2 |
|
2 |
13 |
? |
21 |
15 |
43 |
23 |
13 |
|
3 |
25 |
3 |
? |
31 |
17 |
9 |
3 |
|
4 |
13 |
10 |
27 |
? |
33 |
12 |
10 |
|
5 |
9 |
2 |
19 |
14 |
? |
51 |
2 |
|
6 |
42 |
17 |
5 |
9 |
23 |
? |
5 |
2) Внизу отриманої матриці приєднуємо рядок Vj, в якій записуємо мінімальні елементи стовпців. Віднімаємо елементи Vj з відповідних стовпців матриці.
ji |
1 |
2 |
3 |
4 |
5 |
6 |
Ui |
|
1 |
? |
7 |
16 |
21 |
2 |
17 |
2 |
|
2 |
13 |
? |
21 |
15 |
43 |
23 |
13 |
|
3 |
25 |
3 |
? |
31 |
17 |
9 |
3 |
|
4 |
13 |
10 |
27 |
? |
33 |
12 |
10 |
|
5 |
9 |
2 |
19 |
14 |
? |
51 |
2 |
|
6 |
42 |
17 |
5 |
9 |
23 |
? |
5 |
3) У результаті обчислень отримуємо матрицю, наведену по рядках і стовпцях, яка зображена у вигляді таблиці 2.
Табл.2
ji |
1 |
2 |
3 |
4 |
5 |
6 |
|
1 |
? |
5 |
14 |
17 |
019 |
13 |
|
2 |
03 |
? |
8 |
02 |
30 |
8 |
|
3 |
22 |
04 |
? |
26 |
14 |
4 |
|
4 |
3 |
00 |
17 |
? |
23 |
04 |
|
5 |
7 |
07 |
17 |
10 |
? |
47 |
|
6 |
37 |
12 |
08 |
2 |
18 |
? |
4) Знаходимо константу приведення:
.
Таким чином, нижньою межею множини всіх гамільтонових контурів буде число .
5) Знаходимо ступеня нулів повністю наведеної матриці. Для цього як би замінити в ній всі нулі на знак «?» і встановлюємо суму мінімальних елементів відповідного рядка і стовпця. Ступені нулів записані в правих верхніх кутах клітин, для яких .
6) Визначаємо максимальну ступінь нуля. Вона дорівнює 19 і відповідає клітині (1, 5). Таким чином, претендентом на включення до гамільтонів контур є дуга (1, 5).
7) Розбиваємо безліч всіх гамільтонових контурів на два: і . Матрицю з дугою (1; 5) отримуємо табл.2 шляхом викреслювання рядка 1 і стовпця 5. Щоб не допускати утворення негамільтонова контуру, замінюємо елемент (5; 1) на знак «?».
ji |
1 |
2 |
3 |
4 |
6 |
|
2 |
0 |
? |
8 |
0 |
8 |
|
3 |
22 |
0 |
? |
26 |
4 |
|
4 |
3 |
0 |
17 |
? |
0 |
|
5 |
? |
0 |
17 |
10 |
47 |
|
6 |
37 |
12 |
0 |
2 |
? |
8) Матрицю гамільтонових контурів отримаємо з таблиці 2 шляхом заміни елементу (1, 5) на знак «?».
ji |
1 |
2 |
3 |
4 |
5 |
6 |
||
1 |
? |
5 |
14 |
17 |
? |
13 |
5 |
|
2 |
0 |
? |
8 |
0 |
30 |
8 |
||
3 |
22 |
0 |
? |
26 |
14 |
4 |
||
4 |
3 |
0 |
17 |
? |
23 |
0 |
||
5 |
7 |
0 |
17 |
10 |
? |
47 |
||
6 |
37 |
12 |
0 |
2 |
18 |
? |
||
14 |
9) Робимо додаткове приведення матриці контурів: : = 0. Нижня межа множини дорівнює .
10) Знаходимо константу приведення для множині контурів:. Отже, нижня межа множини дорівнює .
11) Порівнюємо нижні межі підмножин і . Так як , то подальшого розгалуження піддаємо множини.
На рис.1 представлено розгалуження по дузі (1, 5).
рис.1
Переходимо до розгалуження підмножини . Його наведена матриця представлена в таблиці нижче.
ji |
1 |
2 |
3 |
4 |
6 |
|
2 |
03 |
? |
8 |
02 |
8 |
|
3 |
22 |
04 |
? |
26 |
4 |
|
4 |
3 |
00 |
17 |
? |
04 |
|
5 |
? |
010 |
17 |
10 |
47 |
|
6 |
37 |
12 |
010 |
2 |
? |
12) Дізнаємося ступеня нулів матриці. Претендентами на включення до гамільтонів контур будуть кілька дуг (5, 2) і (6, 3). Для подальших розрахунків виберемо дугу (6, 3). Розбиваємо множину на дві підмножини: і (табл. 3 та 4). Щоб не допустити утворення негамільтонова контуру, у таблиці 3 замінюємо елемент (3; 6) на знак «?»
Табл.3
ji |
1 |
2 |
4 |
6 |
|
2 |
0 |
? |
0 |
8 |
|
3 |
22 |
0 |
26 |
? |
|
4 |
3 |
0 |
? |
0 |
|
5 |
? |
0 |
10 |
47 |
Табл.4
ji |
1 |
2 |
3 |
4 |
6 |
||
2 |
0 |
? |
8 |
0 |
8 |
||
3 |
22 |
0 |
? |
26 |
4 |
||
4 |
3 |
0 |
17 |
? |
0 |
||
5 |
? |
0 |
17 |
10 |
47 |
||
6 |
37 |
12 |
? |
2 |
? |
2 |
|
8 |
Визначимо константи приведення для цих матриць, . Отже, , . Так як , то подальшого розгалуження підлягає підмножина . Знаходимо ступеня нулів матриці.
ji |
1 |
2 |
4 |
6 |
|
2 |
03 |
? |
02 |
8 |
|
3 |
22 |
022 |
26 |
? |
|
4 |
3 |
00 |
? |
08 |
|
5 |
? |
010 |
10 |
47 |
Претендентом до включення в гамільтонів контур стане дуга (3, 2). Розбиваємо множину на дві і .
ji |
1 |
4 |
6 |
||
2 |
0 |
0 |
8 |
||
4 |
3 |
? |
0 |
||
5 |
? |
10 |
47 |
10 |
Очевидно, , . Отже, чергового розгалуження потрібно піддати підмножина .
ji |
1 |
2 |
4 |
6 |
||
2 |
0 |
? |
0 |
8 |
||
3 |
22 |
? |
26 |
? |
22 |
|
4 |
3 |
0 |
? |
0 |
||
5 |
? |
0 |
10 |
47 |
Переходимо до розгалуження підмножини . Його наведена матриця представлена в таблиці нижче.
ji |
1 |
4 |
6 |
|
2 |
03 |
00 |
8 |
|
4 |
3 |
? |
011 |
|
5 |
? |
037 |
37 |
Визначаємо ступеня нулів. Претендентом на включення до гамільтонів контур є дуга (5, 4). Розбиваємо безліч на дві підмножини: і .
ji |
1 |
6 |
|
2 |
0 |
8 |
|
4 |
3 |
0 |
i\j |
1 |
4 |
6 |
||
2 |
0 |
0 |
8 |
||
4 |
3 |
? |
0 |
||
5 |
? |
? |
37 |
37 |
Знаходимо нижні межі , . Отже, чергового розгалуження потрібно піддати підмножина . Але його матриця має розмірність . Тому в гамільтонів контур слід включити дуги, що відповідають у матриці нульовим елементам. Це дуги (2; 1) і (4, 6).
На рис.2 представлено дерево розгалужень. Визначимо отриманий гамільтонів контур. До нього увійшли дуги . Довжина контуру дорівнює . Так як кордони обірваних гілок більше довжини контуру 1 - 5 - 4 - 6 - 3 - 2 - 1, то цей контуру має найменшу довжину.
Рис.2
гамільтон модель задача комівояжер
Висновки
Завдання комівояжера є частковим випадком гамильтоновой завдання про мандрівника. Суть задачі комівояжера полягає в знаходженні сумарною мінімальної характеристики (відстані, вартості проїзду і т.д.), при цьому комівояжер повинен пройти всі n міст по одному разу, повернувшись в те місто, з якого почав.
Існують кілька методів розв'язання задачі комівояжера: метод повного перебору, за допомогою методу гілок і меж (алгоритм Літтла), алгоритму Крускала, «дерев'яного» алгоритму і т.д. Однак тільки метод гілок і меж дає нам у результаті найоптимальніше рішення.
Основна ідея методу Літтла полягає в тому, що спочатку будують нижню межу довжин маршрутів для всього безлічі гамільтонових контурів . Потім вся безліч контурів розбивають на дві підмножини таким чином, щоб перше підмножина складалося з гамільтонових контурів, містять деяку дугу (i, j), а інше підмножина не містило цієї дуги.
Для практичної реалізації ідеї методу гілок і меж стосовно до задачі комівояжера потрібно знайти метод визначення нижніх меж підмножини і розбиття множини гамільтонових контурів на підмножини (розгалуження). Таке визначення нижніх меж базується на тому твердженні, що якщо до всіх елементів i-го рядка або j-го стовпця матриці C додати або відняти число , то завдання залишиться еквівалентної колишньою, тобто оптимальність маршруту комівояжера не зміниться, а довжина будь-якого гамильтонова контуру зміниться на дану величину.
Використовуючи ЕОМ, методом гілок і меж можна вирішити задачі комівояжера для .
Список використаної літератури
1. О.Е. Акимов «Дискретная математика. Логика, группы, графы», Москва, 2003, 376 с., ил., изд. дом «Лаборатория базовых знаний».
2. Ф.А. Новиков «Дискретная математика для программистов» С.-Петербург, 2002 г. 304 с., ил., изд. дом «Питер».
3. В.М. Бондарев «Основы программирования» 1998 г., 368 с. изд. дом «Феникс»
Размещено на Allbest.ru
Подобные документы
Складання плану виробництва при максимальному прибутку. Введення додаткових (фіктивних) змінних, які перетворюють нерівності на рівності. Розв’язування задачі лінійного програмування графічним методом та економічна інтерпретація отриманого розв’язку.
контрольная работа [298,3 K], добавлен 20.11.2009Основні типи та види моделей. Основні методи складання початкового опорного плану. Поняття потенціалу й циклу. Критерій оптимальності базисного рішення транспортної задачі. Методи відшукання оптимального рішення. Задача, двоїста до транспортного.
курсовая работа [171,2 K], добавлен 27.01.2011Розв'язання графічним методом математичної моделі задачі з організації випуску продукції. Розв'язання транспортної задачі методом потенціалів. Знаходження умовних екстремумів функцій методом множників Лагранжа. Розв'язання задач симплекс-методом.
контрольная работа [48,5 K], добавлен 16.07.2010Розв'язання системи лінійних рівнянь методом повного виключення змінних (метод Гаусса) з використанням розрахункових таблиць. Будування математичної моделі задачі лінійного програмування. Умови для застосування симплекс-методу. Розв'язка спряженої задачі.
практическая работа [42,3 K], добавлен 09.11.2009Поняття та значення симплекс-методу як особливого методу розв'язання задачі лінійного програмування, в якому здійснюється скерований рух по опорних планах до знаходження оптимального рішення. Розв'язання задачі з використанням програми Simplex Win.
лабораторная работа [264,1 K], добавлен 30.03.2015Розв'язок задач лінійного програмування симплексним методом, графічне вирішення системи нерівностей, запис двоїстої задачі: визначення прибутку, отриманого підприємством від реалізації виробів; загальних витрат, пов’язаних з транспортуванням продукції.
контрольная работа [296,0 K], добавлен 28.03.2011Послідовність графічного розв'язання задачі лінійного програмування. Сумісна система лінійних нерівностей, умови невід'ємності, визначення півплощини з граничними прямими. Графічний метод для визначення оптимального плану задачі лінійного програмування.
задача [320,6 K], добавлен 31.05.2010Сутність симплекс-методу у вирішенні задач лінійного програмування. Рішення задачі на відшукання максимуму або мінімуму лінійної функції за умови, що її змінні приймають невід'ємні значення і задовольняють деякій системі лінійних рівнянь або нерівностей.
реферат [28,5 K], добавлен 26.02.2012Поняття диференціальних рівнянь. Задача Коші і крайова задача. Класифікація методів для задачі Коші. Похибка методу Ейлера. Модифікований метод Ейлера-Коші. Пошук рішення задачі однокроковим методом Ейлера. Порівняння чисельного рішення з точним рішенням.
презентация [294,4 K], добавлен 06.02.2014Точне знаходження первісної й інтеграла для довільних функцій. Чисельне визначення однократного інтеграла. Покрокові пояснення алгоритму методу Чебишева, реалізованого засобами програмування СКМ Mathcad. Знаходження інтегралу за допомогою панелі Calculus.
курсовая работа [390,8 K], добавлен 19.05.2016