inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

AWS DeepRacer로 배우는 인공지능과 자율주행

Object Avoidance 보상함수 튜닝 관련해서 조언을 해주실 수 있을까요?

240

박근우
0

Object avoidance 보상함수를 여러개 설계하고 그중에서 가장 우수한 모델을 만들었는데 아쉽게도 주행 시간은 1 lap당 대략 35초 정도가 나오고 장애물 충돌이 1트랙 당 1번 정도 있으며, off track은 없습니다.

 

안정성면에서 좀 더 개선을 하고 싶은데 혹시 제가 설계한 보상함수를 어떻게 새로 튜닝해야할까요?

코드랑 하이퍼 파라미터, 보상함수 그래프는 아래와 같습니다.

image.png

 

image.png

 

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)
    

강화학습 자율주행 deepracer

답변 1

0

AI CASTLE

안녕하세요. 박근우님.

작성하신 보상함수는 의도한대로 작동하지 않아 보입니다.

아래와 같이 수정하는 것이 좋아 보입니다.

 


# 장애물 고려
import math
car_x = params['x']
car_y = params['y']
closest_objects = params['closest_objects']

front_object_idx, next_object_idx = closest_objects
next_object_x, next_object_y = objects_location[next_object_idx]
distance_from_next_object = math.sqrt((car_x - next_object_x) ** 2 + (car_y - next_object_y) ** 2)

if distance_from_next_object < 0.8:
    # 물체와 가까울 때 높은 속도이면 감점
    if speed > 1.0:
        reward *= 0.7
    
    # 물체와 멀리 떨어져 있을 수록 보상 증가
    reward += 0.3 * distance_from_next_object

# 진행률 보상 (평균화)
reward += params['progress'] / params['steps']

# 거의 완주했으면 보너스 -> 삭제

 

Hello TensorFlow

0

574

1