コード例 #1
0
class TestGraphLadder(unittest.TestCase):
    def setUp(self):
        self.N = 8  # number of nodes
        self.G = Graph(self.N)
        self.edges = [
            Edge(0, 1, 2),
            Edge(0, 2, 1),
            Edge(2, 3, 5),
            Edge(1, 3, 3),
            Edge(2, 4, 4),
            Edge(3, 5, 6),
            Edge(4, 6, 7),
            Edge(4, 5, 8),
            Edge(5, 7, 9),
            Edge(6, 7, 10)
        ]
        for edge in self.edges:
            self.G.add_edge(edge)

    def test_basic(self):
        self.assertFalse(self.G.is_directed())
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), len(self.edges))

    def test_edges(self):
        for edge in self.edges:
            self.assertTrue(self.G.has_edge(edge))
            self.assertEqual(self.G.weight(edge), edge.weight)
        self.assertFalse(self.G.has_edge(Edge(0, 3)))
        self.assertEqual(self.G.weight(Edge(0, 3)), 0)  # no edge

    def test_del(self):
        self.assertEqual(self.G.e(), 10)
        self.G.del_node(7)
        self.assertEqual(self.G.e(), 8)
        self.G.del_node(2)
        self.assertEqual(self.G.e(), 5)

    def test_adjacent(self):
        for node in self.G.iteradjacent(0):
            self.assertTrue(node in [1, 2])
        for node in self.G.iteradjacent(2):
            self.assertTrue(node in [0, 3, 4])

    def tearDown(self):
        pass
コード例 #2
0
 def test_add_graph_undirected(self):
     T = Graph(self.N)
     for node in self.nodes:
         T.add_node(node)
     T.add_edge(Edge("A", "D", 9))
     self.assertEqual(T.v(), self.N)
     self.assertEqual(T.e(), 1)
     self.G.add_graph(T)
     self.assertEqual(self.G.v(), self.N)
     self.assertEqual(self.G.e(), 6)
コード例 #3
0
ファイル: test_graphs.py プロジェクト: ufkapano/graphs-dict
 def test_add_graph_undirected(self):
     T = Graph(self.N)
     for node in self.nodes:
         T.add_node(node)
     T.add_edge(Edge("A", "D", 9))
     self.assertEqual(T.v(), self.N)
     self.assertEqual(T.e(), 1)
     self.G.add_graph(T)
     self.assertEqual(self.G.v(), self.N)
     self.assertEqual(self.G.e(), 6)
コード例 #4
0
class TestTreeCenter(unittest.TestCase):
    def setUp(self):
        self.N = 7  # number of nodes
        self.G = Graph(self.N)
        self.nodes = range(self.N)
        self.edges = [
            Edge(0, 1),
            Edge(1, 2),
            Edge(1, 4),
            Edge(3, 4),
            Edge(4, 5),
            Edge(5, 6)
        ]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)

    def test_center_one(self):
        self.assertEqual(self.G.e(), self.N - 1)
        algorithm = TreeCenter(self.G)
        algorithm.run()
        self.assertEqual(algorithm.tree_center, [4])
        self.assertEqual(algorithm.tree_radius, 2)

    def test_center_two(self):
        self.G.add_edge(Edge(6, 7))
        algorithm = TreeCenter(self.G)
        algorithm.run()
        self.assertEqual(algorithm.tree_center, [4, 5])
        self.assertEqual(algorithm.tree_radius, 3)

    def test_center_two2(self):
        T = Graph(2)
        T.add_edge(Edge(0, 1))
        algorithm = TreeCenter(T)
        algorithm.run()
        self.assertEqual(algorithm.tree_center, [0, 1])
        self.assertEqual(algorithm.tree_radius, 1)

    def test_cycle(self):
        self.G.add_edge(Edge(2, 4))
        algorithm = TreeCenter(self.G)
        self.assertRaises(ValueError, algorithm.run)

    def test_directed_graph(self):
        self.G.directed = True
        self.assertRaises(ValueError, TreeCenter, self.G)

    def tearDown(self):
        pass
