import gym
import numpy as np
env= gym.make('FrozenLake-v0',is_slippery=False) #환경 생성
Q=np.zeros([env.observation_space.n,env.action_space.n]) #Q배열 초기화
rho=0.8 #학습률
lamda=0.99 #할인율
n_episode= 2000
length_episode=100
#최적 행동 가치 함수 찾기
for i in range(n_episode):
s=env.reset()
for j in range(length_episode):
argmaxs= np.argwhere(Q[s,:]==np.amax(Q[s,:])).flatten().tolist()
a=np.random.choice(argmaxs)
s1, r, done,_=env.step(a)
Q[s,a] = Q[s,a]+rho*(r+lamda*np.max(Q[s1,:])-Q[s,a])
s=s1
if done:
break
np.set_printoptions(precision=2)
print(Q)
위의 식에서 사용하는 학습률 $\rho$ (rho)과 할인율 $\gamma$ (lamda)를 선언한다.
n_episode= 2000
length_episode=100
에피소드의 개수와 최대 길이를 정의함
for i in range(n_episode):
s=env.reset()
for j in range(length_episode):
argmaxs= np.argwhere(Q[s,:]==np.amax(Q[s,:])).flatten().tolist()
a=np.random.choice(argmaxs)
s1, r, done,_=env.step(a)
Q[s,a] = Q[s,a]+rho*(r+lamda*np.max(Q[s1,:])-Q[s,a]) #식 18
s=s1
if done:
break