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

时间:2015-03-31 17:48:25

标签: r igraph

我一直在尝试使用R中的igraph包来简单地获得图表的最小化。我从UCI数据集中可用的“种子”数据集中读取了大约60行,用于在Clustering,Classification类别下进行机器学习。我只是想实现一种半监督的方法来对未标记的点进行分类(我在数据集中做了一些改变,以满足我的需要)。

我使用一些启发式构建了一个图形,我觉得heauristic正常工作。但是当我使用graph.mincut函数计算min-cut时会出现问题。

当我运行此行时

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

完美回归

$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

如果有人可以通过告诉我哪里出错,我将非常感激。

1 个答案:

答案 0 :(得分:2)

您应该可以使用stMincuts包中的igraph函数获取最小值:

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

如果有多个剪辑(我在此处提供的示例中有两个剪辑),您可以使用例如cut$cuts[[2]]cut$partition1s[[2]]获取边/顶点,... < / p>