حساب کاربری
​
زمان تقریبی مطالعه: 5 دقیقه
لینک کوتاه

مسئله کم‌هزینه‌ترین جریان

مسئله کم‌هزینه‌ترین جریان، پیدا کردن کم‌هزینه‌ترین راه فرستادن میزان مشخصی از جریان درون یک شبکه شاره است. حل این مسئله در زندگی روزمره کاربردهایی دارد از جمله شبکه‌های هزینه‌دار (مانند شبکه‌های مخابراتی) و هم‌چنین در مواردی که تناسب آن با مسئله خیلی مشهود نیست، مانند تعیین محل قرارگیری انبارها.

فهرست

  • ۱ تعریف
  • ۲ ارتباط با مسئله‌های دیگر
  • ۳ راه‌حل‌ها
  • ۴ کاربرد
    • ۴.۱ کم وزن ترین تطابق بیشینه دو بخشی
  • ۵ جستارهای وابسته
  • ۶ پانویس‌ها و منابع
  • ۷ پیوندهای کمکی

تعریف

یک شبکه شاره داریم که آن را با گراف جهت‌دار G = ( V , E )

با مبدا s ∈ V
و مقصد t ∈ V
که در آن یال ( u , v ) ∈ E
دارای ظرفیت c ( u , v ) > 0
، جریان f ( u , v ) ≥ 0
و هزینه a ( u , v )
می‌باشد، نشان می دهیم (اکثر الگوریتم‌های کم‌هزینه‌ترین جریان یال با هزینه منفی را پشتیبانی می‌کنند.) هزینه فرستادن این جریان f ( u , v ) ⋅ a ( u , v )
است. شما باید جریان d
را از s به t بفرستید.

تعریف مسئله کمینه کردن هزینه کل جریان است:

∑ ( u , v ) ∈ E a ( u , v ) ⋅ f ( u , v )

با شرط‌های زیر:

محدودیت ظرفیت: f ( u , v ) ≤ c ( u , v )
تقارن یک‌سویه: f ( u , v ) = − f ( v , u )
بقای جریان: ∑ w ∈ V f ( u , w ) = 0  for all  u ≠ s , t
جریان خواسته‌شده: ∑ w ∈ V f ( s , w ) = d  and  ∑ w ∈ V f ( w , t ) = d

ارتباط با مسئله‌های دیگر

حالت دیگری از این مسئله پیدا کردن جریان بیشینه‌ای است که بین جریان‌های بیشینه کم‌ترین هزینه را دارد که می‌توان آن را مسئله کم‌هزینه‌ترین بیشینه جریان نامید. این حالت در پیدا کردن کم‌هزینه‌ترین تطابق بیشینه کاربرد دارد.

در بعضی راه‌حل‌ها پیدا کردن کم‌هزینه‌ترین بیشینه جریان ساده است. در غیر این صورت، می‌توان از جستجوی دودویی روی d

استفاده کرد.

می‌توان از مسئله کم‌هزینه‌ترین گردش در حل این مسئله استفاده کرد. این کار با صفر قرار دادن کران پایین همه‌ی یال‌ها، اضافه کردن یک یال از مقصد t

به مبدا s
با ظرفیت c ( t , s ) = d
و کران پایین l ( t , s ) = d
و قرار دادن کل جریان برابر d
انجام می‌شود.

دو مسئله زیر حالات خاص این مسئله به شمار می آیند:

  • اگر محدودیت ظرفیت برداشته شود، به مسئله یافتن کوتاه‌ترین مسیر تبدیل می‌شود.
  • اگر همه هزینه‌ها صفر باشند، به مسئله بیشینه جریان تبدیل می‌شود.

راه‌حل‌ها

از آنجایی که ما تابعی خطی را بهینه میکنیم و تمام شروط خطی اند، این مسئله با استفاده از برنامه‌ریزی خطی قابل حل است.

