R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题

2020-11-11 11:57:50 浏览数 (1)

原文链接:http://tecdat.cn/?p=17635

我们根据一些论文中提到的示例,使用最大流最小割定理将流量拥塞降至最低, 并应用了最短路径分析了交通瓶颈。

我们可以在下面看到

代码语言:javascript复制



map=openp(map)
plot(map)
points(t(m[3:2,]),col="black", pch=19, cex=3

要提取有关边缘容量的信息,在该网络上使用以下代码,该代码将从论文中提取三个表

代码语言:javascript复制



extract_tab(location)

在Windows中,要先下载另一个软件包

代码语言:javascript复制


library(devtools)


extract_tab(locatio

现在我们可以得出具有容量的数据框

代码语言:javascript复制


B1=as.data.frame(out[[2]])
B2=as.data.frame(out[[3


capacity=as.character(B2$V3[-1])
capacity[6]="843"
ic(capacity)

我们可以在地图上添加这些边

代码语言:javascript复制


plot(map)
points(t(m[3:2,]),col="black", pch=1


for(i in 1:nrow(E)){
i1=which(B$i==as.character(E$from
]))
segments(B[i1,"x"],B[i1,"y"],B[i2,


text(t(m[3:2,]),c("s",1:10,"t"),col="white")

要获得具有容量的图形,可以使用另一种方法

代码语言:javascript复制

g=graph_from_data_frame(E)
E(g)$label=E$capacity
plot(g)

但是它不考虑节点的地理位置。可以使用

代码语言:javascript复制

plot(g, layout=as.matrix(B[,c("x","y")]))

为了更好地了解道路通行能力,使用

代码语言:javascript复制

plot(g, layout=as.matrix(B[,c("x","y")]),
edge.width=E$capacity/200)

通过具有容量的网络,目标是确定该网络上从源到宿的最大流量。可以使用R

代码语言:javascript复制

$value
[1] 2571


$flow
[1] 10 142 130 23 0 2

我们的最大流量为2571,这与两篇论文中的最大流量最小割定理以及 最短路径的应用中都实际要求的不同 ,因为表格和图表上的值不同。

代码语言:javascript复制


E$flux1=m$flow
plot(g, layout=as.matrix(B[,c("x","y")]),

考虑采用更简单的流程,但是相同的全局值

代码语言:javascript复制





E(g)$label=E$flux2
plot(g, layout=as.matrix(B[,c("x","y")]),
edge.width=E$flux2/200)

实际上,有可能在同一城市的另一篇论文中做同样的事情,这是道路网络的交通拥堵问题。

代码语言:javascript复制





dim(out[[3]])
B1=a
ame(from=B1[2:61,"V2"],
to=B1[2:6
as.numeric(
as.characte
data_frame(E)
m=max_flow(graph=g,
source="S",


E$flux1=m$flow
E(g)$label=E


edge.width=E$flux1/200,
edge.arrow.size=0.15)

此处的最大流量值为4017,就像原始论文中发现的那样


0 人点赞