Роз'яснення з розгалуженням та зв'язком


9

У мене є тест про алгоритм гілки та зв’язку . Я теоретично розумію, як працює цей алгоритм, але я не зміг знайти прикладів, що ілюструють, як цей алгоритм можна реалізувати практично.

Я знайшов такі приклади, як цей, але я все ще плутаюся з цього приводу. Я також шукав проблему продавця подорожі, і я не міг її зрозуміти.

Що мені потрібно - це деякі проблеми, і як можна вирішити ці проблеми за допомогою гілки та прив’язки.


1
Що було важко зрозуміти? Ви раніше пробували зворотний трек ?

Так, я спробував це. Проблема з B&B полягає в тому, якщо я отримаю проблему, яку можна вирішити за допомогою B&B, я не знаю, як я можу отримати нижню межу для кожного вузла, а також як я можу отримати цільову функцію. Крім того, яке перше значення кращого, яке я порівнюю з кожною нижньою межею?
MR.NASS

2
@ MR.NASS Я не впевнений, що саме ви говорите в своєму останньому коментарі. Дозвольте спробувати пояснити. B&B - це метод обрізки дерева пошуку. Він може бути застосований до проблем, які мають оптимізувати цільову функцію. Зазвичай застосовується для дискретних або комбінаторних проблем оптимізації. На кожному кроці ви намагаєтеся знайти нижню межу цільової функції для всіх можливих рішень. Якщо нижня межа вище поточного найкращого рішення, ви можете зупинити пошук і відхилити (обрізання дерева пошуку), оскільки не може бути рішення з нижчим балом.
Джордж

2
Зазвичай один вирішує розслаблену версію проблеми, щоб отримати нижню межу. Для змішаних цілих програм це зазвичай розслаблення лінійного програмування.
Опт

2
@ MR.NASS Це залежить від об'єктивної функції. Як сказав Сід, ви зазвичай вирішуєте розслаблену версію заданої проблеми. Зазвичай хочеться використовувати розслаблену версію, яка дає гарне наближення до початкової проблеми і може бути ефективно вирішена. Зауважте, що розслаблена версія повинна мати нижню межу, яка є не більше максимальної, ніж справжня нижня межа, щоб правильно працювати. Інший приклад: припустимо, ви хочете вирішити MAXSAT методом B&B. Для заданого часткового присвоєння істини ви можете легко обчислити кількість задоволених пропозицій. Верхня межа (оскільки це проблема максимізації) ...
Джордж

Відповіді:


10

Давайте застосуємо Branch and Bound до Рюкзака , сподіваємось, це зрозуміє вам концепцію.

Ми маємо n предмети, марковані 1 через до n. vi - це значення iй пункт, і wiйого вага. Ми намагаємось помістити їх у рюкзак, який може містити доT ваги загалом, і ми намагаємося максимально збільшити суму значень предмета, який ми кладемо в ранець.

Звичайний зворотній підхід - наша основа. Ми спочатку ставимоv1 в упаковці, а потім вирішіть проблему для решти n1предмети з рекурсією. Потім видаляємоv1 з пачки і вирішити проблему для решти n1 Елементи знову, і ми повертаємо найкращу конфігурацію, яку ми знайшли.

Цей зворотний трек є частиною «Відділення» відгалуження та зв’язування. Ви розгалужуєте (у випадку з Рюкзаком) два випадки: 'предметi є частиною елемента "та" рішення iне є частиною рішення ". Ви можете уявити це як двійкове дерево, де ліва дитина - один випадок, а права дитина - інший. Це дерево є деревом пошуку (або пошуковим простором ): його глибина становитьnі тому воно має O(2n)вузли. Тому алгоритм має експоненціальний час у кількості елементів.

