示例#1
0
    def test_markov(self):
        g = Linking.Graph()
        g.add_vertex('rainy')
        g.add_vertex('sunny')
        g.add_edge('rainy', 'sunny', 0.5)
        g.add_edge('rainy', 'rainy', 0.5)
        g.add_edge('sunny', 'rainy', 0.1)
        g.add_edge('sunny', 'sunny', 0.9)
        g.get_vertex('rainy').probability = 1  #initial probability
        g.get_vertex('sunny').probability = 0  #initial probability
        model = g.vert_dict

        gg = Linking.Graph()
        gg.add_vertex(0)
        gg.add_vertex(1)
        gg.add_vertex(2)
        gg.add_vertex(3)
        gg.add_edge(0, 1)
        gg.add_edge(1, 2)
        gg.add_edge(2, 3)
        al = Algorithms.algorithms(gg.vert_dict)
        expected = {
            0: {
                'rainy': 1,
                'sunny': 0
            },
            1: {
                'rainy': 0.5,
                'sunny': 0.5
            },
            2: {
                'rainy': 0.3,
                'sunny': 0.7
            },
            3: {
                'rainy': 0.21999999999999997,
                'sunny': 0.78
            }
        }
        self.assertDictEqual(al.markov(model, 0), expected)

        expected = {
            1: {
                'rainy': 1,
                'sunny': 0
            },
            2: {
                'rainy': 0.5,
                'sunny': 0.5
            },
            3: {
                'rainy': 0.3,
                'sunny': 0.7
            }
        }
        self.assertDictEqual(al.markov(model, 1), expected)
