Incremental Maximum Flow dalam grafik Dinamis

12

Saya mencari algoritma cepat untuk menghitung aliran maksimum dalam grafik dinamis. yaitu diberi grafik dan s , t V kita memiliki aliran maksimum F dalam G dari s ke t . Kemudian simpul baru / lama u ditambahkan / dihapus dengan tepi yang sesuai untuk membentuk grafik G 1 . Berapakah aliran maksimum dalam grafik yang baru dibuat? Apakah ada cara untuk mencegah penghitungan ulang aliran maksimum?G=(V,E)s,tVFGstuG1

Setiap preprocessing yang tidak terlalu memakan waktu / memori dihargai.

Ide paling sederhana adalah menghitung ulang alurnya.

Gagasan sederhana lainnya adalah karena ini, simpan semua jalur penambahan yang digunakan dalam perhitungan aliran maksimum sebelumnya, untuk menambahkan vertex , kita dapat menemukan jalur sederhana (dalam grafik kapasitas yang diperbarui dengan langkah sebelumnya) yang dimulai dari sumber, pergi ke v kemudian pergi ke tujuan, tetapi masalahnya adalah, jalan ini harus sederhana, saya tidak dapat menemukan lebih baik daripada O ( n m ) untuk kasus ini, untuk m = | E | . (Perhatikan juga bahwa jika hanya satu jalur, ini bisa dilakukan dalam O ( n + m ) tetapi tidak demikian.)vvO(nm)m=|E|O(n+m)

Juga untuk menghapus simpul di atas ide tidak berfungsi.

Saya juga sudah melihat makalah seperti pendekatan inkremental untuk edge , tetapi tampaknya mereka tidak cukup baik dalam hal ini, lebih dari untuk setiap edge dan sepertinya tidak cocok untuk kasus ini (kami hanya menghitung ulang aliran). Juga saat ini saya menggunakan algoritma aliran maksimum Ford-Fulkerson. Jika ada pilihan yang lebih baik untuk algoritma online, ada baiknya mengetahuinya.O(m)

