Beispiele AWS DeepRacer AWS-Belohnungsfunktionen - AWS DeepRacer

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Beispiele AWS DeepRacer AWS-Belohnungsfunktionen

Im Folgenden sind einige Beispiele für die DeepRacer AWS-Belohnungsfunktion aufgeführt.

Beispiel 1: Bei Zeitfahren der Mittellinie folgen

In diesem Beispiel wird festgestellt, wie weit der Agent von der Mittellinie entfernt ist, und er erhält eine höhere Belohnung, wenn er näher an der Mitte der Spur liegt; dadurch wird er veranlasst, der Mittellinie möglichst genau zu folgen.

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

Beispiel 2: Bleiben Sie beim Zeitfahren innerhalb der beiden Grenzen

Dieses Beispiel bietet einfach hohe Belohnungen, wenn der Agent innerhalb der Grenzen bleibt, und lässt ihn herausfinden, wie er eine Runde am besten beenden kann. Es ist einfach zu programmieren und zu verstehen, aber es dauert wahrscheinlich länger, bis es konvergiert.

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

Beispiel 3: Zickzack bei Zeitfahren verhindern

In diesem Beispiel wird der Agent belohnt, wenn er der Mittellinie folgt, bei zu vielen Lenkbewegungen wird er jedoch bestraft, wodurch Zick-Zack-Bewegungen vermieden werden sollen. Der Agent lernt, im Simulator reibungslos zu fahren, und behält wahrscheinlich dasselbe Verhalten bei, wenn er auf das physische Fahrzeug eingesetzt wird.

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)

Beispiel 4: Bleiben Sie auf einer Fahrspur, ohne gegen stehende Hindernisse oder fahrende Fahrzeuge zu stoßen

Diese Belohnungsfunktion belohnt den Agenten dafür, dass er sich innerhalb der Streckengrenzen aufhält, und bestraft ihn, wenn er Objekten vor der Strecke zu nahe kommt. Der Agent kann sich von Spur zu Spur bewegen, um Kollisionen zu vermeiden. Die Gesamtbelohnung ist eine gewichtete Summe aus den Belohnungen und Bestrafungen. In dem Beispiel wird der Strafe mehr Gewicht beigemessen, um Abstürze zu vermeiden. Experimentiere mit unterschiedlichen Durchschnittsgewichten, um unterschiedliche Verhaltensergebnisse zu trainieren.

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