def testDegreeDistribution(self): #We want to see how the degree distribution changes with kronecker powers numVertices = 3 numFeatures = 0 vList = VertexList(numVertices, numFeatures) initialGraph = SparseGraph(vList) initialGraph.addEdge(0, 1) initialGraph.addEdge(1, 2) for i in range(numVertices): initialGraph.addEdge(i, i) logging.debug((initialGraph.outDegreeSequence())) logging.debug((initialGraph.degreeDistribution())) k = 2 generator = KroneckerGenerator(initialGraph, k) graph = generator.generate() logging.debug((graph.outDegreeSequence())) logging.debug((graph.degreeDistribution())) k = 3 generator = KroneckerGenerator(initialGraph, k) graph = generator.generate() logging.debug((graph.degreeDistribution()))
def KroneckerEdgeList(n): init = SparseGraph(4) init[0, 1] = 1 init[0, 2] = 1 init[0, 3] = 1 for i in range(4): init[i, i] = 1 k = int(log(n, 4)) + 1 generator = KroneckerGenerator(init, k) graph = generator.generate() l, _ = graph.adjacencyList() return convertAdjListToEdgeList(l)
def testGenerate(self): k = 2 numVertices = 1000 numFeatures = 0 vList = VertexList(numVertices, numFeatures) initialGraph = SparseGraph(vList) initialGraph.addEdge(0, 1) initialGraph.addEdge(1, 2) for i in range(numVertices): initialGraph.addEdge(i, i) generator = KroneckerGenerator(initialGraph, k) graph = generator.generate() print (graph.size)
def testGenerate(self): k = 2 numVertices = 3 numFeatures = 0 vList = VertexList(numVertices, numFeatures) initialGraph = SparseGraph(vList) initialGraph.addEdge(0, 1) initialGraph.addEdge(1, 2) for i in range(numVertices): initialGraph.addEdge(i, i) d = initialGraph.diameter() degreeSequence = initialGraph.outDegreeSequence() generator = KroneckerGenerator(initialGraph, k) graph = generator.generate() d2 = graph.diameter() degreeSequence2 = graph.outDegreeSequence() self.assertTrue((numpy.kron(degreeSequence, degreeSequence) == degreeSequence2).all()) self.assertTrue(graph.getNumVertices() == numVertices**k) self.assertTrue( graph.getNumDirEdges() == initialGraph.getNumDirEdges()**k) self.assertEquals(d, d2) #Try different k k = 3 generator.setK(k) graph = generator.generate() d3 = graph.diameter() degreeSequence3 = graph.outDegreeSequence() self.assertTrue((numpy.kron(degreeSequence, degreeSequence2) == degreeSequence3).all()) self.assertTrue(graph.getNumVertices() == numVertices**k) self.assertTrue( graph.getNumDirEdges() == initialGraph.getNumDirEdges()**k) self.assertEquals(d, d3) #Test the multinomial degree distribution logging.debug(degreeSequence) logging.debug(degreeSequence2) logging.debug(degreeSequence3)
initialGraph = SparseGraph(VertexList(5, 1)) initialGraph.addEdge(1, 2) initialGraph.addEdge(2, 3) initialGraph.addEdge(1, 4) initialGraph.addEdge(2, 4) initialGraph.addEdge(1, 3) initialGraph.addEdge(0, 1) for i in range(5): initialGraph.addEdge(i, i) ## Now we are using the seed graph to recrusively generate a kronecker graph that has ## 5^5 = 3125 vertexes k = 6 generator = KroneckerGenerator(initialGraph, k) graph = generator.generate() ## Number of runs runs = 10000 # In[3]: x = graph.adjacencyMatrix() # In[4]: # plt.figure(figsize=(12,12)) # plt.matshow(x,cmap=plt.cm.gray) # plt.show()