Saeed
sumber
Bisakah Anda menjelaskan bagian "tetapi masalahnya adalah, jalan ini harus sederhana"? Saya tidak mengerti.
Dmytro Korduban
@ maldini.ua, Sebenarnya maksud saya, Path yang pergi dari sumber ke dan kemudian path dari v ke tujuan seharusnya tidak memiliki titik umum (kecuali v ) Asumsikan v adalah simpul baru yang ditambahkan. Jika tidak, kami dapat melewati beberapa pemeriksaan dan kami dapat memiliki algoritma yang lebih cepat (rata-rata, atau mungkin asimptotik). vvvv
Saeed
Mengerti, tetapi bagi saya itu bukan sesuatu yang istimewa tentang . Saya pikir ide penghitungan ulang yang paling sederhana adalah sebagai berikut: 1) tambahkan simpul baru dengan tepi ke grafik residual ; 2) menemukan aliran maksimum dalam grafik residu yang diperbarui menggunakan algoritma aliran maksimum pilihan Anda. Kasing yang Anda sarankan akan diproses "secara otomatis" oleh algoritma aliran maksimum (katakanlah, tidak akan menemukan jalur penambahan, dll.). Jika Anda tertarik untuk menghapus node, saya dapat menuliskannya sebagai jawaban. PS Untuk menjadi jelas, apakah Anda telah mengarahkan atau mengarahkan grafik? v
Dmytro Korduban
@ maldini.ua, penghitungan ulang normal menambahkan kompleksitas untuk solusi saat ini, Jadi saya tidak berpikir itu baik (mungkin baik dengan mengetahui bahwa biasanya terlalu banyak tepi tidak berguna dan pada kenyataannya itu tidak menyebabkan masalah kinerja yang sangat tinggi), tetapi Jika Anda memiliki ide tentang menghapus simpul, saya tertarik untuk melihat ide Anda, Juga grafik diarahkan. PS tapi saya tertarik pada kedua kasus. |G|
Saeed
Ingat Anda menjalankannya dalam grafik residual, harus ada banyak tepi kapasitas nol saat ini. Biasanya ini bekerja sangat cepat terutama dalam grafik yang jarang (setidaknya ini berhasil bagi saya). Di sisi lain pendekatan "jalur sederhana" terdengar agak seperti kecanggihan ekstra bagi saya. Juga jangan lupa Anda memiliki terikat pada waktu berjalan untuk Ford-Fulkerson (di mana | f | dibatasi oleh jumlah dari v 's kapasitas tepi yang berdekatan). O(|f||E|)|f|v
Dmytro Korduban

Jawaban:

6

Pendekatan yang dijelaskan mungkin tidak optimal secara teoritis. Ini hanyalah solusi praktis sederhana yang dapat bekerja untuk penulis. Saya tidak dapat memberikan referensi apa pun karena saya selalu berpikir itu adalah cerita rakyat yang dikenal luas, tetapi anehnya tidak ada yang mempostingnya dalam jawaban. Jadi saya melakukannya.

Asumsikan kita memiliki jaringan tidak diarahkan . Asumsikan disimpan dalam struktur data yang memungkinkan penyisipan / penghapusan vertex / arc dengan mudah. Kadang-kadang kita akan menggunakan sisa jaringan G f (yaitu dengan kapasitas diperbarui c f = c - f ).G=(V,E,c)Gfcf=cf

Bagian pertama adalah bagaimana memproses penyisipan / penghapusan titik. Ini lebih atau kurang mudah untuk dimasukkan:

  1. Tambahkan simpul baru dengan tepi yang sesuai ke jaringan residual.
  2. Temukan aliran maksimum di jaringan residu yang diperbarui menggunakan algoritma maxflow pilihan Anda.

Untuk penghapusan hal menjadi lebih rumit. Bayangkan kita membagi simpul kita akan menghapus menjadi 2 bagian v i n dan v o u t sehingga semua di-busur poin ke v i n , semua keluar-busur pergi dari v o u t dan simpul baru ini terhubung oleh busur kapasitas tak terbatas. Kemudian penghapusan v setara dengan penghapusan busur antara v i n dan v o u t . Apa yang akan terjadi dalam kasus ini? Masing menunjukkan Let oleh f vvvinvoutvinvoutvvinvoutfvaliran melewati titik . Kemudian v i n akan mengalami kelebihan f v unit aliran dan v o u t akan mengalami kekurangan f v unit aliran tepat setelah penghapusan (kendala aliran akan jelas rusak). Untuk membuat kendala aliran ditahan lagi, kita harus mengatur ulang aliran, tetapi juga kita ingin menjaga nilai aliran asli setinggi mungkin. Mari kita lihat dulu apakah kita bisa melakukan penataan ulang tanpa mengurangi total aliran. Untuk memeriksa yang menemukan maxflow ~ f v dari v i n ke v o uvvinfvvoutfvfv~vin di "dipotong" jaringan residual (yaitu tanpa busur yang menghubungkan v i n dan v o u t ). Kita harus terikat dengan f v jelas. Jika hal itu terjadi untuk menjadi sama dengan f v maka kita beruntung: kami telah ditugaskan kembali aliran yang melewativsedemikian rupa bahwa total aliran tidak berubah. Dalam kasus lain aliran total harus dikurangi oleh kelebihan "tidak berguna" dariΔ= f v - ~ f v unit. Untuk melakukan itu, sementara connectsdantvoutvinvoutfvfvvΔ=fvfv~stoleh busur kapasitas tak terbatas dan menjalankan algoritma Maxflow lagi dari ke v o u t (kita harus terikat aliran oleh Δ ). Itu akan memperbaiki jaringan sisa dan membuat kendala aliran ditahan lagi, secara otomatis mengurangi aliran total sebesar Δ .vinvoutΔΔ

Kompleksitas waktu dari pembaruan tersebut mungkin tergantung pada algoritma maxflow yang kami gunakan. Namun, kasus terburuk mungkin sangat buruk, tetapi masih lebih baik daripada penghitungan ulang total.

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

Dmytro Korduban
sumber
Setelah membaca jawaban vzn terakhir saya telah menemukan pendekatan yang sama dijelaskan pada halaman 90 ini .
Dmytro Korduban
fv~fvfv~Δ
vucf(v,u)cf(u,v)f(v,u)=f(u,v)
Adakah ide bagaimana Anda akan melakukan ini jika Anda ingin mengubah kapasitas tepi?
Chet
-1

ok dengan mempertimbangkan info baru & menghindari beberapa referensi awal yang salah / arahan herring merah yang rumit (mea culpa), berikut adalah beberapa referensi baru tentang hal ini.

Memecahkan Urutan Online dari Masalah Aliran Maksimum dengan Ekstensi untuk Menghitung Pemotongan Minimum yang Kuat Doug Altner dan Özlem Ergun

referensi ini mempertimbangkan urutan online MFP dan "pemanasan awal" yaitu membangun pada chgs tambahan ke MFP sebelumnya. "Kami mendemonstrasikan bahwa algoritme kami mengurangi waktu berjalan dengan urutan besarnya bila dibandingkan dengan kode serupa yang menggunakan pemecah MFP kotak hitam. Secara khusus, kami menunjukkan bahwa algoritme kami untuk pemotongan minimum yang kuat dapat menyelesaikan contoh dalam detik yang akan membutuhkan lebih dari empat jam menggunakan pemecah aliran maksimum kotak hitam. "


kemajuan pada masalah yang melibatkan arus maksimum Altner, Douglas S., teknologi georgia

dalam tesis Phd 2008 ini (pdf dapat diunduh) penulis mempertimbangkan masalah penambahan busur yang tampaknya "cukup dekat" dengan masalah menambahkan simpul baru (dengan beberapa busur baru).

banyak dari referensi ini berkaitan dengan penghapusan bagian-bagian jaringan (pemotongan / "larangan") sebagaimana dinyatakan dalam bagian pertama dari abstrak

lihat esp "IV MEMECAHKAN URUTAN ONLINE DARI ALIRAN MAKSIMUM.... p63".

p 63 "Namun, tujuan bab ini adalah untuk meyakinkan pembaca bahwa secara iteratif menggunakan pemecah aliran maksimum kotak-hitam untuk menyelesaikan urutan besar MFP dapat menyebabkan sejumlah besar perhitungan yang tidak perlu."

p66 "Dalam aplikasi yang disebutkan di atas, MFP biasanya secara topologi serupa. Yaitu, MFP berikutnya dalam urutan berbeda dari yang sebelumnya dengan menambahkan atau menghapus sejumlah kecil busur atau dengan cara mengubah kapasitas set busur yang dilokalkan. Selain itu , ketika memecahkan contoh ini, waktu dan ruang yang dibutuhkan untuk menyimpan apa pun di luar solusi untuk masalah sebelumnya biasanya tidak beralasan. "

p67 penulis juga menggunakan pendekatan "mulai hangat" di sini. "Strategi yang efektif untuk menyelesaikan secara cepat seluruh rangkaian masalah optimisasi online adalah mengembangkan heuristik reoptimisasi yang efisien. Untuk itu, kami mengembangkan algoritma aliran maksimum yang dimodifikasi yang dirancang untuk pemanasan awal yang efisien." "

lihat esp p71 yang memiliki masalah arc baru tambahan:

Masalah Optimalisasi Aliran Maksimum Bus Baru (NAMFRP)

penulis menganggap masalah yang lebih umum hal

Masalah Optimalisasi Aliran Maksimum (MFROP) Masalah
Maksimalisasi Arc Tunggal Aliran Maksimal (MFSAROP)

vzn
sumber
-3

dari beberapa pencarian cepat sepertinya versi online adalah area penelitian aktif. Anda tidak menyebutkan area aplikasi yang mungkin membantu mempersempit pencarian literatur. satu pilihan adalah mencari area aplikasi di mana ada inovasi terbaru atau paling. karenanya ada beberapa aplikasi aliran maks tambahan dalam sistem visi & beberapa algoritma untuknya di sana; coba Arus Maksimum dengan Pencarian Pertama yang Luasnya Tambahan di laboratorium riset microsoft. parafrase pengantar untuk makalah ini, tampaknya untuk contoh visi algoritma Boykov dan Kolmogorov bekerja dengan baik & tidak ada contoh tandingan waktu eksponensial yang diketahui meskipun di luar aplikasi penglihatan, kinerjanya buruk. jadi mungkin ada baiknya mencoba algoritma B&K pada data Anda & melihat bagaimana kinerjanya &

Anda tampaknya mengatakan bahwa algoritma inkremental yang linier dalam jumlah tepi grafik tidak cukup? tetapi bukankah itu efisiensi yang cukup tinggi? berapa banyak sisi yang Anda hadapi? mungkin pendekatannya mungkin untuk mengurangi biaya melintasi grafik jika itu mahal atau faktor yang signifikan (misalnya grafik yang disimpan dalam db vs grafik yang disimpan dalam memori)

di sini adalah makalah yang menarik yang berpendapat bahwa sementara algoritma nonincremental untuk aliran max dalam P versi incremental adalah NP lengkap. "Sejauh pengetahuan kami, hasil kami adalah yang pertama menemukan masalah waktu-P yang versi tambahannya adalah NP lengkap."

Aliran tambahan oleh Hartline, Sharp

vzn
sumber
Terima kasih, saya tidak membaca makalah yang direferensikan, saya akan memeriksanya (saya melihat beberapa makalah sebelumnya dan menganggapnya tidak berguna), tetapi tentang area masalah saya, Ini adalah masalah dalam situasi kerja nyata dalam pemasaran saham. Agak sulit untuk mengatakan apa yang terjadi ketika saya menemukan bahwa saya harus menyelesaikan masalah ini. Sebenarnya saya tidak berpikir itu sulit pada pandangan pertama tetapi setelah mencoba beberapa kode saya melihat itu tidak begitu mudah. algoritma ini akan dijalankan di ponsel, mereka tidak begitu cepat (dan pelanggan tidak suka algoritma saya :). Terkadang juga terlalu banyak tepi yang datang dengan simpul baru. dan ini adalah hambatan.
Saeed
menarik. sepertinya Anda harus menggunakan heuristik berdasarkan kekuatan pemrosesan yang terbatas dan kebutuhan untuk pembaruan yang cepat. dapatkah proses dipindahkan dari "klien" (dalam kasus Anda ternyata telepon) ke server? apakah setiap klien harus menghitung versi yang berbeda (yaitu data yang berbeda) dari masalahnya?
vzn
Di Iran, masalah terbesar adalah kecepatan koneksi internet, Jadi saya tidak bisa memindahkannya ke sisi server. Jika itu baik-baik saja (kecepatan baik), pasti perhitungan ulang tidak akan buruk.
Saeed
6
Saya tidak melihat bagaimana ini menjawab pertanyaan asli, yaitu tentang grafik yang berkembang seiring waktu dengan penambahan node dan edge. Makalah pertama menjelaskan algoritma inkremental untuk masalah maxflow satu-shot standar. Makalah kedua menggambarkan kertas untuk berbeda masalah "tambahan Maxflow", di mana set tepi adalah tetap tetapi kapasitas mereka tumbuh dari waktu ke waktu.
Jeffε
1
@ Jɛ ff E, ya Anda benar :) sebenarnya sebelum itu saya melihat makalah yang mirip dengan makalah yang dirujuk, tetapi seperti yang Anda katakan tidak terkait dengan masalah saya, sebagian besar makalah yang dekat yang saya lihat sampai sekarang adalah yang saya rujuk.
Saeed
-5

