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) ])))
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)]))))
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)
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)))
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)