Dinamik grafiklerde artımlı Maksimum Akış


12

Dinamik grafiklerde maksimum akışı hesaplamak için hızlı bir algoritma arıyorum. bir grafik verilmiş yani ve s , t V maximum akışına sahip F de G den s için t . Daha sonra yeni / eski düğüm u bir grafik G 1 oluşturmak için karşılık gelen kenarlarıyla eklenmiş / silinmiştir . Yeni oluşturulan grafikteki maksimum akış nedir? Maksimum akışı yeniden hesaplamayı önlemenin bir yolu var mı?G=(V,E)s,tVFGstuG1

Çok zaman / bellek tüketmeyen herhangi bir önişleme takdir edilmektedir.

En basit fikir akışı yeniden hesaplamaktır.

Başka bir basit fikir, önceki maksimum akış hesaplamasında kullanılan tüm artırım yollarını kaydetmek, bir noktası eklemek için , kaynaktan başlayan basit yolları (önceki adımda güncellenmiş kapasite grafiğinde) bulabiliriz, sonra v'ye gider. hedefe, ama sorun, bu yol basit olmalıdır, ben daha iyi bulamadık O ( n m ) Bu durum için, için m = | E | . (Ayrıca, yalnızca bir yol olsaydı, O ( n + m ) ' de yapılabileceğini, ancak böyle olmadığını unutmayın.)vvO(nm)m=|E|O(n+m)

Ayrıca yukarıdaki düğümü kaldırmak için fikir işe yaramaz.

Ayrıca zaten kenarlar için Artan yaklaşım gibi kağıtları gördüm , ancak bu durumda yeterince iyi görünmüyorlar, her kenar için den daha fazla ve bu durumda uygun bir uzantı gibi görünmüyor (sadece bir akışı yeniden hesaplıyoruz). Ayrıca şu anda Ford-Fulkerson maksimum akış algoritması kullanıyorum Çevrimiçi algoritmalar için daha iyi bir seçenek varsa, bunu bilmek iyidir.O(m)


"Ama sorun şu, bu yol basit olmalı" kısmını açıklığa kavuşturabilir misiniz? Ben anlamadım.
Dmytro Korduban

@ maldini.ua Aslında ben, kaynaktan gider yolu anlamına dan sonra yolun v (hariç ortak köşe olmamalıdır hedefe v ). Varsayalım v yeni eklenen düğüm. Değilse, bazı kontrolleri atlayabiliriz ve daha hızlı algoritmaya sahip olabiliriz (Ortalama olarak veya asimptotik olabilir). vvvv
Saeed

Anladım, ama bana gelince, hakkında özel bir şey değil . Bence en basit yeniden hesaplama fikri şudur: 1) artık grafiğe kenarları olan yeni tepe noktası ekleyin ; 2) seçtiğiniz maksimum akış algoritmasını kullanarak güncellenmiş artık grafikteki maksimum akışı bulun. Önerdiğiniz durumda, maksimum akış algoritması tarafından "otomatik olarak" işlenir (örneğin, herhangi bir artırım yolu bulamaz). Düğümleri kaldırmakla ilgileniyorsanız, cevap olarak yazabilirim. Not: Açıkça, yönlendirilmiş veya yönlendirilmemiş grafiğiniz var mı? v
Dmytro Korduban

@ maldini.ua, normal yeniden hesaplama ekler Mevcut çözümün karmaşıklığı, Bu yüzden iyi olduğunu düşünmüyorum (normalde çok fazla kenarın işe yaramaz olduğunu ve aslında çok yüksek performans sorununa neden olmadığını bilerek iyi olabilir), ancak kaldırma hakkında fikriniz varsa düğüm, senin fikrin görmek ilgileniyorum, Ayrıca grafik yönlendirilir. PS ama her iki durumla da ilgileniyorum. |G|
Saeed

