コード例 #1
0
    def _generate_cover_to_coveree_mapping(self):
        # We want to assign a coveree(enemy) to every cover(ally)
        # We also want to know for each cover(ally), the other covers that share the same target(enemy)
        closest_enemies_to_ball = closest_players_to_point(self.game_state.ball_position, our_team=False)
        if len(closest_enemies_to_ball) > 0:
            closest_enemy_to_ball = closest_enemies_to_ball[0].player
            closest_enemies_to_our_goal = closest_players_to_point(self.game_state.field.our_goal, our_team=False)
            enemy_not_with_ball = [enemy.player for enemy in closest_enemies_to_our_goal if enemy.player is not closest_enemy_to_ball]
        else:
            enemy_not_with_ball = []

        # If we don't have enough player we cover the ball
        if len(enemy_not_with_ball) == 0:
            cover_to_coveree = dict(zip(self.robots_in_cover_formation, cycle([self.game_state.ball])))
            cover_to_formation = {cover: self.robots_in_cover_formation for cover in self.robots_in_cover_formation}
            # If we don't have enough enemy to cover, we group the player in formation
        elif len(self.robots_in_cover_formation) > len(enemy_not_with_ball):
            cover_to_coveree = dict(zip(self.robots_in_cover_formation, cycle(enemy_not_with_ball)))
            cover_to_formation = {}
            for cover, coveree in cover_to_coveree.items():
                formation = [teamate for teamate, teamate_coveree in cover_to_coveree.items() if teamate_coveree == coveree]
                cover_to_formation[cover] = formation
        else:
            cover_to_coveree = dict(zip(self.robots_in_cover_formation, enemy_not_with_ball))
            cover_to_formation = {cover: [cover] for cover in self.robots_in_cover_formation}

        return cover_to_coveree, cover_to_formation
コード例 #2
0
 def filter(self, observation=None, dt=0.05):
     last_ball_pose = self.game_state.field.ball.position
     if not dt:
         dt = self.default_dt
     self.transition_model(dt)
     if observation is not None:
         self.update(observation)
     else:
         players_my_team = closest_players_to_point(last_ball_pose)
         players_their_team = closest_players_to_point(
             last_ball_pose, False)
         if players_my_team[0].player_distance < players_their_team[
                 0].player_distance:
             closest_player = players_my_team[0].player
             closest_player_distance_to_ball = players_my_team[
                 0].player_distance
         else:
             closest_player = players_their_team[0].player
             closest_player_distance_to_ball = players_their_team[
                 0].player_distance
         if closest_player_distance_to_ball < 150:
             #self.x[2] = closest_player.velocity.position[0]
             #self.x[3] = closest_player.velocity.position[1]
             player_to_ball = (last_ball_pose - closest_player.position
                               ).normalized() * (BALL_RADIUS + ROBOT_RADIUS)
             self.x[0] = closest_player.position[0] + player_to_ball.x
             self.x[1] = closest_player.position[1] + player_to_ball.y
             self.x[2] = 0
             self.x[3] = 0
     self.predict()
     output_state = self.x
     #print("pos", self.x[0], self.x[1])
     #print("speed", self.x[2], self.x[3])
     return output_state
コード例 #3
0
ファイル: goalkeeper.py プロジェクト: stephenYan/StrategyAI
 def _no_enemy_around_ball(self):
     closest = closest_players_to_point(self.game_state.ball_position,
                                        our_team=False)
     if len(closest) == 0:
         return True
     DANGEROUS_ENEMY_MIN_DISTANCE = 500
     return closest[0].distance > DANGEROUS_ENEMY_MIN_DISTANCE
コード例 #4
0
ファイル: offense.py プロジェクト: stephenYan/StrategyAI
 def is_closest_not_goalkeeper(self, player):
     closest_players = closest_players_to_point(
         self.game_state.ball_position, our_team=True)
     if player == closest_players[0].player:
         return True
     return closest_players[0].player == self.game_state.get_player_by_role(Role.GOALKEEPER) \
            and player == closest_players[1].player
