igraph 中尚未实现计算最小 s-t 切割

Calculating minimum s-t cuts is not implemented yet in igraph

我一直在尝试使用 R 中的 igraph 包简单地获取图形的最小切割。我从 "seeds" 数据集中读取了大约 60 行,该数据集在 UCI 数据集中用于机器学习,属于聚类类别, 分类。我只是想实现一种对未标记点进行分类的半监督方法(我故意对数据集进行了一些更改以满足我的需要)。

我使用一些启发式方法构建了一个图表,我觉得启发式方法工作正常。但是当我使用 graph.mincut 函数计算最小割时,问题就出现了。

当我运行这一行

# g is the graph I am using graph.mincut(g, value.only = FALSE)

完美returns

$value
[1] 1

$cut
[1] 144

$partition1
[1] 24

$partition2
 [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60

但是当我给出源变量和目标变量时,即

graph.mincut(g, source = 1, target = 30, value.only = FALSE)

我收到一条错误消息说

Error in graph.mincut(g, source = 1, target = 30, value.only = FALSE) : 
Calculating minimum s-t cuts is not implemented yet

如果我给出以下行

graph.mincut(g, source = 1, target = 30, value.only = TRUE)

我得到的答案是

[1] 11

如果有人能告诉我哪里出错了,我将不胜感激。

您应该可以使用 igraph 包中的 stMincuts 函数获得最小切割:

library(igraph)
set.seed(144)
g <- erdos.renyi.game(10, .5, directed=TRUE)
cut <- stMincuts(g, source=1, target=4)

现在您可以访问值:

cut$value
# [1] 4

被切割的边缘:

E(g)[cut$cuts[[1]]]
# Edge sequence:
#            
# [8]  1 -> 3
# [15] 1 -> 4
# [24] 1 -> 6
# [30] 1 -> 7

和一个分区中的顶点:

V(g)[cut$partition1s[[1]]]
# Vertex sequence:
# [1] 1

如果有多个剪切(我在此处提供的示例中有两个),您可以获得 edges/vertices,例如 cut$cuts[[2]]cut$partition1s[[2]], ...