Kalan grafikte çalıştırdığınızı unutmayın, şu anda sıfır kapasiteli çok sayıda kenar olmalıdır. Genellikle seyrek grafiklerde oldukça hızlı çalışır (en azından benim için çalıştı). Öte yandan "basit yol" yaklaşımı benim için biraz fazladan karmaşıklık gibi geliyor. Ayrıca Ford-Fulkerson için çalışma süresine bağlı olduğunu unutmayın (burada | f | v'nin bitişik kenar kapasitelerinin toplamı ile sınırlıdır ). O(|f||E|)|f|v
Dmytro Korduban

Yanıtlar:


6

Tarif edilen yaklaşım teorik olarak optimal olmayabilir. Yazar için işe yarayabilecek basit ve pratik bir çözümdür. Herhangi bir referans veremem çünkü her zaman yaygın olarak bilinen bir folklor olduğunu düşündüm, ancak garip bir şekilde cevapta kimse yayınlamadı. Ben de yaparım.

Yönlendirilmemiş bir ağımız olduğunu varsayalım . Kolay köşe / ark eklemelerine / silmelerine izin veren bir veri yapısında saklandığını varsayın. Bazen artık ağ G f'yi kullanacağız (yani güncellenmiş kapasiteler c f = c - f ).G=(V,E,c)Gfcf=cf

İlk bölüm, köşe eklemelerinin / silinmesinin nasıl işleneceğidir. Eklemeler için az çok basittir:

  1. Kalan ağa karşılık gelen kenarları olan yeni bir tepe noktası ekleyin.
  2. Seçtiğiniz bir maksimum akış algoritmasını kullanarak güncellenmiş artık ağda maksimum akışı bulun.

Silme işlemleri için işler daha karmaşık hale geldi. Biz köşe bölmek düşünün biz 2 ikiye silmek üzeresiniz v ı n ve v o u t tümünde-yaylar işaret böyle v ı n , tüm dışı yay gider v o u t ve bu yeni köşe bağlanır sonsuz kapasitede bir yay ile. Daha sonra v'nin silinmesi, v i n ve v o u t arasındaki arkın silinmesine eşdeğerdir . Bu durumda ne olacak? F v ile gösterelimvvinvoutvinvoutvvinvoutfvtepe geçen akış . Daha sonra v i n fazla f v akış birimi deneyimleyecek ve v o u t silme işleminden hemen sonra f v akış birimi yetersizliği yaşayacaktır (akış kısıtlamaları açıkça kırılacaktır). Akış kısıtlamalarının tekrar tutulmasını sağlamak için akışları yeniden düzenlemeliyiz, aynı zamanda orijinal akış değerini olabildiğince yüksek tutmak istiyoruz. Önce toplam akışı azaltmadan yeniden düzenleme yapıp yapamayacağımızı görelim. Kontrol etmek için, bir MaxFlow bulmak ~ f v den v ı n için v o uvvinfvvoutfvfv~vin "kesik" rezidüel ağda (yani v i n ve v o u t ark bağlantısı olmadan). Açıkçası f v ile sınırlamalıyız. O eşit olmak olur f v o zaman şanslı: biz geçiyordu akışını yeniden atamışvtoplam akış değiştirilmedi böyle bir şekilde. Diğer durumda toplam akış,us= f v - ~ f v birimlerinin"yararsız" fazlalığı ile azaltılmalıdır. Bunu yapmak için, geçici olaraksvetvoutvinvoutfvfvvΔ=fvfv~styeniden MaxFlow algoritması tarafından işletilen sonsuz kapasitesinin bir ark ile ve için v O u t (biz, akış bağlanmış olmalıdır Ô ). Bu, kalan ağı düzeltir ve akış kısıtlamalarının tekrar tutulmasını sağlar ve toplam akışı otomatik olarak Δ azaltır .vinvoutΔΔ

Bu tür güncellemelerin zaman karmaşıklığı, kullandığımız maksimum akış algoritmasına bağlı olabilir. En kötü vakalar oldukça kötü olabilir, ancak yine de toplam yeniden hesaplamadan daha iyidir.

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


Geçen vzn cevabını okuduktan sonra ben sayfanın 90 de anlatılan benzer bir yaklaşım buldum bu .
Dmytro Korduban

fv~fvfv~Δ

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

Bir kenar kapasitesini değiştirmek isterseniz bunu nasıl yapacağınız hakkında bir fikriniz var mı?
Chet

-1

Tamam yeni bilgileri dikkate alarak ve bazı zor önceki yanlış başlangıç ​​/ kırmızı ringa balığı refs (mea culpa) kaçınarak, işte bu konuda bazı yeni refs.

Çevrimiçi Minimum Kesintileri Hesaplamak İçin Uzantılarla Maksimum Akış Sorunlarının Çevrimiçi Sırasını Hızla Çözme Doug Altner ve Özlem Ergun

bu referans , MFP'lerin çevrimiçi dizilerini ve "sıcak başlangıçları", yani önceki bir MFP'ye artan artışlar üzerine inşa etmeyi göz önünde bulundurur . "Algoritmalarımızın, kara kutu MFP çözücü kullanan benzer kodlarla karşılaştırıldığında çalışma süresini bir büyüklükte azalttığını gösteriyoruz. Özellikle, sağlam minimum kesimler için algoritmamızın dörtten fazla süreyi gerektiren örnekleri çözebileceğini gösteriyoruz bir kara kutu maksimum akış çözücü kullanarak saat. "


maksimum akış içeren problemlerde gelişmeler Altner, Douglas S., georgia tech

bu 2008 Doktora tezinde (indirilebilir pdf) yazar, yeni köşeler (birden fazla yeni yay ile) ekleme sorununa "yeterince yakın" görünen yayların artımlı olarak eklenmesi sorununu ele almaktadır.

bu referansın çoğu, özetin 1. bölümünde belirtildiği gibi ağın bazı bölümlerini (kesintiler / "yasak") silmekle ilgilidir.

bkz. esp "IV MAKSİMUM AKIŞLARIN ÇEVRİMİÇİ SIRALAMALARINI ÇÖZME..... s63".

"Ancak bu bölümün amacı, okuyucuyu çok sayıda MFP dizisini çözmek için bir kara kutu maksimum akış çözücü kullanmanın yinelemeli olarak çok sayıda gereksiz hesaplamaya yol açabileceğine ikna etmektir."

p66 "Yukarıda belirtilen uygulamalarda, MFP'ler tipik olarak topolojik olarak benzerdir. Yani, sıradaki bir sonraki MFP, az sayıda yay ekleyerek veya çıkararak veya yerelleştirilmiş bir ark kümesinin kapasitelerini değiştirerek öncekinden farklıdır. , bu örnekleri çözerken, önceki sorunun çözümünün ötesinde herhangi bir şeyi saklamak için gereken zaman ve alan genellikle garanti edilmez. "

p67 yazarı da burada "sıcak başlangıç" yaklaşımını kullanıyor. "Tüm çevrimiçi optimizasyon problemlerini hızlı bir şekilde çözmek için etkili bir strateji, verimli yeniden optimizasyon buluşsal yöntemlerini geliştirmektir. Bu amaçla, verimli sıcak başlangıçlar için tasarlanmış değiştirilmiş bir maksimum akış algoritması geliştiriyoruz." "

yeni artımlı ark problemi olan esp p71'e bakınız:

Yeni Ark Maksimum Akış Yeniden Optimizasyon Sorunu (NAMFRP)

yazar daha genel sorunları düşünüyor p67

Maksimum Akış Yeniden Yönlendirme Sorunu (MFROP)
Maksimum Akış Tek Ark Yeniden Yönlendirme Sorunu (MFSAROP)


-3

Bazı hızlı aramalardan, çevrimiçi sürümün aktif bir araştırma alanı olduğu anlaşılıyor. literatür aramasını daraltmaya yardımcı olabilecek uygulama alanından bahsetmezsiniz. seçeneklerden biri, en yeni veya en son yeniliğin bulunduğu bir uygulama alanı aramaktır. dolayısıyla görme sistemlerinde artımlı maksimum debi uygulaması ve bunun için bazı algoritmalar vardır; microsoft araştırma laboratuvarlarında Artan Genişlik-İlk Arama ile Maksimum Akışları deneyin . Görünüşe bakılırsa Boykov ve Kolmogorov algoritması iyi bir performans sergiliyor ve vizyon uygulamalarının dışında kötü performans göstermesine rağmen bilinen üstel zamana karşı örnekler yoktur. verilerinizde B&K algoritmasını denemeye ve nasıl performans gösterdiğini görmeye değer olabilir.

grafik kenarlarında doğrusal olan artımlı bir algoritmanın yeterli hız olmadığını mı söylüyorsunuz? ama bu oldukça yüksek verimlilik değil mi? kaç kenar ile uğraşıyorsun? belki de yaklaşım pahalıysa veya önemli bir faktörse (örneğin, bellekte depolanan grafiğe karşı db'de saklanan grafik)

burada, maksimum akış için artımlı olmayan algoritma P'de iken, artımlı versiyonun NP tam olduğunu iddia eden ilginç bir makale. "Bildiğimiz kadarıyla sonuçlarımız, artımlı versiyonu NP tamamlanmış olan P-zamanı problemini ilk bulan sonuçtur."

Hartline, Sharp'ın artımlı akışı


Teşekkürler, referans yazdığınız makaleleri okumadım, onlara bir göz atacağım (daha önce birkaç makale göreceğim ve işe yaramaz buldum), ancak sorun alanım hakkında, Stok pazarlamasında gerçek çalışma durumunda bir sorun. Bu sorunu çözmem gerektiğini bulduğumda ne olduğunu söylemek biraz karmaşık. Aslında ilk bakışta zor olduğunu düşünmedim ama bazı kodları denedikten sonra o kadar kolay olmadığını görüyorum. Bu algoritma cep telefonlarında çalıştırılacak, çok hızlı değil (ve müşteriler algoritmamı sevmiyor :). Ayrıca bazen yeni düğümle çok fazla kenar geliyor. ve bu darboğaz.
Saeed

ilginç. muhtemelen sınırlı işlem gücüne ve hızlı güncelleme ihtiyacına dayanan buluşsal yöntemlerle gitmeniz gerektiği gibi geliyor. işleme "istemciden" (görünüşe göre telefonlar) sunucuya taşınabilir mi? her müşterinin sorunun farklı bir sürümünü (yani farklı veriler) hesaplaması gerekir mi?
vzn

İran'da en büyük sorun internet bağlantı hızı, bu yüzden sunucu tarafına geçemiyorum. Eğer iyi olsaydı (iyi hız), kesinlikle yeniden hesaplama kötü olmazdı.
Saeed

6
Bunun düğüm ve kenarların eklenmesiyle zamanla gelişen bir grafikle ilgili orijinal soruyu nasıl cevapladığını görmüyorum. İlk makalede, standart tek adımlık maksimum akış sorunu için artımlı bir algoritma açıklanmaktadır. İkinci kağıt , kenar kümesinin sabit olduğu, ancak kapasitelerinin zamanla büyüdüğü farklı bir "artan maksimum akış" problemi için bir kağıt tarif etmektedir .
Jeffε

1
@ Jɛ ff E, evet haklısın :) aslında daha önce referans kağıtlara benzer kağıtları görüyorum, ama sorunumla ilgili olmadığını söylediğiniz gibi, şimdiye kadar gördüğüm en yakın kağıt referans verdiğim şeydir.
Saeed

-5

diğer bir olasılık / yön, " maksimum akış için en verimli algoritmalardan biri olan" ve verilerinize bağlı olarak daha iyi karmaşıklık profillerine sahip olabilen itme-yeniden etiketleme maksimum akış algoritmasıdır. wikipedia sayfasının belirttiği gibi

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


3
Yine, bu cevabın gönderilen soru ile nasıl alakalı olduğunu görmüyorum. Push-relabel, standart maksimum akış problemini cevaplamak için iyi bilinen bir ders kitabı stratejisidir.
Jeffε

ford-fulkerson da öyle değil mi? & OP daha iyi bir şey ister. itme-etiketlemenin ford-fulkerson'dan daha kötü olduğunu kanıtlayan bir şey biliyor musunuz? net olmayan OP itme-etiketleme ile aşinadır. Tanrım, ders kitabında görünen algoritma buradaki cevabı reddetmek için kesinlikle acil bir kriter değil, değil mi?
vzn

3
Aslında evet; standart ders kitaplarında (veya wikipedia'da) cevaplanan sorular araştırma düzeyinde değildir. Bununla birlikte, artımlı akışlarla ilgili ilk yayınlanan soru ilginç ve kesinlikle kapsamlıdır. (Kesin cevapların olmaması doğru cevabın "İyi soru. Kimse bilmiyor" olabileceğini düşündürmektedir)
Jeffε

vzn, katkınız için teşekkürler, ancak: "itme-yeniden etiketlemenin ford-fulkerson'dan daha kötü olduğunu kanıtlayan bir şey biliyor musunuz" cevabı olarak göndermek için iyi bir neden değil, online algoritmalarda "itme-yeniden etiketleme" neden daha iyi Ford-Falkerson bunu söylemek güzel, ben sadelik, düşük sabit faktör nedeniyle ben şahsen Ford-Falkerson gibi ve geçmişten biliyorum. Ama dediğim gibi, her durumda iyi bir seçenek olduğunu söyleyemedim, ayrıca bu algoritmalar sadece karşılaştırılabilir değil, pratik testlere ihtiyaç duyuyorlar.
Saeed

Bakın pt, verileriniz için iyi çalışmayan bir maksimum akış algoritmanız varsa, farklı veri profilleri için oldukça az optimize edilmiş olduğu için iyi performans gösterdiği söylenen başka bir esp algoritmasını deneyin. hayır çevrimiçi değil / "artımlı köşe" ama alternatif yoksa çevrimdışı durumda daha iyi performans gösterebilir. çevrimiçi sürümler, yukarıda bulduğum gibi, onlar uygulamak önemli ölçüde zor olacak ...
vzn
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.