Максимальний приріст потоку в динамічних графіках


12

Я шукаю швидкий алгоритм для обчислення максимального потоку в динамічних графіках. тобто з урахуванням графіка і s , t V маємо максимальний потік F в G від s до t . Потім новий / старий вузол u додається / видаляється відповідними краями, щоб утворити графік G 1 . Який максимальний потік у новоствореному графіку? Чи є спосіб запобігти перерахунку максимального потоку?G=(V,E)s,tVFGstuG1

Оцінюється будь-яка попередня обробка, яка не дуже забирає час / пам'ять.

Найпростіша ідея - це перерахунок потоку.

Інша проста ідея полягає в тому, щоб зберегти всі шляхи збільшення, які використовувались у попередньому обчисленні максимального потоку, для додавання вершини ми можемо знайти прості шляхи (в оновленому графіку ємності за попереднім кроком), які починаються від джерела, йде до v, потім йде до місця призначення, але проблема полягає в тому, що цей шлях повинен бути простим, я не міг знайти кращий за O ( n m ) для цього випадку, для m = | Е | . (Також зауважте, що якби це був лише один шлях, це можна зробити в O ( n + m ), але це не так.)vvO(nm)m=|E|O(n+m)

Також для видалення вузла вище ідея не працює.

Також я вже бачив документи, такі як « Інкрементальний підхід до країв» , але, здається, вони недостатньо хороші в цьому випадку, це більше, ніж для кожного краю, і, здається, не підходить розширення в цьому випадку (ми просто перераховуємо потік). Також зараз я використовую алгоритм максимального потоку Ford-Fulkerson. Якщо є кращий варіант для онлайн-алгоритмів, це добре знати.O(m)


Не могли б ви уточнити, "але проблема полягає в тому, що цей шлях повинен бути простим"? Я цього не зрозумів.
Дмитро Кордубан

@ maldini.ua, Насправді я маю на увазі: Шлях, який йде від джерела до а потім шлях від v до місця призначення, не повинен мати загальної вершини (крім v ). Припустимо, v - новий доданий вузол. Якщо це не так, ми можемо пропустити деяку перевірку і можемо мати швидший алгоритм (в середньому, або може бути асимптотично). vvvv
Саїд

Зрозумів, але як на мене, це не щось особливе щодо . Я думаю, що найпростіша ідея перерахунку полягає в наступному: 1) додавання нової вершини з ребрами до залишкового графіка ; 2) знайти максимальний витрата в оновленому залишковому графіку, використовуючи алгоритм максимального потоку на ваш вибір. Випадок, який ви запропонували, буде оброблено "автоматично" алгоритмом максимального потоку (скажімо, він не знайде жодного шляху збільшення) тощо. Якщо вас цікавить видалення вузлів, я можу написати це у відповідь. PS Щоб було зрозуміло, чи маєте ви спрямований чи непрямий графік? v
Дмитро Кордубан

@ maldini.ua, звичайний перерахунок додає складність поточного рішення, тому я не думаю, що це добре (можливо, це добре, знаючи, що зазвичай занадто багато країв марні і насправді це не спричиняє проблеми з високою продуктивністю), але якщо ви маєте уявлення про видалення вузол, мені цікаво побачити вашу ідею, також спрямований графік. PS, але мені цікаві обидва випадки. |G|
Саїд

Пам’ятайте, що ви запускаєте його у залишковому графіку, на даний момент має бути багато ребер з нульовою ємністю. Зазвичай це працює досить швидко, особливо в розріджених графіках (принаймні, це працювало для мене). З іншого боку, підхід "простого шляху" трохи схожий на додаткову вишуканість для мене. Також не забувайте, що у вас обмежений час роботи Ford-Fulkerson (де | f | обмежено сумою v -суміжних місткостей суміжних країв). O(|f||E|)|f|v
Дмитро Кордубан

Відповіді:


6

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

Припустимо, у нас є непряма мережа . Припустимо, він зберігається в структурі даних, яка дозволяє легко вставляти / видаляти вершини / дуги. Іноді ми будемо використовувати залишкову мережу G f (тобто з оновленими ємностями c f = c - f ).G=(V,E,c)Gfcf=cf

Перша частина - як обробити вершинні вставки / видалення. Це більше чи менш просто:

  1. Додайте нову вершину з відповідними краями до залишкової мережі.
  2. Знайдіть максимальний потік в оновленій залишковій мережі, використовуючи алгоритм maxflow на ваш вибір.

