강화학습을 이용하여 Unity에서 자동차 달리게하기(3/3)

Updated:

더 빠르게 달리기 위해

마지막으로 더 빨리 체크포인트를 통과했을때 더많은 보상을 준다면 자동차가 과연 얼마나 더빠르게 달릴것인가, 그리고 동선에 변화가 있는가에 대해 확인을 한다.

이를위해 코드에 다음과같이 설정을한다.

public void CheckPointReached(Checkpoint checkpoint)
{
    //체크포인트
    if (nextCheckPointToReach != checkpoint) 
    {
        return;
    }
    lastCheckpoint = Checkpoints[CurrentCheckpointIndex];
    reachedCheckpoint?.Invoke(checkpoint);
    CurrentCheckpointIndex++;

    if (CurrentCheckpointIndex >= Checkpoints.Count)
    {
        carAgent.AddReward(TimeLeft / 30);         //시간에 대한 보상 추가
        carAgent.AddReward(1f);
        carAgent.EndEpisode();
    }
    else
    {
        carAgent.checkDirection();
        carAgent.AddReward(TimeLeft / 30);     //시간에 대한 보상 추가
        carAgent.AddReward(1f);
        SetNextCheckpoint();
    }
}

체크포인트 구간별로 시간이 30초 주어졌으므로 남은시간 / 30초 로 해서 빠르면 최대 1점의 추가점수를 얻을수 있도록 하였다.

public override void CollectObservations(VectorSensor sensor)
{
    Vector3 diff = _checkpointManager.nextCheckPointToReach.transform.position - transform.position;
         
    sensor.AddObservation(diff); // 자동차의 다음체크포인트의 백터좌표 차는 레이케스트가 계산해주는게 아니므로 추가해준다. 
    sensor.AddObservation(_checkpointManager.TimeLeft / 30); // 시간에 대한 보상
    sensor.AddObservation(rb.velocity.magnitude); // 자동차의 속도를 고려하도록 한다.(커브를 위해)

    AddReward(-0.001f); // 자동차가 활발하게 움직이게끔 보상을 조금 줄인다.
}

모델이 남은시간에 대해서 고려할수있게끔 관측을 시킨다.

이후 아까와같이 훈련을 진행한 후

양쪽의 자동차중 어느것이 더빠른가에 대해 경주를 하였다. 공정한 심사를위해 Spawnpoint는 하나만 지정하였고, 두개의 자동차에 각각 다른 onnx파일을 적용시켰다.

훈련이 아주잘돼서 100%확률로 완주를 했으면 좋아겠지만 훈련횟수 부족이 문제인지 가끔가다 벽에 박기때문에 완주를 했을때의 시간을 측정한다.

주행은 각각 총 8번을 진행하였다.

시간RUn

먼저 기존의 시간추가 보상이 없을때의 결과이다. 최소 약 63초, 최대 약 69초까지 걸리는 모습이 보이며 평균적으로 약 64.97초가 걸린 것이 확인된다.

WithTime

다음은 시간에대한 보상이 추가됐을때의 결과이다. 최소 약 61초, 최대 66초까지 걸리는 모습이 보이며 평균적으로 약 63.95초가 걸린것으로 확인된다.

평균적으로 약 1초정도가 빨라졌다고 볼수있는데 기본적으로 확인해본 결과 차가 움직이는 동선자체에 변화보다는, 속력에 대한 변화만 추가된걸로 확인된다.

기대했던 동선에 대한변화는 다음과같다.

도로

예를들어, 커브 구간을 더 빠르게 통과하기 위해선 빨간색으로 표시된 동선보다, 파란색으로 표시된 동선으로 움직여야하는데,

빨간색 동선으로 움직이면 커브를 하기위해 그만큼 감속을 더해야되고 벽에 부닺힐 위험이 높게된다.

반면 파란색 동선으로 움직이게 되면 별로 감속을 하지않아도 빠르고 안정적으로 통과 할수 있게된다.

이러한 동선의 변화는 시간에 대한 보상뿐만아니라 다른 충분한 연구를 통해 이루어질수 있도록 생각된다.

이상 마치도록 한다.

Leave a comment