コード例 #5
0
ファイル: test_graphs.py プロジェクト: ufkapano/graphs-dict
class TestGraphLadder(unittest.TestCase):

    def setUp(self):
        self.N = 8           # number of nodes
        self.G = Graph(self.N)
        self.edges = [
            Edge(0, 1, 2), Edge(0, 2, 1), Edge(2, 3, 5),
            Edge(1, 3, 3), Edge(2, 4, 4), Edge(3, 5, 6), Edge(4, 6, 7),
            Edge(4, 5, 8), Edge(5, 7, 9), Edge(6, 7, 10)]
        for edge in self.edges:
            self.G.add_edge(edge)

    def test_basic(self):
        self.assertFalse(self.G.is_directed())
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), len(self.edges))

    def test_edges(self):
        for edge in self.edges:
            self.assertTrue(self.G.has_edge(edge))
            self.assertEqual(self.G.weight(edge), edge.weight)
        self.assertFalse(self.G.has_edge(Edge(0, 3)))
        self.assertEqual(self.G.weight(Edge(0, 3)), 0)  # no edge

    def test_del(self):
        self.assertEqual(self.G.e(), 10)
        self.G.del_node(7)
        self.assertEqual(self.G.e(), 8)
        self.G.del_node(2)
        self.assertEqual(self.G.e(), 5)

    def test_adjacent(self):
        for node in self.G.iteradjacent(0):
            self.assertTrue(node in [1, 2])
        for node in self.G.iteradjacent(2):
            self.assertTrue(node in [0, 3, 4])

    def tearDown(self): pass
コード例 #6
0
class TestTreeCenter(unittest.TestCase):

    def setUp(self):
        self.N = 7           # number of nodes
        self.G = Graph(self.N)
        self.nodes = range(self.N)
        self.edges = [
            Edge(0, 1), Edge(1, 2), Edge(1, 4),
            Edge(3, 4), Edge(4, 5), Edge(5, 6)]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)

    def test_center_one(self):
        self.assertEqual(self.G.e(), self.N-1)
        algorithm = TreeCenter(self.G)
        algorithm.run()
        self.assertEqual(algorithm.tree_center, [4])
        self.assertEqual(algorithm.tree_radius, 2)

    def test_center_two(self):
        self.G.add_edge(Edge(6, 7))
        algorithm = TreeCenter(self.G)
        algorithm.run()
        self.assertEqual(algorithm.tree_center, [4, 5])
        self.assertEqual(algorithm.tree_radius, 3)

    def test_center_two2(self):
        T = Graph(2)
        T.add_edge(Edge(0, 1))
        algorithm = TreeCenter(T)
        algorithm.run()
        self.assertEqual(algorithm.tree_center, [0, 1])
        self.assertEqual(algorithm.tree_radius, 1)

    def test_cycle(self):
        self.G.add_edge(Edge(2, 4))
        algorithm = TreeCenter(self.G)
        self.assertRaises(ValueError, algorithm.run)

    def test_directed_graph(self):
        self.G.directed = True
        self.assertRaises(ValueError, TreeCenter, self.G)

    def tearDown(self): pass
コード例 #7
0
class TestGraphUndirected(unittest.TestCase):
    def setUp(self):
        self.N = 4  # number of nodes
        self.G = Graph(self.N)
        self.nodes = ["A", "B", "C", "D"]
        self.edges = [
            Edge("A", "B", 2),
            Edge("B", "C", 4),
            Edge("C", "A", 6),
            Edge("C", "D", 3),
            Edge("D", "B", 5)
        ]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)
        #self.G.show()

    def test_undirected(self):
        self.assertFalse(self.G.is_directed())
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 5)
        self.G.del_node("B")
        self.assertEqual(self.G.v(), 3)
        self.assertEqual(self.G.e(), 2)

    def test_iteredges(self):
        inedges_B = list(self.G.iterinedges("B"))
        outedges_B = list(self.G.iteroutedges("B"))
        #print inedges_B, outedges_B
        self.assertEqual(len(inedges_B), 3)
        self.assertEqual(len(outedges_B), 3)

    def test_iteredges_connected(self):
        start_edge = next(self.G.iteredges())
        A = set([start_edge.source, start_edge.target])
        for edge in self.G.iteredges_connected(start_edge):
            B = set([edge.source, edge.target])
            self.assertTrue(len(A & B) > 0)
            A.update(B)
            #print ( A )

    def test_copy(self):
        T = self.G.copy()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_transpose(self):
        T = self.G.transpose()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(~edge))

    def test_complement(self):
        T = self.G.complement()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.N * (self.N - 1) / 2 - self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertFalse(self.G.has_edge(edge))
        for edge in self.G.iteredges():
            self.assertFalse(T.has_edge(edge))

    def test_subgraph(self):
        T = self.G.subgraph(["A", "B", "C"])
        self.assertEqual(T.v(), 3)
        self.assertEqual(T.e(), 3)
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_degree(self):
        self.assertEqual(self.G.degree("A"), 2)
        self.assertEqual(self.G.degree("B"), 3)
        self.assertEqual(self.G.degree("C"), 3)
        self.assertEqual(self.G.degree("D"), 2)

    def test_add_graph_undirected(self):
        T = Graph(self.N)
        for node in self.nodes:
            T.add_node(node)
        T.add_edge(Edge("A", "D", 9))
        self.assertEqual(T.v(), self.N)
        self.assertEqual(T.e(), 1)
        self.G.add_graph(T)
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 6)

    def test_load_save(self):
        name1 = "undirected_graph.txt"
        name2 = "undirected_graph.lgl"
        name3 = "undirected_graph.ncol"
        self.G.save(name1)
        self.G.save_lgl(name2)
        self.G.save_ncol(name3)
        T = Graph.load(name1)
        self.assertEqual(self.G, T)

    def tearDown(self):
        pass
