Start_python’s diary

ふたり暮らし

アラフィフ夫婦のフリーランスプラン

CartPoleを手動で動かす (倒立振子)

はじめに

Deep Q-Network(DQN)の勉強を始める前に気になったことがあったのでちょっと寄り道します。

それは、CartPoleのカートを自分で操作してみたくなりました。(右移動と左移動をキーボードで入力)


とりあえず動けばオッケー、ということで完成形がこちら。

f:id:Start_python:20191130211609g:plain



プログラムのコード

import gym
import pygame

pygame.init()
screen = pygame.display.set_mode((600, 120))
pygame.display.set_caption("test")
myclock = pygame.time.Clock()

env = gym.make("CartPole-v0")
observation = env.reset()

screen.fill((0,0,0))
pygame.display.flip()

flag=0
action = 0

while flag==0:

    env.render()

    if action==0:
        action = 1
    else:
        action = 0

    # 図形を左右に動かす
    press = pygame.key.get_pressed()
    if press[pygame.K_LEFT]: action=0
    if press[pygame.K_RIGHT]: action=1
    #スコアを表示
    font = pygame.font.SysFont(None, 40)
    if action==0:
        score_text = font.render('<<       ', True, (0,255,255))
    else:
        score_text = font.render('       >>', True, (0,255,255))
    screen.blit(score_text, (260,30))
    # ESCキーで終了
    if press[pygame.K_ESCAPE]: flag=1
    for event in pygame.event.get():
        if event.type==pygame.QUIT: flag=1

    pygame.display.flip()
    myclock.tick(15)
screen.fill((0,0,0)) observation, reward, done, info = env.step(action) #if done: # observation = env.reset() env.close() pygame.quit()

 

キー入力がない間は左右を交互に入れています。これがないと左に逃げていきます。

f:id:Start_python:20191130211725g:plain

 

動かしてみた感想

左右移動かと思っていたのは左右加速でした。慣性が働いていて氷の上を移動している感覚です。実際に棒を倒れないようにするのはかなり難しかったです。

 

 

保存ファイル

lesson48.py

 

 

文責:Luke