问题描述
给定一个图网络 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 实现. 刘兴禄,熊望祺,臧永森,段宏达,曾文佳,陈伟坚.