コード例 #8
0
class TestGraphDirected(unittest.TestCase):
    def setUp(self):
        self.N = 4  # number of nodes
        self.G = Graph(self.N, directed=True)
        self.nodes = ["A", "B", "C", "D"]
        self.edges = [
            Edge("A", "B", 2),
            Edge("B", "C", 4),
            Edge("C", "A", 6),
            Edge("C", "D", 3),
            Edge("D", "B", 5)
        ]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)
        #self.G.show()

    def test_directed(self):
        self.assertTrue(self.G.is_directed())
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 5)
        self.G.del_node("B")
        self.assertEqual(self.G.v(), 3)
        self.assertEqual(self.G.e(), 2)

    def test_cmp(self):
        T = Graph(self.N)
        self.assertFalse(T == self.G, "directed and undirected graphs")
        T = Graph(self.N, directed=True)
        for node in ["A", "B", "C", "X"]:
            T.add_node(node)
        self.assertFalse(T == self.G, "nodes are different")
        T.del_node("X")
        self.assertFalse(T == self.G, "numbers of nodes are different")
        T.add_node("D")
        T.add_edge(Edge("A", "B", 2))
        T.add_edge(Edge("B", "C", 4))
        T.add_edge(Edge("C", "A", 6))
        T.add_edge(Edge("C", "D", 3))
        self.assertFalse(T == self.G, "edge numbers are different")
        T.add_edge(Edge("D", "B", 7))
        self.assertFalse(T == self.G, "edge weights are different")
        T.del_edge(Edge("D", "B", 7))
        T.add_edge(Edge("B", "D", 5))
        self.assertFalse(T == self.G, "edge directions are different")
        T.del_edge(Edge("B", "D", 5))
        T.add_edge(Edge("D", "B", 5))
        self.assertTrue(T == self.G, "graphs are the same")

    def test_iteredges(self):
        inedges_B = list(self.G.iterinedges("B"))
        outedges_B = list(self.G.iteroutedges("B"))
        #print inedges_B, outedges_B
        self.assertEqual(len(inedges_B), 2)
        self.assertEqual(len(outedges_B), 1)

    def test_copy(self):
        T = self.G.copy()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_transpose(self):
        T = self.G.transpose()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(~edge))

    def test_complement(self):
        T = self.G.complement()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.N * (self.N - 1) - self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertFalse(self.G.has_edge(edge))
        for edge in self.G.iteredges():
            self.assertFalse(T.has_edge(edge))

    def test_subgraph(self):
        T = self.G.subgraph(["A", "B", "C"])
        self.assertEqual(T.v(), 3)
        self.assertEqual(T.e(), 3)
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_add_graph_directed(self):
        T = Graph(self.N, directed=True)
        for node in self.nodes:
            T.add_node(node)
        T.add_edge(Edge("A", "D", 9))
        self.assertEqual(T.v(), self.N)
        self.assertEqual(T.e(), 1)
        self.G.add_graph(T)
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 6)

    def test_degree(self):
        self.assertEqual(self.G.indegree("A"), 1)
        self.assertEqual(self.G.indegree("B"), 2)
        self.assertEqual(self.G.indegree("C"), 1)
        self.assertEqual(self.G.indegree("D"), 1)
        self.assertEqual(self.G.outdegree("A"), 1)
        self.assertEqual(self.G.outdegree("B"), 1)
        self.assertEqual(self.G.outdegree("C"), 2)
        self.assertEqual(self.G.outdegree("D"), 1)

    def test_exceptions(self):
        self.assertRaises(ValueError, self.G.add_edge, Edge("A", "A", 1))
        self.assertRaises(ValueError, self.G.add_edge, Edge("A", "B", 2))
        self.assertRaises(ValueError, self.G.degree, "A")

    def tearDown(self):
        pass
