【发布时间】:2019-08-16 10:16:00
【问题描述】:
给定一个单源单汇容量网络,如何使用 igraph 计算maximum-bottleneck path(也称为最宽路径或最大容量路径问题)?
我已经读过(例如here 甚至使用伪代码there),可以对 Dijkstra 的算法进行一些修改,但我不想深入研究算法开发,而是使用 igraph。
例子
library(igraph)
set.seed(21)
nodes = cbind(
'id' = c('Fermenters', 'Methanogens', 'carbs', 'CO2', 'H2', 'other', 'CH4', 'H2O')
)
from <- c('carbs', rep('Fermenters', 3), rep('Methanogens', 2), 'CO2', 'H2')
to <- c('Fermenters', 'other', 'CO2', 'H2', 'CH4', 'H2O', rep('Methanogens', 2))
weight <- sample(1 : 20, 8)
links <- data.frame(from, to, weight, stringsAsFactors = FALSE)
net = graph_from_data_frame(links, vertices = nodes, directed = T)
## Calculate max-bottleneck here !
# # disabled because just vis
# plot(net, edge.width = E(net)$weight)
# require(networkD3)
# require(tidyverse)
#
# d3net <- igraph_to_networkD3(net, group = rep(1, 8))
# forceNetwork(
# Links = mutate(d3net$links, weight = E(net)$weight), Nodes = d3net$nodes,
# Source = 'source', Target = 'target',
# NodeID = 'name', Group = "group", Value = "weight",
# arrows = TRUE, opacity = 1, opacityNoHover = 1
# )
那么对于示例,我将如何计算从carbs 到H2O 的最大容量路径?
【问题讨论】:
-
Max-Flow 解决了一个相关但恕我直言不同的问题,即计算 2 个顶点之间的最大可能流。我感兴趣的问题是关于在加权图中找到两个指定顶点之间的路径,最大化路径中最小权重边的权重。(复制自维基百科)。跨度>
标签: r igraph graph-theory