モデルを利用するたびに毎回学習するのは時間がかかります。
今回は学習したモデルを保存して、次回はそのモデルを読み込んで利用してみます。
モデルの保存
学習したモデルを保存するコードは次のようになります。
学習処理learn関数は少し時間がかかります。学習したモデルの保存はsave関数を利用します。
[コード]
1 | import gym |
上記コードを実行するとsample.zipという学習済みモデルファイルが作成されます。
次回は、この学習済みモデルの読み込みを行います。
モデルを利用するたびに毎回学習するのは時間がかかります。
今回は学習したモデルを保存して、次回はそのモデルを読み込んで利用してみます。
学習したモデルを保存するコードは次のようになります。
学習処理learn関数は少し時間がかかります。学習したモデルの保存はsave関数を利用します。
[コード]
1 | import gym |
上記コードを実行するとsample.zipという学習済みモデルファイルが作成されます。
次回は、この学習済みモデルの読み込みを行います。
自作の環境(カスタムGym環境)を学習させて実行してみます。
右への移動を学ぶ環境GoRightを実装します。(前回実行したもののと同じものとなります。)
エージェントが左右に移動する5マスの環境になります。
[コード]
1 | import numpy as np |
PPOで学習させて実行します。
[コード]
1 | import gym |
上記コードを実行するとコンソールに次のような表示がされます。
[実行結果]
A.... .A... ..A.. ...A. total_reward: [0.7]
学習がうまくいっているようで、一直線に右に向かって移動していることが分かります。
OpenAI Gymで準備されている環境ではなく、自作の環境(カスタムGym環境)を作成してみます。
右への移動を学ぶ環境GoRightを実装します。
エージェントが左右に移動する5マスの環境になります。
[コード]
1 | import numpy as np |
自作した環境をランダム行動で実行してみます。
gym.make関数を使わずに、GoRightクラスを直接生成しています。
[コード]
1 | import gym |
上記コードを実行するとコンソールに次のような表示がされます。
(ランダム行動のため実行結果は毎回異なります。)
[実行結果]
reward: -0.1 .A... reward: -0.1 A.... reward: -0.1 .A... reward: -0.1 ..A.. reward: -0.1 ...A. reward: 1 ....A done
エージェントAが左右に移動し、最終的に一番右に移動し終了していることが分かります。
Stable Baselinesという強化学習アルゴリズムを使ってCartPoleを実行します。
下記のコマンドを実行しStable Baselinesを準備します。
1 | pip install stable-baselines[mpi] |
強化学習のモデルを作成し、100,000回学習を行ってからCartPoleを実行してみます。
[コード]
1 | import gym |
実行してみると、棒が倒れることなくうまくバランスをとっていることが確認できます。

OpenAI Gymに含まれるCartPole(棒たてゲーム)を試してみます。
下記のコマンドを実行しOpenAI Gym環境を準備します。
1 | pip install gym |
ランダムにカートを動かすコードを準備します。
[コード]
1 | import gym |
実行すると次のような画面が表示されますが、ランダム行動のためすぐに棒が倒れてしまいます。

FXのトレードを学習させて、利益総額が増えるかどうかを確認します。
Windowsで実行する場合、Microsoft MPIをインストールする必要があります。
Microsoft MPI - https://www.microsoft.com/en-us/download/details.aspx?id=100593
さらに下記のコマンドを実行し学習のための環境を準備します。
1 | pip install stable-baselines[mpi] |
FXトレードを学習してから投資を行う処理を実装します。
[コード]
1 | import gym |
実行結果は下記のとおりです。
[実行結果]
info: {'total_reward': 76.70000000000952, 'total_profit': 0.993213633946179, 'position': 1}
累計報酬(total_reward)、純利益(total_profit)、ポジション(position:0がショート、1がロング)が表示されます。
ランダムの時と比べてあまり結果がよくなりませんでした・・・というよりむしろ成績が落ちていて、もう少し理解を深める必要がありそうです。
グラフに表示される結果は以下の通りです。

赤●が「0:Sell」で落ちる予想、緑●が「1:Buy」で上がる予想を表します。
AnyTradingは、FXや株式のトレーディングアルゴリズムを試すための強化学習環境です
下記のコマンドを実行しAnyTradingの実行環境をインストールします。
1 | pip install gym-anytrading |
ランダムに投資を行う処理を実装します。
[コード]
1 | import gym |
実行結果は下記のとおりです。
[実行結果]
info: {'total_reward': 85.50000000000279, 'total_profit': 0.9914207128440394, 'position': 0}
累計報酬(total_reward)、純利益(total_profit)、ポジション(position:0がショート、1がロング)が表示されます。
ランダムの割には利益が上がっています。
また下記のようなグラフが表示されます。

赤●が「0:Sell」で落ちる予想、緑●が「1:Buy」で上がる予想を表します。
osモジュールのenviron変数には様々な環境変数が辞書型で格納されています。
[コード]
1 | import os |
実行結果は下記のとおりです。
[実行結果]
environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\xxxx\\AppData\\Roaming',
(以下省略)
C:\ProgramData\Oracle\Java\javapath;C:\Util\Anaconda3;
(以下省略)
環境変数の設定が必要な処理をする場合に、実行前に設定を確認し問題があればアラート表示するなどの使い方ができると思います。
数値型のいろいろな表現をまとめてみました。
[コード]
1 | # 10進数 |
[コード]
1 | num = 1.2 |
組み込みのglobals関数、locals関数を使うと、現在のスコープのグローバル変数、ローカル変数を表示することができます。
[コード]
1 | GLOBAL_AVR = 123 |
実行結果は下記のとおりです。
グローバル変数
{'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': , '__spec__': None, '__annotations__': {}, '__builtins__': , 'GLOBAL_AVR': 123, 'func': }
ローカル変数
{'x': 3}