Exemple #1
0
    def get_section_start_and_finish_events(self, start, finish, track: Track):
        if not self.probably_finishes_section_(start, finish):
            return None

        start_event = None
        finish_event = None

        start_dist = 9999
        finish_dist = 9999

        for e in self.events:
            if not finish_event and are_close_waypoint_ids(
                    e.closest_waypoint_index, start, track):
                (x2, y2) = track.get_waypoint(start)
                dist = (x2 - e.x) * (x2 - e.x) + (y2 - e.y) * (y2 - e.y)
                if dist < start_dist:
                    start_dist = dist
                    start_event = e
            if start_event and are_close_waypoint_ids(e.closest_waypoint_index,
                                                      finish, track):
                (x2, y2) = track.get_waypoint(finish)
                dist = (x2 - e.x) * (x2 - e.x) + (y2 - e.y) * (y2 - e.y)
                if dist < finish_dist:
                    finish_dist = dist
                    finish_event = e

        if finish_event:
            return start_event, finish_event
        else:
            return None
Exemple #2
0
 def get_reward_input_params(self, current_track: Track):
     point = (self.x, self.y)
     side = current_track.get_position_of_point_relative_to_waypoint(
         point, self.closest_waypoint_index)
     params = {
         'all_wheels_on_track':
         self.all_wheels_on_track,
         'x':
         self.x,
         'y':
         self.y,
         'heading':
         self.heading,
         'distance_from_center':
         self.distance_from_center,
         'projection_distance':
         0.0,  # TODO
         'progress':
         self.progress,
         'steps':
         float(self.step),
         'speed':
         float(self.speed),
         'steering_angle':
         float(self.steering_angle),
         'track_width':
         current_track.get_width(),
         'track_length':
         float(self.track_length),
         'waypoints':
         current_track.get_all_waypoints(),
         'closest_waypoints':
         [int(self.before_waypoint_index),
          int(self.after_waypoint_index)],
         'is_left_of_center':
         side == "L",
         'is_reversed':
         self.status == _STATUS_REVERSED,
         'is_crashed':
         self.status == _STATUS_CRASHED,
         'is_offtrack':
         self.status == _STATUS_OFF_TRACK,
         'closest_objects': [0, 0],  # TODO
         'objects_location': [],  # TODO
         'objects_left_of_center': [],  # TODO
         'object_in_camera': [],  # TODO
         'objects_speed': [],  # TODO
         'objects_heading': [],  # TODO
         'objects_distance_from_center': [],  # TODO
         'objects_distance': []  # TODO
     }
     return params
Exemple #3
0
 def _set_skew_on_events(self, track: Track):
     e: Event
     for e in self.events:
         (track_bearing,
          _) = track.get_bearing_and_distance_to_next_waypoint(
              e.before_waypoint_index)
         e.skew = get_turn_between_directions(track_bearing, e.true_bearing)
Exemple #4
0
 def zoom_sector(self, track: Track, sector: str):
     (self.zoom_x, self.zoom_y, self.zoom_x2, self.zoom_y2) = track.get_sector_coordinates(sector)
     self.zoom_x -= SECTOR_BORDER
     self.zoom_y -= SECTOR_BORDER
     self.zoom_x2 += SECTOR_BORDER
     self.zoom_y2 += SECTOR_BORDER
     self.zoom_in = True
Exemple #5
0
    def redraw(self, current_track :Track, track_graphics, analyzer):
        track_graphics.reset_to_blank()

        current_track.configure_track_graphics(track_graphics)

        for do in self.drawing_order:
            if do == "G" and self.grid_on:
                current_track.draw_grid(track_graphics, COLOUR_GREY)

            if do == "T":
                current_track.draw_track_edges(track_graphics, self.track_colour)
                # current_track.draw_section_dividers(track_graphics, self.track_colour)
                current_track.draw_starting_line(track_graphics, self.track_colour)
                if self.waypoints_on:
                    current_track.draw_waypoints(track_graphics, self.track_colour, self.waypoint_minor_size, self.waypoint_major_size)

            if do == "A":
                analyzer.redraw()
Exemple #6
0
def are_close_waypoint_ids(id1, id2, track: Track):
    if abs(id1 - id2) <= 2:
        return True

    if max(id1, id2) >= track.get_number_of_waypoints() - 1 and min(id1,
                                                                    id2) <= 2:
        return True
    else:
        return False
Exemple #7
0
 def _set_distance_from_center_on_events(self, track: Track):
     for e in self.events:
         current_location = (e.x, e.y)
         closest_waypoint = track.get_waypoint(e.closest_waypoint_index)
         next_waypoint = track.get_next_different_waypoint(
             e.closest_waypoint_index)
         previous_waypoint = track.get_previous_different_waypoint(
             e.closest_waypoint_index)
         distance_of_next_waypoint = get_distance_between_points(
             current_location, next_waypoint)
         distance_of_previous_waypoint = get_distance_between_points(
             current_location, previous_waypoint)
         if distance_of_next_waypoint < distance_of_previous_waypoint:
             e.distance_from_center = get_distance_of_point_from_line(
                 current_location, closest_waypoint, next_waypoint)
         else:
             e.distance_from_center = get_distance_of_point_from_line(
                 current_location, closest_waypoint, previous_waypoint)
Exemple #8
0
 def set_projected_distances_on_events(self, track: Track):
     e: Event
     for e in self.events:
         e.projected_travel_distance = track.get_projected_distance_on_track(
             (e.x, e.y), e.true_bearing, e.closest_waypoint_index)
Exemple #9
0
 def _set_before_and_after_waypoints_on_events(self, track: Track):
     e: Event
     for e in self.events:
         (e.before_waypoint_index,
          e.after_waypoint_index) = track.get_waypoint_ids_before_and_after(
              (e.x, e.y), e.closest_waypoint_index)
