`を更新する行を追加します。print`ステートメントを削除します。代わりに、多くのエピソードで平均報酬を出力します。+`ブロックは次のようになります。.これらの変更後、ゲームループは次のように一致します。.次に、エージェントが探索と開発の間でトレードオフする機能を追加します。+」で始まる)の直前に、Q値テーブルを作成します。for」ループを書き換えます。_Noise_、または意味のないランダムデータは、モデルのパフォーマンスと精度の両方を改善できるため、ディープニューラルネットワークのトレーニング時に導入されることがあります。+`の値は重要ではないことに注意してください。結果として、ノイズが高いほど、エージェントはゲームに関する知識とは無関係に行動する可能性が高くなります。言い換えれば、ノイズが高いと、エージェントはランダムなアクションを_explore_するようになります。.「エピソード」が増加すると、ノイズの量は二次的に減少することに注意してください。+」行を更新して、エージェントがQ値テーブルに従ってアクションを選択するようにし、いくつかの調査を組み込みます。.メインゲームループは次のように一致します。[ベルマン更新式]を使用してQ値テーブルを更新します。これは、特定の環境内で最適なポリシーを見つけるために機械学習で広く使用されている式です。ベルマン方程式には、このプロジェクトに非常に関連性の高い2つのアイデアが組み込まれています。特定の状態から特定のアクションを何度も実行すると、その状態とアクションに関連付けられたQ値の適切な推定値が得られます。このため、より強力なQ値の推定値を返すために、このボットが再生する必要があるエピソードの数を増やします。第二に、元のアクションにゼロ以外の報酬が割り当てられるように、報酬は時間を通じて伝播する必要があります。このアイデアは、報酬が遅れるゲームで最も明確です。スペースインベーダーでは、プレイヤーが撃たれたときではなく、エイリアンが爆発したときにプレイヤーに報酬が与えられます。プレーヤーの射撃は報酬の真の推進力です。.次に、必要なハイパーパラメーターをさらに2つの変数の形式でファイルの先頭に追加します。env.step(...​)+`を含む行の直後に、新しいターゲットQ値を計算します。+」の直後の行で、古いQ値と新しいQ値の加重平均を使用してQ値テーブルを更新します。.メインゲームループが次のようになっていることを確認します。.エージェントをトレーニングするためのロジックが完成しました。残っているのは、レポートメカニズムを追加することだけです。Pythonは厳密な型チェックを強制していませんが、クリーンにするために関数宣言に型を追加します。+`タイプをインポートします。+`の直後に、レポートの間隔と形式を宣言します。+`文字列を取り込む新しい関数を追加します。rewards.append(...​)+`の後、最後の100エピソードの平均報酬を印刷し、すべてのエピソードの平均報酬を印刷します。main()`関数の最後に、両方の平均をもう一度報告します。`という行を次の強調表示された行に置き換えます。.最後に、Q学習エージェントが完成しました。スクリプトが次と一致することを確認します。main()ファイルを保存し、エディターを終了して、スクリプトを実行します。bot_3_q_table.py出力は次と一致します。-1)これでゲーム用の重要なボットは初めてとなりましたが、この平均報酬「0.78」を視野に入れましょう。pageによると、ゲームを「解決する」とは、100エピソードの平均「0.78」を達成することを意味します。非公式には、「解決」とは「ゲームを非常にうまくプレイする」ことを意味します。記録的な時間ではありませんが、Qテーブルエージェントは4000エピソードでFrozenLakeを解決できます。ゲームはより複雑になる場合があります。ここでは、144個の可能な状態すべてを格納するためにテーブルを使用しましたが、19,683個の可能な状態がある三目並べを考えてみましょう。同様に、カウントできない状態が多すぎるスペースインベーダーについて検討します。ゲームがますます複雑になるにつれて、Qテーブルは維持できません。このため、Qテーブルを近似する何らかの方法が必要です。次のステップで実験を続けながら、状態とアクションを入力として受け入れ、Q値を出力できる関数を設計します。+」入力に基づいてQの値を効果的に予測しますが、これは複雑なゲームでは不安定になります。深層強化学習は、代わりにニューラルネットワークを使用してQ関数を近似します。Q-Learning]を参照してください。ステップ1でインストールしたディープラーニングライブラリであるhttps://www.tensorflow.org/[Tensorflow]に慣れるために、これまで使用されていたすべてのロジックをTensorflowの抽象化で再実装し、ニューラルネットワークを使用してQ関数を近似します。ニューラルネットワークは非常に単純です。これは、1つの「完全に接続されたレイヤー」を持つニューラルネットワークとして知られています。Ws繰り返しになりますが、目標は、Tensorflow抽象化を使用して既に構築したボットのすべてのロジックを実装することです。Tensorflowはすべての計算をGPUで実行できるため、これにより操作がより効率的になります。ステップ3のQテーブルスクリプトを複製します。+」または任意のテキストエディターで新しいファイルを開きます。bot_4_q_network.pyまず、ファイルの上部にあるコメントを更新します。import」ディレクティブを追加して、Tensorflowパッケージをインポートします。tf.set_radon_seed(0)+」を追加します。これにより、このスクリプトの結果がすべてのセッションで繰り返し可能になります。+」という関数を追加します。このコンテキストでは、「探索」とは、Q値の推定値で推奨されているアクションを実行するのではなく、ランダムなアクションを実行することを意味します。.次に、ワンホットエンコーディング関数を追加します。要するに、ワンホットエンコーディングとは、機械学習アルゴリズムがより良い予測を行うのに役立つ形式に変数を変換するプロセスです。[コンピュータービジョンの敵対者の例:感情ベースのドッグフィルターを作成してからだす方法]をご覧ください。+`関数を追加します。.次に、Tensorflowの抽象化を使用してアルゴリズムロジックを書き換えます。その前に、まずデータの_placeholders_を作成する必要があります。`のすぐ下に、以下の強調表示されたコンテンツを挿入します。+`として)の観測のプレースホルダーと、アクション、報酬、およびQターゲットのプレースホルダーを定義します。`で始まる行のすぐ下に、以下の強調表示された行を挿入します。+`を作成することで計算を開始します。.追加した最後の行のすぐ下に、次の強調表示されたコードを挿入します。」を計算する行と同等です。次の2行は損失を設定し、最後の行はQ値を最大化するアクションを計算します。.アルゴリズムと損失関数を設定した後、オプティマイザーを定義します。.次に、ゲームループの本体を設定します。これを行うには、Tensorflowプレースホルダーにデータを渡します。Tensorflowの抽象化はGPUで計算を処理し、アルゴリズムの結果を返します。古いQテーブルとロジックを削除することから始めます。