Тепер ми переходимо до частини "Обмежена": ми намагаємось знайти такі критерії, які б могли сказати: "ця конфігурація ніколи не виходить, тому ми можемо не турбуватися обчислювати це". Прикладом такого критерію є «вага предметів, які ми вже помістили в рюкзак, перевищуєT': якщо ми додали, скажімо, перше n/2 предметів у рюкзак, і тому він уже заповнений, немає сенсу намагатися ставити предмети n/2+1 через до n і в рюкзаку, але також немає сенсу намагатися вмістити будь-який підмножина n/2+1 через до n у рюкзаку, оскільки він уже повний, тому ми економимо 2n/2справ. Інший приклад - " навіть якщо я вставлю всі решта елементів, значення елементів, які я вклав, не буде перевищувати найкращу конфігурацію, яку я знайшов досі ".

Ці критерії по суті відрізають частини дерева пошуку: на якомусь вузлі ви говорите, наприклад, «ліве піддерево не дасть мені кращої конфігурації, оскільки X», тож ви забудете про це піддірева і не будете його досліджувати. Піддерево глибиниd що ви вирізали таким чином, вас економить O(2d) вузлів, які можуть бути досить трохи швидкими, якщо вам пощастить.

Зауважте, що це називається " Обмеження ", оскільки воно зазвичай включає якусь нижню або верхню межу: для критерію " навіть якщо я вставлю всі інші елементи, значення елементів, які я вклав, не перевищує найкращої конфігурації Я знайшов поки що ', значення вашої найкращої конфігурації поки що є нижньою межею для найкращої конфігурації, тому все, що ніколи не перейде через цю нижню межу, приречене на збій.

Ви можете зробити «Обмежувальну» частину настільки складною, як вам подобається. Наприклад, проблеми цілого програмування часто вирішуються за допомогою релаксації: ви розслабляєте свою програму до лінійної програми, яку ви можете вирішити в поліноміальний час, а потім можете викинути безліч справ для ваших бінарних змінних, які ніколи не вийдуть. Потім ви відгалужуєте на інші параметри.

Зауважте, що Branch and Bound зазвичай лише збільшує швидкість на практиці, але не в теорії: важко точно сказати, яка частина дерева пошуку вирізана за допомогою вашої евристики. Про це свідчить кількість різних евристик, що використовуються на практиці в таких проблемах. Якщо вам не пощастило, решта дерева пошуку залишається величезною навіть з великою кількістю обмежень.


4

Розглянемо планування , завдання присвоїти робочі місця з певною тривалістю та строками роботи. Ми припускаємо дискретний час. Багато таких проблем є NP (O) -твердими.

Зокрема, ця відповідь піде на розмову 1riLmax, це ми плануємо

  • на одній машині
  • проблеми з датами випуску і ми
  • мінімізуйте максимальну затримку , тобто максимальну різницю між терміном та часом завершення для всіх завдань.Lmax

Версія цієї проблеми є важкою для NP; це можна побачити, зменшивши з 3PARTITION .

Цікаво, що якщо дозволити викуп , тобто заміну активних робочих місць, проблему можна вирішити в квадратичному часі до найдавнішої евристичної дати першої дати (на змінені строки). Неважко помітити, що оптимальне рішення цього варіанту може бути не гіршим, ніж оптимальне рішення вихідної задачі.

Тепер, щоб застосувати Branch & Bound до цієї проблеми, нам потрібно виправити деякі параметри:

  • Ми обчислюємо нижню межу, дозволяючи передбачити і використовувати EDD.
  • Ми відділяємось, фіксуючи кожну позапланову роботу як наступну.
  • Ми йдемо до дитини спочатку зі смайлами нижньої межі.

Ви повинні зробити це для кожної заявки B&B.


Для конкретного прикладу розглянемо цей екземпляр :1riLmax

i1234pi4265ri0135di8121110

з робочих місць часи обробки, дати релізу і належних термінів.piridi

Виконуючи B&B, як зазначено вище, це відбувається:

алгоритм
Цей GIF не циклічно. Перезавантажте його на новій вкладці, щоб побачити спочатку.
[ джерело ] [ статична версія ]

Зауважте, що з 41 вузла лише чотири відвідуються належним чином, і лише для десяти обчислюються нижні межі.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.