最小费用最大流

来源:互联网 发布:cnc简单手工编程实例 编辑:程序博客网 时间:2024/04/30 04:28

最小费用最大流

    网络流的基本问题为:设一个有向赋权图G(V,E),V={s,a,b,c,…,s’},其中有两个特殊的节点s和s’。s称为发点,s’称为收点。图中各边的方向和权数表示允许的流向和最大可能的流量(容量)。问在这个网络图中从发点流出到收点汇集,最大可通过的实际流量为多少?流向的分布情况为怎样?

    设有一个网络图G(V,E),,V={s,a,b,c,…,s’},E中的每条边(i,j)对应一个容量c(i,j)与输送单位流量所需费用a(i,j)。如有一个运输方案(可行流),流量为f(i,j),则最小费用最大流问题就是这样一个求极值问题:

               

其中F为G的最大流的集合,即在最大流中寻找一个费用最小的最大流。

    确定最小费最大流的过程实际上是一个多次迭代的过程。基本思想是:从零流为初始可行流开始,在每次迭代过程中对每条边赋予与c(i,j)(容量)、a(i,j)(单位流量运输费用)、f(i,j)(现有流的流量)有关的权数ω(i,j),形成一个有向赋权图。再用求最短距离路径的方法确定由发点s至收点s’的费用最小的非饱和路,沿着该路增加流量,得到相应的新流。经过多次迭代,直至达到最大流为止。

    构造权数的方法如下:

    对任意边(i,j),根据现有的流f,该边上的流量可能增加,也可能减少。因此,每条边赋予向前费用权ω+(i,j)与向后费用权ω-(i,j):

             

           

    对于赋权后的有向图,如把权ω(i,j)看作长度,即可确定s到s’ 的费用最小的非饱和路,等价于从s到s’ 的最短路。确定了非饱和路后,就可确定该路的最大可增流量。因此需对每一条边确定一个向前可增流量△+(i,j)与向后可增流量△-(i,j):

         

               

因此,确定最小费用最大流的具体算法如下:

(1)从零流开始,令f≡0。

(2)赋权

          

          

              

              

(3)确定一条从s到s’的最短路

         R(s,s’)={(s,i1),(i1,i2),…,(ik,s’)}

R(s,s’)的长度为+∞,表明已得到最小费用最大流,则停止;否则转向(4)。

(4)确定沿着该路R(s,s’)的最大可增流量

       α=min{△(s,i1),△(i1,i2),…,△(ik,s’)}

其中根据边的取向决定取或△

(5)生成新的流

          

f(i,j)已为最小费用最大流,则停止;否则转向(2)。

 

返回

原创粉丝点击