【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に秘書を面接させたら、美しい結果が得られた話](https://qiita.com/tanuk1647/items/720b1c4a02b55d350645)

説明は上記のサイトを参照願います。
ということで、ここでは面接２０人、１００人、そして１０００人をやってみました。
プログラムは上記サイトのとおりですが、以下だけ変更します。

```py
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は面談者数に応じて、面談者数倍しました。

```py
h = d.train(nb_steps=200000, log_interval=10000, verbose=1)
```
ということで、例えば面談者１００人については、以下のような出力が得られました。

```
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はちゃんと２５人目のそこまでの１位の人をスルーして３８人目まで待っています。エライ！

ということで、１００人にしても成功率の理論値1/e=0.3678、で３７人スキップの通りの結果をほぼ導いています。
それにしても１００人いてもそこから最善の秘書を３割以上の確率で選べるというのはすごいと思う。

また、収束性もほぼ同じで、例えば２０人の場合の収束性は１０人とほぼ同じでした。
![figure_1-34hisho_10.png](https://qiita-image-store.s3.amazonaws.com/0/233744/4f84c7f6-9501-88ad-a97e-990c02787238.png)

２０人と１００人を並べると以下のとおり、どちらも理論値辺りで採用戦略を変更しているのが分かります。
![figure_1-34hisho4_saiyou.png](https://qiita-image-store.s3.amazonaws.com/0/233744/5a41e467-69b4-e262-eadb-3d5eef2d851a.png)
![figure_1hisho100_saiyo1.png](https://qiita-image-store.s3.amazonaws.com/0/233744/2f6d594a-f283-67a8-d620-c696a2ec2d41.png)
二人目の採用については、２０人だと正解をだせそうですが、１００人いると山がちょっとありますが、難しいかもしれません。
![figure_1-34hisho_saiyo2.png](https://qiita-image-store.s3.amazonaws.com/0/233744/0f3b18ce-eeb0-ff89-ade8-4d9e16707f88.png)
![figure_1hisho100_saiyo2.png](https://qiita-image-store.s3.amazonaws.com/0/233744/8cac26cf-328c-fa96-a20b-00d78a8d9dbd.png)
実は、１０００人もやってみましたが、こちらはほとんど学習できていません。
※ここはネットワークモデルの改善で行けるかためしてみたいと思います
あと、お気づきのとおり、グラフで日本語が文字化けしていますが、今のところ原因不明なのでこのまま載せることとしました、ご容赦ください
###まとめ
・秘書面接のDQNは１００人までスケールできることが分かった

・１０００人だと学習ができなかったのでネットワークを改善して再トライしたい
・グラフで文字化けしているが、原因不明である
・ロジックなどの解析はしていないので、次回以降に記載したい