이번 주차에는 Deepracer student preseason에 참여하여 reward function을 변경해가며 결괄르 확인하는 활동을 진행했다.
현재 상태는 아래와 같다.
위 모델에 사용한 reward function은 아래와 같다.
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 at varying distances away from the center line
marker_1 = 0.1 * track_width
marker_2 = 0.2 * track_width
marker_3 = 0.3 * track_width
marker_4 = 0.4 * track_width
marker_5 = 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.5
elif distance_from_center <= marker_2:
reward = 1.2
elif distance_from_center <= marker_3:
reward = 0.5
elif distance_from_center <= marker_4:
reward = 0.25
elif distance_from_center <= marker_5:
reward = 0.1
else:
reward = 1e-3 # likely crashed/ close to off track
return float(reward)
기본적으로 제공하는 follow the center line 알고리즘의 reward 구간을 기존 3단계에서 5단계로 확장하여 0.3 범위 내부와 그 외부의 reward 차이를 크게 주어 가능한 중앙선에 가까이 위치하도록 조절하였다. 6시간 학습 결과가 위와 같다.
팀세션 진행 이후 팀원인 K님과 S님의 코드를 보며 새로운 reward function을 작성중이다. 해당 코드는 곧 github에 업로드할 예정이다. 그 사이에 미리 만들어둔 새로운 reward function을 학습하는 중에 있다. 코드는 아래와 같다.
def reward_function(params):
# Example of rewarding the agent to follow center line
# Read input parameters
track_width = params['track_width']
all_wheels_on_track = params['all_wheels_on_track']
distance_from_center = params['distance_from_center']
# Calculate 3 markers that are at varying distances away from the center line
marker_1 = 0.1 * track_width
marker_2 = 0.2 * track_width
marker_25 = 0.25 * track_width
marker_3 = 0.3 * track_width
marker_35 = 0.35 * track_width
marker_4 = 0.4 * track_width
marker_5 = 0.5 * track_width
# Give higher reward if the car is closer to center line and vice versa
if all_wheels_on_track:
if distance_from_center <= marker_1:
reward = 1.4
elif distance_from_center <= marker_2:
reward = 1.3
elif distance_from_center <= marker_25:
reward = 1.25
elif distance_from_center <= marker_3:
reward = 1.2
elif distance_from_center <= marker_35:
reward = 1.15
elif distance_from_center <= marker_4:
reward = 0.5
elif distance_from_center <= marker_5:
reward = 0.1
else:
reward = 1e-3
else:
reward = 1e-3
return float(reward)
트랙을 따라가는데 있어 좌회전이 많은 코스이기에 굳이 중앙선을 따라가기 보다는 1차선에 붙어있는 것이 유리하다 판단하여 위와 같은 변주를 주었다. 결과가 나오는대로 본 글에 추가할 예정이다.
이후에는 waypoint를 이용하여 다음 waypoint까지의 각도를 계산하여 회전구간과 직선 구간의 속도를 달리하는 함수를 학습에 이용할 예정이다.