コード例 #9
0
ファイル: test_graphs.py プロジェクト: ufkapano/graphs-dict
class TestGraphUndirected(unittest.TestCase):

    def setUp(self):
        self.N = 4           # number of nodes
        self.G = Graph(self.N)
        self.nodes = ["A", "B", "C", "D"]
        self.edges = [
            Edge("A", "B", 2), Edge("B", "C", 4), Edge("C", "A", 6),
            Edge("C", "D", 3), Edge("D", "B", 5)]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)
        #self.G.show()

    def test_undirected(self):
        self.assertFalse(self.G.is_directed())
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 5)
        self.G.del_node("B")
        self.assertEqual(self.G.v(), 3)
        self.assertEqual(self.G.e(), 2)

    def test_iteredges(self):
        inedges_B = list(self.G.iterinedges("B"))
        outedges_B = list(self.G.iteroutedges("B"))
        #print inedges_B, outedges_B
        self.assertEqual(len(inedges_B), 3)
        self.assertEqual(len(outedges_B), 3)

    def test_copy(self):
        T = self.G.copy()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_transpose(self):
        T = self.G.transpose()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(~edge))

    def test_complement(self):
        T = self.G.complement()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.N*(self.N-1)/2 - self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertFalse(self.G.has_edge(edge))
        for edge in self.G.iteredges():
            self.assertFalse(T.has_edge(edge))

    def test_subgraph(self):
        T = self.G.subgraph(["A", "B", "C"])
        self.assertEqual(T.v(), 3)
        self.assertEqual(T.e(), 3)
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_degree(self):
        self.assertEqual(self.G.degree("A"), 2)
        self.assertEqual(self.G.degree("B"), 3)
        self.assertEqual(self.G.degree("C"), 3)
        self.assertEqual(self.G.degree("D"), 2)

    def test_add_graph_undirected(self):
        T = Graph(self.N)
        for node in self.nodes:
            T.add_node(node)
        T.add_edge(Edge("A", "D", 9))
        self.assertEqual(T.v(), self.N)
        self.assertEqual(T.e(), 1)
        self.G.add_graph(T)
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 6)

    def test_load_save(self):
        name1 = "undirected_graph.txt"
        name2 = "undirected_graph.lgl"
        name3 = "undirected_graph.ncol"
        self.G.save(name1)
        self.G.save_lgl(name2)
        self.G.save_ncol(name3)
        T = Graph.load(name1)
        self.assertEqual(self.G, T)

    def tearDown(self): pass
