2048ゲームに勝つためにAIを構築します
2048年の最も重要なことは、タイルを移動して同じタイルをマージすることにより、最高のスコアに達することです。
ゲームでタイルを移動する方法と、移動するたびに新しいタイルを生成する方法を定義する必要があります。
コードはEnv.py
にあります
私の最初の試みは、モンテカルロツリー検索方法を使用してゲームに勝つことです。指定された検索深度のすべての可能な動きを経て、結果のスコアを比較して、特定の状況で最良の決定を選択しようとしました。
コードは2048_Search.py
にあります
この方法では、深さを1から5に設定し、各深さで100回走りました。
ここにいくつかの結果があります。
PS:平均勝利は2048に達する可能性を表しています。
平均最大スコア:210.24
平均勝利:0%
マックスリーチ | カウント | %蓄積 | 逆蓄積% |
---|---|---|---|
32 | 1 | 1% | 100% |
64 | 6 | 7% | 99% |
128 | 39 | 46% | 93% |
256 | 47 | 93% | 54% |
512 | 7 | 100% | 7% |
1024 | 0 | 100% | 0% |
平均最大スコア:1223.68
平均勝利:30%
マックスリーチ | カウント | %蓄積 | 逆蓄積% |
---|---|---|---|
256 | 4 | 4% | 100% |
512 | 19 | 23% | 96% |
1024 | 47 | 70% | 77% |
2048 | 29 | 99% | 30% |
4096 | 1 | 100% | 1% |
8192 | 0 | 100% | 0% |
平均最大スコア:1646.08
平均勝利:54%
マックスリーチ | カウント | %蓄積 | 逆蓄積% |
---|---|---|---|
256 | 1 | 1% | 100% |
512 | 9 | 10% | 99% |
1024 | 36 | 46% | 90% |
2048 | 48 | 94% | 54% |
4096 | 6 | 100% | 6% |
8192 | 0 | 100% | 0% |
平均最大スコア:2216.96
平均勝利:78%
マックスリーチ | カウント | %蓄積 | 逆蓄積% |
---|---|---|---|
256 | 0 | 0% | 100% |
512 | 3 | 3% | 100% |
1024 | 19 | 22% | 97% |
2048 | 58 | 80% | 78% |
4096 | 20 | 100% | 20% |
8192 | 0 | 100% | 0% |
平均最大スコア:2467.84
平均勝利:78%
マックスリーチ | カウント | %蓄積 | 逆蓄積% |
---|---|---|---|
256 | 0 | 0% | 100% |
512 | 2 | 2% | 100% |
1024 | 20 | 22% | 98% |
2048 | 48 | 70% | 78% |
4096 | 29 | 99% | 30% |
8192 | 1 | 100% | 1% |
My Computer MacBook Pro 15 "2012(MID)は、膨大な計算量を処理できません。このトピックに興味がある人は、何が起こっているかを確認するために深さの数を設定しようとすることができます。
この問題に別のアプローチを試みました。ゲームの開始段階で、私は小さな深さを使用して検索してプロセスを高速化しました。深さは2から始まり、400が設定された深さに到達するまで移動するたびにもう1つ大きくなります。
私は200エポックを走らせましたが、合計ゲームの42.5%のみが深さ6に達しました。ただし、深さ6の結果はかなり印象的です。
マックスリーチ | カウント | %蓄積 | 逆蓄積% |
---|---|---|---|
1024 | 1 | 1.18% | 100% |
2048 | 50 | 60% | 98.8% |
4096 | 34 | 100% | 40% |
深さ5、スコアと対応する移動数。平均して、2048年に到達するには1600ステップを超えて移動する必要があることがわかります。
マックスリーチ | カウント | 動きの合計 | ゲームごとの平均移動数 |
---|---|---|---|
512 | 2 | 1172 | 586 |
1024 | 25 | 25321 | 1012.84 |
2048 | 56 | 93276 | 1665.64 |
4096 | 17 | 48163 | 2833.12 |
検索方法を実装した後、いくつかの強化学習(RL)方法を研究しました。 RLについてより包括的に理解するために、2048ゲームでRLの1つの主要なブランチであるDQNを実装します。
DQNはQ値を報酬として使用して、マシンが下す決定を評価しています。
コードはDQNフォルダーにあります。
サルサも一種のRLです。 SarsaはDQNとわずかに異なります。
要するに、違いは、Sarsaポリシーがゲームの失敗(ゲームオーバー)を回避する最も安全な方法を選択することです。
一方、DQNポリシーは常に最高のスコアに到達する方法を選択し、初期のゲームで失敗することもあります。
コードはSarsaフォルダーにあります。