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 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 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)
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)
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 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)
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()
# -*- coding: utf-8 -*- """ Created on Thu Oct 29 12:45:00 2015 @author: Pankaj """ import numpy as np import matplotlib.pyplot as plt import scipy.sparse import scipy as sp from scipy import linalg from scipy import sparse as sps from scipy.sparse import linalg as spla from apgl.graph import * from apgl.generator.KroneckerGenerator import KroneckerGenerator initialGraph = SparseGraph(VertexList(5, 1)) initialGraph.addEdge(1, 2) initialGraph.addEdge(2, 3) for i in range(5): initialGraph.addEdge(i,i) k=2 generator = KroneckerGenerator(initialGraph, k) graph = generator.generate()