2. DDQN 코드 구현
2.1 라이브러리 포함하기
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import gym
from collections import namedtuple
import random
import torch
from torch import nn
from torch import optim
import torch.nn.functional as F
2.2 state 변수 설정
Transition = namedtuple('Transition', ('state', 'action', 'next_state', 'reward'))
2.3 상수 정의
ENV = 'CartPole-v1'
GAMMA = 0.99
MAX_STEPS = 200
NUM_EPISODES = 500
BATCH_SIZE = 32
CAPACITY = 10000
2.4 ReplayMemory 구현
class ReplayMemory:
def __init__(self, CAPACITY):
self.capacity = CAPACITY
self.memory = []
self.index = 0
def push(self, state, action, state_next, reward):
'''transition = (state, action, state_next, reward) Memory에 저장'''
if len(self.memory) < self.capacity:
self.memory.append(None)
self.memory[self.index] = Transition(state, action, state_next, reward)
self.index = (self.index + 1) % self.capacity
def sample(self, batch_size):
'''Memory에서 batch_size만큼 sampleing 하기'''
return random.sample(self.memory, batch_size)
def __len__(self):
'''len 함수로 현재 저장된 transition 개수 return'''
return len(self.memory)
2.5 DDQN 알고리즘 구현
class Brain:
def __init__(self, num_states, num_actions):
self.num_actions = num_actions
self.memory = ReplayMemory(CAPACITY)
self.main_q_network = nn.Sequential()
self.main_q_network.add_module('fc1', nn.Linear(num_states,32))
self.main_q_network.add_module('relu1', nn.ReLU())
self.main_q_network.add_module('fc2', nn.Linear(32,32))
self.main_q_network.add_module('relu2', nn.ReLU())
self.main_q_network.add_module('fc3', nn.Linear(32, num_actions))
self.target_q_network = nn.Sequential()
self.target_q_network.add_module('fc1', nn.Linear(num_states,32))
self.target_q_network.add_module('relu1', nn.ReLU())
self.target_q_network.add_module('fc2', nn.Linear(32,32))
self.target_q_network.add_module('relu2', nn.ReLU())
self.target_q_network.add_module('fc3', nn.Linear(32, num_actions))
self.optimizer = optim.Adam(self.main_q_network.parameters(), lr=0.0001)
def replay(self):
'''Exprience Replay로 NN의 weight 학습'''
if len(self.memory) < BATCH_SIZE:
return
self.batch, self.state_batch, self.action_batch, self.reward_batch, self.non_final_next_states = self.make_minibatch()
self.expected_state_action_values = self.get_expected_state_action_values()
self.update_main_q_network()
def decide_action(self, state, episode):
'''현재 state에 따라 action 결정'''
epsilon = 0.5 * (1 / (episode+1))
if epsilon <= np.random.uniform(0,1):
self.main_q_network.eval()
with torch.no_grad():
action = self.main_q_network(state).max(1)[1].view(1,1)
else:
action = torch.LongTensor([[random.randrange(self.num_actions)]])
return action
def make_minibatch(self):
'''2. 미니배치 생성'''
transitions = self.memory.sample(BATCH_SIZE)
batch = Transition(*zip(*transitions))
state_batch = torch.cat(batch.state)
action_batch = torch.cat(batch.action)
reward_batch = torch.cat(batch.reward)
non_final_next_states = torch.cat([s for s in batch.next_state
if s is not None])
return batch, state_batch, action_batch, reward_batch, non_final_next_states
def get_expected_state_action_values(self):
'''정답신호로 사용할 Q(s_t, a_t) 계산'''
self.main_q_network.eval()
self.target_q_network.eval()
self.state_action_values = self.main_q_network(self.state_batch).gather(1, self.action_batch)
non_final_mask = torch.tensor(list(map(lambda s: s is not None, self.batch.next_state)), dtype=torch.bool)
next_state_values = torch.zeros(BATCH_SIZE)
a_m = torch.zeros(BATCH_SIZE).type(torch.LongTensor)
a_m[non_final_mask] = self.main_q_network(self.non_final_next_states).detach().max(1)[1]
a_m_non_final_next_states = a_m[non_final_mask].view(-1,1)
next_state_values[non_final_mask] = self.target_q_network(self.non_final_next_states
).gather(1, a_m_non_final_next_states).max(1)[0].detach().squeeze()
expected_state_action_values = self.reward_batch + GAMMA * next_state_values
return expected_state_action_values
def update_main_q_network(self):
'''4. 결합 가중치 수정'''
self.main_q_network.train()
loss = F.smooth_l1_loss(self.state_action_values,
self.expected_state_action_values.unsqueeze(1))
self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
def update_target_q_network(self):
'''주기적으로 Target Q-Network의 weight를 Main Q-Network와 맞추기'''
self.target_q_network.load_state_dict(self.main_q_network.state_dict())
2.6 Agent 정의
class Agent:
def __init__(self, num_states, num_actions):
'''task의 state 및 action 수를 설정'''
self.brain = Brain(num_states, num_actions)
def update_q_function(self):
'''Q 함수를 수정'''
self.brain.replay()
def get_action(self, state, episode):
'''action 결정'''
action = self.brain.decide_action(state, episode)
return action
def memorize(self, state, action, state_next, reward):
''' memory 객체에 state, action, state_next, reward 내용 저장'''
self.brain.memory.push(state, action, state_next, reward)
def update_target_q_function(self):
'''Target Q-Network를 Main Q-network와 맞추기'''
self.brain.update_target_q_network()
2.7 Environment 정의
class Environment:
def __init__(self):
self.env = gym.make(ENV, render_mode='human')
num_states = self.env.observation_space.shape[0]
num_actions = self.env.action_space.n
self.agent = Agent(num_states, num_actions)
self.episodes = []
def run(self):
'''실행'''
episode_10_list = np.zeros(10)
complete_episodes = 0
episode_final = False
for episode in range(NUM_EPISODES):
observation = self.env.reset()[0]
state = observation
state = torch.from_numpy(state).type(torch.FloatTensor)
state = torch.unsqueeze(state, 0)
for step in range(MAX_STEPS):
action = self.agent.get_action(state, episode)
observation_next, _, done, _, _ = self.env.step(action.item())
if done:
state_next = None
episode_10_list = np.hstack( (episode_10_list[1:], step+1) )
if step < 195:
reward = torch.FloatTensor([-1.0])
complete_episodes = 0
else:
reward = torch.FloatTensor([1.0])
complete_episodes = complete_episodes+1
else:
reward = torch.FloatTensor([0.0])
state_next = observation_next
state_next = torch.from_numpy(state_next).type(torch.FloatTensor)
state_next = torch.unsqueeze(state_next, 0)
self.agent.memorize(state, action, state_next, reward)
self.agent.update_q_function()
state = state_next
if done:
print('%d Episode: Finished after %d steps: 최근 10 Episode의 평균 단계 수 = %.1lf' % (episode, step+1, episode_10_list.mean()))
self.episodes.append(step+1)
if(episode % 2 ==0):
self.agent.update_target_q_function()
break
if len(self.episodes) > 200:
episode_final = True
if episode_final is True:
break
if complete_episodes >=10:
print('10 episode 연속 성공')
episode_final = True
cartpole_env = Environment()
cartpole_env.run()
0 Episode: Finished after 35 steps: 최근 10 Episode의 평균 단계 수 = 3.5
1 Episode: Finished after 37 steps: 최근 10 Episode의 평균 단계 수 = 7.2
2 Episode: Finished after 45 steps: 최근 10 Episode의 평균 단계 수 = 11.7
3 Episode: Finished after 29 steps: 최근 10 Episode의 평균 단계 수 = 14.6
4 Episode: Finished after 34 steps: 최근 10 Episode의 평균 단계 수 = 18.0
5 Episode: Finished after 38 steps: 최근 10 Episode의 평균 단계 수 = 21.8
6 Episode: Finished after 30 steps: 최근 10 Episode의 평균 단계 수 = 24.8
7 Episode: Finished after 42 steps: 최근 10 Episode의 평균 단계 수 = 29.0
8 Episode: Finished after 26 steps: 최근 10 Episode의 평균 단계 수 = 31.6
9 Episode: Finished after 20 steps: 최근 10 Episode의 평균 단계 수 = 33.6
10 Episode: Finished after 32 steps: 최근 10 Episode의 평균 단계 수 = 33.3
11 Episode: Finished after 29 steps: 최근 10 Episode의 평균 단계 수 = 32.5
12 Episode: Finished after 32 steps: 최근 10 Episode의 평균 단계 수 = 31.2
13 Episode: Finished after 48 steps: 최근 10 Episode의 평균 단계 수 = 33.1
14 Episode: Finished after 36 steps: 최근 10 Episode의 평균 단계 수 = 33.3
15 Episode: Finished after 35 steps: 최근 10 Episode의 평균 단계 수 = 33.0
16 Episode: Finished after 27 steps: 최근 10 Episode의 평균 단계 수 = 32.7
17 Episode: Finished after 43 steps: 최근 10 Episode의 평균 단계 수 = 32.8
18 Episode: Finished after 26 steps: 최근 10 Episode의 평균 단계 수 = 32.8
19 Episode: Finished after 27 steps: 최근 10 Episode의 평균 단계 수 = 33.5
20 Episode: Finished after 56 steps: 최근 10 Episode의 평균 단계 수 = 35.9
21 Episode: Finished after 29 steps: 최근 10 Episode의 평균 단계 수 = 35.9
22 Episode: Finished after 60 steps: 최근 10 Episode의 평균 단계 수 = 38.7
23 Episode: Finished after 67 steps: 최근 10 Episode의 평균 단계 수 = 40.6
24 Episode: Finished after 22 steps: 최근 10 Episode의 평균 단계 수 = 39.2
25 Episode: Finished after 20 steps: 최근 10 Episode의 평균 단계 수 = 37.7
26 Episode: Finished after 31 steps: 최근 10 Episode의 평균 단계 수 = 38.1
27 Episode: Finished after 30 steps: 최근 10 Episode의 평균 단계 수 = 36.8
28 Episode: Finished after 15 steps: 최근 10 Episode의 평균 단계 수 = 35.7
29 Episode: Finished after 41 steps: 최근 10 Episode의 평균 단계 수 = 37.1
30 Episode: Finished after 25 steps: 최근 10 Episode의 평균 단계 수 = 34.0
31 Episode: Finished after 49 steps: 최근 10 Episode의 평균 단계 수 = 36.0
32 Episode: Finished after 47 steps: 최근 10 Episode의 평균 단계 수 = 34.7
33 Episode: Finished after 28 steps: 최근 10 Episode의 평균 단계 수 = 30.8
34 Episode: Finished after 36 steps: 최근 10 Episode의 평균 단계 수 = 32.2
35 Episode: Finished after 28 steps: 최근 10 Episode의 평균 단계 수 = 33.0
36 Episode: Finished after 35 steps: 최근 10 Episode의 평균 단계 수 = 33.4
37 Episode: Finished after 23 steps: 최근 10 Episode의 평균 단계 수 = 32.7
38 Episode: Finished after 58 steps: 최근 10 Episode의 평균 단계 수 = 37.0
39 Episode: Finished after 60 steps: 최근 10 Episode의 평균 단계 수 = 38.9
40 Episode: Finished after 34 steps: 최근 10 Episode의 평균 단계 수 = 39.8
41 Episode: Finished after 30 steps: 최근 10 Episode의 평균 단계 수 = 37.9
42 Episode: Finished after 52 steps: 최근 10 Episode의 평균 단계 수 = 38.4
43 Episode: Finished after 33 steps: 최근 10 Episode의 평균 단계 수 = 38.9
44 Episode: Finished after 28 steps: 최근 10 Episode의 평균 단계 수 = 38.1
45 Episode: Finished after 72 steps: 최근 10 Episode의 평균 단계 수 = 42.5
46 Episode: Finished after 56 steps: 최근 10 Episode의 평균 단계 수 = 44.6
47 Episode: Finished after 39 steps: 최근 10 Episode의 평균 단계 수 = 46.2
48 Episode: Finished after 32 steps: 최근 10 Episode의 평균 단계 수 = 43.6
49 Episode: Finished after 44 steps: 최근 10 Episode의 평균 단계 수 = 42.0
50 Episode: Finished after 40 steps: 최근 10 Episode의 평균 단계 수 = 42.6
51 Episode: Finished after 77 steps: 최근 10 Episode의 평균 단계 수 = 47.3
52 Episode: Finished after 84 steps: 최근 10 Episode의 평균 단계 수 = 50.5
53 Episode: Finished after 44 steps: 최근 10 Episode의 평균 단계 수 = 51.6
54 Episode: Finished after 128 steps: 최근 10 Episode의 평균 단계 수 = 61.6
55 Episode: Finished after 44 steps: 최근 10 Episode의 평균 단계 수 = 58.8
56 Episode: Finished after 96 steps: 최근 10 Episode의 평균 단계 수 = 62.8
57 Episode: Finished after 124 steps: 최근 10 Episode의 평균 단계 수 = 71.3
58 Episode: Finished after 44 steps: 최근 10 Episode의 평균 단계 수 = 72.5
59 Episode: Finished after 53 steps: 최근 10 Episode의 평균 단계 수 = 73.4
60 Episode: Finished after 64 steps: 최근 10 Episode의 평균 단계 수 = 75.8
61 Episode: Finished after 55 steps: 최근 10 Episode의 평균 단계 수 = 73.6
62 Episode: Finished after 48 steps: 최근 10 Episode의 평균 단계 수 = 70.0
63 Episode: Finished after 130 steps: 최근 10 Episode의 평균 단계 수 = 78.6
64 Episode: Finished after 50 steps: 최근 10 Episode의 평균 단계 수 = 70.8
65 Episode: Finished after 84 steps: 최근 10 Episode의 평균 단계 수 = 74.8
66 Episode: Finished after 58 steps: 최근 10 Episode의 평균 단계 수 = 71.0
67 Episode: Finished after 93 steps: 최근 10 Episode의 평균 단계 수 = 67.9
68 Episode: Finished after 52 steps: 최근 10 Episode의 평균 단계 수 = 68.7
69 Episode: Finished after 64 steps: 최근 10 Episode의 평균 단계 수 = 69.8
70 Episode: Finished after 48 steps: 최근 10 Episode의 평균 단계 수 = 68.2
71 Episode: Finished after 70 steps: 최근 10 Episode의 평균 단계 수 = 69.7
72 Episode: Finished after 67 steps: 최근 10 Episode의 평균 단계 수 = 71.6
73 Episode: Finished after 81 steps: 최근 10 Episode의 평균 단계 수 = 66.7
74 Episode: Finished after 95 steps: 최근 10 Episode의 평균 단계 수 = 71.2
75 Episode: Finished after 74 steps: 최근 10 Episode의 평균 단계 수 = 70.2
76 Episode: Finished after 85 steps: 최근 10 Episode의 평균 단계 수 = 72.9
77 Episode: Finished after 59 steps: 최근 10 Episode의 평균 단계 수 = 69.5
78 Episode: Finished after 65 steps: 최근 10 Episode의 평균 단계 수 = 70.8
79 Episode: Finished after 62 steps: 최근 10 Episode의 평균 단계 수 = 70.6
80 Episode: Finished after 73 steps: 최근 10 Episode의 평균 단계 수 = 73.1
81 Episode: Finished after 72 steps: 최근 10 Episode의 평균 단계 수 = 73.3
82 Episode: Finished after 74 steps: 최근 10 Episode의 평균 단계 수 = 74.0
83 Episode: Finished after 125 steps: 최근 10 Episode의 평균 단계 수 = 78.4
84 Episode: Finished after 87 steps: 최근 10 Episode의 평균 단계 수 = 77.6
85 Episode: Finished after 80 steps: 최근 10 Episode의 평균 단계 수 = 78.2
86 Episode: Finished after 74 steps: 최근 10 Episode의 평균 단계 수 = 77.1
87 Episode: Finished after 131 steps: 최근 10 Episode의 평균 단계 수 = 84.3
88 Episode: Finished after 99 steps: 최근 10 Episode의 평균 단계 수 = 87.7
89 Episode: Finished after 94 steps: 최근 10 Episode의 평균 단계 수 = 90.9
90 Episode: Finished after 72 steps: 최근 10 Episode의 평균 단계 수 = 90.8
91 Episode: Finished after 76 steps: 최근 10 Episode의 평균 단계 수 = 91.2
93 Episode: Finished after 83 steps: 최근 10 Episode의 평균 단계 수 = 92.1
95 Episode: Finished after 77 steps: 최근 10 Episode의 평균 단계 수 = 87.3
97 Episode: Finished after 100 steps: 최근 10 Episode의 평균 단계 수 = 88.6
98 Episode: Finished after 84 steps: 최근 10 Episode의 평균 단계 수 = 89.0
99 Episode: Finished after 134 steps: 최근 10 Episode의 평균 단계 수 = 95.0
100 Episode: Finished after 87 steps: 최근 10 Episode의 평균 단계 수 = 90.6
101 Episode: Finished after 89 steps: 최근 10 Episode의 평균 단계 수 = 89.6
102 Episode: Finished after 98 steps: 최근 10 Episode의 평균 단계 수 = 90.0
103 Episode: Finished after 90 steps: 최근 10 Episode의 평균 단계 수 = 91.8
105 Episode: Finished after 92 steps: 최근 10 Episode의 평균 단계 수 = 93.4
106 Episode: Finished after 94 steps: 최근 10 Episode의 평균 단계 수 = 94.5
108 Episode: Finished after 73 steps: 최근 10 Episode의 평균 단계 수 = 94.1
110 Episode: Finished after 128 steps: 최근 10 Episode의 평균 단계 수 = 96.9
112 Episode: Finished after 55 steps: 최근 10 Episode의 평균 단계 수 = 94.0
113 Episode: Finished after 83 steps: 최근 10 Episode의 평균 단계 수 = 88.9
114 Episode: Finished after 92 steps: 최근 10 Episode의 평균 단계 수 = 89.4
115 Episode: Finished after 96 steps: 최근 10 Episode의 평균 단계 수 = 90.1
116 Episode: Finished after 64 steps: 최근 10 Episode의 평균 단계 수 = 86.7
117 Episode: Finished after 88 steps: 최근 10 Episode의 평균 단계 수 = 86.5
118 Episode: Finished after 117 steps: 최근 10 Episode의 평균 단계 수 = 89.0
119 Episode: Finished after 126 steps: 최근 10 Episode의 평균 단계 수 = 92.2
120 Episode: Finished after 89 steps: 최근 10 Episode의 평균 단계 수 = 93.8
121 Episode: Finished after 105 steps: 최근 10 Episode의 평균 단계 수 = 91.5
122 Episode: Finished after 83 steps: 최근 10 Episode의 평균 단계 수 = 94.3
123 Episode: Finished after 94 steps: 최근 10 Episode의 평균 단계 수 = 95.4
124 Episode: Finished after 84 steps: 최근 10 Episode의 평균 단계 수 = 94.6
126 Episode: Finished after 96 steps: 최근 10 Episode의 평균 단계 수 = 94.6
127 Episode: Finished after 136 steps: 최근 10 Episode의 평균 단계 수 = 101.8
128 Episode: Finished after 135 steps: 최근 10 Episode의 평균 단계 수 = 106.5
129 Episode: Finished after 178 steps: 최근 10 Episode의 평균 단계 수 = 112.6
130 Episode: Finished after 108 steps: 최근 10 Episode의 평균 단계 수 = 110.8
131 Episode: Finished after 64 steps: 최근 10 Episode의 평균 단계 수 = 108.3
133 Episode: Finished after 129 steps: 최근 10 Episode의 평균 단계 수 = 110.7
134 Episode: Finished after 133 steps: 최근 10 Episode의 평균 단계 수 = 115.7
135 Episode: Finished after 102 steps: 최근 10 Episode의 평균 단계 수 = 116.5
136 Episode: Finished after 71 steps: 최근 10 Episode의 평균 단계 수 = 115.2
137 Episode: Finished after 112 steps: 최근 10 Episode의 평균 단계 수 = 116.8
138 Episode: Finished after 85 steps: 최근 10 Episode의 평균 단계 수 = 111.7
139 Episode: Finished after 91 steps: 최근 10 Episode의 평균 단계 수 = 107.3
140 Episode: Finished after 172 steps: 최근 10 Episode의 평균 단계 수 = 106.7
141 Episode: Finished after 121 steps: 최근 10 Episode의 평균 단계 수 = 108.0
142 Episode: Finished after 78 steps: 최근 10 Episode의 평균 단계 수 = 109.4
143 Episode: Finished after 83 steps: 최근 10 Episode의 평균 단계 수 = 104.8
144 Episode: Finished after 95 steps: 최근 10 Episode의 평균 단계 수 = 101.0
145 Episode: Finished after 132 steps: 최근 10 Episode의 평균 단계 수 = 104.0
146 Episode: Finished after 65 steps: 최근 10 Episode의 평균 단계 수 = 103.4
147 Episode: Finished after 68 steps: 최근 10 Episode의 평균 단계 수 = 99.0
148 Episode: Finished after 72 steps: 최근 10 Episode의 평균 단계 수 = 97.7
150 Episode: Finished after 82 steps: 최근 10 Episode의 평균 단계 수 = 96.8
151 Episode: Finished after 85 steps: 최근 10 Episode의 평균 단계 수 = 88.1
152 Episode: Finished after 110 steps: 최근 10 Episode의 평균 단계 수 = 87.0
153 Episode: Finished after 94 steps: 최근 10 Episode의 평균 단계 수 = 88.6
155 Episode: Finished after 64 steps: 최근 10 Episode의 평균 단계 수 = 86.7
156 Episode: Finished after 92 steps: 최근 10 Episode의 평균 단계 수 = 86.4
157 Episode: Finished after 56 steps: 최근 10 Episode의 평균 단계 수 = 78.8
159 Episode: Finished after 75 steps: 최근 10 Episode의 평균 단계 수 = 79.8
160 Episode: Finished after 69 steps: 최근 10 Episode의 평균 단계 수 = 79.9
162 Episode: Finished after 130 steps: 최근 10 Episode의 평균 단계 수 = 85.7
163 Episode: Finished after 140 steps: 최근 10 Episode의 평균 단계 수 = 91.5
164 Episode: Finished after 195 steps: 최근 10 Episode의 평균 단계 수 = 102.5
165 Episode: Finished after 138 steps: 최근 10 Episode의 평균 단계 수 = 105.3
166 Episode: Finished after 57 steps: 최근 10 Episode의 평균 단계 수 = 101.6
167 Episode: Finished after 83 steps: 최근 10 Episode의 평균 단계 수 = 103.5
168 Episode: Finished after 70 steps: 최근 10 Episode의 평균 단계 수 = 101.3
169 Episode: Finished after 68 steps: 최근 10 Episode의 평균 단계 수 = 102.5
170 Episode: Finished after 73 steps: 최근 10 Episode의 평균 단계 수 = 102.3
171 Episode: Finished after 114 steps: 최근 10 Episode의 평균 단계 수 = 106.8
172 Episode: Finished after 83 steps: 최근 10 Episode의 평균 단계 수 = 102.1
173 Episode: Finished after 89 steps: 최근 10 Episode의 평균 단계 수 = 97.0
174 Episode: Finished after 75 steps: 최근 10 Episode의 평균 단계 수 = 85.0
175 Episode: Finished after 95 steps: 최근 10 Episode의 평균 단계 수 = 80.7
176 Episode: Finished after 58 steps: 최근 10 Episode의 평균 단계 수 = 80.8
177 Episode: Finished after 49 steps: 최근 10 Episode의 평균 단계 수 = 77.4
178 Episode: Finished after 56 steps: 최근 10 Episode의 평균 단계 수 = 76.0
179 Episode: Finished after 72 steps: 최근 10 Episode의 평균 단계 수 = 76.4
180 Episode: Finished after 71 steps: 최근 10 Episode의 평균 단계 수 = 76.2
181 Episode: Finished after 88 steps: 최근 10 Episode의 평균 단계 수 = 73.6
182 Episode: Finished after 70 steps: 최근 10 Episode의 평균 단계 수 = 72.3
183 Episode: Finished after 53 steps: 최근 10 Episode의 평균 단계 수 = 68.7
184 Episode: Finished after 95 steps: 최근 10 Episode의 평균 단계 수 = 70.7
185 Episode: Finished after 53 steps: 최근 10 Episode의 평균 단계 수 = 66.5
186 Episode: Finished after 66 steps: 최근 10 Episode의 평균 단계 수 = 67.3
187 Episode: Finished after 47 steps: 최근 10 Episode의 평균 단계 수 = 67.1
188 Episode: Finished after 44 steps: 최근 10 Episode의 평균 단계 수 = 65.9
190 Episode: Finished after 65 steps: 최근 10 Episode의 평균 단계 수 = 65.2
191 Episode: Finished after 65 steps: 최근 10 Episode의 평균 단계 수 = 64.6
192 Episode: Finished after 60 steps: 최근 10 Episode의 평균 단계 수 = 61.8
193 Episode: Finished after 86 steps: 최근 10 Episode의 평균 단계 수 = 63.4
194 Episode: Finished after 109 steps: 최근 10 Episode의 평균 단계 수 = 69.0
195 Episode: Finished after 60 steps: 최근 10 Episode의 평균 단계 수 = 65.5
196 Episode: Finished after 55 steps: 최근 10 Episode의 평균 단계 수 = 65.7
197 Episode: Finished after 59 steps: 최근 10 Episode의 평균 단계 수 = 65.0
198 Episode: Finished after 60 steps: 최근 10 Episode의 평균 단계 수 = 66.3
199 Episode: Finished after 51 steps: 최근 10 Episode의 평균 단계 수 = 67.0
200 Episode: Finished after 87 steps: 최근 10 Episode의 평균 단계 수 = 69.2
201 Episode: Finished after 58 steps: 최근 10 Episode의 평균 단계 수 = 68.5
202 Episode: Finished after 57 steps: 최근 10 Episode의 평균 단계 수 = 68.2
204 Episode: Finished after 58 steps: 최근 10 Episode의 평균 단계 수 = 65.4
205 Episode: Finished after 52 steps: 최근 10 Episode의 평균 단계 수 = 59.7
206 Episode: Finished after 66 steps: 최근 10 Episode의 평균 단계 수 = 60.3
207 Episode: Finished after 162 steps: 최근 10 Episode의 평균 단계 수 = 71.0
209 Episode: Finished after 57 steps: 최근 10 Episode의 평균 단계 수 = 70.8
210 Episode: Finished after 77 steps: 최근 10 Episode의 평균 단계 수 = 72.5
212 Episode: Finished after 93 steps: 최근 10 Episode의 평균 단계 수 = 76.7
215 Episode: Finished after 54 steps: 최근 10 Episode의 평균 단계 수 = 73.4
216 Episode: Finished after 49 steps: 최근 10 Episode의 평균 단계 수 = 72.5
217 Episode: Finished after 99 steps: 최근 10 Episode의 평균 단계 수 = 76.7
218 Episode: Finished after 71 steps: 최근 10 Episode의 평균 단계 수 = 78.0
223 Episode: Finished after 192 steps: 최근 10 Episode의 평균 단계 수 = 92.0
2.8 Entry 실행
plt.plot(cartpole_env.episodes)
plt.xlabel('Episode')
plt.ylabel('reach #step')
plt.title('# step of episode')
plt.show()
3 학습결과
