Exemples de fonctions de DeepRacer récompense AWS - AWS DeepRacer

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Exemples de fonctions de DeepRacer récompense AWS

Vous trouverez ci-dessous quelques exemples de la fonction de DeepRacer récompense AWS.

Exemple 1 : Suivez la ligne médiane dans les contre-la-montre

Cet exemple détermine à quelle distance l'agent se trouve de la ligne centrale et donne une récompense plus élevée si celui-ci est plus proche du centre de la piste, en encourageant l'agent à suivre de près la ligne centrale.

def reward_function(params): ''' Example of rewarding the agent to follow center line ''' # Read input parameters track_width = params['track_width'] distance_from_center = params['distance_from_center'] # Calculate 3 markers that are increasingly further away from the center line marker_1 = 0.1 * track_width marker_2 = 0.25 * track_width marker_3 = 0.5 * track_width # Give higher reward if the car is closer to center line and vice versa if distance_from_center <= marker_1: reward = 1 elif distance_from_center <= marker_2: reward = 0.5 elif distance_from_center <= marker_3: reward = 0.1 else: reward = 1e-3 # likely crashed/ close to off track return reward

Exemple 2 : Restez à l'intérieur des deux frontières lors des contre-la-montre

Cet exemple donne simplement des récompenses élevées si l'agent reste à l'intérieur des limites et lui permet de déterminer le meilleur chemin pour terminer un tour. Il est facile à programmer et à comprendre, mais sa convergence prendra probablement plus de temps.

def reward_function(params): ''' Example of rewarding the agent to stay inside the two borders of the track ''' # Read input parameters all_wheels_on_track = params['all_wheels_on_track'] distance_from_center = params['distance_from_center'] track_width = params['track_width'] # Give a very low reward by default reward = 1e-3 # Give a high reward if no wheels go off the track and # the car is somewhere in between the track borders if all_wheels_on_track and (0.5*track_width - distance_from_center) >= 0.05: reward = 1.0 # Always return a float value return reward

Exemple 3 : Empêcher le zig-zag dans les contre-la-montre

Cet exemple incite l'agent à suivre la ligne centrale, mais le pénalise avec une récompense plus faible s'il change trop souvent de direction, ce qui permet d'éviter le comportement de zigzag. L'agent apprend à conduire en douceur dans le simulateur et conserve probablement le même comportement lorsqu'il est déployé sur le véhicule physique.

def reward_function(params): ''' Example of penalize steering, which helps mitigate zig-zag behaviors ''' # Read input parameters distance_from_center = params['distance_from_center'] track_width = params['track_width'] abs_steering = abs(params['steering_angle']) # Only need the absolute steering angle # Calculate 3 marks that are farther and father away from the center line marker_1 = 0.1 * track_width marker_2 = 0.25 * track_width marker_3 = 0.5 * track_width # Give higher reward if the car is closer to center line and vice versa if distance_from_center <= marker_1: reward = 1.0 elif distance_from_center <= marker_2: reward = 0.5 elif distance_from_center <= marker_3: reward = 0.1 else: reward = 1e-3 # likely crashed/ close to off track # Steering penality threshold, change the number based on your action space setting ABS_STEERING_THRESHOLD = 15 # Penalize reward if the car is steering too much if abs_steering > ABS_STEERING_THRESHOLD: reward *= 0.8 return float(reward)

Exemple 4 : Restez dans une voie sans heurter des obstacles fixes ou des véhicules en mouvement

Cette fonction de récompense récompense l'agent qui reste à l'intérieur des limites de la piste et le pénalise s'il s'approche trop près des objets qui se trouvent devant elle. L'agent peut passer d'une voie à l'autre pour éviter les accidents. La récompense totale est une somme pondérée de la récompense et de la pénalité. L'exemple donne plus de poids à la pénalité afin d'éviter les accidents. Expérimentez avec différents poids moyens pour vous entraîner à différents résultats comportementaux.

import math def reward_function(params): ''' Example of rewarding the agent to stay inside two borders and penalizing getting too close to the objects in front ''' all_wheels_on_track = params['all_wheels_on_track'] distance_from_center = params['distance_from_center'] track_width = params['track_width'] objects_location = params['objects_location'] agent_x = params['x'] agent_y = params['y'] _, next_object_index = params['closest_objects'] objects_left_of_center = params['objects_left_of_center'] is_left_of_center = params['is_left_of_center'] # Initialize reward with a small number but not zero # because zero means off-track or crashed reward = 1e-3 # Reward if the agent stays inside the two borders of the track if all_wheels_on_track and (0.5 * track_width - distance_from_center) >= 0.05: reward_lane = 1.0 else: reward_lane = 1e-3 # Penalize if the agent is too close to the next object reward_avoid = 1.0 # Distance to the next object next_object_loc = objects_location[next_object_index] distance_closest_object = math.sqrt((agent_x - next_object_loc[0])**2 + (agent_y - next_object_loc[1])**2) # Decide if the agent and the next object is on the same lane is_same_lane = objects_left_of_center[next_object_index] == is_left_of_center if is_same_lane: if 0.5 <= distance_closest_object < 0.8: reward_avoid *= 0.5 elif 0.3 <= distance_closest_object < 0.5: reward_avoid *= 0.2 elif distance_closest_object < 0.3: reward_avoid = 1e-3 # Likely crashed # Calculate reward by putting different weights on # the two aspects above reward += 1.0 * reward_lane + 4.0 * reward_avoid return reward