コード例 #10
0
ファイル: test_graphs.py プロジェクト: ufkapano/graphs-dict
class TestGraphDirected(unittest.TestCase):

    def setUp(self):
        self.N = 4           # number of nodes
        self.G = Graph(self.N, directed=True)
        self.nodes = ["A", "B", "C", "D"]
        self.edges = [
            Edge("A", "B", 2), Edge("B", "C", 4), Edge("C", "A", 6),
            Edge("C", "D", 3), Edge("D", "B", 5)]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)
        #self.G.show()

    def test_directed(self):
        self.assertTrue(self.G.is_directed())
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 5)
        self.G.del_node("B")
        self.assertEqual(self.G.v(), 3)
        self.assertEqual(self.G.e(), 2)

    def test_cmp(self):
        T = Graph(self.N)
        self.assertFalse(T == self.G, "directed and undirected graphs")
        T = Graph(self.N, directed=True)
        for node in ["A", "B", "C", "X"]:
            T.add_node(node)
        self.assertFalse(T == self.G, "nodes are different")
        T.del_node("X")
        self.assertFalse(T == self.G, "numbers of nodes are different")
        T.add_node("D")
        T.add_edge(Edge("A", "B", 2))
        T.add_edge(Edge("B", "C", 4))
        T.add_edge(Edge("C", "A", 6))
        T.add_edge(Edge("C", "D", 3))
        self.assertFalse(T == self.G, "edge numbers are different")
        T.add_edge(Edge("D", "B", 7))
        self.assertFalse(T == self.G, "edge weights are different")
        T.del_edge(Edge("D", "B", 7))
        T.add_edge(Edge("B", "D", 5))
        self.assertFalse(T == self.G, "edge directions are different")
        T.del_edge(Edge("B", "D", 5))
        T.add_edge(Edge("D", "B", 5))
        self.assertTrue(T == self.G, "graphs are the same")

    def test_iteredges(self):
        inedges_B = list(self.G.iterinedges("B"))
        outedges_B = list(self.G.iteroutedges("B"))
        #print inedges_B, outedges_B
        self.assertEqual(len(inedges_B), 2)
        self.assertEqual(len(outedges_B), 1)

    def test_copy(self):
        T = self.G.copy()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_transpose(self):
        T = self.G.transpose()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(~edge))

    def test_complement(self):
        T = self.G.complement()
        self.assertEqual(T.v(), self.G.v())
        self.assertEqual(T.e(), self.N*(self.N-1) - self.G.e())
        for node in T.iternodes():
            self.assertTrue(self.G.has_node(node))
        for edge in T.iteredges():
            self.assertFalse(self.G.has_edge(edge))
        for edge in self.G.iteredges():
            self.assertFalse(T.has_edge(edge))

    def test_subgraph(self):
        T = self.G.subgraph(["A", "B", "C"])
        self.assertEqual(T.v(), 3)
        self.assertEqual(T.e(), 3)
        for edge in T.iteredges():
            self.assertTrue(self.G.has_edge(edge))

    def test_add_graph_directed(self):
        T = Graph(self.N, directed=True)
        for node in self.nodes:
            T.add_node(node)
        T.add_edge(Edge("A", "D", 9))
        self.assertEqual(T.v(), self.N)
        self.assertEqual(T.e(), 1)
        self.G.add_graph(T)
        self.assertEqual(self.G.v(), self.N)
        self.assertEqual(self.G.e(), 6)

    def test_degree(self):
        self.assertEqual(self.G.indegree("A"), 1)
        self.assertEqual(self.G.indegree("B"), 2)
        self.assertEqual(self.G.indegree("C"), 1)
        self.assertEqual(self.G.indegree("D"), 1)
        self.assertEqual(self.G.outdegree("A"), 1)
        self.assertEqual(self.G.outdegree("B"), 1)
        self.assertEqual(self.G.outdegree("C"), 2)
        self.assertEqual(self.G.outdegree("D"), 1)

    def test_exceptions(self):
        self.assertRaises(ValueError, self.G.add_edge, Edge("A", "A", 1))
        self.assertRaises(ValueError, self.G.add_edge, Edge("A", "B", 2))
        self.assertRaises(ValueError, self.G.degree, "A")

    def tearDown(self): pass
コード例 #11
0
ファイル: timeit_tsp.py プロジェクト: kgashok/graphs-dict
E = V * (V - 1) // 2  # number of edges
G = Graph(n=V, directed=False)
for i in range(V):
    G.add_node((random.random(), random.random()))
for source in G.iternodes():
    for target in G.iternodes():
        if source < target:
            x0, y0 = source
            x1, y1 = target
            weight = math.hypot(x1 - x0, y1 - y0)
            G.add_edge(Edge(source, target, weight))
#G.show()

print("Calculate parameters ...")
print("Nodes: {} {}".format(G.v(), V))
print("Edges: {} {}".format(G.e(), E))
print("Directed: {}".format(G.is_directed()))
print("Delta: {}".format(max(G.degree(node) for node in G.iternodes())))

print("Testing BruteForceTSPWithGraph ...")
t1 = timeit.Timer(lambda: BruteForceTSPWithGraph(G).run())
print("{} {} {}".format(V, E, t1.timeit(1)))  # single run

print("Testing NearestNeighborTSPWithGraph ...")
t1 = timeit.Timer(lambda: NearestNeighborTSPWithGraph(G).run())
print("{} {} {}".format(V, E, t1.timeit(1)))  # single run

