import gym
import time
env = gym.make('CartPole-v1') #๊ฐํํ์ต ํ๊ฒฝ ๋ถ๋ฌ์ค๊ธฐ
for i_episode in range(20):
# ์๋ก์ด ์ํผ์๋(initial environment)๋ฅผ ๋ถ๋ฌ์จ๋ค(reset)
observation = env.reset()
for t in range(100):
env.render() #ํ๋ฉด์ ์ถ๋ ฅ / ํ๋ ์ทจํ๊ธฐ ์ด์ ํ๊ฒฝ์์ ์ป์ ๊ด์ฐฐ๊ฐ(obsevation)์ ์ฉํด์ ๊ทธ๋ฆผ
time.sleep(0.05)
# ํ๋(action)์ ์ทจํ๊ธฐ ์ด์ ์ ํ๊ฒฝ์ ๋ํด ์ป์ ๊ด์ฐฐ๊ฐ(observation)
print('observation before action:')
print(observation)
action = env.action_space.sample()#์์์ action ์ ํ
observation, reward, done, info = env.step(action)#์ ํํ action์ ํ๊ฒฝ์ผ๋ก ๋ณด๋
time.sleep(0.05)
# ํ๋(action)์ ์ทจํ ์ดํ์ ํ๊ฒฝ์ ๋ํด ์ป์ ๊ด์ฐฐ๊ฐ(observation)
print('observation after action:')
print(observation)
if done:
print("Episode finished after {} timesteps".format(t+1))
break
env.close()
Gym์ ๊ฐํํ์ต์ ๊ตฌํ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ๊ฐ๋จํ ์ค์ตํ ์ ์๋ OpenAI์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- A pole is attached by an un-actuated joint to a cart, which moves along
- a frictionless track. The pendulum starts upright, and the goal is to
- prevent it from falling over by increasing and reducing the cart's velocity.
- This environment corresponds to the version of the cart-pole problem
์ํผ์๋ ์ข ๋ฃ ์กฐ๊ฑด
- ๋ง๋๊ธฐ์ ๊ฐ๋๊ฐ 12๋ ์ด์ ๋์ด๊ฐ๋
- ์นดํธ ์์น๊ฐ 2.4๋ณด๋ค ํด๋(์นดํธ ์ค์์ด ๋์คํ๋ ์ด ๋์ผ๋ก ๋์ด๊ฐ๋)
- ์ํผ์๋๊ฐ 200๋ณด๋ค ํด๋
- ํ๊ท 100ํ ์ฐ์ ์ํ์์ 195.0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์๋ ํด๊ฒฐ๋๋ค ํ๋จํ๋ค.
env.step ํจ์๋ฅผ ์ด์ฉํด์ ์์ด์ ํธ๊ฐ ํ๊ฒฝ(environment)์ ๋ํ ํ๋(action)์ ์ทจํ๋ฉด, ํ๋ ์ดํ์ ํ๋ํ ํ๊ฒฝ์ ๋ํ ์ ๋ณด๋ฅผ ๋ฆฌํด(return)ํด์ฃผ๊ฒ ๋๋ค.
<CartPoleํ๊ฒฝ์์ ๋ฆฌํดํด์ฃผ๋ ๊ฐ๋ค>
observation : ํ๊ฒฝ์ ๋ํ ์ ๋ณด๋ฅผ ํฌํจํ 4-dimension vector๋ก ๊ฐ๊ฐ Cart Position(์นดํธ์ ์์น), Cart Velocity(์นดํธ์ ์๋), Pole Angle(๋ง๋๊ธฐ์ ๊ฐ๋), Pole Velocity At Tip(๋ง๋๊ธฐ ๋์ ์๋)์ ์๋ฏธํ๋ค.
reward๋ ๋์ด์ง์ง ์์ ๊ฒฝ์ฐ ๋งค time๋ง๋ค +1์ ๊ฐ์ ๊ฐ๋๋ค.
done์ ํ์ฌ ์ํผ์๋(episode)๊ฐ ๋๋ฌ๋์ง ๋๋์ง ์์๋์ง๋ฅผ ๋ํ๋ด๋ boolean ๊ฐ์ด๋ค.
(๋ง๋๊ธฐ๊ฐ ์ฐ๋ฌ์ง๊ฑฐ๋ ์นดํธ๊ฐ ์ค์์์ ๋๋ฌด ๋ฉ๋ฆฌ ์ด๋ํ๋ฉด episode๋ฅผ ์ข ๋ฃ(terminate)ํ๋ค.
CartPole ํ๊ฒฝ์์ Agent๊ฐ ์ทจํ ์ ์๋ ํ๋(action_space)์ 0, 1 ๋๊ฐ์ ๊ฐ์ด๋ค.
0์ ์ผ์ชฝ์ผ๋ก ์ด๋, 1์ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ ๋ปํ๋ค.
CartPole-v0์ ํ ์ํผ์๋์์ ์ป์ ์ ์๋ ์ต๋๋ณด์์ 200 step์ด๋ค.
๋งค ์คํญ๋ง๋ค ๋ง๋๊ฐ ๋์ด์ง์ง ์์ผ๋ฉด 1์ ๋ณด์์ ๋ฐ๋๋ฐ,
100 ์ํผ์๋ ์ฐ์์ผ๋ก 195์ด์์ ๋ณด์(reward)๋ฅผ ํ๋ํ๋ฉด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ค๊ณ ๋ณธ๋ค.
step ํจ์
์ ํํ action์ stepํจ์๋ก ๋ณด๋ด๋ฉด, ๋ค์์ 4๊ฐ์ง value๋ฅผ returnํ๋ค.
observation : ํฝ์
๋ฐ์ดํฐ๊ณผ ๊ฐ์ ๊ด์ฐฐ๊ฐ
reward : ๊ทธ action์ ํ๋ฏ๋ก์ ํ๊ฒฝ์์ ๋ฐ๋ reward๊ฐ
done : ์ํผ์๋๊ฐ terminal ๋๋ฉด True( ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ฑฐ๋, ์์ด์ ํธ๊ฐ ๋ชฉ์จ์ ์์์๋)
info : ํ๊ฒฝ์ ์ ๋ณด๋ค( ์ ์ ๋ฑ๋ฑ )
Agent๋ ๊ฐ time_step๋ง๋ค action์ ์ ํํ๋ฉฐ Environment๊ณผ ์ํธ์์ฉ์ ํ๋ค.
์ด๋ Environment๋ Agent๋ก๋ถํฐ action์ ๋ฐ๊ณ reward์ observation์ return ํ๋ค.