美文网首页数学建模艺术【散人】数学建模数学建模课程笔记
【数学建模算法】(12)图的应用:最大流问题(上)

【数学建模算法】(12)图的应用:最大流问题(上)

作者: 热爱学习的高老板 | 来源:发表于2019-08-14 18:30 被阅读1次

    1.最大流问题的数学描述

    1.1图中的流

    定义 在以V为节点集,A为弧集的有向图G=(V, A)上定义如下的权函数:
    1.L : A\rightarrow R为弧上的权函数,弧(i, j) \in A对应的权L(i, j)记为l_{i j},称为弧(i,j)容量下界
    2.U : A \rightarrow R为弧上的权函数,弧(i, j) \in A对应的权U(i, j)记为u_{i j},称为弧(i,j)容量上界,或直接称为容量
    3.D : V\rightarrow R为顶点上的权函数,节点i \in V对应的权D(i)记为d_{i},称为顶点i的供需量。
    此时构成的网络称为流网络,可以记为:
    N=(V, A, L, U, D)

    由于我们只讨论V,A优先级和的情况,所以对于弧上的权函数L,U和顶点上的权函数D,可以直接用所有弧上对应的权和顶点上的权组成的有限维向量表示,因此L, U, D有时直接称为权向量,或简称权。由于给定有向图G=(V, A),我们总是可以在它的弧集合和顶点集合上定义各种权函数,所以流网络一般也直接简称为网络

    在流网络中弧(i,j)的容量下界l_{i j}和容量上界u_{i j}表示的物理意义是:通过该弧发送某种“物质”时,必须发送最少数量为l_{i j},而发送的最大数量为u_{i j},顶点i \in V对应的供需量d_{i}则表示该顶点从网络外部获得的“物质”数量(d_{i}>0时),或从该顶点发送到网络外部的“物质数量”(d_{i}<0时)。下面我们给出严格定义。

    定义:对于流网络N=(V, A, L, U, D)其上的一个流f是指从N的弧集A到R的一个函数,即对每条弧赋予一个实数f_{i j}(称为弧(i,j)的流量)。如果流f满足:
    \sum_{j :(i, j) \in A} f_{i j}-\sum_{j :(j, i) \in A} f_{j i}=d_{i}, \quad \forall i \in V\quad(1)
    l_{i j} \leq f_{i j} \leq u_{i j}, \quad \forall(i, j) \in A\quad(2)
    则称f可行流,至少存在一个可行流的网络称为可行网络,约束(1)称为流量守恒条件(也称流量平衡条件),约束(2)称为容量约束。

    可见,当d_{i}>0时,表示有d_{i}个单位的流量从该顶点流失到网络外部,因此顶点i称为供应点。同理d_{i}<0的点称为吸收点。特殊地,当d_{i}=0,改点称为转运点平衡点

    一般来说,我们总是假设容量下界为0,所以约束2可改为:
    0 \leq f_{i j} \leq u_{i j}, \quad \forall(i, j) \in A

    1.2.饱和弧,非饱和弧和空弧

    定义:在流网络N=(V, A, U, D)中,对于流f,如果
    f_{i j}=0, \quad \forall(i, j) \in A
    则称f零流,否则为非零流,如果某条弧(i,j)上的流量等于其容量\left(f_{i j}=u_{i j}\right),则称该弧为饱和弧;如果某条弧(i,j)上的流量小于其容量\left(f_{i j}<u_{i j}\right),则称该弧为非饱和弧;如果某条弧(i,j)上的流量为0\left(f_{i j}=0\right),则称该弧为空弧

    2.最大流问题

    2.1.问题的定义和辅助定理

    考虑如下流网络N=(V, A, U, D);节点s为网络中唯一的源点,t为唯一的汇点,而其他节点为转运点。如果网络中存在可行流f,此时称流f的流量为d_{s}(自然也等于-d_{t}),通常记为vv(f),即
    v=v(f)=d_{s}=-d_{t}
    对于这种单源单汇的网路,如果我们并不给定d_{s}d_{t}(流量不给定),则网络一般记为N=(s, t, V, A, U)。最大流问题就是在N=(s, t, V, A, U)中找到流值最大的可行流(即最大流)。我们将会看到,最大流问题的许多算法也可以用来求解流量给定的网络中的可行流。也就是说,当我们解决了最大流问题以后,对于在流量给定的网络中寻找可行流的问题,通常也就可以解决了。

    用线性规划的方法,可将最大流问题描述如下:
    \max v
    \text { s.t. } \sum_{j :(i, j) \in A} f_{i j}-\sum_{j : j, i \in A} f_{j i}=\left\{\begin{array}{ll}{v,} & {i=s} \\ {-v,} & {i=t} \\ {0,} & {i \neq s, t}\end{array}\right.
    0 \leq f_{i j} \leq u_{i j}, \quad \forall(i, j) \in A

    为了解决这个问题,给出一些定义和定理:

    全幺模矩阵(全单位模矩阵):如果一个矩阵A的任何子方阵的行列式的值都是0,1,-1,则称A是全幺模的,或称A是全幺模矩阵

    整流定理:最大流问题所对应的约束矩阵是全幺模矩阵。若所有弧容量均为正整数,则问题的最优解为整数解。

    最大流问题虽然是一个线性规划问题,但是其可以利用图的优点,解决这个问题的方法较之线性规划的一般方法要方便,直观得多。

    2.2.单源和单汇运输网络

    实际问题往往是多源多汇网络,为了计算的规格化,可将多源多汇网络G化成单源单汇网络G^{\prime}。设XG的源,YG的汇

    具体转化方法如下:
    1.在原图G中增加两个新的顶点xy,令为新图G^{\prime}中之单源和单汇,则G中所有顶点V成为G^{\prime}的中间顶点集。
    2.用一条容量为\infty的弧把x连接到X的每个顶点。
    3.用一条容量为\infty的弧把Y中的每个顶点连接到y

    GG^{\prime}中的流以一个简单的方式相互对应。若fG中的流,则由:
    f^{\prime}(a)=\left\{\begin{array}{l}{f(a)} ,若a是G的弧\\ {f^{+}(v)} ,若a=(x,v)\\ {f^{-}(v)},若a=(v,y)\end{array}\right.
    所定义的函数f^{\prime}G^{\prime}中使得v\left(f^{\prime}\right)=v(f)的流,这里f^{+}(v)表示流出v的流量,f^{-}(v)表示流入v的流量(在G中)。

    2.3.最大流和最小割关系

    N=(s, t, V, A, U), S \subset V, s \in S, t \in V-S,则称(S, \overline{S})为网络的一个割,其中\overline{S}=V-S, \quad(S, \overline{S})为尾在S,头在\overline{S}的弧集,称
    C(S, \overline{S})=\sum_{(i, j) \in A \atop i \in S, j \in \overline{S}} u_{i j}
    为割(S, \overline{S})的容量。

    定理f是最大流,(S, \overline{S})是容量最小的割的充要条件是
    v(f)=C(S, \overline{S})

    在网络N=(s, t, V, A, U)中,对于轨\left(s, v_{2}, \cdots, v_{n-1}, t\right)(此轨是无向的),若v_{i} v_{i+1} \in A,则称它为前向弧;若v_{i+1} v_{i} \in A,则称它为后向弧。

    在网络N中,从st的轨P上,若对所有的前向弧(i,j)都有f_{i j}<u_{i j},对所有的后向弧(i,j)恒有f_{i j}>0,则称这条轨P为从st的关于f的可増广轨。


    \delta_{i j}=\left\{\begin{array}{l}{u_{i j}-f_{i j}},当(i,j)为前向弧 \\ {f_{i j}},当(i,j)为后向弧\end{array}\right.
    \delta=\min \left\{\delta_{i j}\right\}
    则在这条可增广轨上每条前向弧的流都可以增加一个量\delta, 而相应的后向弧的流可减少\delta ,这样就可使得网络的流量获得增加,同时可以使每条弧的流量不超过它的容量,而且保持为正,也不影响其它弧的流量。总之,网络中f可增广轨的存在是有意义的,因为这意味着f不是最大流。

    相关文章

      网友评论

        本文标题:【数学建模算法】(12)图的应用:最大流问题(上)

        本文链接:https://www.haomeiwen.com/subject/tkubjctx.html