皆さん､ こんにちは！おかえりなさい｡
前回の講義では､ モデルを学習するための機能のコアを設定するために､ ヘルパー関数をどのように使用するかを見てきました｡
つまり､ 端末の状態､ 出発地､ 次の行動､ 次の場所､ そして最短経路が､
エージェントや環境の動作の大部分を決定しているのです｡
最後は､ トレーニングを活用することです｡
何を入れるかという意味では非常にわかりやすいのですが､ それをどうするかはまた別の話です｡
とはいえ､ また､ 皆さんが別の方法を使ったり､ これをカスタマイズして実験したりするのであれば､
非常におすすめです｡
そのほか､ 別の方法を用いていて､ それについて議論したい場合は､ Q&Aで自由に共有してください｡
相談にのってくれるのは何より嬉しい｡
なぜなら､ これを解決する方法はたくさんあり､ もっと良い方法､ もっと有利な方法が見つかるかもしれないからです｡
また長所と短所を見ることができる､ 議論するのはもっと楽しい｡
わかりました｡
では､ どうすればいいのか？
トレーニングを開始しなければならない｡
私たちのトレーニングのために｡
イプシロンを使いたい｡
つまり､ 基本的にはランダムなアクションではなく､ 私たちにとって最適なアクションを取るためのパーセンテージです｡
そこで､ イプシロンを設定し､ 0に設定してみましょう｡ 9 して､ 割引率や学習率の値も同じようにします｡
そこで､ 割引率を0とします｡ 9.
また､ 学習率も0に設定しましょう｡ 9.
それが､ 私たちのエージェントが学ぼうとしている､ あるいは学ぶべき率になるのです｡
また､ トレーニングエピソードの数､ 仮にn個のトレーニングエピソードと呼ぶことにします｡
だから､ トレーニングのエピソードをいくつも持っているんです｡
1000に設定してみましょう｡
これは何回くらい訓練するのか､ 何話くらい訓練するのか｡
すごい｡
さて､ 基本的にやりたいことは､ 各エピソードを繰り返し再生することです｡
トレーニングエピソードの数の範囲を取り､ 基本的に私たちのイプシロンに設定したいと思います｡
私たちの時間差を知りたいのです｡
それを設定するためには､ 過去のQ値をいくつか見ておく必要がある｡
アクションインデックスで開始位置を計算する必要があります｡
では､ さっそく始めましょう｡
大きなforループをとってみましょう｡
というわけで､ 4つのエピソードをご紹介します｡
私たちのトレーニングエピソードの数の範囲内で｡
さあ､ どうぞ｡
構文上の間違いがなければ､ グリッドの行インデックスと列インデックスを maize の列インデックスに使用します｡
そして､ 目標のスタート地点に設定する｡
スタート地点が必要なので､ それを各エピソードに注いでもらいましょう｡
これで､ 端末の状態をしばらく設定できるようになりました｡
ない｡
端末の状態です｡
行インデックスと列インデックスを見たいと思います｡
次に､ 次のアクションのためのアクションインデックスを設定しましょう｡
だから､ 次のアクションが必要なんです｡
このエージェントが行動インデックスを求めて迷路を反復するとき､ get next actionを使うことができます｡
そして､ 行インデックス､ 列インデックスを使用して､ イプシロンと呼ぶことにしましょう｡
そこで､ ランダムアクションの代わりに､ カラムインデックスを使用することにします｡
そして､ イプシロンが必要です｡
すごい｡
正しく綴ることができれば､ ここに｡
イプシロンが欲しいのか？
よし､ このOCを削除しよう｡
私が一行一行タイプしているのを見なくてすむように､ 残りのコードを取ってきて､ それを見ていきましょう｡
しかし､ 古い行を設定するというアプローチには､ 古い行のインデックスが必要であることを念頭においてください｡
また､ 列と行の報酬も欲しいところです｡
キュー値と古いキュー値を見て､ 時間的な差を計算する必要があるのです｡
OC コードの変更､ またはコードのアップデートを見るわけです｡
古い行インデックスと古い列インデックスを取って､ 行インデックスと列インデックスを見ているところです｡
行インデックス､ 列インデックス､ インデックス､ アクションは次の場所に等しく､ 次の場所には行インデックス､ 列インデックス､
インデックス､ アクションが必要です｡
最後に､ リワードについてです｡
私たちの古いQ値は､ 古い行インデックス､ 古い列インデックス､ そしてまた､ 私たちの行動インデックスを参照し､
私たちの報酬である時間差を計算し､ 行インデックスと列インデックスによるQ値に割引率を掛け､
前のQ値から古いQ値を引いたQ値であるでしょう｡
新しいQ値は､ 古いQ値に学習率､ 時間､ 時間差を加えたもので､ 古い行インデックス､
古い列インデックスが新しいQ値に等しいQ値が必要なところでほぼ終了です｡
もし､ 皆さんがこれ以上また議論したいのであれば､ Q&Aを強くお勧めします｡
ご自由にプリントしてください｡
ここで使われているすべての変数で実験してみてください｡
形状を見るなら､ それがどのように使えるのか､ 何を参照しているのかを見てください｡
とてもお勧めですし､ さらにご相談に乗ることも可能です｡
最後にもう一つ､ ちょっとしたお知らせがあるので､ ご紹介します｡
1000行の学習が完了したことを知るために､ print文を追加してみましょう｡
わかりました｡
私のほうで構文に間違いがなければ､ 問題ないはずです｡
コラボノートブックが初期化されます｡
全部やり直しました｡
これを実行させてください｡
numpyしか使っていないので､ とても速いはずです｡
ある意味､ 非常に最適化されたモデルだと思います｡
これをクリックすると､ 最短経路を探すことができます｡
わかりました｡
トレーニングは完了しました｡
また､ いくつかの開始オプションの最短経路を表示してみましょう｡
そこで､ 3行目､ 9列目から､ 最短経路のオプションで､ 最短経路を設定することにしました｡
5行目と0行目､ そして9行目と5列目から見ていきたいと思います｡
これをプリントアウトしてみよう｡
すごい｡
最短経路はわかったが､ まだ終わっていない｡
あと少しです｡
私たちの郵便配達員は､ 私たちの街から商品の梱包エリアまでの法的な位置を考慮した最短経路を自動的に取得することができます｡
しかし､ その逆はどうでしょう？
基本的には､ 「郵便局員は､ 市内のどこからでも梱包エリアまで商品を届けることができるのでしょうか？
しかし､ その後に次の商品をピックアップするために､ そのエリアから包装エリア､ そして市内の別の場所に移動する必要があるのです｡
では､ これを解決するためにはどうすればいいのか｡
そして､ それは実はとてもシンプルなことなのです｡
最短経路の順番を見直すとか｡
ちょっと考えてみてください｡ そうすれば､ これが解決するのではないでしょうか｡
最短経路を使えばいいんです｡
では､ 5行目と2列目を例にとると､ 必要なのはリバースオプションを使うことです｡
Pythonの場合､ path reverseを使うので､ パスを出力することができます｡
つまり､ 5と2ということですね｡
そして､ そこに行く｡
最短経路があるので､ セルの中の画像をつかんで下に持っていって､ それらの経路を比較したり見たりしたいときにとても便利です｡
しかし､ 印刷した明細書を取り出し､ 順番に列を見れば､ 実際に経路を確認することができますし､ このセールスマンがどのように移動しているかを見ることができます｡
あなたが使っているのは､ とても素晴らしい作品です｡
Q学習について｡
このコースで学んだことは､ この本質的な巡回セールスマンのような問題を解決するために､ ちょっとしたボーナスや楽しいシナリオとセクションがあります｡
その最短の選択肢､ 最短の道筋を見つけるために､ 街中で荷物や物を配達する郵便屋さんに注目しています｡
カスタマイズしたり､ 他のオプションを試したり､ ハイパーパラメータを変更したりすることを強くお勧めします｡
もし､ 何か良い方法を発見したり､ 最適なパラメータを発見したりしたら､ ぜひQ&Aでシェアしてください｡
驚きです｡
皆さんは本当に楽しんでいただけたでしょうか？
カスタマイズし､ 実験し､ 学び続けてください｡
一緒に仕事をするのがとても楽しいです｡
Q.
学び､ 楽しむi｡