Инкрементальный максимальный поток в динамических графиках

12

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

Любая предварительная обработка, которая не занимает много времени и памяти, приветствуется.

Простейшая идея - пересчитать поток.

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

Также для удаления узла выше идея не работает.

Кроме того, я уже видел такие документы, как инкрементальный подход для ребер , но, кажется, они недостаточно хороши в этом случае, они превышают для каждого ребра и, кажется, не подходят для этого расширения (мы просто пересчитываем поток). Также в настоящее время я использую алгоритм максимального потока Форда-Фулкерсона. Если есть лучший вариант для онлайн-алгоритмов, это хорошо знать.O(m)

Saeed
источник
Не могли бы вы уточнить, «но проблема в том, что этот путь должен быть простым»? Я не получил это.
Дмитрий Кордубан
@ 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. Найдите максимальный поток в обновленной остаточной сети, используя алгоритм по вашему выбору.

vvinvoutvinvoutvvinvoutfvvvinfvvoutfvfv~vinvoutvinvoutfvfvvΔ=fvfv~stvinvoutΔΔ

Временная сложность таких обновлений может зависеть от используемого нами алгоритма 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), вот несколько новых ссылок на это.

Быстрое решение онлайн-последовательности задач с максимальным расходом с расширением до вычисления надежных минимальных сокращений Дуг Алтнер и Озлем Эргун

В этой ссылке рассматриваются онлайновые последовательности МФУ и «теплые запуски», т. е. построение дополнительных запросов к предыдущему МФУ. «Мы демонстрируем, что наши алгоритмы сокращают время выполнения на порядок при сравнении аналогичных кодов, которые используют решатель МФП черного ящика. В частности, мы показываем, что наш алгоритм для надежных минимальных сокращений может разрешать случаи за секунды, для которых потребуется более четырех часов с использованием решателя максимального потока черного ящика ".


достижения в решении проблем, связанных с максимальными потоками Altner, Douglas S., Georgia Georgia

в этой докторской диссертации 2008 года (загружаемый файл в формате pdf) автор рассматривает проблему постепенного добавления дуг, которая кажется «достаточно близкой» к проблеме добавления новых вершин (с несколькими новыми дугами).

большая часть этой ссылки касается удаления частей сети (сокращения / «запрет»), как указано в 1-й части реферата

см. esp "IV РЕШЕНИЕ ОНЛАЙН-ПОСЛЕДОВАТЕЛЬНОСТЕЙ МАКСИМАЛЬНЫХ ПОТОКОВ ... ... стр. 63".

стр. 63 «Однако цель этой главы - убедить читателя в том, что итеративное использование решателя максимального потока черного ящика для решения большой последовательности МФУ может привести к огромному количеству ненужных вычислений».

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

Автор p67 также использует подход «теплого старта». «Эффективной стратегией быстрого решения целой последовательности задач оптимизации является разработка эффективной эвристики повторной оптимизации. С этой целью мы разрабатываем модифицированный алгоритм максимального потока, который предназначен для эффективного теплого запуска». »

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

Новая проблема повторной оптимизации максимального потока (NAMFRP)

автор рассматривает более общие проблемы

Задача повторной оптимизации
максимального потока (MFROP) Задача повторной оптимизации максимального потока одной дуги (MFSAROP)

ВЗН
источник
-3

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

Вы, кажется, говорите, что инкрементный алгоритм, который является линейным по числу ребер графа, не является достаточной скоростью? но разве это не достаточно высокая эффективность? со сколькими краями вы имеете дело? может быть, подход может заключаться в том, чтобы уменьшить стоимость обхода графа, если это дорого или является существенным фактором (например, график хранится в БД по сравнению с графиком, хранящимся в памяти)

Вот интересная статья, в которой утверждается, что, хотя неинкрементный алгоритм для максимального потока находится в P, инкрементная версия является NP-полной. «Насколько нам известно, наши результаты являются первыми, кто обнаружил проблему времени P, инкрементная версия которой завершена с помощью NP».

Инкрементальный поток по Hartline, Sharp

