Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python IGRAPHE误认子同构?_Python_Graph_Igraph_Isomorphism - Fatal编程技术网

Python IGRAPHE误认子同构?

Python IGRAPHE误认子同构?,python,graph,igraph,isomorphism,Python,Graph,Igraph,Isomorphism,我有点困在我的图表问题上,我不是这方面的专家,我想我应该求助于互联网。我有两个图A和B,我想检查B是否是A的子图。我试着用IGRAPHE做这个,但它似乎声称B是A的子图,即使它不是。以下是一个示例,说明了这一点: from igraph import * def func(g1, g2, e1, e2): if g1.es[e1]["color"] == g2.es[e2]["color"]: return True else: return F

我有点困在我的图表问题上,我不是这方面的专家,我想我应该求助于互联网。我有两个图A和B,我想检查B是否是A的子图。我试着用IGRAPHE做这个,但它似乎声称B是A的子图,即使它不是。以下是一个示例,说明了这一点:

from igraph import *

def func(g1, g2, e1, e2):
    if g1.es[e1]["color"] == g2.es[e2]["color"]:
        return True
    else:
        return False


a = Graph(4, directed=True)
a.add_edge(0,1,color=1)
a.add_edge(1,2,color=1)
a.add_edge(2,3,color=1)
a.add_edge(0,2,color=2)
a.add_edge(2,0,color=2)
a.add_edge(1,3,color=2)
a.add_edge(3,1,color=2)

b = Graph(2, directed=True)
b.add_edge(0,1,color=1)
b.add_edge(0,1,color=2)
b.add_edge(1,0,color=2)

t = a.get_subisomorphisms_vf2( other=b, edge_compat_fn=func)
print t
程序将打印“[[0,2],[1,3]]”

我认为B不是a的子同构,因为从顶点0开始的color=1线没有连接到顶点2,但igraph似乎忽略了这一点。我是做错了什么还是这是igraph中的一个bug?我将PythonIGraph0.6.5与Python2.6.5结合使用

编辑:我认为在这里可以忽略颜色。我的问题是,在图A中有一个从第0个顶点到第1个顶点的链接,因此B不是子图,因为这需要(在图A中)第0个顶点直接连接到第2个顶点


Edit2:我怀疑我真正想要的是“诱导子图同构”

回想一下子图的定义:

图G'的图顶点和图边构成给定图G的图顶点和图边的子集

这里出现的情况是,您的有向多重图没有被igraph识别(我不太了解igraph,不知道是否支持有向多重图)。从(0,1,color=2)可以看出,图形B上的第二条边只是从(0,1,color=1)重新分配的颜色

如果这是真的,那么您的输出t完全有意义。这确实是两个子图同构。这里的同构不考虑边着色,除非您明确地这样做。如果需要,在调用get_子同构s_vf2时,您必须更新代码以添加edge_color1和edge_color2


你的要求是什么?您想解决什么问题?

谢谢大家的意见。igraph似乎忽略了多条边,但这里介绍了一种解决方法。

感谢您的评论。我只想确定B是否是a的子图(顶点不可区分),同时考虑颜色。我知道igraph并没有覆盖第二条边——当我打印图形时,它会正确地显示它,并带有两种颜色的线条。但我不知道亚同构码是否有问题。实际上,我不确定颜色在这里是否很重要——我的问题是,在图A中,第0个顶点连接到顶点1和2,因此它不能将两个顶点的图作为子同构。不客气!您是否尝试根据api参数添加edge_color1和edge_color2?抱歉,我认为颜色与讨论无关。我尝试获取子同构s_vf2(其他=b,边颜色1=a.es[“颜色”],边颜色2=b.es[“颜色”],边颜色fn=func),但得到了相同的结果。这是正确的答案,igraph在计算子图同构时忽略了多条边。