【dqn】dqnで遊んでみた♬
時代はDQNということで、久しぶりに遊んでみた。というか、ここからひと月毎日DQNで遊んでみようと思う。
その心機一転、Exampleから一つずつ遊び倒す。
まずは、インストールだが、以前の環境で動かそうとしたら、怒られた。
>python ddpg_pendulum.py
Using TensorFlow backend.
Traceback (most recent call last):
File "ddpg_pendulum.py", line 8, in <module>
from rl.agents import DDPGAgent
ImportError: No module named 'rl'
>pip install keras-rl
Collecting keras-rl
Requirement already satisfied: keras>=2.0.7 in c:\users\tosio\anaconda3\lib\site-packages (from keras-rl) (2.2.2)
Requirement already satisfied: keras-preprocessing==1.0.2 in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (1.0.2)
Requirement already satisfied: pyyaml in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (3.12)
Requirement already satisfied: scipy>=0.14 in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (0.18.1)
Requirement already satisfied: h5py in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (2.6.0)
Requirement already satisfied: six>=1.9.0 in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (1.10.0)
Requirement already satisfied: numpy>=1.9.1 in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (1.14.5)
Requirement already satisfied: keras-applications==1.0.4 in c:\users\tosio\anaconda3\lib\site-packages (from keras>=2.0.7->keras-rl) (1.0.4)
Installing collected packages: keras-rl
Successfully installed keras-rl-0.4.2
ということで、Exampleを動かせるようになりました。
ということで、まず倒立振り子を動かします。
うまく動きました。
次にちょっと気になっていた、あの秘書面接の話をやってみようと思います。
【参考】
・DQNに秘書を面接させたら、美しい結果が得られた話
説明は上記のサイトを参照願います。
ということで、ここでは面接20人、100人、そして1000人をやってみました。
プログラムは上記サイトのとおりですが、以下だけ変更します。
NUMS = 100 # 応募者数
.
.
.
#env = Secretary(n=10)
#env.play()
d = DQNSecretary(n=NUMS, recycle=False)
h = d.train(nb_steps=200000, log_interval=10000, verbose=1)
d = DQNSecretary(n=NUMS, recycle=True)
h = d.test(nb_episodes=1, verbose=1, visualize=True)
h = d.test(nb_episodes=1000, visualize=False, verbose=0)
rwds = h.history['episode_reward']
win_rate = sum(rwd > 0 for rwd in rwds) / len(rwds)
print('採用成功率(1000回):' + str(win_rate))
visualize_adopting(d.env)
visualize_q(d, 1)
for i in range(2, 10):
visualize_q(d, i)
学習のnb_stepは面談者数に応じて、面談者数倍しました。
h = d.train(nb_steps=200000, log_interval=10000, verbose=1)
ということで、例えば面談者100人については、以下のような出力が得られました。
Testing for 1 episodes ...
100人中2人目(暫定順位:1位)
100人中3人目(暫定順位:1位)
100人中4人目(暫定順位:1位)
100人中5人目(暫定順位:1位)
100人中6人目(暫定順位:4位)
100人中7人目(暫定順位:2位)
100人中8人目(暫定順位:2位)
100人中9人目(暫定順位:2位)
100人中10人目(暫定順位:7位)
100人中11人目(暫定順位:6位)
100人中12人目(暫定順位:9位)
100人中13人目(暫定順位:2位)
100人中14人目(暫定順位:5位)
100人中15人目(暫定順位:8位)
100人中16人目(暫定順位:15位)
100人中17人目(暫定順位:16位)
100人中18人目(暫定順位:9位)
100人中19人目(暫定順位:8位)
100人中20人目(暫定順位:13位)
100人中21人目(暫定順位:11位)
100人中22人目(暫定順位:13位)
100人中23人目(暫定順位:19位)
100人中24人目(暫定順位:16位)
100人中25人目(暫定順位:1位)
100人中26人目(暫定順位:15位)
100人中27人目(暫定順位:16位)
100人中28人目(暫定順位:5位)
100人中29人目(暫定順位:18位)
100人中30人目(暫定順位:5位)
100人中31人目(暫定順位:20位)
100人中32人目(暫定順位:3位)
100人中33人目(暫定順位:23位)
100人中34人目(暫定順位:33位)
100人中35人目(暫定順位:34位)
100人中36人目(暫定順位:19位)
100人中37人目(暫定順位:11位)
100人中38人目(暫定順位:1位)
あなたは4番目に優秀な応募者を採用しました。
最良の応募者は55人目でした。
Episode 1: reward: 0.000, steps: 38
採用成功率(1000回):0.351
なんとなく、ウワンだといい人がいれば採用しちゃいそうですが、DQNはちゃんと25人目のそこまでの1位の人をスルーして38人目まで待っています。エライ!
ということで、100人にしても成功率の理論値1/e=0.3678、で37人スキップの通りの結果をほぼ導いています。
それにしても100人いてもそこから最善の秘書を3割以上の確率で選べるというのはすごいと思う。
また、収束性もほぼ同じで、例えば20人の場合の収束性は10人とほぼ同じでした。
20人と100人を並べると以下のとおり、どちらも理論値辺りで採用戦略を変更しているのが分かります。
二人目の採用については、20人だと正解をだせそうですが、100人いると山がちょっとありますが、難しいかもしれません。
実は、1000人もやってみましたが、こちらはほとんど学習できていません。
※ここはネットワークモデルの改善で行けるかためしてみたいと思います
あと、お気づきのとおり、グラフで日本語が文字化けしていますが、今のところ原因不明なのでこのまま載せることとしました、ご容赦ください
まとめ
・秘書面接のDQNは100人までスケールできることが分かった
・1000人だと学習ができなかったのでネットワークを改善して再トライしたい
・グラフで文字化けしているが、原因不明である
・ロジックなどの解析はしていないので、次回以降に記載したい
Author And Source
この問題について(【dqn】dqnで遊んでみた♬), 我々は、より多くの情報をここで見つけました https://qiita.com/MuAuan/items/687f0ec9e358e80d881c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .