iPX社員によるブログ読者になるiPX社員によるブログiPX社員が"社の動向"から"自身の知見や趣味"、"セミナーなどのおすすめ情報"に至るまで幅広い話題を投下していくブログ。社の雰囲気を感じ取っていただけたら幸いです。この広告は、90日以上更新していないブログに表示しています。2019-12-26UE4で強化学習環境を動かし、学習状況を可視化する(Part2)はじめにご無沙汰しております。iPXのabikoです。あれよあれよという間に、気がつけば年の瀬が近づいて参りました。皆さまお体に気をつけて、よいお年をお迎えください。前回までのあらすじ前回強化学習の学習状況の可視化をやってみようとUnrealEnginePythonを導入しました。UnrealEnginePython付属のPythonEditorでコードを実行し、いつものアニメーションが再生するところまで確認できました。今回はUE4内にオブジェクトを作成して、学習中のカートの位置・ポールの角度を反映し、実際に可視化まで行っていきます。※前回に引き続き、学習自体は行いません。Gymを使用し、行動はランダムで与えます。PythonEditorを開き、新規にファイルを作成して次のコードを記述します。作成したファイル名とコード内のクラス名を指定します。ここでは、ファイル名はPythonScript3、クラス名はViewGymです。連携できているかを確認します。作成したPyActorクラス(BP_ViewGym)をレベル内に配置します。アウトプットログウィンドウを表示し、ゲームプレイを実行してみます。ログを"LogPython"でフィルタし、下記のような結果が得られていれば正しく連携できています。表示しているのは前回フレームからの経過時間です。60fpsで動作していれば、下記のように16ms付近の値が出力されます。0.016667399555444717...LogGymのコードをゲームプレイで実行できるように変更つづいて、PythonScript3の記述を以下のように変更します。self.env.step(action)ゲームプレイの実行によって、いつものアニメーションが再生されるようになれば成功です。BP_ViewGymに次のようにキューブとシリンダーコンポーネントを追加して簡易な外観を作成します。スケールを変更してそれらしい形に変更します。今回Poleの角度はオブジェクトのRotatorで表現します。オブジェクトの中心が回転軸になるため、適当な位置に配置しましょう。CartPoleいざ可視化へPython側からコールする可視化イベントをBPで記述します。環境で観測できる値(台車の位置、棒の角度)を引数で渡すと、アクター自身の位置・棒の角度が変更されるように書いています。BP※環境で扱われている角度の単位がradianなので注意が必要です。(R2Dでdegreesへ変換)また、位置の値をそのまま利用すると値が小さすぎて変化がわからない(±2.4)ので100倍して利用しています。PythonScript3の最後の部分にBPのイベントを呼び出す連携コードを追記します。self.env.step(action)ゲームプレイ実行します。Anim無事可視化できました!いつものアニメーションと同じように動いていることがわかります。結び次は別の環境についても可視化してみたいですね。行動が連続空間である場合の基本的な環境、Pendulumなどはぜひ挑戦してみたいところです。最後まで読んでいただき、ありがとうございました。2020年にまた、お会いしましょう。