Python으로 배우는 Deep Reinforcement Learning
Timothée Carayol
Principal Machine Learning Engineer, Komment


select_action()에 감쇠 엡실론-탐욕 구현def select_action(q_values, step, start, end, decay):# 이 스텝의 임계값 계산 epsilon = ( end + (start-end) * math.exp(-step / decay))# 0과 1 사이 난수 추출 sample = random.random()if sample < epsilon: # 무작위 액션 인덱스 반환 return random.choice(range(len(q_values)))# Q-value가 최대인 액션 인덱스 반환 return torch.argmax(q_values).item()



online_network = QNetwork(state_size, action_size) target_network = QNetwork(state_size, action_size)target_network.load_state_dict( online_network.state_dict())def update_target_network( target_network, online_network, tau):target_net_state_dict = target_network.state_dict() online_net_state_dict = online_network.state_dict() for key in online_net_state_dict:target_net_state_dict[key] = ( online_net_state_dict[key] * tau + target_net_state_dict[key] * (1 - tau))target_network.load_state_dict( target_net_state_dict)return None

# 내부 루프, 액션 선택 후 if len(replay_buffer) >= batch_size: states, actions, rewards, next_states, dones = replay_buffer.sample(64)q_values = (online_network(states) .gather(1, actions).squeeze(1))with torch.no_grad():next_q_values = ( target_network(next_states).amax(1)) target_q_values = ( rewards + gamma * next_q_values * (1 - dones))loss = torch.nn.MSELoss()(target_q_values, q_values) optimizer.zero_grad() loss.backward() optimizer.step()update_target_network( target_network, online_network, tau)
online_network 사용target_network 사용torch.no_grad()로 그래디언트 비활성화update_target_network()로 target_network를 천천히 갱신Python으로 배우는 Deep Reinforcement Learning