kemungkinan / arah lain adalah algoritma aliran maksimum push-relabel yang merupakan "salah satu algoritma paling efisien untuk aliran maksimum" dan dapat memiliki profil kompleksitas yang lebih baik tergantung pada data Anda. mis. sebagai status halaman wikipedia

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

vzn
sumber
3
Sekali lagi, saya tidak melihat bagaimana jawaban ini relevan dengan pertanyaan yang diposting. Push-relabel adalah strategi buku teks terkenal untuk menjawab masalah aliran maksimum standar.
Jeffε
begitu juga ford-fulkerson ... benar? & OP meminta sesuatu yang lebih baik. apakah Anda tahu sesuatu yang membuktikan push-relabel lebih buruk daripada ford-fulkerson? OP yang tidak jelas akrab dengan push-relabel. Ya ampun, algoritma yang muncul di buku teks tentu bukan kriteria langsung untuk menolak jawaban di sini, kan?
vzn
3
Sebenarnya ya; pertanyaan yang dijawab di buku teks standar (atau wikipedia) bukan tingkat penelitian. Namun, pertanyaan pertama yang diposting tentang aliran tambahan menarik dan pasti dalam cakupannya. (Kurangnya jawaban pasti menunjukkan bahwa jawaban yang benar mungkin adalah "Pertanyaan yang bagus. Tidak ada yang tahu.")
Jeffε
vzn, terima kasih atas kontribusi Anda, tetapi: "apakah Anda tahu sesuatu yang membuktikan push-relabel lebih buruk daripada ford-fulkerson" bukan alasan yang baik untuk mempostingnya sebagai jawaban, Jika Anda tahu mengapa "push-relabel" dalam algoritma online lebih baik daripada Ford-Falkerson yang baik untuk mengatakannya, saya pribadi suka Ford-Falkerson karena kesederhanaan, faktor konstan yang rendah, dan saya tahu itu dari masa lalu. Tapi seperti yang saya katakan, saya tidak bisa mengatakan itu pilihan yang baik dalam semua kasus, juga algoritma ini tidak bisa dibandingkan, mereka membutuhkan tes praktis.
Saeed
lihat pt adalah bahwa jika Anda memiliki satu algoritma aliran maksimum yang tidak berjalan dengan baik untuk data Anda, coba yang lain terutama yang dikatakan berkinerja baik karena ada beberapa dioptimalkan untuk profil data yang berbeda. tidak itu tidak online / "incremental vertex" tetapi mungkin berkinerja lebih baik untuk kasus offline jika tidak ada alternatif. versi online ketika mereka ada seperti yang saya temukan di atas, kemungkinan akan sangat sulit untuk diterapkan ...
vzn