예를 들어 이것을 코드로 구현하면 다음과 같습니다.
while not done : action = np.argmax(Q[state, :] + np.random.randn(1, env.action_space.n) / (i+1)) ------ 행동 중 가장 보상(r)이 큰 행동을 고르고, 랜덤 노이즈 방식으로 활용과 탐험 구현 new_state, reward, done, _ = env.step(action) ------ 해당 행동을 했을 때 환경이 변하고, 새로운 상태(state), 보상(reward), 완료(done) 여부를 반환 Q[state, action] = reward + dis * np.max(Q[new_state, :]) ------ Q = R + Q rAll += reward state = new_state
앞서 탐험이라는 단어를 정의해 보았습니다. 경험으로 학습하는 강화 학습에서 최단 시간에 주어진 환경의 모든 상태를 관찰하고, 이를 기반으로 보상을 최대화할 수 있는 행동을 수행하려면 활용(exploitation)과 탐험(exploration) 사이의 균형이 필요합니다.
그럼 활용이란 무엇일까요? 활용이란 현재까지 경험 중 현 상태에서 가장 최대의 보상을 받을 수 있는 행동을 하는 것입니다. 이러한 다양한 경험을 쌓기 위한 새로운 시도를 탐험이라고 합니다. 탐험을 통해 얻는 경험이 늘 최상의 결과를 얻는 것은 아니기 때문에 시간과 자원에 대한 낭비가 발생합니다. 즉, 풍부한 경험이 있어야만 더 좋은 선택을 할 수 있지만, 경험을 쌓기 위한 새로운 시도들은 시간과 자원이 낭비되기 때문에 이 둘 사이의 균형이 필요합니다.