Чи існує загальний метод оцінки оптимальності алгоритму оптимізації?


9

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

Єдиний метод, який я придумав поки що, - це порівняння результатів алгоритму з уже відомими оптимальними рішеннями.

Якщо ні, то існують конкретні методи для якихось особливих проблем?

РЕДАКЦІЯ Для уточнення: під оптимальністю я маю на увазі, наскільки близький результат до оптимального результату рішення.


Можливо, питання для cstheory.stackexchange.com ?
Лучано

Як ви визначаєте "оптимальність" алгоритму оптимізації? Ви хочете зробити аналіз його вихідного коду, а потім повідомити, який його коефіцієнт наближення?
Олексій десять Бринк

Ви, мабуть, маєте на увазі "ефективність" алгоритму, який використовується для "опису властивостей алгоритму, що стосується того, скільки різних видів ресурсів він споживає". Алгоритми поділяються також на точні та евристичні. Точні алгоритми гарантують знайти оптиміальне рішення, але це може зайняти їх століттями процесорного часу (для реалістичних задач з великим NP), тоді як евристика знайде рішення, близьке до глобального оптимуму, у більш розумні терміни. (хвилини або години залежно від розміру вводу.
Флоренція Целай

Відповіді:


3

Це залежить від виду проблеми.

Якщо для задачі існує схема наближення многочлена та часу (PTAS) (наприклад, Евклідова TSP), то можна отримати рішення, яке довільно наближене до оптимального рішення за багаточлен. Це означає, що для кожного e > 0 існує поліноміальний алгоритм часу, який знайде приблизне рішення вашої проблеми, що гарантовано знаходиться в межах (1+ e ) оптимального рішення. У такому випадку ви просто порівняєте складність виконання / пам'ять для двох алгоритмів для однакових значень e . Якщо один алгоритм може дати ті самі «гарантії оптимальності», ніж інший, але при менших витратах часу / вартості пам’яті, то, мабуть, кращий алгоритм.

Якщо проблема полягає в APX, але не в PTAS , тобто якщо є алгоритми наближення поліноміального часу, які гарантовано створюють рішення, що знаходяться в постійному коефіцієнті оптимального рішення, то ви можете порівняти цей постійний коефіцієнт. Той, хто має нижчий коефіцієнт, дасть кращі рішення (але часто ціною більших витрат часу / пам'яті)

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


1

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

Візьмемо, наприклад, проблему SET-COVER. Для тих, хто не знає, проблема полягає в наступному:

Дано набір елементів B={1,2,...,m}і ряд підмножин S_1, S_2, ..., S_n, об'єднання яких є B. Ви намагаєтеся знайти мінімальну кількість цих підмножин таким, що об'єднання все ще є B. Типовий приклад цієї проблеми в реальному світі - це те, коли вам надано колекцію мікрорайонів, і ви намагаєтесь знайти оптимальні місця для розміщення шкіл, щоб кожен район обслуговувався менше ніж на деякій відстані dвід найближчої школи. У цьому випадку Bце сукупність мікрорайонів і S_xскладається з усіх наборів у межах dміста x.

Ви доказуєте, що ця проблема НЕЗАКОННА. Однак є просте жадне рішення, коли ви неодноразово підбираєте набір S_iз найбільшою кількістю непокритих елементів. І ви можете довести, що цей алгоритм справляється добре .

Якщо оптимальний алгоритм складається з kмножин, алчний алгоритм буде складатися не більше ніж k ln(n)множини, де ln - природний логарифм.


1

Проблема визначення того, чи має програма "ефективність оптимальності" A чи "ефективність оптимальності" B, практично для будь-якого визначення поняття "ефективність оптимальності" взагалі не вирішується (доказ нижче). Це означає, що не існує єдиного методу, який завжди може підказати вам, наскільки оптимальним є алгоритм.

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

Проблема, про яку йдеться, - проблема "завантаження вантажівки": у нас є багато однакових вантажівок (стільки, скільки нам подобається), кожна з яких здатна перевезти вантаж вагою не більше Т. У нас є п об'єктів, яких ми хочемо завантажити в ці вантажівки. транспорт. Кожен об'єкт i має вагу w_i, де w_i <= T (тому немає предметів, які не можуть поміститися на вантажівці навіть самі). Елементи не можна розділити на частини. Ми хотіли б заправити вантажівки, щоб нам було потрібно якомога менше вантажівок. Ця проблема неповна.

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

Цей алгоритм є так званим 2-наближенням для проблеми: він використовує щонайменше вдвічі більше вантажівок, ніж знадобиться оптимальне рішення. "Максимум" є вирішальним: ми можемо пощастить і знайдемо оптимальне рішення, але, принаймні, ми не зробимо занадто поганого.

Щоб довести це, спочатку визначимо нижню межу оптимальної кількості вантажних автомобілів, які нам потрібні. Для цього уявіть, що нам дозволяється різати предмети на частини: ми могли б легко легко заповнити кожну вантажівку, але останню. Кількість вантажівок, які нам знадобляться, якщо ми це зробили, це нижня межа кількості вантажних автомобілів, які нам потрібні для оригінального питання: в найкращому випадку оптимальне рішення завжди повністю заповнює кожну вантажівку, і в цьому випадку кількість вантажівок дорівнює, але якщо оптимальні рішення залишають вантажні автомобілі незаповненими, то їм може знадобитися лише більше вантажівок.

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


Цей алгоритм дає наближення до постійного коефіцієнта: він є щонайбільше в 2 рази гіршим, ніж оптимальне рішення. Деякі приклади інших заходів: щонайбільше C оптимального рішення (помилка адиції, досить нечасто), щонайбільше c log n разів настільки ж погано, як оптимальне рішення, максимум у cn разів так погано, як оптимальне рішення, максимум c 2 ^ (dn) разів настільки ж поганий, як оптимальне рішення (дуже поганий; наприклад, загальний TSP допускає лише алгоритми з таким видом гарантій).

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

Також зауважте, що ми іноді використовуємо алгоритми наближення для проблем, які не є жорсткими.

Я дізнався це (серед набагато більше) на курсі алгоритмів наближення в моєму університеті.


Доказ нерозбірливості: нехай P - це проблема, а A і B - алгоритми наближення для P, де A і B не мають однакової «оптимальності» для певного розумного визначення поняття «оптимальність», і де час роботи A і B є омега (1) (суворо повільніше, ніж постійний час, тобто вони стають повільнішими для більших випадків) і там, де A і B завжди зупиняються.

Нехай D - програма, яка стверджує, що вона може обчислити наступне: враховуючи деяку програму C, що обчислює наближення для P, вирішуйте, чи вона настільки ж хороша, як A, або як B для досить великих входів (ви можете використовувати це для категоризації програм відповідно до їх оптимальності).

Тоді ми можемо використовувати D для вирішення проблеми зупинки. Нехай E - програма, а F - вхід для цієї програми. Ми будемо використовувати D, щоб вирішити, чи зупиниться E на вході F.

Ми розробляємо програму G, яка виконує наступні дії: задаючи вхід S для задачі P, вона працює E на F і A на S паралельно: вона виконує E деякий час, потім A, потім E знову і так далі. Якщо E зупиняється на F, він перестає виконувати A і замість цього запускає B на S та повертає результат B. Якщо A зупиняється перед тим, як E зупиняється, він повертає результат A.

Використовуючи D on G, тепер вирішує, чи зупиняється E на F: якщо E зупиняється на F, то для досить великих входів S, E зупиняється на F, перш ніж зупиняється на S (оскільки час, необхідний для зупинки E, не залежить від розміру вхід, на відміну від А). D повідомляє, що G має характеристики оптимальності B. Якщо E не зупиняється на F, D повідомляє, що G має характеристики оптимальності A.

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