CartPoleを手動で動かす (倒立振子)
はじめに
Deep Q-Network(DQN)の勉強を始める前に気になったことがあったのでちょっと寄り道します。
それは、CartPoleのカートを自分で操作してみたくなりました。(右移動と左移動をキーボードで入力)
とりあえず動けばオッケー、ということで完成形がこちら。
プログラムのコード
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()
キー入力がない間は左右を交互に入れています。これがないと左に逃げていきます。
動かしてみた感想
左右移動かと思っていたのは左右加速でした。慣性が働いていて氷の上を移動している感覚です。実際に棒を倒れないようにするのはかなり難しかったです。
保存ファイル
lesson48.py
文責:Luke