《数学模型》——最大流与最小费用流问题
一、最大流问题
许多系统包含了流量问题,如公路系统中有车辆流、物资调配系统中有物资流、金融系统中有现金流等。这些流问题都可归结为网络流问题,且都存在一个如何安排使流量最大的问题,即最大流问题。下面先介绍最大流问题的相关概念。
1.基本概念
若给定一个可行流f={fij}f=\{ f_{ij} \}f={fij},把网络中使fij=cijf_{ij}=c_{ij}fij=cij的弧称为饱和弧,使fij<cijf_{ij}<c_{ij}fij<cij的弧称为非饱和弧。把fij=0f_{ij}=0fij=0的弧称为零流弧,fij>0f_{ij}>0fij>0的弧称为非零流弧。
若μμμ是网络中联结发点vsv_svs和收点vtv_tvt的一条路,我们定义路的方向是从vsv_svs到vtv_tvt,则路上的弧被分为两类:一类是弧的方向与路的方向一致,叫做前向弧。前向弧的全体记为μ+μ^+μ+。另一类弧与路的方向相反,称为后向弧。后向弧的全体记为μ−μ^-μ−。
2.寻求最大流的标号法(Ford-Fulkerson)
从vsv_svs到vtv_tvt的一个可行流出发(若网络中没有给定fff,则可以设fff是零流),经过标号过程与调整过程,即可求得从vsv_svs到vtv_tvt的最大流。这两个过程的步骤分述如下:
(1)标号过程
在下面的算法中,每个顶点vxv_xvx的标号值有两个,vxv_xvx的第一个标号值表示在可能的增广路上,vxv_xvx的前驱顶点;vxv_xvx的第二个标号值记为σxσ_xσx,表示在可能的增广路上可以调整的流量。
(2)增流过程
①令vy=vtv_y=v_tvy=vt。
②若vyv_yvy的标号为(vx,σt)(v_x,σ_t)(vx,σt),则fxy=fxy+σtf_{xy}=f_{xy}+σ_tfxy=fxy+σt;若vyv_yvy的标号为(−vx.σt)(-v_x.σ_t)(−vx.σt),则fyx=fyx−σtf_{yx}=f_{yx}-σ_tfyx=fyx−σt。
③若vy=vsv_y=v_svy=vs,把全部标号去掉,并回到标号过程(1)。否则,令vy=vxv_y=v_xvy=vx,并回到増流过程的步骤②