시작은 미약하였으나 , 그 끝은 창대하리라

[1] 강화학습이란? 본문

인공지능/강화학습

[1] 강화학습이란?

애플파ol 2023. 1. 17. 12:18

출처: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)

 

출력 화면.

 

Comments