コード例 #5
0
ファイル: defense_wall.py プロジェクト: stephenYan/StrategyAI
    def _generate_cover_to_coveree_mapping(self):
        # We want to assign a coveree(enemy) to every cover(ally)
        # We also want to know for each cover(ally), the other covers that share the same target(enemy)
        closest_enemies_to_ball = closest_players_to_point(
            self.game_state.ball_position, our_team=False)
        if len(closest_enemies_to_ball) > 0:
            closest_enemy_to_ball = closest_enemies_to_ball[0].player
            closest_enemies_to_our_goal = closest_players_to_point(
                self.game_state.field.our_goal, our_team=False)
            enemy_not_with_ball = [
                enemy.player for enemy in closest_enemies_to_our_goal
                if enemy.player is not closest_enemy_to_ball
            ]
        else:
            enemy_not_with_ball = []

        # If we don't have enough player we cover the ball
        if len(enemy_not_with_ball) == 0:
            cover_to_coveree = dict(
                zip(self.robots_in_cover_formation,
                    cycle([self.game_state.ball])))
            cover_to_formation = {
                cover: self.robots_in_cover_formation
                for cover in self.robots_in_cover_formation
            }
            # If we don't have enough enemy to cover, we group the player in formation
        elif len(self.robots_in_cover_formation) > len(enemy_not_with_ball):
            cover_to_coveree = dict(
                zip(self.robots_in_cover_formation,
                    cycle(enemy_not_with_ball)))
            cover_to_formation = {}
            for cover, coveree in cover_to_coveree.items():
                formation = [
                    teamate
                    for teamate, teamate_coveree in cover_to_coveree.items()
                    if teamate_coveree == coveree
                ]
                cover_to_formation[cover] = formation
        else:
            cover_to_coveree = dict(
                zip(self.robots_in_cover_formation, enemy_not_with_ball))
            cover_to_formation = {
                cover: [cover]
                for cover in self.robots_in_cover_formation
            }

        return cover_to_coveree, cover_to_formation
コード例 #6
0
ファイル: free_kick.py プロジェクト: RoboCupULaval/StrategyIA
    def is_closest_not_goalkeeper(self, player):
        if self.game_state.ball.is_mobile():
            self.has_ball_move = True
        role = GameState().get_role_by_player_id(player.id)
        if not self.has_ball_move:
            return role == self.closest_role

        closest_players = closest_players_to_point(GameState().ball_position, our_team=True)
        if player == closest_players[0].player:
            return True
        return closest_players[0].player == self.game_state.get_player_by_role(Role.GOALKEEPER) \
               and player == closest_players[1].player
コード例 #7
0
    def is_closest_not_goalkeeper(self, player):
        if self.game_state.ball.is_mobile():
            self.has_ball_move = True
        role = GameState().get_role_by_player_id(player.id)
        if not self.has_ball_move:
            return role == self.closest_role

        closest_players = closest_players_to_point(GameState().ball_position,
                                                   our_team=True)
        if player == closest_players[0].player:
            return True
        return closest_players[0].player == self.game_state.get_player_by_role(Role.GOALKEEPER) \
               and player == closest_players[1].player
コード例 #8
0
 def is_second_closest(self, player):
     if player == closest_players_to_point(GameState().get_ball_position(),
                                           True)[1].player:
         return True
     return False
コード例 #9
0
ファイル: offense.py プロジェクト: RoboCupULaval/StrategyIA
 def is_closest_not_goalkeeper(self, player):
     closest_players = closest_players_to_point(self.game_state.ball_position, our_team=True)
     if player == closest_players[0].player:
         return True
     return closest_players[0].player == self.game_state.get_player_by_role(Role.GOALKEEPER) \
            and player == closest_players[1].player
コード例 #10
0
 def _no_enemy_around_ball(self):
     closest = closest_players_to_point(self.game_state.ball_position, our_team=False)
     if len(closest) == 0:
         return True
     DANGEROUS_ENEMY_MIN_DISTANCE = 500
     return closest[0].distance > DANGEROUS_ENEMY_MIN_DISTANCE
コード例 #11
0
 def is_closest(robots, player):
     if player == closest_players_to_point(GameState().get_ball_position(),
                                           True, robots)[0].player:
         return True
     return False