ВЗН
источник
Спасибо, я не читал ваши ссылочные статьи, я посмотрю на них (я видел несколько статей раньше и нашел их бесполезными), но о моей проблемной области. Это проблема в реальной рабочей ситуации в фондовом маркетинге. Сложно сказать, что случилось, когда я обнаружил, что должен решить эту проблему. На самом деле я не думал, что это сложно на первый взгляд, но, попробовав некоторый код, я вижу, что это не так просто. этот алгоритм будет работать на мобильных телефонах, они не такие быстрые (и клиентам не нравится мой алгоритм :). Также иногда слишком много ребер будет приходить с новым узлом. и это узкое место.
Саид
интересный. Похоже, вам следует использовать эвристику, основанную на ограниченной вычислительной мощности и необходимости быстрых обновлений. можно ли вместо этого переместить обработку с «клиента» (в вашем случае, очевидно, с телефонов) на сервер? каждый клиент должен вычислить другую версию (то есть разные данные) проблемы?
vzn
В Иране самой большой проблемой является скорость интернет-соединения, поэтому я не могу перенести ее на серверную сторону. Если бы это было хорошо (хорошая скорость), наверняка пересчет не был бы плохим.
Саид
6
Я не понимаю, как это отвечает на исходный вопрос, который касается графика, который эволюционирует со временем путем добавления узлов и ребер. В первой статье описывается пошаговый алгоритм для стандартной задачи максимального расхода в один прием. Во второй статье описана статья для другой задачи «инкрементный максимальный поток», где набор ребер фиксирован, но их емкость со временем увеличивается.
Джефф
1
@ Jɛ ff E, да, вы правы :) на самом деле до этого я вижу документы, на которые ссылаются, но, как вы сказали, они не связаны с моей проблемой, самая близкая статья, которую я вижу до сих пор, это то, на что я ссылался.
Саид
-5

другая возможность / направление - это алгоритм максимального потока с принудительной привязкой , который является «одним из наиболее эффективных алгоритмов для максимального потока» и может иметь более сложные профили сложности в зависимости от ваших данных. например, как говорится на странице википедии

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

ВЗН
источник
3
Опять же, я не вижу, насколько этот ответ имеет отношение к опубликованному вопросу. Push-relbel - хорошо известная учебная стратегия, позволяющая ответить на стандартную проблему максимального потока.
Джефф
Так что, Форд-Фулкерсон ... верно? & OP просит что-то лучшее. Вы знаете что-то, что доказывает, что push-relbel хуже, чем ford-fulkerson? его неясный ОП знаком с push-релабель. Боже, алгоритм, показанный в учебнике, конечно, не является непосредственным критерием отклонения ответа здесь, верно?
ВЗН
3
На самом деле да; вопросы, ответы на которые содержатся в стандартных учебниках (или википедии), не относятся к уровню исследований. Тем не менее, первый опубликованный вопрос о дополнительных потоках интересен и определенно по объему. (Отсутствие окончательных ответов позволяет предположить, что правильным ответом может быть «Хороший вопрос. Никто не знает».)
Джефф
vzn, спасибо за ваш вклад, но: «знаете ли вы что-то, что доказывает, что push-relbel хуже, чем ford-fulkerson», не является веской причиной, чтобы публиковать это как ответ, если вы знаете, почему «push-relbel» в онлайн-алгоритмах лучше чем Ford-Falkerson - это хорошо сказать, мне лично нравится Ford-Falkerson из-за простоты, низкого постоянного коэффициента, и я знаю это из прошлого. Но, как я уже сказал, я не могу сказать, что это хороший вариант во всех случаях, и эти алгоритмы не просто сопоставимы, они нуждаются в практических тестах.
Саид
Посмотрите, что если у вас есть один алгоритм максимального потока, который не очень хорошо работает с вашими данными, попробуйте другой, особенно если он работает хорошо, потому что есть немало оптимизированных для разных профилей данных. Нет, это не онлайн / "вершина инкрементная", но он может работать лучше в автономном случае, если нет альтернативы. онлайн-версии, хотя они существуют, как я обнаружил выше, вероятно, будут значительно сложнее реализовать ...
vzn