print("Testing RepeatedNearestNeighborTSPWithGraph ...")
t1 = timeit.Timer(lambda: RepeatedNearestNeighborTSPWithGraph(G).run())
print("{} {} {}".format(V, E, t1.timeit(1)))  # single run
コード例 #12
0
ファイル: test_treeplot.py プロジェクト: kgashok/graphs-dict
class TestTreePlot(unittest.TestCase):
    def setUp(self):
        self.N = 7  # number of nodes
        self.G = Graph(self.N)
        self.nodes = range(self.N)
        self.edges = [
            Edge(0, 1),
            Edge(1, 2),
            Edge(1, 4),
            Edge(3, 4),
            Edge(4, 5),
            Edge(5, 6)
        ]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)

    def test_tree_plot(self):
        self.assertEqual(self.G.e(), self.N - 1)
        algorithm = TreePlot(self.G)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), self.N)
        #print algorithm.point_dict

    def test_tree_plot_radius_angle(self):
        self.assertEqual(self.G.e(), self.N - 1)
        algorithm = TreePlotRadiusAngle(self.G)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), self.N)
        #print algorithm.point_dict
        self.assertEqual(
            algorithm.point_dict, {
                0: (2, Fraction(1, 2)),
                1: (1, Fraction(1, 1)),
                2: (2, Fraction(3, 2)),
                3: (1, Fraction(3, 1)),
                4: (0, Fraction(3, 1)),
                5: (1, Fraction(5, 1)),
                6: (2, Fraction(5, 1))
            })

    def test_tree_three_nodes(self):
        T = Graph(3)
        for node in (0, 1, 2):
            T.add_node(node)
        for edge in (Edge(0, 1), Edge(1, 2)):
            T.add_edge(edge)
        algorithm = TreePlot(T)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), 3)
        #print algorithm.point_dict

    def test_tree_three_nodes_radius_angle(self):
        T = Graph(3)
        for node in (0, 1, 2):
            T.add_node(node)
        for edge in (Edge(0, 1), Edge(1, 2)):
            T.add_edge(edge)
        algorithm = TreePlotRadiusAngle(T)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), 3)
        #print algorithm.point_dict
        self.assertEqual(algorithm.point_dict, {
            0: (1, Fraction(3, 2)),
            1: (0, Fraction(3, 1)),
            2: (1, Fraction(9, 2))
        })

    def tearDown(self):
        pass
コード例 #13
0
ファイル: test_treeplot.py プロジェクト: ufkapano/graphs-dict
class TestTreePlot(unittest.TestCase):

    def setUp(self):
        self.N = 7           # number of nodes
        self.G = Graph(self.N)
        self.nodes = range(self.N)
        self.edges = [
            Edge(0, 1), Edge(1, 2), Edge(1, 4),
            Edge(3, 4), Edge(4, 5), Edge(5, 6)]
        for node in self.nodes:
            self.G.add_node(node)
        for edge in self.edges:
            self.G.add_edge(edge)

    def test_tree_plot(self):
        self.assertEqual(self.G.e(), self.N-1)
        algorithm = TreePlot(self.G)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), self.N)
        #print algorithm.point_dict

    def test_tree_plot_radius_angle(self):
        self.assertEqual(self.G.e(), self.N-1)
        algorithm = TreePlotRadiusAngle(self.G)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), self.N)
        #print algorithm.point_dict
        self.assertEqual(algorithm.point_dict,
            {0: (2, Fraction(1, 2)),
            1: (1, Fraction(1, 1)), 
            2: (2, Fraction(3, 2)), 
            3: (1, Fraction(3, 1)), 
            4: (0, Fraction(3, 1)), 
            5: (1, Fraction(5, 1)), 
            6: (2, Fraction(5, 1))})

    def test_tree_three_nodes(self):
        T = Graph(3)
        for node in (0, 1, 2):
            T.add_node(node)
        for edge in (Edge(0, 1), Edge(1, 2)):
            T.add_edge(edge)
        algorithm = TreePlot(T)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), 3)
        #print algorithm.point_dict

    def test_tree_three_nodes_radius_angle(self):
        T = Graph(3)
        for node in (0, 1, 2):
            T.add_node(node)
        for edge in (Edge(0, 1), Edge(1, 2)):
            T.add_edge(edge)
        algorithm = TreePlotRadiusAngle(T)
        algorithm.run()
        self.assertEqual(len(algorithm.point_dict), 3)
        #print algorithm.point_dict
        self.assertEqual(algorithm.point_dict,
            {0: (1, Fraction(3, 2)),
            1: (0, Fraction(3, 1)), 
            2: (1, Fraction(9, 2))})

    def tearDown(self): pass
