ChainerRL로 라인 트레이서하기

htps // t. 코 / m4Yh 조 lDjD — mooopan (@mooopan) February 20, 2017


그래서 Chainer의 강화 학습판 ChainerRL이 공개되었습니다.

요즘 손을 너무 넓혀서 정중한 일을 할 수 없는 가운데,
30분 x 2일 만에 Double DQN으로 라인 트레이서를 할 수 있었습니다. 도서관 편리하고 도움이!

사용환경


  • Windows 10 - 64bit         <포기가 나쁜 마음의 힘…! >
  • Python 3.6.0 |Anaconda 4.3.0 (64-bit)     <프라이드보다 실리! >
  • ChainerRL 0.2            < Dependency 느슨하게 해 주었으면 한다>
  • Chainer 1.19           1.20으로 Theano를 돌볼 수 없다! 회사에서는 Theano 움직였는데. >
  • cached_property
  • gym (0.7.3)
  • gym environment 라인 트레이서의 환경을 OpenAI I/F로 했다 - Qiita


  • 환경 및 샘플 리포지토리



    Chachay/Gym_LineFollower: Simple Open AI gym like Environment

    GUI tool kit를 Qt5화했습니다

    ChainerRL



    pip로 넣으려고 하면 Arcade Learning Environment 넣으려고 이끼.
    ALE를 Windows에 밀어 넣는 데 시간이 걸릴 수 있지만,
    Windows에서 pong하고 싶지 않아서 바로 가기! !

    1. GitHub에서 리포지토리 삭제



    GitHub - pfnet/chainerrl: ChainerRL is a deep reinforcement learning library built on top of Chainer.

    2. 동봉된 ChainerRL 폴더를 작업 폴더로 옮기기



    이후 exampl2.py와 같은 폴더

    라인 트레이서 환경 정의



    라인 트레이서의 환경을 OpenAI I/F로 했다 - Qiita 의 환경은, 라인 트레이서가 받는 바퀴 속도를 연속치로 환경을 정의하고 있습니다.

    이것을 이산치로 하기 위해(때문에), 상속으로 이산치 환경으로 다시 합니다.
    동시에 첫 번째 센싱을 4스텝분의 이력 관측으로 합니다.
    class SState(object):
        def __init__(self, STATE_NUM, DIM):
            self.STATE_NUM = STATE_NUM
            self.DIM = DIM
            self.seq = np.zeros((STATE_NUM, DIM), dtype=np.float32)
    
        def push_s(self, state):
            self.seq[1:self.STATE_NUM ] = self.seq[0:self.STATE_NUM -1]
            self.seq[0] = state
    
        def reset(self):
            self.seq = np.zeros_like(self.seq)
    
        def fill_s(self, state):
            for i in range(0, self.STATE_NUM):
                self.seq[i] = state
    
    # Define Agent And Environment
    class LineTracerEnvDiscrete(LineTracerEnv):
        actions = np.array([[0.5, 0.1], [1.0, 1.0],  [0.1, 0.5]]) 
        OBSDIM = 4
    
        def __init__(self):
            self.action_space_d = spaces.Discrete(self.actions.shape[0])
            self.observation_space_d = spaces.Discrete(self.OBSDIM)
            self.MyState = SState(self.OBSDIM, 1)
    
            super().__init__()
    
        def _step(self, action):
            tempState, tmpReward, tmpDone, tmpInfo = super()._step(self.actions[action])
            self.MyState.push_s(tempState)
            return self.MyState.seq.flatten(), tmpReward, tmpDone, tmpInfo
    
        def _reset(self):
            s = super()._reset()
            self.MyState.reset()
            return self.MyState.seq.flatten()
    
    env = LineTracerEnvDiscrete()
    

    그리고는 후지타씨( @mooopann )의 빠른 시작 부터 코피페·코피페

    env.OBSDIM, env.action_space_d.n 및 env.action_space_d.sample만 약간 주의.
    q_func = chainerrl.q_functions.FCStateQFunctionWithDiscreteAction(
        env.OBSDIM, env.action_space_d.n,
        n_hidden_layers=2, n_hidden_channels=50)
    
    optimizer = chainer.optimizers.Adam(eps=1e-2)
    optimizer.setup(q_func)
    
    gamma = 0.95
    
    explorer = chainerrl.explorers.ConstantEpsilonGreedy(
        epsilon=0.3, random_action_func=env.action_space_d.sample)
    
    replay_buffer = chainerrl.replay_buffer.ReplayBuffer(capacity=10 ** 6)
    
    agent = chainerrl.agents.DoubleDQN(
        q_func, optimizer, replay_buffer, gamma, explorer,
        replay_start_size=500, update_frequency=1,
        target_update_frequency=100)
    

    실행



    움직인다…
    python example2.py
    



    ※ 주회로 돌 수 있는 행동을 학습할 수 있었는지는…
    그 근처는 과거 기사를… ⇒ 라인 트레이서를 Deep Q Learning에서 교육하기 - Chainer - Qiita

    감상



    첫날 : 순 30 분



    ChainerRL을 사용하려고 했지만 견본을 쓰는 방법이 htps // t. 코 / cDBp9F 구우 5이 아닌 곳까지 이해하고 끝났습니다. ENV 환경을 연속 값으로 만들고 있지만, 이산 값으로 다시 정의한 환경으로의 재작성이 필요하다>.htps // t. 코/x57에 kRzQfj — chachay (@chachay).


    2일차: 순 30분


  • Env의 상속 클래스 작성
  • 움직였다

  • 요약


  • 상담원 만들기가 훌륭하고 훌륭합니다
  • pip에서 Windows에서 걷어차지 못하는 것을 알고 싶습니다
  • 역시 ↓는 있다

  • 연속치를 평상시 입력치로서 취급하고 있는 엔지니어로서는, 연속치에 대해서 행동 후보(이산화화)를 에이전트로 정의할 수 있도록 해, 이산·연속값간의 사이를 가져와 주면 도움이 된다. gym의 디자인 컨셉에서 벗어나더라도. - chachay (@chachay) February 20, 2017


    스크립트



    February 20, 2017

    example2.py 참조

    좋은 웹페이지 즐겨찾기