问题描述
给定一个图网络
G
=
(
V
,
E
)
G=(V, E)
G=(V,E),网络中连边的权重代表最大容量,在这个图中找出从起点到终点流量最大的路径。
数学建模
集合:
I
I
I:点的集合;
E
E
E:边的集合。
常量:
d
e
d_e
de:边
e
e
e上的最大容量;
变量:
x
e
x_e
xe:
e
e
e这条边的流量;
f
f
f:最大流量。
数学模型:
m
a
x
f
s
.
t
.
∑
e
∈
o
u
t
(
i
)
x
e
−
∑
e
∈
i
n
(
i
)
x
e
=
{
f
,
i
=
s
−
f
,
i
=
t
0
,
e
l
s
e
0
≤
x
e
≤
d
e
,
∀
e
∈
E
max f \\ s.t. \sum_{e\in out(i)}x_e - \sum_{e\in in(i)}x_e = \begin{cases} f, i=s\\ -f, i=t\\ 0, else \end{cases} \\ 0 \leq x_e \leq d_e,\forall e \in E
maxfs.t.e∈out(i)∑xe−e∈in(i)∑xe=⎩
⎨
⎧f,i=s−f,i=t0,else0≤xe≤de,∀e∈E
目标函数表示最大化流量;
约束表示:将网络中的节点分成了3类,源点流出-流入的流量为f,终点流出-流入的流量为-f,其它点保持流入流出平衡。此外,每条边上的流量不能超过这条边的最大容量。
问题求解
方式一:扔给求解器;
方式二:Ford-fulkerson(FFA)算法
参考资料
- 运筹优化常用算法、模型及案例实战:Python+Java 实现. 刘兴禄,熊望祺,臧永森,段宏达,曾文佳,陈伟坚.