-
03-2. Monte Carlo (MC) 코드실험실/RL 2018. 7. 29. 11:54
에이전트는 에피소드가 마침(완료) 상태에 갈 때까지 아무것도 하지 않는다. 마침 상태가 되면 에이전트는 지나온 모든 상태의 value function을 업데이트한다.
에피소드 동안 방문했던 모든 상태의 value function을 업데이트하면 에이전트는 다시 시작 상태에서부터 새로운 에피소드를 진행한다.
이러한 과정을 반복하는 것이 Monte Carlo prediction이다.
if __name__ == "__main__": env = Env() agent = MCAgent(actions=list(range(env.n_actions))) # [0, 1, 2, 3] # generate an episodes for episode in range(10): # 1000 state = env.reset() # 입실론 탐욕 정책에 따라서 current state에 따른 action을 반환 action = agent.get_action(state) while True: env.render() # 다음 상태로 이동 : 보상(reward)은 숫자이고, 완료 여부(done)는 boolean next_state, reward, done = env.step(action) # 메모리에 sample 저장 agent.save_sample(next_state, reward, done) # 다음 상태로 이동하기위한 action 받아옴 action = agent.get_action(next_state) # 에피소드가 완료됐을 때, value function 업데이트 if done: print("episode : ", episode) agent.update() agent.samples.clear() break
# 몬테카를로 에이전트 (모든 에피소드 각각의 샘플로 부터 학습) class MCAgent: def __init__(self, actions): self.width = 5 self.height = 5 self.actions = actions # [0, 1, 2, 3] self.learning_rate = 0.01 # step size self.discount_factor = 0.9 self.epsilon = 0.1 self.samples = [] # '한 episode 가 끝나는 terminal state 까지' 이어지는 모든 과정(trajectory)의 next_state, reward, done 저장 self.value_table = defaultdict(float) # 에이전트가 방문한 상태의 value function : 방문했던 그리드 상태(위치)에 대한 value function 저장 # 메모리에 sample 추가 def save_sample(self, state, reward, done): self.samples.append([state, reward, done]) # 모든 에피소드에서 에이전트가 방문한 state의 value function 업데이트 # First-visit def update(self): G_t = 0 visit_state = [] # for each state s appearing in the episode : for sample in reversed(self.samples): state = str(sample[0]) # following the first occurrence of s with return G # 첫번째 방문에 대한 것만 사용하므로, 두번 이상 방문한 s with return G는 계산되지 않는다. if state not in visit_state: visit_state.append(state) # reverse 해서 사용하므로 G6 -> G5 -> G4 -> G3 -> G2 -> G1의 형태로 계산된다. G_t = self.discount_factor * (sample[1] + G_t) value = self.value_table[state] # current 상태(위치)의 value function 값 # value = mean return self.value_table[state] = (value + self.learning_rate * (G_t - value)) ...
44page 추가 정리
'실험실 > RL' 카테고리의 다른 글
Value Function (0) 2018.07.30 02. Value Iteration (0) 2018.07.29 01. Policy Iteration (0) 2018.07.29