Open danbi5228 opened 3 months ago
import gym
gym.envs.registry.all() # 환경 전체 목록 확인
env = gym.make("CartPole-v1") # CartPole 환경 생성
obs = env.reset() # 환경 초기화. 환경 생성 후 꼭 초기화 해줘야 함
# [카트의 수평 위치(0.0=중앙), 카트의 속도(양수=우측방향), 막대의 각도 (0.0=수직), 막대의 각속도(양수=시계방향)]
obs # array([-0.01258566, -0.00156614, 0.04207708, -0.00180545])
env.render()
: 시뮬레이션 환경 출력
img = env.render(mode=rgb_array)
)img.shape # (800, 1200, 3)
: 높이, 너비, 채널(3 = 빨강, 초록, 파랑)env.action_space
: 해당 환경에서 가능한 액션
Discrete(2)
가 출력됨. 가능한 행동이 0(왼쪽 가속)과 1(오른쪽 가속)이라는 것을 의미
action = 1
obs, reward, done, info = env.step(action)
obs # array([-0.01261699, 0.19292789, 0.04204097, -0.28092127])
reward # 1.0 . CartPole 환경에서는 어떤 행동을 해도 1.0의 보상을 받음. 가능한 한 오래 실행하는 것이 목표 done # False. 이 값이 True 라면 이 에피소드(한 판)가 끝난 것. 200 스텝 이상이 지나도 에피소드가 종료됨(에이전트 승) info # {}. 다른 환경에서는 이 딕셔너리에 디버깅이나 훈련에 유용한 추가적인 정보가 담길 수 있음 (e.g. 에이전트의 남은 생명)
- env.close(): 환경 반납
- 하드코딩 예시 - 막대가 왼쪽으로 기울어지면 카트를 왼쪽으로 가속하고 오른쪽으로 기울어지면 오른쪽으로 가속시키는 정책
- 결론: 500번 에피소드를 실행해도 최대 68 step. 더 좋은 정책을 위해 신경망 정책을 만들어볼 수 있음
```python
def basic_policy(obs):
angle = obs[2]
return 0 if angle < 0 else 1
totals = []
for episode in range(500):
episode_rewards = 0
obs = env.reset()
for step in range(200):
action = basic_policy(obs)
obs, reward, done, info = env.step(action)
episode_rewards += reward
if done:
break
totals.append(episode_rewards)
import numpy as np
np.mean(totals), np.std(totals), np.min(totals), np.max(totals) # (41.718, 8.85, 24.0, 68.0)
import tensorflow as tf
from tensorflow import keras
n_inputs = 4
model = keras.models.Sequential([
keras.layers.Dense(5, activation="elu", input_shpae=[n_inputs]),
keras.layers.Dense(1, activation="sigmoid"),
])
소프트웨어 에이전트가 행동을 결정하기 위해 사용하는 알고리즘: "정책"
ex) 관측을 입력으로 받고, 수행할 행동을 출력하는 신경망이 정책
정책은 생각할 수 있는 어떤 알고리즘도 될 수 있음, 결정적일 필요가 없음
30분마다 수집한 먼지의 양으로 보상 받는 로봇 진공 청소기가 있을 때, 정책이 어떤 확률 p만큼 전진하는 것일수도, (1-p) 확률만큼 왼쪽이나 오른쪽으로 회전하는 것일수도 있음. 회전 각도는 -r와 +r 사이의 랜덤한 각도일 수 있음
이를 훈련시키기 위해, 변경이 가능한 두 개의 정책 파라미터가 있음
가장 성능이 좋은 조합을 고르는 알고리즘, 정책 탐색 기법
모든 시도 정책 공간에 모든 값을 시도해보기. 모래사장에서 바늘을 찾는 것과 마찬가지
유전 알고리즘 1세대 정책 100개를 랜덤하게 생성해서 시도한 후, 성능이 낮은 정책 80개는 버리고, 20개를 살려 각각 자식 정책 4개를 생산 살아남은 정책과 그 자식은 2세대를 구성 여러 세대에 걸쳐 반복
정책 그래디언트 정책 파라미터에 대한 보상의 그레이디언트를 평가해서 높은 보상의 방향을 따르는 그레이디언트로 파라미터를 수정 즉, p를 조금 증가시키고 30분 지난 후 수집한 먼지 양이 증가했는지 평가. 만약 먼지 양이 많아지면 p를 조금 증가시키고, 그렇지 않으면 p를 감소