출처:https://www.youtube.com/watch?v=xgoO54qN4lY&ab_channel=SungKim
(기반으로 작성된 글입니다.)
개념: 강화학습은 현재의 상태(State)에서 어떤 행동(Actrion)을 취하는 것이 최적인지를 학습하는 것이다. 행동을 취할 때마다 외부 환경(Environment) 에서 보상(Reward)이 주어지는데, 이러한 보상을 최대화 하는 방향으로 학습이 진행된다.
실습코드:
import gym
from gym.envs.registration import register
import sys,tty,termios
# 키보드에 입력을 받고 액션을 취함.
class _Getch:
def __call__(self):
fd=sys.stdin.fileno()
old_settings=termios.tcgetattr(fd)
try:
tty.setraw(sys.stdin.fileno())
ch=sys.stdin.read(3)
finally:
termios.tcsetattr(fd, termios.TCSADRAIN, old_settings)
return ch
inkey= _Getch()
#매크로
LEFT=0
DOWN=1
RIGHT=2
UP=3
#Key mapping 키보드 입력을 받음
arrow_keys={
'\x1b[A': UP,
'\x1b[B': DOWN,
'\x1b[C': RIGHT,
'\x1b[D': LEFT}
# 새로운 게임을 하나 만듬
register(
id='FrozenLake-v3',
entry_point='gym.envs.toy_text:FrozenLakeEnv',
kwargs={'map_name':'4x4','is_slippery':False}
)
env=gym.make("FrozenLake-v3",render_mode='human') # 환경생성
env.reset() # 초기화
env.render() # 환경을 화면으로 출력
#무한 반복하는동안 키를 받음.
while True:
key=inkey()
if key not in arrow_keys.keys():
print("Game aborted!")
break
action=arrow_keys[key] #action취하도록함.
state, reward, done, info ,k=env.step(action)
#env라는 객체에 원하는 action을 넣어줌, 환경속에서 action이 발생함. // state 변화, reward 보상, done 게임의 끝 유무(True,False), info추가정보
env.render()
print("State: ",state,"Action ",action,"Reward ",reward, "Info ", info)
if done:
print("Finished with reward", reward)
break
env.step(action)의 리턴값으로 5개를 함으로 5개의 인자가 필요하다.(0.25.0 Release note)
'인공지능 (강화학습) > 강화학습' 카테고리의 다른 글
[1] 강화학습 기본 개념 정리 (0) | 2024.03.20 |
---|---|
[5] 강화학습 Q-Network (0) | 2023.02.15 |
[4] 강화학습 Windy Frozen Lake Nondeterministic world! (0) | 2023.02.07 |
[3] 강화학습 Exploit&Exploration and discounted future reward (1) | 2023.02.04 |
[2]강화학습 Dummy Q Learning (0) | 2023.01.20 |