コード例 #14
0
E = V*(V-1)/2       # number of edges
G = Graph(n=V, directed=False)
for i in xrange(V):
    G.add_node((random.random(), random.random()))
for source in G.iternodes():
    for target in G.iternodes():
        if source < target:
            x0, y0 = source
            x1, y1 = target
            weight = math.hypot(x1-x0, y1-y0)
            G.add_edge(Edge(source, target, weight))
#G.show()

print "Calculate parameters ..."
print "Nodes:", G.v(), V
print "Edges:", G.e(), E
print "Directed:", G.is_directed()
print "Delta:", max(G.degree(node) for node in G.iternodes())

print "Testing BruteForceTSPWithGraph ..."
t1 = timeit.Timer(lambda: BruteForceTSPWithGraph(G).run())
print V, E, t1.timeit(1)            # single run

print "Testing NearestNeighborTSPWithGraph ..."
t1 = timeit.Timer(lambda: NearestNeighborTSPWithGraph(G).run())
print V, E, t1.timeit(1)            # single run

print "Testing RepeatedNearestNeighborTSPWithGraph ..."
t1 = timeit.Timer(lambda: RepeatedNearestNeighborTSPWithGraph(G).run())
print V, E, t1.timeit(1)            # single run
コード例 #15
0
ファイル: timeit_tsp.py プロジェクト: ufkapano/graphs-dict
E = V*(V-1) // 2       # number of edges
G = Graph(n=V, directed=False)
for i in range(V):
    G.add_node((random.random(), random.random()))
for source in G.iternodes():
    for target in G.iternodes():
        if source < target:
            x0, y0 = source
            x1, y1 = target
            weight = math.hypot(x1-x0, y1-y0)
            G.add_edge(Edge(source, target, weight))
#G.show()

print ( "Calculate parameters ..." )
print ( "Nodes: {} {}".format( G.v(), V ))
print ( "Edges: {} {}".format( G.e(), E ))
print ( "Directed: {}".format( G.is_directed() ))
print ( "Delta: {}".format( max(G.degree(node) for node in G.iternodes()) ))

print ( "Testing BruteForceTSPWithGraph ..." )
t1 = timeit.Timer(lambda: BruteForceTSPWithGraph(G).run())
print ( "{} {} {}".format(V, E, t1.timeit(1)) )   # single run

print ( "Testing NearestNeighborTSPWithGraph ..." )
t1 = timeit.Timer(lambda: NearestNeighborTSPWithGraph(G).run())
print ( "{} {} {}".format(V, E, t1.timeit(1)) )   # single run

print ( "Testing RepeatedNearestNeighborTSPWithGraph ..." )
t1 = timeit.Timer(lambda: RepeatedNearestNeighborTSPWithGraph(G).run())
print ( "{} {} {}".format(V, E, t1.timeit(1)) )   # single run
コード例 #16
0
ファイル: timeit_tsp.py プロジェクト: yjfiejd/graphs-dict
E = V * (V - 1) / 2  # number of edges
G = Graph(n=V, directed=False)
for i in xrange(V):
    G.add_node((random.random(), random.random()))
for source in G.iternodes():
    for target in G.iternodes():
        if source < target:
            x0, y0 = source
            x1, y1 = target
            weight = math.hypot(x1 - x0, y1 - y0)
            G.add_edge(Edge(source, target, weight))
#G.show()

print "Calculate parameters ..."
print "Nodes:", G.v(), V
print "Edges:", G.e(), E
print "Directed:", G.is_directed()
print "Delta:", max(G.degree(node) for node in G.iternodes())

print "Testing BruteForceTSPWithGraph ..."
t1 = timeit.Timer(lambda: BruteForceTSPWithGraph(G).run())
print V, E, t1.timeit(1)  # single run

print "Testing NearestNeighborTSPWithGraph ..."
t1 = timeit.Timer(lambda: NearestNeighborTSPWithGraph(G).run())
print V, E, t1.timeit(1)  # single run

print "Testing RepeatedNearestNeighborTSPWithGraph ..."
t1 = timeit.Timer(lambda: RepeatedNearestNeighborTSPWithGraph(G).run())
print V, E, t1.timeit(1)  # single run