UPDATE 2018-07-26:以上です!この種のゲームが解決できるようになりました!OpenAIを使用し、ゲームDotA 2に基づいて、チームは5v5ゲームでセミプロのゲーマーを倒すことができるAIを作成できます。DotA 2を知っていれば、このゲームは力学的にはディアブロのようなゲームに非常に似ていますが、チームプレイのためにさらに複雑であると主張できます。
予想どおり、これはディープラーニングによる強化学習の最新の進歩と、APIをきちんと取得できるためAIの開発を容易にするOpenAIのようなオープンゲームフレームワークを使用し、ゲームを加速できるために達成されました(再生されるAI自分自身に対する毎日180年のゲームプレイに相当します!)。
2018年8月5日(10日で!)、このAIをトップのDotA 2ゲーマーと対戦する予定です。これがうまくいくなら、大きな革命を予想してください。おそらくGoゲームの解決ほどにはメディア化されていませんが、それでもゲームAIにとって大きなマイルストーンになるでしょう!
UPDATE 2017-01: AlphaGoの成功以来、この分野は非常に速く動いており、ほぼ毎月ゲームでの機械学習アルゴリズムの開発を促進する新しいフレームワークがあります。これが私が見つけた最新のもののリストです:
- OpenAIのユニバース:機械学習を使用して事実上すべてのゲームをプレイするためのプラットフォーム。APIはPythonであり、VNCリモートデスクトップ環境の背後でゲームを実行するため、あらゆるゲームの画像をキャプチャできます。おそらく、ユニバースを使用して、機械学習アルゴリズムでDiablo IIをプレイできます。
- OpenAIのジム:Universeに似ていますが、強化学習アルゴリズムを具体的にターゲットにしています(そのため、AlphaGoで使用されるフレームワークの一般化のようなものですが、より多くのゲームに対して)。OpenAI Gymを使用したブレイクアウトやドゥームなどのゲームへの機械学習の適用をカバーするUdemyのコースがあります。
- TorchCraft:Torch(機械学習フレームワーク)とStarCraft:Brood Warの架け橋。
- pyGTA5:画面キャプチャのみを使用して、GTA5で自動運転車を構築するプロジェクト(オンラインのビデオがたくさんあります)。
とてもエキサイティングな時間!
重要な更新(2016年6月): OPで指摘されているように、ビジュアル入力のみを使用してゲームをプレイするように人工ネットワークをトレーニングするこの問題は、いくつかの深刻な機関によって現在取り組んでおり、DeepMind Deep-Qlearning-Network(DQN )。
そして今、次のレベルの課題に取り組みたい場合、ViZDoomなどのさまざまなAIビジョンゲーム開発プラットフォームの 1つを使用できます。ViZDoomは、高度に最適化されたプラットフォーム(7000 fps)であり、ネットワークをトレーニングして、視覚的な入力のみを使用してDoomをプレイできます。 :
ViZDoomでは、視覚情報(画面バッファー)のみを使用してDoomを再生するAIボットを開発できます。これは主に、機械視覚学習、特に深層強化学習の研究を目的としています。ViZDoomはZDoomに基づいており、ゲームの仕組みを提供します。
そして結果は非常に素晴らしいです、彼らのウェブページのビデオとここの素晴らしいチュートリアル(Pythonで)を見てください!
Quakesと呼ばれるQuake 3 Arena用の同様のプロジェクトもあります。これは、基礎となるゲームデータへの簡単なAPIアクセスを提供しますが、それをスクラップして、スクリーンショットとAPIを使用して、エージェントを制御するだけです。
スクリーンショットだけを使用するのにこのようなプラットフォームが役立つのはなぜですか?基盤となるゲームデータにアクセスしない場合でも、そのようなプラットフォームは以下を提供します。
- ゲームの高性能実装(より短い時間でより多くのデータ/再生/学習世代を生成できるため、学習アルゴリズムはより速く収束できます!)
- エージェントを制御するためのシンプルで応答性の高いAPI(つまり、人間の入力を使用してゲームを制御しようとすると、一部のコマンドが失われる可能性があるため、出力の信頼性の低下にも対処します...)。
- カスタムシナリオの簡単なセットアップ。
- カスタマイズ可能なレンダリング(処理を容易にするために取得した画像を「単純化」するのに役立ちます)
- 同期(ターンバイターン)プレイ(最初にリアルタイムで動作するためにアルゴリズムを必要としないため、複雑さが大幅に軽減されます)。
- クロスプラットフォーム互換性、レトロコンパチビリティ(新しいゲームアップデートがあったときにボットがゲームで動作しなくなるリスクがない)などの追加の便利な機能
要約すると、これらのプラットフォームの優れた点は、対処する必要があった以前の技術的な問題(ゲーム入力の操作方法、シナリオの設定方法など)の多くが軽減されるため、学習アルゴリズムに対処するだけで済むことです。自体。
さあ、仕事に取り掛かって、これまでで最高のAIビジュアルボットにしてください;)
ビジュアル入力のみに依存するAIの開発の技術的な問題を説明する古い投稿:
上記の同僚の何人かに反して、私はこの問題が扱いにくいとは思いません。しかし、それは確かに非常に難しいものです!
上記で指摘した最初の問題は、ゲームの状態を表すことです。1つの画像だけで完全な状態を表すことはできません。何らかの記憶を維持する必要があります。(健康だけでなく、装備されているオブジェクト、使用可能なアイテム、クエスト、ゴールなども含まれます)。このような情報を取得するには、2つの方法があります。最も信頼性が高く簡単なゲームデータに直接アクセスする方法です。または、いくつかの簡単な手順(インベントリを開く、スクリーンショットを撮る、データを抽出する)を実装して、これらの情報の抽象的な表現を作成することもできます。もちろん、スクリーンショットからデータを抽出するには、監視対象の手順(完全に定義したもの)または監視なし(機械学習アルゴリズムを介して)を入力する必要がありますが、複雑さは大幅に増大します...)。教師なし機械学習の場合、構造学習アルゴリズムと呼ばれるごく最近の種類のアルゴリズムを使用する必要があります(これは、データを分類したり値を予測する方法ではなく、データの構造を学習します)。http://techtalks.tv/talks/54422/
次に、必要なすべてのデータをフェッチしても、ゲームが部分的にしか観察できないという別の問題があります。したがって、世界の抽象的なモデルを挿入し、アバターの場所だけでなく、画面外のクエストアイテム、目標、敵の場所など、ゲームからの処理済み情報をフィードする必要があります。Vermaak 2003のMixture Particle Filtersを調べてみてください。
また、あなたが持っている必要があり自律エージェントをして、目標が動的に生成されます。試すことができるよく知られているアーキテクチャはBDIエージェントですが、実際のケースでこのアーキテクチャを機能させるには、おそらくそれを微調整する必要があります。別の方法として、再帰的ペトリネットもあります。これは、ペトリネットのあらゆる種類のバリエーションと組み合わせて、非常によく研究された柔軟なフレームワークであり、優れた形式化と証明の手順を備えているため、目的を達成できます。
そして最後に、上記のすべてを行ったとしても、ゲームを加速した速度でエミュレートする方法を見つける必要があります(ビデオを使用するのは良いかもしれませんが、問題は、アルゴリズムが制御せずに見ているだけで、それ自体を試すことは学習にとって非常に重要です)。実際、現在の最先端のアルゴリズムでは、人間が学習できるのと同じことを学習するのに多くの時間がかかることはよく知られています(強化学習ではさらにそうです)。したがって、プロセスを高速化できない場合(つまり、ゲーム時間を短縮できない場合)、アルゴリズムは単一のライフタイムに収束することもありません...
結論として、ここで達成したいのは、現在の最先端のアルゴリズムの限界(そしておそらくそれを少し超える)です。私はそれが可能かもしれないと思うが、それは場合でも、あなたは時間のヘラの多くを費やすつもりです、これは理論上の問題ではなくなるため、実用上の問題はあなたがここに近づいているので、あなたは、実装とする必要がある多くを組み合わせますそれを解決するためのさまざまなAIアプローチの。
チーム全体で取り組んでいる数十年の研究では十分ではない可能性があるため、あなたが一人でパートタイムで取り組んでいる場合は(おそらく生計を立てているため)、近くに到達することなく一生を過ごすことができます。実用的なソリューション。
したがって、ここでの最も重要なアドバイスは、期待を低くして、複雑さを軽減することですできる限りすべての情報を使用して問題を解決し、スクリーンショットに依存することをできるだけ避け(つまり、ゲームに直接フックしてDLLインジェクションを探す)、監視された手順を実装して問題を単純化し、アルゴリズムはすべてを学習します(つまり、今のところ画像処理を可能な限り落とし、内部のゲーム情報に依存します。後でアルゴリズムが適切に機能する場合は、AIプログラムの一部を画像処理に置き換えることで、徐々に完全な目標を達成できます。たとえば、何かがうまく機能する場合は、問題を複雑にして、監視された手順とメモリゲームデータをスクリーンショットの監視されていない機械学習アルゴリズムで置き換えることができます)。
頑張ってください、そしてそれがうまくいけば、必ず記事を公開してください、あなたは確かにそのような難しい実用的な問題を解決することで有名になるでしょう!