علاوه بر آن الگوریتم‌های ترکیبیاتی مختلفی نیز وجود دارند، برای بررسی جامع تر، را ببینید. تعدادی از آن‌ها تعمیم الگوریتم بیشینه جریان هستند، بقیه روش‌های کاملاً متفاوتی استفاده میکنند.

الگوریتم‌های اساسی شناخته شده (حالت‌های زیادی دارند):

  • Cycle canceling یک روش کلی اولیه
  • Minimum mean cycle canceling یک الگوریتم ساده قویا چندجمله‌ای
  • Successive shortest path and capacity scaling روش‌های دوگانه که می‌توان آن‌ها را به عنوان تعمیم‌های الگوریتم فورد–فالکرسون در نظر گرفت.
  • Cost scaling یک روش اولیه-دوگانه، که حالت کلی الگوریتم ارسال-برچسب است.
  • Network simplex حالت خاص برنامه‌ریزی خطی غیر مرکب است که در زمان چندجمله‌ای اجرا می‌شود.
  • الگوریتم Out-of-kilter توسط D.R.Fulkerson

کاربرد

کم وزن ترین تطابق بیشینه دو بخشی

کاهش مسئله کم وزن ترین تطابق بیشینه دو بخشی به مسئله کم هزینه ترین بیشینه جریان

در گراف دو بخشی G = ( A ∪ B , E )

، میخواهیم تطابق بیشینه با کمترین هزینه را بیابیم. w: E → R را تابع وزن یال‌های گراف در نظر بگیرید. هدف از مسئله کم وزن‌ترین تطابق بیشینه دو بخشی یا مسئله تخصیص، پیدا کردن یک تطابق کامل M ⊆ E است که مجموع وزن‌هایش کمینه باشد. میخواهیم این مسئله را به یک مسئله شبکه شاره کاهش دهیم.

G ′ = ( V ′ = A ∪ B , E ′ = E )

را در نظر بگیرید. ظرفیت تمام یال‌های E ′
را 1 بگذارید. رأس مبدا s
را اضافه کرده و به تمام رئوس A ′
متصل میکنیم و رأس مقصد t
را اضافه کرده و تمام رئوس B ′
را به آن متصل میکنیم. ظرفیت تمام یال‌های جدید را یک و هزینه آن‌ها را صفر در نظر میگیریم. ثابت می‌شود که یک کم وزن‌ترین تطابق دو بخشی در G
موجود است اگر و فقط اگر یک کم هزینه‌ترین جریان در G ′
وجود داشته باشد.

جستارهای وابسته

  • LEMON (C++ library)

پانویس‌ها و منابع

  1. ^ Ravindra K. Ahuja, Thomas L. Magnanti, and James B. Orlin (1993). Network Flows: Theory, Algorithms, and Applications. Prentice-Hall, Inc. ISBN 0-13-617549-X.
  2. ^ Morton Klein (1967). "A primal method for minimal cost flows with applications to the assignment and transportation problems". Management Science. 14: 205–220.
  3. ^ Andrew V. Goldberg and Robert Tarjan (1989). "Finding minimum-cost circulations by canceling negative cycles". Journal of the ACM. 36 (4): 873–886.
  4. ^ Jack Edmonds and Richard M. Karp (1972). "Theoretical improvements in algorithmic efficiency for network flow problems". Journal of the ACM. 19 (2): 248–264.
  5. ^ Andrew V. Goldberg and Robert Tarjan (1990). "Finding minimum-cost circulations by successive approximation". Math. Oper. Res. 15 (3): 430–466.
  6. ^ James B. Orlin (1997). "A polynomial time primal network simplex algorithm for minimum cost flows". Mathematical Programming. 78: 109–129.

پیوندهای کمکی

  • LEMON C++ library with several maximum flow and minimum cost circulation algorithms
آخرین نظرات
کلیه حقوق این تارنما متعلق به فرا دانشنامه ویکی بین است.