示例#2
0
 def test_g_add_objEdge_vert_connection(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.add_objEdge('a0')
     g.add_objEdge_vert_connection('a0', 0, 0.5)
     self.assertEqual(g.vert_dict['a0'].neighbor[0], 0.5)
示例#3
0
 def test_g_get_vertices(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     self.assertListEqual(g.get_vertices(), [0, 1])
     g.add_vertex(2)
     self.assertListEqual(g.get_vertices(), [0, 1, 2])
示例#4
0
 def test_setKnownPT(self):
     g = Linking.Graph()
     for i in range(5):
         g.add_vertex(i)
     #    0    1
     #       \ /  \
     #        2   3
     #       /
     #      4
     g.add_edge(0, 2)
     g.add_edge(1, 2)
     g.add_edge(1, 3)
     g.add_edge(2, 4)
     al = Algorithms.algorithms(g.vert_dict)
     al.generateProbabilityTable()
     al.setKnownPT(0, 'T', 0.1)
     al.setKnownPT(1, 'T', 0.5)
     al.setKnownPT(2, 'TT', 1)
     al.setKnownPT(2, 'TF', 1)
     al.setKnownPT(2, 'FT', 0.5)
     al.setKnownPT(2, 'FF', 0.01)
     al.setKnownPT(3, 'T', 0.8)
     al.setKnownPT(3, 'F', 0.01)
     al.setKnownPT(4, 'T', 0.1)
     al.setKnownPT(4, 'F', 0.01)
     v = g.get_vertex(2).probabilityTable['TT'][0]  #node 2
     self.assertTrue(v == 1)  #expect v =1
     v = g.get_vertex(3).probabilityTable['T'][0]  #node 3
     self.assertTrue(v == 0.8)  #expect v = 0.8
     v = g.get_vertex(4).probabilityTable['T'][0]  #node 4
     self.assertTrue(v == 0.1)  #expect v = 0.1
     v = g.get_vertex(0).probabilityTable['T'][0]  #node 0
     self.assertTrue(v == 0.1)  #expect v = 0.1
     v = g.get_vertex(1).probabilityTable['T'][0]  #node 1
     self.assertTrue(v == 0.5)  #expect v = 0.5
示例#5
0
 def test_gd_resetAllUtility(self):
     gd = Linking.Grid(3, 3)
     gd.grid_dict[0].utility = 3
     gd.grid_dict[2].utility = 4
     gd.resetAllUtility()
     self.assertEqual(gd.grid_dict[0].utility, 0)
     self.assertEqual(gd.grid_dict[2].utility, 0)
示例#6
0
    def test_refreshP_simulating(self):
        g = Linking.Graph()
        for i in range(5):
            g.add_vertex(i)
        #    0    1
        #       \ /  \
        #        2   3
        #       /
        #      4
        g.add_edge(0, 2)
        g.add_edge(1, 2)
        g.add_edge(1, 3)
        g.add_edge(2, 4)
        al = Algorithms.algorithms(g.vert_dict)
        al.generateProbabilityTable()
        al.setProbabilityTable(0, 'T', 0.1)
        al.setProbabilityTable(1, 'T', 0.5)
        al.setProbabilityTable(2, 'TT', 1)
        al.setProbabilityTable(2, 'TF', 1)
        al.setProbabilityTable(2, 'FT', 0.5)
        al.setProbabilityTable(2, 'FF', 0.01)
        al.setProbabilityTable(3, 'T', 0.8)
        al.setProbabilityTable(3, 'F', 0.01)
        al.setProbabilityTable(4, 'T', 0.1)
        al.setProbabilityTable(4, 'F', 0.01)
        al.simulateData(10000)

        obs = {3: 'T', 4: 'T'}
        self.assertTrue(math.fabs(al.query(obs, 0) - 0.17) <= 0.05)
        self.assertTrue(math.fabs(al.query(obs, 1) - 1) <= 0.05)
        self.assertTrue(math.fabs(al.query(obs, 2) - 0.92) <= 0.05)
        self.assertTrue(math.fabs(al.query(obs, 3) - 1) <= 0.05)
        self.assertTrue(math.fabs(al.query(obs, 4) - 1) <= 0.05)
示例#7
0
 def test_generatePriorProbability(self):
     g = Linking.Graph()
     for i in range(5):
         g.add_vertex(i)
     #    0    1
     #       \ /  \
     #        2   3
     #       /
     #      4
     g.add_edge(0, 2)
     g.add_edge(1, 2)
     g.add_edge(1, 3)
     g.add_edge(2, 4)
     al = Algorithms.algorithms(g.vert_dict)
     al.generateProbabilityTable()
     al.setKnownPT(0, 'T', 0.1)
     al.setKnownPT(1, 'T', 0.5)
     al.setKnownPT(2, 'TT', 1)
     al.setKnownPT(2, 'TF', 1)
     al.setKnownPT(2, 'FT', 0.5)
     al.setKnownPT(2, 'FF', 0.01)
     al.setKnownPT(3, 'T', 0.8)
     al.setKnownPT(3, 'F', 0.01)
     al.setKnownPT(4, 'T', 0.1)
     al.setKnownPT(4, 'F', 0.01)
     al.generatePriorProbability()
     self.assertTrue(g.get_vertex(0).probability == 0.1)
     self.assertTrue(g.get_vertex(1).probability == 0.5)
     self.assertTrue(g.get_vertex(2).probability == 0.3295)
     self.assertTrue(g.get_vertex(3).probability == 0.405)
     self.assertTrue(g.get_vertex(4).probability == 0.039655)
示例#8
0
 def test_g_add_vertex(self):
     g = Linking.Graph()
     g.add_vertex(0)  #add vertex
     g.add_vertex(1)
     self.assertTrue(str(
         g.vert_dict[0].get_id()) == str(0))  #see if the vertex exist
     self.assertTrue(str(g.vert_dict[1].get_id()) == str(1))
示例#9
0
 def test_g_add_edge(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.add_edge(0, 1, 1)
     self.assertTrue(1 in g.vert_dict[0].adjacent.keys())
     self.assertFalse(2 in g.vert_dict[0].adjacent.keys())
示例#10
0
    def test_valueIteration(self):
        g = Linking.Grid(2, 2)
        g.grid_dict[0].reward = -4
        g.grid_dict[1].utility = 100
        g.grid_dict[1].reward = 100
        g.grid_dict[2].utility = -100
        g.grid_dict[2].reward = -100
        g.setObstacle(3)
        al = Algorithms.algorithms(g.grid_dict)

        action = {'forward': 0.8, 'left': 0.1, 'right': 0.1}
        discount = 0.9

        expexted = {0: 64.83478199000001, 1: 100, 2: -100, 3: 0}
        # print(al.valueIteration(discount,action,g))
        self.assertDictEqual(al.valueIteration(discount, action, g), expexted)
        #another test
        g = Linking.Grid(4, 3)
        for i in g.grid_dict:
            if i != 5:
                g.grid_dict[i].reward = -4
        g.grid_dict[3].utility = 100
        g.grid_dict[3].reward = 100
        g.grid_dict[7].utility = -100
        g.grid_dict[7].reward = -100
        g.setObstacle(5)
        al = Algorithms.algorithms(g.grid_dict)

        action = {'forward': 0.8, 'left': 0.1, 'right': 0.1}
        discount = 0.9

        expexted = {
            0: 50.94115412930875,
            1: 64.95855729696827,
            2: 79.5362031683467,
            3: 100,
            4: 39.85041277059019,
            5: 0,
            6: 48.6439148544741,
            7: -100,
            8: 29.64382885103273,
            9: 25.391792612055916,
            10: 34.476553020311734,
            11: 12.99228937944113
        }
        # print(al.valueIteration(discount,action,g))
        self.assertDictEqual(al.valueIteration(discount, action, g), expexted)
示例#11
0
 def test_g_add_objEdge2(
         self
 ):  #for adding connection from node(as parent) to action(as chile)
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_objEdge('a0')
     g.add_edge(0, 'a0')
     self.assertDictEqual(g.vert_dict[0].adjacent, {'a0': 1})
示例#12
0
 def test_g_resetAllUtility(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.get_vertex(0).utility = 2
     g.get_vertex(1).utility = 3
     g.resetAllUtility()
     self.assertEqual(g.get_vertex(0).utility, 0)
     self.assertEqual(g.get_vertex(1).utility, 0)
示例#13
0
 def test_g_resetAllHeuristic(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.get_vertex(0).heuristic = 1
     g.get_vertex(1).heuristic = 2
     g.resetAllHeuristic()
     self.assertTrue(g.vert_dict[0].heuristic == 0)
     self.assertTrue(g.vert_dict[1].heuristic == 0)
示例#14
0
 def test_gd_setWall(self):
     gd = Linking.Grid(3, 3)
     self.assertTrue(4 in gd.grid_dict[3].adjacent.keys()
                     )  #before setWall, they are connected to each other
     self.assertTrue(3 in gd.grid_dict[4].adjacent.keys())
     gd.setWall(3, 4)
     self.assertFalse(4 in gd.grid_dict[3].adjacent.keys(
     ))  #after setWall, they are not connected to each other
     self.assertFalse(3 in gd.grid_dict[4].adjacent.keys())
示例#15
0
 def test_gd_setObstacle(self):
     gd = Linking.Grid(3, 3)
     for i in [1, 7, 3, 5]:  #before setObstacle, 4 is connecting to 1,7,3,5
         self.assertTrue(4 in gd.grid_dict[i].adjacent.keys())
         self.assertTrue(i in gd.grid_dict[4].adjacent.keys())
     gd.setObstacle(4)
     for i in [1, 7, 3,
               5]:  #after setObstacle, they are not connected to each other
         self.assertFalse(4 in gd.grid_dict[i].adjacent.keys())
         self.assertFalse(i in gd.grid_dict[4].adjacent.keys())
示例#16
0
 def test_gd_setManhattanDist(self):
     gd = Linking.Grid(3, 3)
     dict = {0: 1, 1: 0, 2: 1, 3: 2, 4: 1, 5: 2, 6: 3, 7: 2, 8: 3}
     gd.setManhattanDist(1)
     for i in range(9):
         self.assertEqual(gd.grid_dict[i].heuristic, dict[i])
     dict = {0: 2, 1: 1, 2: 2, 3: 1, 4: 0, 5: 1, 6: 2, 7: 1, 8: 2}
     gd.setManhattanDist(4)
     for i in range(9):
         self.assertEqual(gd.grid_dict[i].heuristic, dict[i])
示例#17
0
 def test_g_delete_objEdge_vert_connection(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.add_objEdge('a0')
     g.add_objEdge_vert_connection('a0', 0, 0.8)
     g.add_edge(0, 1, 3)
     g.delete_objEdge_vert_connection('a0', 0)
     self.assertDictEqual(g.vert_dict['a0'].neighbor, {})  #  empty
     self.assertDictEqual(g.vert_dict[0].adjacent, {1: 3})
示例#18
0
 def test_v_delete_neighbor(self):
     v = Linking.Vertex(0)
     for i in range(6):  # vertex 0 is connected to 0~5
         v.adjacent[i] = 1
     for i in range(3):
         v.delete_neighbor(i)
     for i in range(6):
         if (i < 3):
             self.assertFalse(v.check_connectingTo(i))
         else:
             self.assertTrue(v.check_connectingTo(i))
示例#19
0
 def test_g_check_edge_existed(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.add_vertex(2)
     g.add_edge(0, 1, 1)
     g.add_edge(0, 2, 1)
     self.assertTrue(g.check_edge_existed(0, 1))
     self.assertTrue(g.check_edge_existed(0, 2))
     g.delete_edge(0, 2)
     self.assertTrue(g.check_edge_existed(0, 1))
     self.assertFalse(g.check_edge_existed(0, 2))
示例#20
0
 def test_gd_physicalNeighbor(self):
     gd = Linking.Grid(3, 3)
     self.assertDictEqual(gd.physicalNeighbor(3), {
         'upperCell': 0,
         'underCell': 6,
         'rightCell': 4
     })
     gd.setWall(3, 4)  # the result won't be changed by adding a wall
     self.assertDictEqual(gd.physicalNeighbor(3), {
         'upperCell': 0,
         'underCell': 6,
         'rightCell': 4
     })
示例#21
0
 def test_gd_setGridWeight(self):
     gd = Linking.Grid(3, 3)
     self.assertTrue(
         gd.grid_weight[6] == 1)  #cost of unit grid6 is 1 (default)
     self.assertTrue(
         gd.grid_dict[3].adjacent[6] ==
         1)  #the weight of physical neighbors connecting to it is also 1
     self.assertTrue(gd.grid_dict[7].adjacent[6] == 1)
     gd.setGridWeight(6, 2)  #after setting cost to 2
     self.assertTrue(gd.grid_weight[6] == 2)  #cost of unit grid6 is 2
     self.assertTrue(
         gd.grid_dict[3].adjacent[6] ==
         2)  #the weight of physical neighbors connecting to it is also 2
     self.assertTrue(gd.grid_dict[7].adjacent[6] == 2)
示例#22
0
 def test_g_delete_vertex(self):
     g = Linking.Graph()
     g.add_vertex(0)
     g.add_vertex(1)
     g.add_vertex(2)
     g.add_edge(0, 1, 1)  #0 connect to 1
     g.add_edge(0, 2, 1)  #0 connect to 2
     g.delete_vertex(2)  #delete 2
     self.assertTrue(
         1 in g.vert_dict[0].adjacent.keys())  #0 is connected to 1
     self.assertFalse(
         2 in g.vert_dict[0].adjacent.keys())  #0 is not connected to 2
     self.assertTrue((0 in g.vert_dict.keys()))  #vertex 0 exist
     self.assertTrue((1 in g.vert_dict.keys()))  #vertex 1 exist
     self.assertFalse((2 in g.vert_dict.keys()))  #vertex 2 not exist
示例#23
0
 def test_ucsAStar_ucs_dif_Cost(self):
     g = Linking.Graph()
     for i in range(7):
         g.add_vertex(i)
     g.add_edge(0, 2, 2)
     g.add_edge(0, 1, 1)
     g.add_edge(1, 4, 4)
     g.add_edge(1, 3, 1)
     g.add_edge(2, 6, 1)
     g.add_edge(2, 5, 1)
     g.add_edge(2, 4, 2)
     al = Algorithms.algorithms(g.vert_dict)
     self.assertListEqual([0, 2, 4], al.ucsAStar(0, 4, 'UCS'))
     expect = [[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 5],
               [0, 1, 2, 3, 5, 6], [0, 1, 2, 3, 5, 6, 4]]
     self.assertListEqual(expect, al.getVisitedLog())
示例#24
0
    def randomGraph(self,branch,layer,lowerBound,upperBound):
        LK=Linking.Graph()
        LK.add_vertex(0)#root
        queue=[LK.get_vertex(0).id]
        nodeId=1
        layerDict={0:0}

        while queue:#queue is not empty
            parent=queue.pop(0)#pop from head
            if layer>layerDict[parent]:
                for i in range(branch):
                    LK.add_vertex(nodeId)
                    LK.add_edge(parent,nodeId)
                    layerDict[nodeId]=layerDict[parent]+1
                    queue.append(nodeId)
                    nodeId+=1

        for n in LK.get_vertices():
            if not LK.get_vertex(n).get_connections():
                LK.get_vertex(n).utility=random.randint(lowerBound,upperBound)
        return LK


# g=randomGenerator().randomGraph(2,2,-2,2)
# g.delete_edge(2,5)
# g.delete_edge(2,6)
# g.add_objEdge('a0')
# g.add_edge(2,'a0')
# g.add_objEdge_vert_connection('a0',5)
# g.add_objEdge_vert_connection('a0',6)
# g.get_vertex(5).probability=0.2
# g.get_vertex(6).probability=0.8
# a=Algorithms.algorithms(g.vert_dict).miniMaxAlphaBeta(0,2,'exMiniMax')
# for n in g:
#     if type(n) is Linking.Vertex:
#         if not n.get_connections():
#             print(str(n.id)+'\'s utility is '+str(n.utility))
# print()
# for e in a:
#     print(e)
示例#25
0
 def test_simulateData(self):
     g = Linking.Graph()
     for i in range(5):
         g.add_vertex(i)
     #    0    1
     #       \ /  \
     #        2   3
     #       /
     #      4
     g.add_edge(0, 2)
     g.add_edge(1, 2)
     g.add_edge(1, 3)
     g.add_edge(2, 4)
     al = Algorithms.algorithms(g.vert_dict)
     al.generateProbabilityTable()
     al.setProbabilityTable(0, 'T', 0.1)
     al.setProbabilityTable(1, 'T', 0.5)
     al.setProbabilityTable(2, 'TT', 1)
     al.setProbabilityTable(2, 'TF', 1)
     al.setProbabilityTable(2, 'FT', 0.5)
     al.setProbabilityTable(2, 'FF', 0.01)
     al.setProbabilityTable(3, 'T', 0.8)
     al.setProbabilityTable(3, 'F', 0.01)
     al.setProbabilityTable(4, 'T', 0.1)
     al.setProbabilityTable(4, 'F', 0.01)
     al.simulateData(10000)
     v = g.get_vertex(0).probabilityTable['T'][0]  #node 0
     self.assertAlmostEqual(v, 0.1, 1)  #expect v =0.1
     v = g.get_vertex(1).probabilityTable['T'][0]  #node 1
     self.assertAlmostEqual(v, 0.5, 1)  #expect v = 0.5
     v = g.get_vertex(2).probabilityTable['TT'][0]  #node 2
     self.assertAlmostEqual(v, 1, 1)  #expect v =1
     v = g.get_vertex(3).probabilityTable['T'][0]  #node 3
     self.assertAlmostEqual(v, 0.8, 1)  #expect v = 0.8
     v = g.get_vertex(4).probabilityTable['T'][0]  #node 4
     self.assertAlmostEqual(0.1, v, 1)  #expect v = 0.1
示例#26
0
 def test_g_get_vertex(self):
     g = Linking.Graph()
     v = Linking.Vertex(0)  #create a vertex
     g.vert_dict[0] = v  #store the vertex into vert_dict
     self.assertEqual(g.get_vertex(0), v)
示例#27
0
 def test_v_check_connectingTo(self):
     v = Linking.Vertex(6)  # vertex 6
     for i in range(6):  # vertex 6 is connected to 0~5
         v.adjacent[i] = 1
     for i in range(6):  #is vertex 6 connected to 0~5 ?
         self.assertTrue(v.check_connectingTo(i))
示例#28
0
 def test_v_get_weight(self):
     v = Linking.Vertex(0)
     for i in range(6):  # vertex 0 is connected to 0~5
         v.adjacent[i] = i
     for i in range(6):
         self.assertTrue(v.get_weight(i) == i)
示例#29
0
 def test_v_get_id(self):
     v = Linking.Vertex(0)
     self.assertTrue(v.get_id() == 0)
     v = Linking.Vertex(7)
     self.assertTrue(v.get_id() == 7)
示例#30
0
 def test_v_get_connections(self):
     v = Linking.Vertex(0)
     for i in range(6):  # vertex 0 is connected to 0~5
         v.adjacent[i] = 1
     self.assertListEqual([0, 1, 2, 3, 4, 5], v.get_connections())