コード例 #1
0
    def test_add_multiple_prey(self):
        pred1 = Predator('1', Coord(0, 0), self.env, 8)
        prey1 = Prey('1', Coord(2, 3), self.env, perception_radius=8)
        prey1.perceive()
        #print(pred1._beliefs)
        self.assertEqual(prey1.find_nearest_predator(), pred1)

        prey2 = Prey('2', Coord(9, 5), self.env, perception_radius=8, speed=10)
        pred2 = Predator('3', Coord(0, 7), self.env, perception_radius=2)
        prey2.perceive()
        self.assertEqual(prey2.find_nearest_predator(), None)
        prey2.move(Coord(9, 9))
 def test_bfs(self):
     pred1 = Predator('1', Coord(0, 0), self.env)
     pred2 = Predator('2', Coord(0, 1), self.env)
     prey1 = Prey('1', Coord(0, 2), self.env)
     #should be 1,0 1,1 1,2
     print('\n\n\n Testing bfs')
     bfs_res = self.env.bfs(pred1.current_coord, prey1.current_coord)[1]
     self.assertEqual(
         bfs_res,
         list(
             map(lambda x: self.env._get_coord(x), [
                 Coord(0, 2),
                 Coord(1, 2),
                 Coord(1, 1),
                 Coord(1, 0),
                 Coord(0, 0)
             ])))
コード例 #3
0
    def test_get_naive_best_move(self):
        pred1 = Predator('1', Coord(0, 0), self.env, perception_radius=8)
        prey1 = Prey('1', Coord(0, 3), self.env, perception_radius=10)
        prey1.perceive()
        best_naive_move = prey1.get_naive_best_move(pred1.current_coord)
        print('best move: {}'.format(best_naive_move))
        self.assertEqual(best_naive_move, self.env._get_coord(Coord(0, 4)))

        pred2 = Predator('2', Coord(5, 5), self.env, perception_radius=8)
        prey2 = Prey('2', Coord(6, 9), self.env, perception_radius=10)
        prey2.perceive()
        self.assertEqual(prey2.get_naive_best_move(pred2.current_coord),
                         self.env._get_coord(Coord(7, 9)))

        pred3 = Predator('3', Coord(9, 9), self.env, perception_radius=8)
        prey2.perceive()
        nearest_pred = prey2.find_nearest_predator()
        self.assertEqual(nearest_pred, pred3)
        self.assertEqual(prey2.get_naive_best_move(nearest_pred.current_coord),
                         self.env._get_coord(Coord(5, 9)))
 def test_get_neighbor_coords(self):
     '''makes sure that the get_neighbor_coords method can detect neightboring nodes as long as another predator is not occupying them'''
     self.assertTrue(
         all(
             list(
                 filter(
                     lambda x: x in self.env.get_neighbor_coords(Coord(
                         0, 0)), [Coord(0, 1), Coord(1, 0)]))))
     pred1 = Predator('1', Coord(1, 1), self.env)
     pred2 = Predator('2', Coord(0, 1), self.env)
     self.assertTrue(
         all(
             list(
                 filter(
                     lambda x: x in self.env.get_neighbor_coords(
                         pred1.current_coord),
                     [Coord(1, 0), Coord(2, 1),
                      Coord(1, 2)]))))
     prey1 = Prey('3', Coord(2, 1), self.env)
     self.assertTrue(
         all(
             list(
                 filter(
                     lambda x: x in self.env.get_neighbor_coords(
                         pred1.current_coord),
                     [Coord(1, 0), Coord(2, 1),
                      Coord(1, 2)]))))
     #all(list(filter(lambda x: x in self.env.get_neighbor_coords(Coord(3,3)), [Coord(3,2),Coord(3,4),Coord(2,3),Coord(4,3)]))))
     pred3 = Predator('4', Coord(1, 2), self.env)
     self.assertTrue(
         all(
             list(
                 filter(
                     lambda x: x in self.env.get_neighbor_coords(
                         pred1.current_coord),
                     [Coord(1, 0), Coord(2, 1)]))))
コード例 #5
0
    def __init__(self, env: PredatorPreyGridEnvironment, no_predators: int,
                 no_prey: int, pred_perception_radius: int, pred_speed: int,
                 prey_perception_radius: int, prey_speed: int):

        #self, name, coordinate: Coord, environment: GridEnvironment,
        #         perception_radius=3, speed=1
        predator_list = [
            Predator(str(i),
                     env.get_random_free_square(),
                     env,
                     perception_radius=pred_perception_radius,
                     speed=pred_speed) for i in range(no_predators)
        ]

        prey_list = [
            Prey(str(i),
                 env.get_random_free_square(),
                 env,
                 perception_radius=prey_perception_radius,
                 speed=prey_speed) for i in range(no_prey)
        ]

        super().__init__(predator_list, prey_list, env)
