반응형
메모:
우선 장애물/경쟁차 회피 제외하고 생각
import math
# import random
# import numpy
# import scipy
# import shapely
def reward_function(params):
# 초기화
reward = 0
# param 값 다 가져오기
all_wheels_on_track = params['all_wheels_on_track']
x = params['x']
y = params['y']
closest_objects = params['closest_objects']
closest_waypoints = params['closest_waypoints']
distance_from_center = params['distance_from_center']
is_crashed = params['is_crashed']
is_left_of_center = params['is_left_of_center']
is_offtrack = params['is_offtrack']
is_reversed = params['is_reversed']
heading = params['heading']
objects_distance = params['objects_distance']
objects_heading = params['objects_heading']
objects_left_of_center = params['objects_left_of_center']
objects_location = params['objects_location']
objects_speed = params['objects_speed']
progress = params['progress']
speed = params['speed']
steering_angle = params['steering_angle']
steps = params['steps']
track_length = params['track_length']
track_width = params['track_width']
waypoints = params['waypoints']
# [1]트랙 이탈 방지
if not all_wheels_on_track:
reward -= 10
# [2]가급적 트랙 중앙으로 달리게 ( [1]과 중복요소 느낌이긴 한데 세부조정 느낌)
if 0<=distance_from_center and distance_from_center < track_width/2: reward += 10
# [3]진척률 확인
#매 순간 측정되는 값에 진척률이 고려되면 오히려 노이즈인것 같음
#목적지로 가는 방향만 잘 설정되면 되지 진척률은 순간순간으로 보면
#해당 순간까지의 시간을 변수로 받아올 수 없어서 의미 없어 보임
# [4]속도 확인, 일단 빠른 속도가 좋은걸로
reward += speed * 2
# [5]주행 방향 고려, 뒤에 있는 트랙좌표와 앞에 있는 트랙좌표 간 각도와 유사하게
np = waypoints[closest_waypoints[1]] #공홈
pp = waypoints[closest_waypoints[0]] #공홈
track_direction = math.atan2(np[1] - pp[1], np[0] - pp[0]) #공홈
track_direction = math.degrees(track_direction) #공홈
direction_diff = abs(track_direction - heading) #공홈
if direction_diff < 5:
reward += 5
# [6]트랙 좌표 고려 - 정주행 확인, 다음, 다음, 다음 지점으로 향하게 heading 조절
if closest_waypoints[1] + 2 < len(waypoints):
nnnp = waypoints[closest_waypoints[1] + 2]
track_direction = math.atan2(nnnp[1] - y, nnnp[0] - x) #공홈
track_direction = math.degrees(track_direction) #공홈
if track_direction < 5
reward += 10;
return float(reward)
결과:
2번 이탈
16초
다음에 해볼거:
급커브 예측해서 속도 낮을때 가산점 / 스티어링 많이 꺾으면 가산점
반대로 직진 구간 예측해서 속도 높으면 가산점
기존 디폴트 로직 그대로 추가해서 학습시켜보기
최저속도는 1로 급커브때문에
반응형
'1차완료 > ML' 카테고리의 다른 글
DeepRacer 직전 모델 살짝 튜닝, 디폴트 로직 추가 (0) | 2024.02.19 |
---|---|
DeepRacer 세번째 모델, PPO대신 SAC 선택, 최저속도 0.5에서 1로 상향, 최고속도 4, reward function은 gpt, 나머지 디폴트 (2024021902GPT) (0) | 2024.02.19 |
DeepRacer 모델 생성 시 (0) | 2024.02.19 |
DeepRacer 두번째 모델 생성, 디폴트에서 최고속도랑 보상 정보만 변경 (deepracer2024021901) (0) | 2024.02.19 |
DeepRacer 디폴트 모델로 생성, 테스트 결과(deepracer2024firstTestModel) (0) | 2024.02.19 |