Глава 12 Метод гілок і меж. Задача комівояжера
Нехай
-
скінченна множина і
- вещественнозначная функція на ньому;
потрібно знайти мінімум цієї функції
і елемент множини, на якому цей мінімум
досягається.
Коли є та чи інша додаткова інформація про множестве, рішення цієї задачі іноді вдається здійснити без повного перебору елементів всього безлічі М. Але найчастіше повний перебор виробляти доводиться. У цьому випадку обов'язково виникає завдання, як краще організувати перебір.
Метод гілок і меж застосовується в тому випадку, коли виконуються специфічні додаткові умови на безліч М і мінімізіруемую на ньому функцію, а саме, припустимо, що мається вещественнозначная функція на множіні підмножін множини М з Наступний двома властівостямі:
У
цих умовах можна організувати перебір
елементів мнодружність М з метою
мінімізації функції на цій безлічі
так: розіб'ємо безліч М на частини
(будь-яким способом) і виберемо ту з
його частин
на якій функція
мінімальна; потім розіб'ємо на кілька
частин безліч fii
і виберемо ту з його частин
,
на якій функція
мінімальна; потім розіб'ємо
на кілька годину тей і виберемо ту з
них, де мінімальна
,
і т.д., поки не прийдемо до якого-небудь
одноелементні безлічі
Це одноелементні безліч називається рекордом.
Функція , яка використовується при цьому виборі, називається оціночної. Очевидно, що рекорд не зобов'язаний доставляти мінімум функції f; однак виникає можливість скоротити перебір за сприятливих обставин.
Описаний
вище процес побудови рекорду складався
з після-послідовних етапів, на кожному
з яких фіксувалося кілька множин і
вибиралося потім одне з них. Нехай
-
підмножини
безлічі М, що виникли на передостанньому
етапі по-будови рекорду, і нехай безліч
А \ виявилося обраним за допомогою
оціночної функції. Саме при розбитті
А \ і виник рекорд, який для визначеності
позначимо через {mi}. Відповідно до
сказаного вище,
крім того, по визналенію оціночної
функції,
Припустимо,
;
тоді для будь-якого елемента m
безлічі М, що належить безлічі А2, будуть
вірні неравенства
це значить, що при повному переборі
елементів з М елементи з А2 вже взагалі
не треба розглядати. Якщо ж нерівність
не буде виконано, то всі еле ¬ менти з
А2 треба послідовно порівняти зі
знайденим рекордом і як тільки знайдеться
елемент, що дає менше значення оптимізатора
¬ зіруемий функції, треба їм замінити
рекорд і продовжити перебір. Остання
дія називається поліпшенням рекорду.
Метод гілок і меж пов'язаний з природною графічної ін-інтерпретації усього викладеного: будується багаторівневе дерево, на нижньому рівні якого розташовуються елементи множини М, на якому гілки ведуть до рекорду і його поліпшень і на якому частина гілок залишається «відтятою», тому що їх розвиток оказ ¬ лось недоцільним.
Ідея методу гілок і меж полягає в створенні деякої процедури побудови обмеженого дерева перебору. Правда, в якихось особливих випадках «обмежений» перебір може співпасти з повним: у цьому виявляється евристичність методу гілок і меж.
Нехай є кінцеве безліч М варіантів рішення і функ ¬ ція F, приймаюча різні значення від обраного варіанта. Потрібно серед безлічі варіантів знайти оптимальний, тобто такий, на якому функція F приймає максимальне або мінімальне (в залежності від вимог завдання) значення. Метод гілок і меж відшукання оптимального варіанта складається з двох основних етапів:
розгалуження, тобто побудови дерева перебору;
відсікання гілок, тобто припинення побудови дерева в тих гілках, які свідомо не містять оптимального рішення.
Розглянемо основні принципи методу гілок і меж на при ¬ міру вирішення завдання розшифровки криптограми і про радіоактивне кулі.
12.1.
Расшифровка криптограмм
Пусть дана криптограмма
BEST + MADE = MASER.
Здесь каждая буква шифрует какую-то одну цифру из множества {О, 1, 2, 3, 4, 5, 6, 7, 8, 9}. Требуется расшифровать данную криптограмму. Если воспользоваться деревом полного перебора, то можно показать, что восемь букв и десять цифр могут быть сопоставлены друг с другом различными способами, число которых достигает значения 1814400. Однако если воспользоваться определенными свойствами десятичной системы счисления, правилами сложения десятичных чисел, а также операциями ветвления и отсечения ветвей, то пространство поиска в данной задаче можно качественным образом сузить.
Для удобства рассуждений введем следующие обозначения: столбцы зашифрованных цифр пронумеруем слева направо от 1 до 5. Символы Pi, Р2, Рз, Ра будут обозначать соответствующую цифру переноса из одного разряда в другой. Если цифра г-го разряда больше или равна 10, то Р, = 1, в противном случае Pt = 0 (рис. 12.1). Очевидно, что при сложении двух десятичных цифр величина переноса не может превышать одной единицы следующего разряда.
Почнемо аналіз з п'ятого розряду. Можна впевнено стверджувати, що М = 1, так як М не може дорівнювати нулю, оскільки не
прийнято писати нуль в початковій позиції, також очевидно, що М не може бути більше одиниці. Так як в п'ятому розряді М цілком утворена значенням переносу Р4, то отримуємо М = 1. Визначено корінь обмеженого дерева пошуку (рис. 12.2, а)
Звертаючись до четвертого розряду, не можна з упевненістю сказати, чому дорівнює Рз - одиниці або нулю. Відзначимо обидва варіанти на дереві пошуку (рис. 12.2,6). Ліва гілка: Рз = 0, так як Р4 = 1 і Рз = 0, то В + М повинне бути дорівнює А + 10. Але через те, що М = 1, виходить, що В = А + 9. Але В не може бути більше 9, тому А = 0 (рис. 12.2, в). Тепер проаналізуємо фрагмент дерева, зображений на рис. 12.2, м.
Якщо розглядати гілку Р2 = 0, то неважко бачити, що Р2 + Е == S. Оскільки Р2 = 0, А = 0, то маємо Е = S, що заборонено правилами побудови криптограми. Отже, шлях Рз = 0, Р2 = 0 тупиковий, його далі продовжувати не слід. Якщо ж рухатися по гілці Р2 = 1, отримуємо 1 + Е = S, і цей шлях, можливо, слід переглядати далі (рис. 12.2, д). Продовжуючи аналогічне побудову, отримаємо обмежене дерево пошуку для даної
криптографічного задачи (рис. 12.3). Звездочками обозначены ветви, не имеющие продолжения.
Слід зазначити, що спочатку в якості принципу розгалуження користувався ознака наявності або відсутності переносу, а потім, коли ця ознака був вичерпаний, довелося зробити повний перебір по всіх можливих значень букви Е (перераховані на малюнку зліва направо). Таким чином, замість повного дерева перебору, утримуючи ¬ ного близько 1814400 листя, вдається побудувати обмежене дерево, розгляд якого дозволяє легко знайти потрібне рішення. У ре ¬ док можна зробити наступний висновок. Багато комбінаторні задачі істотно спрощуються, якщо замість комбінаторно повного дерева перебору вдається побудувати обмежене дерево, обов'язково включає простір, що містить рішення.
12.2.
Завдання про радіоактивне кулі
Розглянемо задачу про відшукання одного радіоактивного кульки серед п однакових кульок. В якості приладу, визнаділячи радіоактивність, використовується дозиметр, два різних показання якого (є радіоактивність чи ні радіоактивності) природно прийняти за значення оціночної функції, наприклад, значення 0 або 1. В даному випадку точне значення оціночної функції визначено на будь-якому підмножині кульок. Усяке підмножина, для якого значення оціночної функції дорівнює нулю, виключається з подальшого розгляду (позначено *).
На рис. 12.4 наведено обмежене дерево перебору для п = 100, з якого видно, що кількість випробувань (число 7) задовольняє оцінками. Порівняємо: в алгоритмі повного перебору в гіршому випадку довелося б перевірити 100 кульок, тобто здійснити 100 проб. Для обмеженого дерева таких перевірок буде потрібно тільки 7.
*
Рис. 12.4. Обмежене дерево перебору
12.3.
Задача комівояжера
Є декілька міст, з'єднаних дорогами з відомою довжиною; вимагається встановити, чи є шлях, рухаючись по якому можна побувати в кожному місті лише один раз і при цьому повернутися в місто, звідки шлях був початий («обхід комівояжера»), і, якщо такий шлях є, встановити найкоротший з них.
Формалізуємо умова в термінах теорії графів. Міста будуть вершинами графа, а дороги між містами - орієнтованими (спрямованими) ребрами графа, на кожному з яких задана вагова функція: вага ребра - це довжина відповідної дороги. Шлях, кото ¬ рий потрібно знайти, - це орієнтований остовне простий цикл мінімальної ваги в орієнтованому графі (Орграф). (Нагадаємо: цикл називається Остовним, якщо він проходить по всіх вершин гра ¬ фа; цикл називається простим, якщо він проходить по кожній своїй вершині тільки один раз; цикл називається орієнтованим, якщо початок кожного наступного ребра збігається з кінцем попереднього ¬ го; вага циклу - це сума ваг його ребер; нарешті, орграф називається повним, якщо в ньому є всі можливі ребра); такі цикли на ¬ ни опиняються також га. 'нілипоіовимі.
Очевидно, в повному Орграф цикли зазначеного вище типу є. Зауважимо, що питання про наявність в Орграф Гамільтона циклу доста ¬ точно розглянути як окремий випадок задачі про комівояжера для повних орграфов. Дійсно, якщо даний орграф не є повним, то його можна доповнити до повного відсутніми ребрами і кожному з доданих ребер приписати вага оо, вважаючи, що оо - це «комп'ютерна нескінченність», тобто максимальне з усіх можли ¬ них чисел. Якщо у новозбудованому повному Орграф знайти тепер найлегший гамільтонів цикл, то за наявності у нього ребер з вагою оо можна буде говорити, що в даному, початковому графі «циклу комміво ¬ яжера» немає. Якщо ж у повному Орграф найлегший гамільтонів цикл виявиться кінцевим за вагою, то він і буде шуканим циклом в вихідному графі.
Звідси випливає, що завдання комівояжера досить вирішити для повних орграфов з ваговою функцією. Сформулюємо тепер це в остаточному вигляді: нехай G = (А, В) - повний орієнтований
граф
і
-
вагова функція; знайти простий остовне
орієнтований цикл («цикл комівояжера»)
мінімальної ваги.
Нехай
-
конкретний склад безлічі вершин і
-
вагова матриця даного орграфа, тобто
причому
для будь-якого
.
Розглянемо використання методу гілок і меж для розв'язування задачі комівояжера.
Крок
1. Фіксуємо безліч всіх обходів комівояжера
(тобто всіх простих орієнтованих остовним
циклів). Оскільки граф - повний, це безліч
свідомо непорожня. Зіставимо йому число,
яке буде грати роль значення на цьому
безлічі оцінної функції: це число
дорівнює сумі констант приведення даної
матриці ваг ребер графа. Якщо безліч
всіх обходів комівояжера позначити
через Г, то суму констант приведення
матриці ваг позначимо через
Наведену
матрицю ваг даного графа слід запам'ятати;
позначимо її через М1 таким чином,
підсумок першого кроку: безлічі Г усіх
обходів комівояжера зіставлять число
і матриця М1.
Крок
2. Виберемо в матриці М1 найважчий нуль
(функцію штрафу); нехай він стоїть в
клітці
;
фіксуємо ребро графа (i, j) і розділимо
безліч Г на дві частини: на частину
складається з обходів, які проходять
через ребро і на частину Г
,
складаючись ¬ щую з обходів, які не
проходять через ребро (i, j). Порівняти
безлічі Г
наступну
матрицю М1 у. в матриці М1 замінимо на оо
число в клітці
.
Потім в отриманою матриці викреслимо
будів ¬ ку номер г і стовпець номер j,
причому у залишилися рядків і стовпців
збережемо їх вихідні номери. Нарешті,
наведемо цю останню матрицю і запам'ятаємо
суму констант приведення. Отримана при
¬ веденная матриця і буде матрицею Mi д.
Тільки що запомненную суму констант
приведення додамо до
і
результат, позначати ¬ мий надалі через
,
порівняти безлічі
Тепер
безлічі теж можна порівняти якусь
матрицю
.
Для цього у матриці
замінимо
на оо число в клітці (i, j) і підлозі ¬
ченную в результаті матрицю наведемо.
Суму констант приведення запам'ятаємо,
а отриману матрицю позначимо через
Додамо
запомненную суму констант приведення
до числа
,
і отриманий ¬ ве число, що позначається
надалі через
,
порівняти безлічі
Виберемо
між множинами
то
безліч, на якому мінімальна функція
(тобто те з множин, якому відповідає
менше з чисел
Зауважимо тепер, що в проведених міркуваннях використовувався в якості вихідного тільки один фактичний об'єкт-наведена матриця ваг даного орграфа. По ній було виділено певний ребро графа і були побудовані нові матриці, до яких, звичайно, можна все те ж саме застосувати.При кожному такому повторному застосуванні фіксуватиметься чергове ребро графа. Домовимося про наступне дії: перед тим, як в черговий матриці викреслити рядок і стовпець, в ній треба замінити на оо числа у всіх тих клітинах, які відповідають ребрам, свідомо не належить тим Гамільтона циклам, які проходять через уже відібрані раніше ребра.
До обраному безлічі з зіставленнями йому матрицею і числом <р застосуємо до тих пір, поки це можливо, зазначений вище алгоритм.
Доводиться, що в результаті вийде безліч, що складається з єдиного обходу комівояжера, вага якого дорівнює очередно ¬ му значенню функції (р; таким чином, виявляються виконаними всі умови, обговорювані при описі методу гілок і меж.
Після цього здійснюється поліпшення рекорду аж до підлозі ¬ чення остаточної відповіді.
Жадібний алгоритм. Знайти наближене значення найкоротшого туру (TOUR) з вартістю COST для задачі комівояжера з N містами і матрицею вартості С, починаючи з вершини U.
Жадібний алгоритм - алгоритм знаходження найкоротшого расстояния шляхом вибору найкоротшого, ще не обраного ребра, за умови, що воно не утворює циклу з вже обраними ребрами. Алго ¬ ритм використовує стратегію «йди до найближчого міста». «Жадібним» цей алгоритм названий тому, що на останніх кроках доводиться жорстоко розплачуватися за жадібність.
Крок 1 (Ініціалізація). TOUR: = 0; COST: = 0. Позначити вершину U як «обрану», тобто V: = U, де V - поточна переменная, а всі інші вершини - як «не вибрані».
Крок 2 (Відвідування всіх міст). FOR г: = 1 ТО N - 1 DO.
Крок 3 (Вибір наступного ребра). Нехай (V, W) - ребро з найменшою вартістю, провідне з У в будь-яку «невибраний» вершину W. TOUR: = TOUR + (V, W); COST: = COST + C (V, W). Помічаємо W як «обрану», тобто V: = W.
Ш а г 4 (Завершення туру). TOUR: = TOUR + (V, U); COST: = COST + C (V, U).
На рис. 12.5 проілюстрована послідовність виконання даного алгоритму для графа, що має п'ять вершин (тур починається з вершини 1). Пройдені вершини позначені чорним квадратом ¬ ком, а не пройдені - гуртком. Жадібний алгоритм для даного графа знайшов тур з вартістю 14, хоча оптимальний тур має сто ¬ имость 13. Ясно, що «грубий алгоритм» стосовно до задачі комівояжера не завжди знаходить тур з мінімальною вартістю.
Жадібний алгоритм заснований на ідеї підйому. Мета - знайти тур з мінімальною вартістю. Задача зведена до набору приватних цілей - знайти на кожному кроці «найдешевший» місто, щоб відвідати
його наступним. Алгоритм не будує плану вперед; поточний вибір робиться безвідносно до наступних виборів.
Для
довільної задачі комівояжера з п містами
вимагається
операцій,
щоб обробити матрицю вартостей С. Тому
нижня межа складності будь-якого
алгоритму, здатного дати не ¬ тривіальне
можливе рішення цієї задачі, дорівнює
Неважко перевірити, що для будь-якої
розумної реалізації кроків 1-3 вимагається
не більше ніж
операцій.
Дерев'яний алгоритм. В основі дерев'яного алгоритму лежить побудова остовного дерева, яке, з урахуванням евристичних підходів, перетвориться в тур комівояжера.
Розглянемо етапи рішення задачі комівояжера дерев'яним алгоритмом.
Крок 1. Побудуємо на вхідний мережі найкоротший остовне дерево "подвоїмо всі його ребра. Отримаємо зв'язний граф G з вершинами, що мають лише парні ступеня.
Ш а г 2. Побудуємо Ейлером цикл G, починаючи з вершини 1. Цикл задається переліком вершин.
Крок 3. Розглянемо перелік вершин, починаючи з 1, і будемо викреслювати кожну вершину, яка повторює вже зустрінуту в послідовності. Залишиться тур, який і є результатом роботи алгоритму.
Приклад. Дана повна мережу, задана наступною матрицею суміжності:
Вершины |
1 |
2 |
3 |
4 |
5 |
6 |
1 |
— |
6 |
4 |
8 |
7 |
14 |
2 |
6 |
— |
7 |
11 |
7 |
10 |
3 |
4 |
7 |
— |
4 |
3 |
10 |
4 |
8 |
11 |
4 |
— |
5 |
11 |
5 |
7 |
7 |
3 |
5 |
— |
7 |
б |
14 |
10 |
10 |
11 |
7 |
— |
Знайти тур комівояжера жадібним і дерев'яним алгоритмами.
Рішення. Якщо справедливо нерівність трикутника, то
Склавши
ці
дві
нерівності,
отримаємо
По нерівності трикутника одержимо, d [l, 5] <d [l, 3] + d [3,5]. Вікон-чательно маємо
d [l, 5] <d [l, 2] + d [2,3] + d [3,4] + d [4,5].
Отже, якщо справедливо нерівність трикутника, то для кожної ланцюга вірно, що відстань від початку до кінця ланцюга менше (або дорівнює) сумарною довжиною усіх ребер ланцюга. Це узагальнення розхожого переконання, що пряма коротше кривої.
Жадібний алгоритм (йди в найближче місто) дає тур 1 - (4) -3 - (3) -5 - (5) -4 - (11) - б - (10) -2 - (6) -1, де без скобок показані номери вершин, а в дужках - довжини ребер. Довжина туру дорівнює 39, тур показаний на рис. 12.6, а.
Дерев'яний алгоритм спочатку будуємо остовне дерево штриховою лінією, потім Ейлером цикл 1 - 2-1-3-4-3 - 5 - 6-5-3-1, потім тур 1 - 2 - 3 - 4 - 5 - 6 - 1 довжиною 43, який показаний суцільною лінією на рис. 12.6,6.
12.4. Приклади розв'язання задачі комівояжера
Приклад 1. Вирішити методом гілок і меж задачу комівояжера для графа, що містить 6 вершин. Нехай вихідний орієнтований граф заданий матрицею вартості:
Початкове приведення матриці вартості. Нехай є деяка числова матриця. Привести рядок цієї матриці означає виділити в рядку мінімальний елемент (його називають константою приведення) і відняти його з усіх елементів цього рядка. В результаті в цьому рядку на місці мінімального елемента виявиться нуль, а всі інші елементи будуть невід'ємними. Матриця вартості називається наведеної, якщо вона має в кожному рядку і кожному стовпці хоча б один нуль. Сума констант приведення утворює нижню граничну оцінку вартості будь-якого можливого туру.
Обчислення функції штрафу. Функція штрафу - це мно ¬ дружність чисел, обчислених для кожного нуля наведеної матриці за допомогою підсумовування двох мінімальних чисел з того рядка і з того стовпця, в яких розташований нульовий елемент.
Вибір ребра розгалуження. Для розгалуження необхідно вибирати ребро, якому відповідає максимальна функція штрафу. Якщо існує кілька однакових максимальних значень функції штрафу, вибір серед них може бути довільним.
Вагою елемента матриці називають суму констант приведення матриці, яка виходить виданої матриці заміною аналізованих-мого елемента на оо. Отже, вираз найважчий нуль в матриці означає, що в матриці підрахований вага кожного нуля, а потім фіксований нуль з максимальною вагою.
Обчислення граничної оцінки для гілки, що відповідає не включенню ребра в тур. Ця оцінка обчислюється як сума граничної оцінки, відповідної попереднього вузлу дерева перебору, і вибраному значенню функції штрафу.
Обчислення граничної оцінки для гілки, відповідної включенню ребра в тур. Для обчислення граничної оцінки необхідно:
-викреслити в матриці вартості рядок і стовпець, соответствующие обраному ребру;
-скорегувати отриману матрицю таким чином, що ¬ б усунути можливість дострокового завершення туру (усунути цикли);
-зробити приведення (якщо необхідно) отриманої матриці, і якщо константа приведення відмінна від нуля, скласти цю константу з граничної оцінкою попереднього вузла.
Перевірка на окбнчаніе рішення. Якщо скоригована ма ¬ тріца має розмір 2 х 2, а вузол дерева, якому відповідає ця матриця, має мінімальну граничну оцінку, то рішення зада ¬ чі закінчується: два, що залишилися нуля цієї матриці відповідають двом останнім ребрам, які включаються в тур безпосередньо, при цьому вартість туру не змінюється.
Рішення.
Спочатку наводимо початкову матрицю
по рядках (матріца
):
В останньому стовпці цієї матриці hi записані константи приведення по рядках.
Отриману
матрицю необхідно привести по стовпцях.
У редок одержуємо матрицю
,
в якій в рядку hj записані кон ¬ стант
приведення по стовпцях:
Сума констант приведення H дає нижню граничну оцінку вартості всіх турів:
Обчислюємо для ребер, помічених нулем в матриці , значення функцій штрафу, які позначимо символом Diji
Максимальне значення функції штрафу дорівнює 22, на підставі
чого в якості ребра розгалуження вибі ¬ раєм ребро (4,1). Розбиваємо множество всіх турів R на дві підмножини: {4, 1} - підмножина всіх турів, в яке входить ребро (4,1), і подмно ¬ дружність всіх турів {4, 1 *}, в яке ребро (4, 1) не входить. Будуємо перший фрагмент обмеженого дерева перебору (мал. 12.7). При цьому гранична оцінка в гілки {4, 1 *} знаходиться непосередньо як сума 75 + 22 = 97.
Викреслюємо
в матриці С [четвертий рядок і перший
стовпець, а щоб заборонити дострокове
завершення туру по ребру графа (1,4),
вагою цього ребра привласнити значення
.
У результаті подібної коректування
отримуємо матрицю
Її
необхідно привести по четвертому
стовпцю (константа приведення
=
18), в результаті чого отримуємо наведену
матрицю
і обчислюємо граничну оцінку в гілці {4, 1}, яка буде дорівнює 75 +18 = 93 (рис. 12.8).
Порівнюємо оцінки в листі і приходимо до висновку, що галуження целе ¬ згідно продовжувати в листі з оцінкою 93. Так як цьому листу відповід ¬ ствует матриця , то з нею необхідно поступати як з вихідною матрицею, тобто обчислювати для неї значення функцій штрафу, вибирати максимальне значен ¬ ня штрафу і на його основі вибирати наступне ребро розгалуження:
Для матриці маємо наступні значення функцій штрафу:
Вибираємо максимальне значення 68, якому відповідає ребро розгалуження (1,6), після чого можна побудувати другий фрагмент обмеженого дерева перебoра (рис. 12.9).
Потім приступаємо до обчисленьнію граничної оцінки у вузлі дерева {1, 6). Для цього викреслюем в матриці перший рядок і шостий стовпець, а також підпринимаемо заходи для виключення дотермінового завершення туру матрици С3.
На
справді, до даного моменту в тур
включено ребро (4,1) і є пропози ¬ ня
включити в нього ребро (1,6). З рис. 12.10
видно, що достроково завер ¬ шити тур
могли б ребра (6,1) і (6,4). Однак елемент
(6,1) в матриці Сз вже відсутній, отже, цю
«роль» може виконати лише елемент
(6,4), тому заміняємо його символом оо.
По-сле цього остаточно матриця Сз бу
де мати вигляд:
було раніше прийнято для приве ¬ дених матриць, помітити штрі ¬ хом), а отже, оцінка у вузлі (1,6) залишається незмінною (рис. 12.11).
Обчислюємо значення функцій штрафу для матриці С'3:
На основі отриманих значень визначаємо наступне ребро розгалуження (6, 3) і обчислюємо граничну оцінку в тому вузлі дерева перебору, якому відповідають тури, не містять ребра (6, 3) (рис. 12.12). При цьому розгалуження триває від вузла з мінімальною оцінкою, рівної 9
В
икреслюємо
в матриці
шостий рядок і третій стовпець і
коректуємо її на виключення дострокового
завершення туру. Це досягається
присвоюванням символу нескінченності
елементу (3,4). Після цього отримуємо
матрицю
,
а після її приведення - матріцу
Так как матрица С\ не была приведена, то гранична оцінка у вузлі {6, 3} збільшується в порівнянні з попереднім вузлом розгалуження на 9 і стає рівною 102. Третій фрагмент обмеженого дерева перебору з граничними оцінками в листі матиме вигляд, зображений на рис. 12.13.
Розгляд дерева, наведеного на рис. 12.13, показує, що розгалуження потрібно продовжувати з вузла {4, 1 *}, так як гранична оцінка там менше (97), ніж у вузлі, з якого розгалуження здійснювалося досі. Подібна ситуація називається перескоком, і в цьому випадку може виявитися, що всі отримані досі дані будуть загублені.
Отже, переходимо до вузла {4, 1 *}, якому відповідає матриця
Матриця
не приведена, і після виконання операції
приведеня отримуємо матрицю
:
У матриці сума констант приведення буде дорівнює 97, що відповідає обчисленої раніше через функцію штрафу граничної
оцінці у вузлі {4, 1 *}. Цей факт підтверджує правильність виконан ¬ наних обчислень.
Обчислюємо для матриці значення функцій штрафу:
Черговим ребром розгалуження з вузла {4, 1 *} буде ребро (6,1), так як йому відповідає максимальне значення функції штра ¬ фа. Після коректування матриці С'5 (ребру (1,6) приписується нескінченний вагу) та обчислення граничних оцінок остаточний че ¬ твертий фрагмент дерева перебору буде мати вигляд, представлений на рис 12.14.
Рис. 12.14. Четвертий фрагмент обмеженого дерева перебору з граничними оцінками в листках
З
цього малюнка видно, що мінімальна
гранична оцінка (102) має місце у вузлі
{6, 3}, тому доцільно здійснити обрат ¬
ний «перескок» в цей вузол і продовжувати
подальше розгалуження з нього. Цього
вузла відповідає раніше обчислена
матриця
;
дамо
для
зручності наскрізної нумерації нове
позначення
.
Обчислимо
для матриці
значення функцій штрафу:
Максимальне значення функції штрафу, рівне 10, пов'язане з ребром (3, 2), тому вибираємо його в якості ребра розгалуження, продовжуючи побудова дерева з листа з граничної оцінкою 102.
Після
виключення з матриці
третього рядка, другого стовпця, а також
її коригування, отримуємо наведену
матрицю
Так як матриця Cj вже приведена і має розмір 2x2, то
ребра (2, 5) і (5, 4) безпосередньо включаємо в тур, при цьому гранична оцінка 102 не змінюється. Остаточний вигляд туру представ ¬ лен на рис. 12.15, а обмежене дерево перебору - на рис. 12.16. Легко перевірити, що сума ваг ребер, що увійшли в тур, дорівнює 102, що підтверджує правильність по-лучанин рішення.
Приклад 2. Вирішити завдання комівояжера, використовуючи алгоритм Літтла, для графа з 6 вершин, заданого матрицею суміжності
Загальна ідея методу: потрібно розділити величезне число перебив ¬ раєм варіантів на класи і отримати оцінки (знизу - в задачі
Рис. 12.16. Остаточний вигляд обмеженого дерева перебору
мінімізації, зверху - в задачі максимізації) для цих класів, що-б мати можливість відкидати варіанти не по одному, а цілими класами. Складність полягає в тому, щоб знайти такий поділ на класи (гілки) і такі оцінки (кордону), щоб процедура була ефективною.
Будемо трактувати CtJ як вартість проїзду з міста г у місту. Припустимо, що добрий мер міста j видав указ виплачувати кожному в'їхали в місто комівояжеру 5 дол Це означає, що будь-який тур подешевшає на 5 дол, оскільки у будь-якому турі потрібно в'їхати в місто j. Але оскільки всі тури рівномірно подешевшали, то преж ¬ ний мінімальний тур буде і тепер коштувати менше всіх. Добрий
ж вчинок мера можна уявити як зменшення всіх чисел j-го стовпця матриці С на 5. Якби мер хотів спровадити комівояж ¬ рів з j-го міста і встановив нагороду за виїзд в розмірі 10 дол, це можна було б висловити відніманням 10 з усіх елементів j-го рядка. Це знову змінило б вартість кожного туру, але мінімальний тур залишився б мінімальним. Отже, доведена наступна лема: вичі ¬ тая будь-яку константу з усіх елементів будь-якого рядка або стовпця матриці С, залишаємо тур мінімальним.
Для алгоритму зручно отримати побільше нулів в матриці С, не маючи в ній негативних чисел. Для цього віднімемо з кожного рядка її мінімальний елемент (це називається приведенням по рядкам):
а потім з кожного стовпця отриманої матриці віднімемо його міні-мінімальний елемент, отримавши матрицю, наведену по стовпцях:
Прочерки по діагоналі означають, що з міста г в місто г проїхати не можна. Зауважимо, що сума констант приведення по рядках дорівнює 27, сума по стовпцях 7,
Для туру з шести міст виділених елементів, включених в тур, має бути шість, так як в турі з шести міст є шість ребер. Кожен стовп повинен містити рівно один виділений елемент (в кожне місто комівояжер в'їхав один раз), в кожному рядку повинен бути один такий елемент (з кожного міста коммі ¬ вояжер виїхав один раз). Крім того, виділені елементи повинні описувати один тург, а сума чисел виділених елементів є стои ¬ тість туру.
У наведеній матриці необхідно побудувати правильну систему виділених елементів, тобто систему, що задовольняє вишеопісанним вимогам, і ці виділені елементи будуть позначені нулями, тоді для цієї матриці отримаємо мінімальний тур. Таким чином, мінімальний тур не може бути менше 34 (оцінка знизу для всіх турів). Тепер приступимо до розгалуження, оцінюючи нульові елементи. Розглянемо нуль у клітці (1, 2) наведеної матриці (¾. Він означає, що ціна переходу з міста 1 в місто 2 дорівнює 0. А якщо комівояжер не поїде з міста 1 в місто 2? Тоді все одно потрібно в'їхати в місто 2 за ціни, вказані у другому стовпці; дешевше всього за 1 (з міста 6). Далі, все одно треба буде виїхати з міста
за ціну, вказану в першому рядку; дешевше всього в місто 3 за 0. Підсумовуючи ці два мінімуму, маємо 1 + 0 = 1:якщо не їхати «по нулю» з міста 1 в місто 2, то треба заплатити не менше 1. Таким чином обчислюється функція штрафу. Оцінки всіх нулів показані в матриці Сз правіше і вище нуля (оцінки, рівні нулю, не вказувалися):
Виберемо максимальну з цих оцінок (в прикладі є кілька оцінок, рівних одиниці, виберемо першу з них в клітці (1, 2)).
Отже, вибрано нульове ребро (1,2). Розіб'ємо всі тури на два безлічі-включають ребро (1, 2) і не включають ребро (1,2).
У першому випадку необхідно розглянути матрицю С4 з викресленою першим рядком і другим стовпцем:
Додатково в зменшеної матриці С4 поставлений заборону в клітці (2, 1), так як вибрано ребро (1, 2) і замикати передчасно тур
Зменшену матрицю можна привести на 1 по першому стовпцю, при цьому тур, відповідальний їй, буде коштувати 35. Результат розгалужень і отримання оцінок показаний на рис. 12.17.
У фрагменті дерева перебору рішень верхня вершина - безліч всіх турів; нижня ліва - безліч всіх турів, що включають ребро (1,2); нижня пра ¬ вая - безліч всіх турів, не включають ребро (1,2).
Продовжимо розгалуження вліво-вниз. Для цього оцінимо нулі в матриці С5:
Максимальна оцінка в клітинці (3, 1) дорівнює 3. Таким чином, оцінка для правої нижньої вершини на рис. 12.18 буде дорівнює 35 + 3 = 38. Для оцінки лівої нижньої вершини (рис. 12.18) потрібно
викреслити з матриці С5 рядок 3 і стовпець 1, отримавши мат-ріцу с6:
У цю матрицю потрібно поставити заборону в клітку (2, 3), так як вже побудований фрагмент туру з ребер (1,2) і (3,1) і потрібно заборонити передчасне завершення туру (2, 3). Матриця наводиться по стовпцю на 1, таким чином, кожен тур відповідного класу (тобто тур, що містить ребра (1, 2) і (3,1)) коштує 36 умовних одиниць. далі
Тепер оцінюємо нулі у наведеній матриці Cj. Нуль з максимальною оцінкою 3 перебуває в клітинці (6,5). Негативний варіант має оцінку 38 + 3 = 41. Для отримання оцінки позитивного варіанта видаляємо рядок 6 і стовпець 5, ставимо заборона у клітину (5,6):
Матриця
наведена, отже, оцінка позитивного
варіанта не збільшується.
Оцінюючи нулі в матриці , отримуємо розгалуження за вибором ребра (2, 6), негативний варіант отримує оцінку 36 + 3 = 39, а для отримання оцінки оптимального варіанту викреслюємо другий рядок
і
шостий стовпець, одержуючи матрицю
:
У матрицю треба додати заборона в клітку (5,3), так як вже побудований фрагмент туру [3,1,2,6,5] і треба заборонити передчасне завершення туру (5,3). Після перетворень вийшла матриця 2 х 2 з нульовими елементами по діагоналі. Елементи, позначені нулем (ребра (4, 3) і (5, 4)), автоматично включаються в тур, не змінюючи його довжини.
Таким чином, отриманий тур: (1 - 2 - 6 - 5 - 4-3-1) вартістю в 36 (мал. 12.19). При досягненні низу по дереву перебору клас
туров сузілся до одного туру, а оцінка знизу перетворилася в точну вартість.
контрольні питання
Яка безліч називається рекордом?
У чому сутність поліпшення рекорду?
Вкажіть головний принцип жодного алгоритму.
У чому особливість дерев'яного алгоритму?
Як будується дерево перебору для розшифровки криптограми?
Назвіть основні принципи методу гілок і меж.
Сформулюйте умову задачі комівояжера.
Що означає «привести матрицю по рядках»?
Що таке функція штрафу?
Як виключається дострокове завершення туру?
Що таке нижня гранична оцінка?
Розділ 13
Моделювання з використанням генераторів випадкових чисел
Багато явища в природі, техніці, економіці та в інших областях носятслучайний характер. У цьому випадку величина, що приймає свої значення в залежності від результатів деякого випробування (досвіду), називається випадковою величиною.
Нехай
X - дискретна випадкова величина, можливими
значеннями якої є числа
Позначимо
через
ймовірності цих значень, тобто pi -
імовірність події, що складається в
тому, що X приймає значення
Закон розподілу повністю задає дискретну випадкову величину. Однак часто закон розподілу випадкової величини невідомий. У таких ситуаціях її описують числовими характеристиками.
13.1. Числові характеристики випадкових величин
Випадкові величини характеризуються наступними числовими параметрами:
Математичне сподівання М (Х)-це статистичне середнє випадкової величини:
де Xi - значення випадкової величини, pi - імовірність появи цієї величини. при цьому
Для рівномовірно подій
Дисперсія - це математичне сподівання квадрата відхилення випадкової величини від її математичного сподівання:
Корінь квадратний з дисперсії називається середнім квадратичним відхиленням про (Х) випадкової величини, тобто
Коефіцієнт кореляції визначається для двох потоків випадкових величин:
Коефіцієнт кореляції визначений на відрізку [-1; 1], тобто -1 <
<R (X, Y) <1.
Потоки випадкових величин, для яких R (X, Y) = 0, називаються некоррелірованнимі (незалежними).
Розглянемо алгоритми для детермінованою вибірки випадкових чисел.
13.2. Метод середини квадрата
Один з ранніх генераторів випадкових чисел, що належить Джону фон Нейманом (1946), відомий як метод середини
квадрата.
Метод використовується для генерації k-розрядних псевдовипадкових чисел. Повинно бути задано k-розрядне початкове число xq (для зручності припускаємо, що до четно). Це число зводиться в квадрат, і виходить число у. Число у повинно мати 2k розрядів. Якщо число розрядів менше 2k, то число у доповнюється зліва нулями. Потім в у виділяють середні k розрядів, які і дають нове випадкове число.
Алгоритм зводиться до виконання наступних кроків.
Ш
а р 0. Ініціалізація:
Крок
1. Основний цикл:
Крок
2. Генерація нового випадкового числа
:
= (середні до розрядів числа у);
.
(Число у матиме 2k
розрядів, а наступне випадкове число
виходить, якщо видалити за
k/2 розрядів з кожного кінця у. Десяткова точка поміщається перед першим розрядом числа Xj до надходження його на вихід випадкового генератора.)
Приклад 1. Отримати три випадкових числа методом середини квадрата. Виберемо k = 4; хо = 3167. тоді:
Приклад 2. Для k = 4 і x0 = 2134 отримати перші вісім псевдовипадкових чисел, вироблених алгоритмом середини квадрата, в інтервалі (0; 1):
Незважаючи на видиму випадковість чисел, що генеруються алгоритмом, йому властиві недоліки. У самому справі, якщо в послідовності небудь з'явиться число 0,0000, то всі наступні за ним числа будуть також рівні 0,0000. Таким чином, багато чого залежить від початкового вибору k і хо.
13.3. Лінійний конгруентний метод
Метод
використовується для генерації
послідовності
з m
псевдовипадкових чисел. Повинні бути
задані наступні вхідні значення:
b - цілочисельний множник, b> 1;
хо - початкове випадкове ціле число xо> 1;
k - крок, k> 0 ціле;
m - цілочисельний модуль, m> хо, Ь, к.
Випадкові числа генеруються за рекурентною формулою:
Алгоритм зводиться до виконання наступних кроків.
Крок 1. Основний цикл:
Ш а г 2. Генерація нового необробленого випадкового числа:
Число
Xj має лежати в полуінтервале
За
визначенням для цілих а і m
(a mod m)
є залишок від цілочисельного ділення
а на m.
Наприклад, 5 mod 3 = 2, 7 mod 3 = 1,9 mod 3 = 0.
Крок
3. Генерація наступного випадкового
числа
(
буде лежати в полуінтервале
і
володіти необхідним розподілом).
Приклад
1. Отримати три випадкових числа лінійним
конгруентним методом. Вибираємо
.
В результаті:
Приклад
2. Для
отримати
перші вісім псевдовипадкових чисел,
вироблених лінійним конгруентним
методом, при цьому
Існує
такий вибір параметрів
,
при якому алгоритм буде генерувати
числа на відрізку [0; 1], що представляються
непередбачуваними і задовольняють
певним статистичним критеріям. Для всіх
практичних цілей ці числа виявляються
послідовністю спостережень рівномірно
розподіленої випадкової змінної.
13.4. Полярний метод генерації випадкових чисел
Метод
використовується для генерації двох
незалежних випадкових чисел з нормальним
розподілом. N
(0,1) з двох незалежних рівномірно
розподілених випадкових чисел. Розподіл
N
(0,1) перетвориться в
з використанням центральної граничної
теореми.
Алгоритм зводиться до виконання наступних кроків.
Крок
1. Генерація двох рівномірно розподілених
випадкових чисел. Генеруються два
незалежних випадкових числа
з розподілом
мають
розподіл U (-1,1 )).
Крок
2. Обчислення і перевірка
GOTO
крок 1.
Ш
а г 3. Обчислення
Крок
4. Stop, (
розподілені нормально.)
Алгоритм має обчислювальний перевагу перед іншими методами: він зазвичай генерує по одному числу з нормальним розподілом на кожне число з рівномірним розподілом. Правда, при цьому слід переконатися, що компенсується додатковий час, що витрачається на обчислення натуральних логарифмів і квадратних коренів.
Контрольні питання
Які існують типи числових характеристик випадкових величин?
Дайте визначення математичного очікування.
Дайте визначення дисперсії.
Що показує коефіцієнт кореляції?
У чому особливість методу середини квадрата?
Які вихідні дані використовуються в лінійному конгруентності методі?
Які випадкові числа отримують полярним методом?