コード例 #6
0
 def test_add_single_prey(self):
     pred1 = Predator('1', Coord(0, 0), self.env, 6)
     prey1 = Prey('2', Coord(2, 3), self.env, speed=3, perception_radius=6)
     prey1.perceive()
     self.assertEqual(prey1.find_nearest_predator(), pred1)
    def test_best_move_different_speeds(self):
        '''Ensures that predators can move at different speeds to chase prey'''
        pred1 = Predator('1', Coord(0, 0), self.env, 5, 1)
        pred2 = Predator('2', Coord(0, 1), self.env, 5, speed=2)
        prey1 = Prey('1', Coord(0, 4), self.env)

        pred2.perceive()
        pred2_nearest_prey = pred2.find_nearest_prey()
        self.assertEqual(pred2_nearest_prey, prey1)
        pred2_prey_path = pred2.get_prey_path(pred2_nearest_prey)

        print('pred2 speed: {}'.format(pred2.speed))
        print('pred2_prey_path: {}'.format(pred2_prey_path))
        print('pred2 available moves: {}'.format(pred2.find_available_moves()))
        self.assertTrue(
            all(x in list(
                map(lambda x: self.env._get_coord(x), [
                    Coord(0, 2),
                    Coord(0, 3),
                    Coord(1, 0),
                    Coord(1, 1),
                    Coord(1, 2),
                    Coord(2, 1)
                ])) for x in pred2.find_available_moves()))
        self.assertTrue(
            all(x in pred2.find_available_moves() for x in list(
                map(lambda x: self.env._get_coord(x), [
                    Coord(0, 2),
                    Coord(0, 3),
                    Coord(1, 0),
                    Coord(1, 1),
                    Coord(1, 2),
                    Coord(2, 1)
                ]))))

        best_move = pred2.get_best_move(
            pred2.get_prey_path(pred2_nearest_prey))
        self.assertEqual(best_move, self.env._get_coord(Coord(0, 3)))
 def test_best_move(self):
     pred1 = Predator('1', Coord(0, 0), self.env, 5, 1)
     pred2 = Predator('2', Coord(0, 1), self.env, 2)
     prey1 = Prey('1', Coord(0, 3), self.env)
     pred1.perceive()
     nearest_prey = pred1.find_nearest_prey()
     pred1.perceive()
     self.assertEqual(nearest_prey, prey1)
     prey_location_details = pred1.get_prey_path(nearest_prey)
     best_move = pred1.get_best_move(prey_location_details)
     self.assertEqual(best_move, self.env._get_coord(Coord(1, 0)))
     pred1.actuate()
     self.assertEqual(pred1.current_coord, self.env._get_coord(Coord(1, 0)))
    def test_actuate(self):
        pred1 = Predator('1', Coord(0, 0), self.env, 5, speed=1)
        pred2 = Predator('2', Coord(0, 1), self.env, 5, speed=2)
        prey1 = Prey('1', Coord(0, 4), self.env)

        pred1.perceive()
        pred1.actuate('simple_hunt_strategy')
        self.assertEqual(pred1.current_coord, self.env._get_coord(Coord(1, 0)))

        pred2.perceive()
        pred2.actuate('simple_hunt_strategy')
        self.assertEqual(pred2.current_coord, self.env._get_coord(Coord(0, 3)))
コード例 #10
0
 def test_add_multiple_predator(self):
     pred1 = Predator('1', Coord(0,0), self.env, 8)
     prey1 = Prey('2', Coord(2,3), self.env, speed = 20)
     pred1.perceive()
     #print(pred1._beliefs)
     self.assertEqual(pred1.find_nearest_prey(), prey1)
     pred2 = Predator('3', Coord(0,1), self.env, 2)
     self.assertEqual(pred2.find_nearest_prey(), None)
     prey1.move(Coord(9,9))
     
     print(self.env.print_board())
     #predator has not perveived so still believes prey is near it
     self.assertEqual(pred1.find_nearest_prey(), prey1)
     
     pred1.perceive()
     #once predator has perceived, finds prey has moved
     self.assertEqual(pred1.find_nearest_prey(), None)