質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1630閲覧

Deep Q-learningがうまく作動してくれません

fuji3131

総合スコア15

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/04/30 04:38

編集2019/04/30 09:49

open AI gym を作動させたいです。

pythonで強化学習の練習のためにkerasとopenAIgymを使ってみたのですが、
openAI gymのenv.renderの部分にエラーが出てしまい、学習が止まってしまいます。
successfulyとあるので実行完了したのかもしれませんが、del baseの部分の何がエラーなのかわかりません。
棒立ての強化学習をして描画したいのですがうまくいきません。
実行環境はgoogli colaboratoryです。

以下のサイトのコードを丸写ししました。
【強化学習初心者向け】シンプルな実装例で学ぶQ学習、DQN、DDQN【CartPoleで棒立て:1ファイルで完結、Kearas使用】

発生している問題・エラーメッセージ

successfulyの前までは省略しています。また、successfuly の部分のEpisode数は実行するごとに変化します。

801 Episode finished after 200.000000 time steps / mean 192.780000 Episode 801 train agent successfuly! --------------------------------------------------------------------------- NameError Traceback (most recent call last) <ipython-input-9-2af324d64b02> in <module>() 69 for t in range(max_number_of_steps): #1試行のループ 70 if islearned == 1: #学習終了したらcartPoleを描画する ---> 71 env.render() 72 time.sleep(0.1) 73 print (observation[0]) #カートのx位置を出力 3 frames /usr/local/lib/python3.6/dist-packages/pyglet/gl/__init__.py in <module>() 225 else: 226 from .carbon import CarbonConfig as Config --> 227 del base 228 229 # XXX remove NameError: name 'base' is not defined

該当のソースコード

python