Exemple #10
0
    def get_starting_position_as_percent_from_race_start(self, track: Track):
        first_event_percent = track.get_waypoint_percent_from_race_start(
            self.events[0].closest_waypoint_index)

        #  5 is magic number because there are 20 evenly spaced start points, i.e. every 5% round the track
        return round(first_event_percent / 5) * 5
Exemple #11
0
    def redraw(self, current_track :Track, track_graphics, analyzer, background_analyser, episode_filter: EpisodeFilter):
        analyzer.recalculate()
        if background_analyser:
            background_analyser.recalculate()

        track_graphics.reset_to_blank()

        if self.zoom_in and self.zoom_x:
            track_graphics.set_track_area(self.zoom_x, self.zoom_y, self.zoom_x2, self.zoom_y2)
        else:
            current_track.configure_track_graphics(track_graphics)

        for do in self.drawing_order:
            if do == "G" and self.grid_on:
                current_track.draw_grid(track_graphics, COLOUR_GREY)

            if do == "T":
                current_track.draw_track_edges(track_graphics, self.track_colour)
                if episode_filter.filter_complete_section:
                    (start, finish) = episode_filter.filter_complete_section
                    current_track.draw_section_highlight(track_graphics, self.track_colour, start, finish)

                current_track.draw_starting_line(track_graphics, self.track_colour)
                if self.sectors_on:
                    current_track.draw_sector_dividers(track_graphics, self.track_colour)
                    current_track.draw_sector_labels(track_graphics, self.track_colour)
                if self.waypoints_on:
                    current_track.draw_waypoints(track_graphics, self.track_colour, self.waypoint_minor_size, self.waypoint_major_size)
                    if self.waypoint_labels_on:
                        current_track.draw_waypoint_labels(track_graphics, self.track_colour, 10)

            if do == "A":
                if background_analyser:
                    background_analyser.redraw()
                analyzer.redraw()

            if do == "N" and self.annotations_on:
                current_track.draw_annotations(track_graphics)
    def show_event(self, event: Event, track: Track):
        (previous_bearing,
         _) = track.get_bearing_and_distance_from_previous_waypoint(
             event.before_waypoint_index)
        (current_bearing, _) = track.get_bearing_and_distance_to_next_waypoint(
            event.before_waypoint_index)
        (next_bearing, _) = track.get_bearing_and_distance_to_next_waypoint(
            event.after_waypoint_index)

        self.waypoint_lap_position.set(
            str(
                round(
                    track.get_waypoint_percent_from_race_start(
                        event.closest_waypoint_index), 1)) + "  %")
        self.waypoint_previous_id.set(str(event.before_waypoint_index))
        self.waypoint_closest_id.set(str(event.closest_waypoint_index))
        self.waypoint_next_id.set(str(event.after_waypoint_index))

        self.waypoint_previous_bearing.set(str(round(previous_bearing)))
        self.waypoint_current_bearing.set(str(round(current_bearing)))
        self.waypoint_next_bearing.set(str(round(next_bearing)))

        self.state_progress.set(str(round(event.progress, 1)) + "  %")
        self.state_time.set(str(round(event.time_elapsed, 1)) + "  secs")
        self.state_step.set(str(event.step))
        self.state_track_speed.set(str(round(event.track_speed, 1)) + "  m/s")
        self.state_progress_speed.set(
            str(round(event.progress_speed, 1)) + "  m/s")
        self.state_heading.set(str(round(event.heading)))
        self.state_true_bearing.set(str(round(event.true_bearing)))
        self.state_slide.set(str(round(event.slide)))
        self.state_skew.set(str(round(event.skew)))
        self.state_side.set(
            track.get_position_of_point_relative_to_waypoint(
                (event.x, event.y), event.closest_waypoint_index))
        self.state_distance_from_centre.set(
            str(round(event.distance_from_center, 2)))
        self.state_all_wheels_on_track.set(str(event.all_wheels_on_track))
        if event.acceleration > 0.0:
            self.state_acceleration.set(
                str(round(event.acceleration, 1)) + "  m/s/s")
        else:
            self.state_acceleration.set("---")
        if event.braking > 0.0:
            self.state_braking.set(str(round(event.braking, 1)) + "  m/s/s")
        else:
            self.state_braking.set("---")
        self.state_projected_travel_distance.set(
            str(round(event.projected_travel_distance, 1)) + " m")

        self.action_id.set(str(event.action_taken))
        self.action_steering.set(get_formatted_steering(event.steering_angle))
        self.action_speed.set(str(event.speed) + "  m/s")
        self.action_sequence.set(str(event.sequence_count))

        self.reward_value.set(get_pretty_large_float(round(event.reward, 5)))
        self.reward_average.set(
            get_pretty_large_integer(event.average_reward_so_far))
        self.reward_total.set(get_pretty_large_integer(event.reward_total))
        self.discounted_future_reward.set(
            get_pretty_large_integer(event.discounted_future_rewards[0]))
        if self._config_manager.get_calculate_new_reward():
            self.new_reward.set(
                get_pretty_large_float(round(event.new_reward, 5)))
            self.new_discounted_future_reward.set(
                get_pretty_large_integer(event.new_discounted_future_reward))

        if self._config_manager.get_calculate_alternate_discount_factors():
            for i, r in enumerate(self.other_discounted_future_rewards):
                r.set(
                    get_pretty_large_integer(
                        event.discounted_future_rewards[i + 1]))

        self.debug_output.set(get_formatted_debug(
            event.debug_log, 10, 80, []))  # TODO - expose configuration
        self.lift()