Для видалень все ускладнилося. Уявіть, що ми розділимо вершину ми збираємося видалити на дві половини v i n та v o u t, так що всі внутрішні дуги вказують на v i n , всі позадугові арки переходять від v o u t і ці нові вершини підключені дугою нескінченної ємності. Тоді видалення v еквівалентно видаленню дуги між v i n і v o u t . Що буде в цьому випадку? Позначимо через f vvvinvoutvinvoutvvinvoutfvпотік, що проходить через вершину . Тоді v i n буде відчувати надлишок одиниць потоку f v, а v o u t відчує дефіцит одиниць потоку f v одразу після видалення (обмеження потоку очевидно будуть порушені). Щоб знову обмежити обмеження потоку, нам слід переставити потоки, але також ми хочемо зберегти початкове значення потоку якомога вище. Подивимось спочатку, чи зможемо ми переставити без зменшення загального потоку. Щоб перевірити, чи знайти maxflow ~ f v від v i n до v o uvvinfvvoutfvfv~vin у "вирізаній" залишковій мережі (тобто без дуги, що з'єднує v i n та v o u t ). Очевидно,ми повинні зв'язати це f v . Якщо це стане рівним f v, то нам пощастить: ми переназначили потік, який проходив черезvтаким чином, що загальний потік не змінився. В іншому випадку загальний витрата повинен бути зменшений на "марне" перевищенняΔ= f v - ~ f v одиниць. Для цього тимчасово підключітьsтаtvoutvinvoutfvfvvΔ=fvfv~stдугою нескінченної ємності та запустіть алгоритм maxflow знову від до v o u t (ми повинні пов'язати потік на Δ ). Це дозволить виправити залишкову мережу і змусить обмеження потоку знову утримуватися, автоматично зменшивши загальний потік на Δ .vinvoutΔΔ

Складність часу таких оновлень може залежати від використовуваного нами алгоритму maxflow. Найгірші випадки можуть бути досить поганими, але це все-таки краще, ніж загальний перерахунок.

O(|V|2|E|)O(|E|2logCmax)


Прочитавши останню відповідь vzn, я знайшов аналогічний підхід, описаний на сторінці 90 цього .
Дмитро Кордубан

fv~fvfv~Δ

vucf(v,u)cf(u,v)f(v,u)=f(u,v)

Будь-які ідеї, як би ви це зробили, якщо хочете змінити крайню ємність?
Чет

-1

ОК, враховуючи нову інформацію та уникаючи деяких хитрих попередніх помилкових стартів / червоних рефлексів оселедців (mea culpa), ось кілька нових запитів щодо цього.

Швидке розв’язання в Інтернеті послідовності проблем з максимальним потоком з розширеннями для обчислення надійних мінімумів скорочень Дуга Альтнера та Езлема Ергуна

ця посилання враховує онлайн- послідовності МФУ та "теплі старти", тобто побудова на покрокових ЧГ до попереднього МФП. "Ми демонструємо, що наші алгоритми скорочують час роботи на порядок, коли порівнюють аналогічні коди, які використовують вирішувач MFP" чорного поля ". Зокрема, ми показуємо, що наш алгоритм для надійних мінімальних скорочень може вирішувати випадки за секунди, що вимагало б більше чотирьох годин, використовуючи чорний ящик для вирішення максимальної витрати ".


просування по проблемах, пов'язаних з максимальними потоками Альтнер, Дуглас С., Джорджія техн

У цій кандидатській дисертації 2008 р. (завантажуваний pdf) автор розглядає проблему поступового додавання дуг, яка, здається, "досить близька" до проблеми додавання нових вершин (з декількома новими дугами).

значна частина цього посилання стосується видалення частин мережі (скорочень / "заборони"), як зазначено в першій частині реферату

див. esp "IV РЕШЕННЯ ОНЛАЙНІ ПОСЛІДКІВ МАКСИМАЛЬНИХ ПОТОКІВ. ... с. 63".

p 63 "Мета цієї глави, однак, переконати читача в тому, що ітераційне використання вирішувача максимального потоку в чорній коробці для вирішення великої послідовності МФУ може призвести до величезної кількості непотрібних обчислень."

p66 "У вищезазначених додатках МПП, як правило, топологічно схожі. Тобто наступна МФП в послідовності відрізняється від попередньої додаванням або видаленням невеликої кількості дуг або передбачуваною зміною ємності локалізованого набору дуг. Більше того , при вирішенні цих примірників час і простір, необхідний для зберігання будь-якого, що не відповідає вирішенню попередньої проблеми, як правило, не є обґрунтованим. "

Автор p67 також використовує підхід "теплого початку". "Ефективна стратегія швидкого вирішення всієї онлайн-послідовності проблем оптимізації - це розробка ефективної евристики реоптимізації. З цією метою ми розробляємо модифікований алгоритм максимального потоку, розроблений для ефективного теплого запуску." "

див. esp p71, який має специфічну додаткову проблему з новою дугою:

Нова проблема повторної оптимізації максимального потоку дуги (NAMFRP)

автор розглядає більш загальні проблеми p67

Проблема з повторною оптимізацією
максимального потоку (MFROP)


-3

З деякого швидкого пошуку схоже, що онлайн-версія - це область активних досліджень. Ви не згадуєте область додатків, яка може допомогти звузити пошук літератури. Один із варіантів - шукати сферу застосування, де найбільше чи найновіше нововведення. отже, існує деяке застосування додаткового максимального потоку в системах зору та деякі алгоритми для цього; спробуйте Максимальний потік шляхом поступового пошуку по ширині в перших пошукових лабораторіях. Якщо перефразовувати вступ до цієї статті, мабуть, для прикладів зору алгоритм Бойкова та Колмогорова добре працює, і немає відомих експоненціальних часових контрприкладів, хоча за межами програм із баченням це може бути погано. тому, можливо, варто спробувати алгоритм B&K на своїх даних і побачити, як він працює &

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

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

Зростання потоку від Hartline, Sharp


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

цікаво. звучить так, що, ймовірно, слід використовувати евристику, засновану на обмеженій обробній потужності та необхідності швидких оновлень. чи можна перенести обробку з "клієнта" (у вашому випадку, мабуть, телефонів) на сервер? чи повинен кожен клієнт розраховувати іншу версію проблеми (тобто різні дані) проблеми?
vzn

В Ірані найбільша проблема - швидкість підключення до Інтернету, тому я не можу перенести його на сторону сервера. Якби це було добре (хороша швидкість), точно перерахунок не був би поганим.
Саїд

6
Я не бачу, як це відповідає на початкове запитання, яке стосується графіку, який розвивається з часом додаванням вузлів та ребер. У першому документі описаний порізний алгоритм для стандартної задачі максимального потоку з одним ударом. У другому документі описується документ про іншу проблему "покрокового максимального потоку", де набір ребер фіксується, але їх потужність з часом зростає.
Jeffε

1
@ Jɛ ff E, так, ти маєш рацію :) насправді до цього я бачу подібні статті з посиланням на документи, але, як ви сказали, вони не пов'язані з моєю проблемою, на що я посилався.
Саїд

-5

інша можливість / напрямок - це алгоритм максимального потоку " push-relabel" , який є "одним з найбільш ефективних алгоритмів максимального потоку" і може мати кращі профілі складності залежно від ваших даних. наприклад, як зазначено на сторінці вікіпедії

O(V3)O(V2EO(VElog(V2/E))


3
Знову ж таки, я не бачу, наскільки ця відповідь стосується розміщеного питання. Push-relabel - це добре відома стратегія підручника для відповіді на стандартну проблему максимального потоку.
Jeffε

так це і форд-фулкерсон ... так? & OP просить щось краще. чи знаєте ви щось, що доводить, що push-relabel гірше, ніж ford-fulkerson? її незрозумілий ОП знайомий із штовхачем. Боже, алгоритм, що з'являється в підручнику, звичайно, не є негайним критиком для відхилення відповіді тут, правда?
vzn

3
Власне, так; питання, на які відповідають у стандартних підручниках (або у вікіпедії), не є дослідницьким рівнем. Однак перше розміщене запитання про приростаючі потоки цікаве та, безумовно, за обсягом. (Відсутність остаточних відповідей говорить про те, що правильною відповіддю може бути "Хороше запитання. Ніхто не знає".)
Jeffε

vzn, дякую за ваш внесок, але: "чи знаєте ви щось, що доводить, що push-relabel гірше, ніж ford-fulkerson", це не вагомий привід розмістити його як відповідь, якщо ви знаєте, чому "push-relabel" в онлайн-алгоритмах краще ніж Ford-Falkerson добре це сказати, мені особисто подобається Ford-Falkerson через простоту, низький постійний коефіцієнт, і я знаю це з минулого. Але, як я вже говорив, я не міг сказати, що це хороший варіант у всіх випадках, також ці алгоритми не просто порівнянні, їм потрібні практичні тести.
Саїд

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