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