Object avoidance 보상함수를 여러개 설계하고 그중에서 가장 우수한 모델을 만들었는데 아쉽게도 주행 시간은 1 lap당 대략 35초 정도가 나오고 장애물 충돌이 1트랙 당 1번 정도 있으며, off track은 없습니다.
안정성면에서 좀 더 개선을 하고 싶은데 혹시 제가 설계한 보상함수를 어떻게 새로 튜닝해야할까요?
코드랑 하이퍼 파라미터, 보상함수 그래프는 아래와 같습니다.


def reward_function(params):
if not params['all_wheels_on_track']:
return 1e-3
reward = 1.0
# 중심선 거리 보상
track_width = params['track_width']
distance_from_center = params['distance_from_center']
normalized_distance = distance_from_center / (track_width / 2)
reward += 1.2 * (1.0 - normalized_distance ** 2) # 중심선 보상 강화
# 속도 보상
speed = params['speed']
max_speed = 1.2 # 여전히 안정 주행 기준
reward += speed / max_speed
# 장애물 고려
objects_distance = params.get('closest_objects', [None, None])
if objects_distance[0] is not None:
distance_closest_object = objects_distance[0]
if distance_closest_object < 0.8:
if speed > 1.0:
reward *= 0.7 # 감점은 조금 약하게
reward += 0.3 * (1.0 - (distance_closest_object / 0.8)) # 장애물 접근시 보상 감소
# Steering penalty (완화)
steering = abs(params['steering_angle'])
reward *= (1.0 - steering / 45.0) # 기존 30도 → 45도로 완화
# 진행률 보상
reward += params['progress'] / 100.0
# 거의 완주했으면 보너스
if params['progress'] > 90.0 and params['all_wheels_on_track']:
reward += 5.0
return float(reward)
안녕하세요. 박근우님.
작성하신 보상함수는 의도한대로 작동하지 않아 보입니다.
아래와 같이 수정하는 것이 좋아 보입니다.
답글