目录
【问题描述】
图1 中的网络是,某市区一些单行道在一个下午,早些时候(以每小时车辆数目计算)的交通流量.
图1
【问题要求】
计算该网络的车流量
【背景补充】
什么是网络?
答:一个网络包含一组称为结合点或节点的点集,并由称为分支的线或弧连接部分或全部节点,留的方向在每个分支上有标示,流量(或速度)也有显示或用变量标记。
网络流的基本假设是什么?
答:网格总流入量等于总流出量,且流经一个节点的总输入等于总输出。
【例】
如图2示,x1和x2标记该节点经过其他分支的流出,因为流量在每个节点中是守恒的,我们有
x1 + x2 = 30 ,类似地,每个节点的流量可以用一个方程描述,网络分析的问题就是确定当局部信息(如网络的输入和输出) 已知时,每一分支的流量。
图2
【问题解答】
写出该流量的方程组,并求其通解。
如图3所示,标记道路交叉口(节点)和末知的分支流量。在每个交叉口,令其车辆驶入数目等于车辆驶出数目。
图3
并且,网络中的总流入量(500+300+100+400)等于总流出量(300+x,+600),经简化得
x3 = 400
该方程与上面四个方程联立并重排后得到下面的方程组:
图4
行化简相应的增广矩阵得到:
图5
该网络的车流量为:
图6
【衍生问题】
负流量代表什么?
答:网络分支中的一个负流量,对应于模型中显示方向相反的流量。
问什么不用编程求解方程组?
答:此方程系数矩阵是奇异矩阵,运行代码会报错。
【python代码展示】
# 导入所需包
from scipy import linalg
import numpy as np
# 线性方程组求解
# x1 + x2 + x3 + x4 + x5 = 800
# x1 + x2 + x3 + x4 + x5 = 300
# x1 + x2 + x3 + x4 + x5 = 500
# x1 + x2 + x3 + x4 + x5 = 600
# x1 + x2 + x3 + x4 + x5 = 400
# A表示系数矩阵
A = np.array([[1, 1, 0, 0, 0],
[0, 1, -1, 1, 0],
[0, 0, 0, 1, 1, ],
[1, 0, 0, 0, 1],
[0, 0, 1, 0, 0]])
# b表示常数列
b = np.array([800, 300, 500, 600, 400])
x = linalg.solve(A, b)
print(x)
【模型总结】
由于本问题中的道路的单行线,因此这里不允许有负值变量。
该模型仅用于解决单行线问题,在实际中应用范围窄。