カスタムGym環境作成(13) - 川と橋があるけど山から遠回りしてほしい編

今回は、山道コースからゴールに向かうマップを攻略していきます。

[橋を渡るコースを山でふさいだマップイメージ]

ACKTRデフォルトで学習・実行

まずはこれまでと同じようにACKTRアルゴリズムをデフォルトの設定で学習・実行してみます。

[ソース]

train6.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# 警告を非表示
import os
import warnings
warnings.simplefilter('ignore')
import tensorflow as tf
tf.get_logger().setLevel("ERROR")

import gym
from env6 import MyEnv

from stable_baselines.common.vec_env import DummyVecEnv
from stable_baselines import ACKTR
from stable_baselines.bench import Monitor

# ログフォルダの作成
log_dir = './logs/'
os.makedirs(log_dir, exist_ok=True)

# 環境の生成
env = MyEnv()
env = Monitor(env, log_dir, allow_early_resets=True)
env = DummyVecEnv([lambda: env])

# モデルの生成
model = ACKTR('MlpPolicy', env, verbose=1)

# モデルの学習
model.learn(total_timesteps=128000)

# モデルの保存
model.save('model6')

# モデルのテスト
state = env.reset()
total_reward = 0
while True:
# 環境の描画
env.render()

# モデルの推論
action, _ = model.predict(state)

# 1ステップの実行
state, reward, done, info = env.step(action)
total_reward += reward
print('reward:', reward, 'total_reward', total_reward)
print('-----------')

print('')
# エピソード完了
if done:
# 環境の描画
print('total_reward:', total_reward)
break

実行結果(ログ)は以下のようになります。

[実行結果(途中略)]

---------------------------------
| explained_variance | 0.00043  |
| fps                | 28       |
| nupdates           | 1        |
| policy_entropy     | 1.39     |
| policy_loss        | -13.6    |
| total_timesteps    | 20       |
| value_loss         | 123      |
---------------------------------
---------------------------------
| ep_len_mean        | 201      |
| ep_reward_mean     | -685     |
| explained_variance | 1.19e-07 |
| fps                | 922      |
| nupdates           | 100      |
| policy_entropy     | 0.0925   |
| policy_loss        | -2.3     |
| total_timesteps    | 2000     |
| value_loss         | 45.3     |
---------------------------------
         :
        (略)
         :
---------------------------------
| ep_len_mean        | 201      |
| ep_reward_mean     | -236     |
| explained_variance | 0        |
| fps                | 1321     |
| nupdates           | 6300     |
| policy_entropy     | 0.935    |
| policy_loss        | -0.536   |
| total_timesteps    | 126000   |
| value_loss         | 0.509    |
---------------------------------
---------------------------------
| ep_len_mean        | 201      |
| ep_reward_mean     | -232     |
| explained_variance | 0        |
| fps                | 1320     |
| nupdates           | 6400     |
| policy_entropy     | 0.9      |
| policy_loss        | -0.643   |
| total_timesteps    | 128000   |
| value_loss         | 0.522    |
---------------------------------
☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-1.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-2.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-3.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-4.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-5.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-6.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-7.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-8.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-9.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-10.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-11.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-12.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-13.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-14.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-15.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-16.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-17.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-18.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-19.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-20.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-21.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-22.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-23.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-24.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-25.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-26.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-27.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-28.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-29.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-30.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-31.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-32.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-33.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-34.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-35.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-36.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-37.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-38.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-39.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-40.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-41.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-42.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-43.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-44.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-45.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-46.]
-----------

☆山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-47.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-48.]
-----------

S山山山   山
☆ 川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-49.]
-----------

S山山山   山
 ☆川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-50.]
-----------

S山山山   山
  川川山山 G
山☆三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-51.]
-----------

S山山山   山
  川川山山 G
山☆三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-52.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山☆川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-53.]
-----------

S山山山   山
  川川山山 G
山☆三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-54.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山☆川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-55.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
 ☆山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-56.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山☆川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-57.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
 ☆山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-58.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山☆川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-59.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
 ☆山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-60.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山☆川川山   
  山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-61.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
 ☆山  山山 
山 山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-62.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山☆山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-63.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山☆山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-64.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山☆山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-65.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山☆山 山 山 
山       
  山 山山 山
reward: [-1.] total_reward [-66.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山☆      
  山 山山 山
reward: [-1.] total_reward [-67.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
 ☆山 山山 山
reward: [-1.] total_reward [-68.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
 ☆山 山山 山
reward: [-1.] total_reward [-69.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
 ☆山 山山 山
reward: [-1.] total_reward [-70.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
 ☆山 山山 山
reward: [-1.] total_reward [-71.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
☆ 山 山山 山
reward: [-1.] total_reward [-72.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
☆ 山 山山 山
reward: [-1.] total_reward [-73.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
☆ 山 山山 山
reward: [-1.] total_reward [-74.]
-----------
         :
        (略)
         :
S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
☆ 山 山山 山
reward: [-1.] total_reward [-199.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
☆ 山 山山 山
reward: [-1.] total_reward [-200.]
-----------

S山山山   山
  川川山山 G
山 三三 山 山
山 川川山   
  山  山山 
山 山 山 山 
山       
☆ 山 山山 山
reward: [-1.] total_reward [-201.]
-----------

total_reward: [-201.]

まずスタート位置近くでもたつき、移動し始めたと思ったら左下の角に移動してその後まったく動かなくなってしまいました。

ゴールにたどり着けていないので学習はうまくいかなかったということになります。

平均報酬をグラフ化

平均報酬をグラフ化すると次のようになります。

マイナス報酬は少しずつ減っているようですが、最終的にプラス報酬には転じていません。

次回は下記の2点を調整して、マップ攻略を目指します。

  • 報酬を変更
  • 学習率を変更