학습을 위해서는 환경이 있어야 하고, 학습 코드가 있어야 한다. 원하는 것을 학습시키기 위해서는 원하는 대로 환경을 만드는 것이 핵심인데, 처음 환경을 만들 때는 무엇부터 해야 할지 감이 잡히지 않는다. 이런 초보자들을 위해 gym에서는 여러 환경을 제공한다. 이 환경의 코드들을 뜯어보며 환경을 이렇게 만들면 되는구나 감을 잡고, 더 나아가 이 환경을 조금씩 봐꿔가보는 과정을 거치면 환경을 만드는 것에 익숙해질 수 있다고 생각한다.
gym에서 예시로 나와있는 대표적인 예제인 Mountain Car Continuous에 대해서 간단히 정리해보려 한다. 이 예제에 대한 공식 문서와 github에 코드는 다음과 같다.
공식 문서 : https://gymnasium.farama.org/environments/classic_control/mountain_car_continuous/
학습하기 위한 환경의 필수 요건인 init, step, reset 함수가 구현되어 있고, car가 움직이는 모습을 보여주기 위한 render 함수 또한 구현되어 있다. (render 함수는 뜯어볼 필요 없다)
동작 방식을 설명하자면, action space는 매 step 좌우로(x축 만) 얼마 정도의 힘을 작용할지에 대한 것이고 -1.0 ~ 1.0 범위 내에서 이루어진다. 자동차의 속도가 매번 이 범위에서 있는 것이 아니라, 힘을 준다는 것을 인지하자.
observation space는 상태에 대한 범위를 나타내는데, 2개의 값을 가진다.
[ x_position, velocity ]
첫 번째는 자동차의 x축 위치로, 위에 자동차가 움직이는 범위가 -1.2~0.6이라는 것을 의미한다. (y축 값은 어차피 자동차가 고정된 선 위에서 움직이므로, x축 값을 알면 자동으로 구해진다)
두 번째 값은 자동차의 속력으로 너무 빨라지는 것을 방지하기 위해 -0.07~0.07 범위로 한정하고, 힘을 더 주어도 이 범위 이상으로 넘어가지 않게 한다.
매 step 함수에서 조금씩 힘을 주어 자동차의 속도를 만들어 위치를 움직여주다가, 설정한 goal에 x축 값이 도달하면 종료함을 terminated를 True로 바꿔 return 값을 통해 알려준다.
이 환경은 gym에서 기본적으로 주어지는 함수이므로, gym을 import하면 다음과 같이 코드를 입력하여 환경을 불러올 수 있다.
env = gym.make('MountainCar-v0')
이렇게 기본 환경을 불러와서 학습 코드를 만들어서 학습 시킬 수도 있고, 이 환경 코드를 복사해서 원하는 동작을 할 수 있도록 환경 파일을 새로 만들어서 환경을 import 할 수도 있다. 이렇게 mountain car을 변경한 코드는 다음 글에서..
'연구 > 강화학습' 카테고리의 다른 글
stable baselines 3 사용법 기초 (0) | 2024.04.19 |
---|---|
RLlib에서 tensorboard로 결과를 visualize 하는 법 (0) | 2024.02.18 |
RLlib 기초 - 예제 (Driving 2d Car) (1) | 2024.02.12 |
RLlib 기초 - 예제 (grid world) (0) | 2024.01.14 |
RLlib 사용 기초 (2) | 2024.01.13 |