1# coding:utf-8 2# [0]ライブラリのインポート 3import gym #倒立振子(cartpole)の実行環境 4from gym import wrappers #gymの画像保存 5import numpy as np 6import time 7 8 9# [1]Q関数を離散化して定義する関数 ------------ 10# 観測した状態を離散値にデジタル変換する 11def bins(clip_min, clip_max, num): 12 return np.linspace(clip_min, clip_max, num + 1)[1:-1] 13 14# 各値を離散値に変換 15def digitize_state(observation): 16 cart_pos, cart_v, pole_angle, pole_v = observation 17 digitized = [ 18 np.digitize(cart_pos, bins=bins(-2.4, 2.4, num_dizitized)), 19 np.digitize(cart_v, bins=bins(-3.0, 3.0, num_dizitized)), 20 np.digitize(pole_angle, bins=bins(-0.5, 0.5, num_dizitized)), 21 np.digitize(pole_v, bins=bins(-2.0, 2.0, num_dizitized)) 22 ] 23 return sum([x * (num_dizitized**i) for i, x in enumerate(digitized)]) 24 25 26# [2]行動a(t)を求める関数 ------------------------------------- 27def get_action(next_state, episode): 28 #徐々に最適行動のみをとる、ε-greedy法 29 epsilon = 0.5 * (1 / (episode + 1)) 30 if epsilon <= np.random.uniform(0, 1): 31 next_action = np.argmax(q_table[next_state]) 32 else: 33 next_action = np.random.choice([0, 1]) 34 return next_action 35 36 37# [3]Qテーブルを更新する関数 ------------------------------------- 38def update_Qtable(q_table, state, action, reward, next_state): 39 gamma = 0.99 40 alpha = 0.5 41 next_Max_Q=max(q_table[next_state][0],q_table[next_state][1] ) 42 q_table[state, action] = (1 - alpha) * q_table[state, action] +\ 43 alpha * (reward + gamma * next_Max_Q) 44 45 return q_table 46 47# [4]. メイン関数開始 パラメータ設定-------------------------------------------------------- 48env = gym.make('CartPole-v0') 49max_number_of_steps = 200 #1試行のstep数 50num_consecutive_iterations = 100 #学習完了評価に使用する平均試行回数 51num_episodes = 2000 #総試行回数 52goal_average_reward = 195 #この報酬を超えると学習終了(中心への制御なし) 53# 状態を6分割^(4変数)にデジタル変換してQ関数(表)を作成 54num_dizitized = 6 #分割数 55q_table = np.random.uniform( 56 low=-1, high=1, size=(num_dizitized**4, env.action_space.n)) 57 58total_reward_vec = np.zeros(num_consecutive_iterations) #各試行の報酬を格納 59final_x = np.zeros((num_episodes, 1)) #学習後、各試行のt=200でのxの位置を格納 60islearned = 0 #学習が終わったフラグ 61isrender = 0 #描画フラグ 62 63 64# [5] メインルーチン-------------------------------------------------- 65for episode in range(num_episodes): #試行数分繰り返す 66 # 環境の初期化 67 observation = env.reset() 68 state = digitize_state(observation) 69 action = np.argmax(q_table[state]) 70 episode_reward = 0 71 72 for t in range(max_number_of_steps): #1試行のループ 73 if islearned == 1: #学習終了したらcartPoleを描画する 74 env.render() 75 time.sleep(0.1) 76 print (observation[0]) #カートのx位置を出力 77 78 # 行動a_tの実行により、s_{t+1}, r_{t}などを計算する 79 observation, reward, done, info = env.step(action) 80 81 # 報酬を設定し与える 82 if done: 83 if t < 195: 84 reward = -200 #こけたら罰則 85 else: 86 reward = 1 #立ったまま終了時は罰則はなし 87 else: 88 reward = 1 #各ステップで立ってたら報酬追加 89 90 episode_reward += reward #報酬を追加 91 92 # 離散状態s_{t+1}を求め、Q関数を更新する 93 next_state = digitize_state(observation) #t+1での観測状態を、離散値に変換 94 q_table = update_Qtable(q_table, state, action, reward, next_state) 95 96 # 次の行動a_{t+1}を求める 97 action = get_action(next_state, episode) # a_{t+1} 98 99 state = next_state 100 101 #終了時の処理 102 if done: 103 print('%d Episode finished after %f time steps / mean %f' % 104 (episode, t + 1, total_reward_vec.mean())) 105 total_reward_vec = np.hstack((total_reward_vec[1:], 106 episode_reward)) #報酬を記録 107 if islearned == 1: #学習終わってたら最終のx座標を格納 108 final_x[episode, 0] = observation[0] 109 break 110 111 if (total_reward_vec.mean() >= 112 goal_average_reward): # 直近の100エピソードが規定報酬以上であれば成功 113 print('Episode %d train agent successfuly!' % episode) 114 islearned = 1 115 #np.savetxt('learned_Q_table.csv',q_table, delimiter=",") #Qtableの保存する場合 116 if isrender == 0: 117 #env = wrappers.Monitor(env, './movie/cartpole-experiment-1') #動画保存する場合 118 isrender = 1 119 #10エピソードだけでどんな挙動になるのか見たかったら、以下のコメントを外す 120 # if episode>10: 121 # if isrender == 0: 122 # env = wrappers.Monitor(env, './movie/cartpole-experiment-1') #動画保存する場合 123 # isrender = 1 124 islearned=1; 125 126if islearned: 127 np.savetxt('final_x.csv', final_x, delimiter=",")

試したこと

env.render()を動かしてみたり、直接openAIgymのライブラリのサイトに行って最初のページを確認してみましたが、結局分からずじまいでした。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下の参考記事によると、GoogleColaboratoryに起因するエラーのようです。

GoogleColaboratory上はHTMLなため、gym の render による描画が行えません。

参考記事:【強化学習】OpenAI Gym×Keras-rlで強化学習アルゴリズムを実装していくぞ(準備編)

自分はJupyter notebookで同様のコードを試しましたが、何も問題は起こりませんでした。

解決方法も参考記事に書いてありましたが自分がやってもうまくいかなかったので、Jupyter notebookなど別の開発環境を使ったほうが早いと思います。

ご参考になれば幸いです。

投稿2019/05/08 02:57

amahara_waya

総合スコア1029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問