143

私は現在、ANNにビデオゲームをプレイしてもらうことを試みており、ここの素晴らしいコミュニティから助けを得ることを望んでいました。

私はDiablo2に落ち着きました。したがって、ゲームプレイはリアルタイムで等角投影の観点から行われ、プレーヤーはカメラが中心にある単一のアバターを制御します。

具体的には、体力を0に落とさずに、キャラクターxの経験値を取得します。経験値はモンスターを倒すことで獲得できます。ゲームプレイの例を次に示します。

ここ

さて、ネットは画面上のピクセルから得た情報だけに基づいて動作させたいので、効率的にプレイするには非常に豊富な表現を学習する必要があります。これには、おそらく(少なくとも暗黙的に)方法を知る必要があるためです。ゲームの世界をオブジェクトとそれらとの相互作用の方法に分割します。

そして、この情報のすべては、どういうわけかネットに教えられなければなりません。私はこのことをどのように訓練するかを一生考えることができません。私の唯一のアイデアは、別のプログラムでゲームの本質的に良い/悪いもの(健康、金、経験など)を画面から視覚的に抽出し、その統計を強化学習手順で使用することです。それは答えの一部になると思いますが、それだけでは十分ではないと思います。私の生涯の中でネットを訓練するには、そのような限られたフィードバックには、生の視覚入力から目標指向の行動までの抽象化のレベルが多すぎます。

それで、私の質問:このタスクの少なくとも一部を実行するためにネットをトレーニングするために他にどのような方法を考えることができますか?できれば、何千ものラベル付きの例を作成せずに。

もう少し方向性を示します。強化学習のその他のソースや、この設定で有用な情報を抽出するための教師なし方法を探しています。または、手動でラベルを付けることなく、ゲームの世界からラベル付きデータを取得する方法を考えることができる場合は、監視対象のアルゴリズム。

更新(04/27/12):

不思議なことに、私はまだこれに取り組んでおり、進歩しているようです。ANNコントローラを機能させるための最大の秘訣は、タスクに適した最も高度なANNアーキテクチャを使用することです。したがって、時間差バックプロパゲーション(つまり、標準による強化学習)で微調整する前に、教師なし方法で(ゲームをプレイしているビデオで)トレーニングした、因数分解された条件付き制限付きボルツマンマシンで構成されるディープビリーフネットを使用しています。フィードフォワードANN)。

ただし、特にリアルタイムでのアクション選択の問題と、ANN処理のためにカラー画像をエンコードする方法については、さらに価値のある入力を探しています:-)

更新(10/21/15):

昔、この質問をしたことを思い出しました。これはもはやクレイジーなアイデアではないことを述べておかなければならないと思いました。前回の更新以降、DeepMindは、ニューラルネットワークにビジュアル入力からAtariゲームをプレイさせることに関するネイチャーペーパーを公開しました。確かに、Diablo 2の限られたサブセットである彼らのアーキテクチャを使用してプレイすることを妨げている唯一のことは、基盤となるゲームエンジンへのアクセスの欠如です。画面にレンダリングしてからネットワークにリダイレクトするのは遅すぎて、妥当な時間でトレーニングできません。したがって、この種のボットがすぐにDiablo 2を再生することはおそらくないでしょうが、それはオープンソースまたはレンダリングターゲットへのAPIアクセスのいずれかで何かを再生するためです。(おそらく地震?)

4

7 に答える 7

56

ANNのトレーニング方法について心配しているようですが、このプロジェクトは、あなたが気付いていないかもしれない複雑さを隠しています。画像処理によるコンピュータゲームでのオブジェクト/文字認識は、非常に困難な作業です(FPSおよびRPGゲームに夢中とは言えません)。私はあなたのスキルに疑いはなく、それができないと言っているわけでもありませんが、ANN自体を実装するよりも10倍多くの時間を簡単に認識に費やすことができます(デジタル画像処理技術の経験があると仮定します) )。

あなたのアイデアは非常に興味深く、また非常に野心的だと思います。この時点で、あなたはそれを再考したいかもしれません。このプロジェクトはあなたが大学で計画しているものだと思います。そのため、作業の焦点が本当にANNである場合は、おそらく別のゲーム、より単純なものを選択する必要があります。

少し前に、他の誰かが別の、しかしどういうわけか似たようなプロジェクトのヒントを探しに来たのを覚えています。それをチェックする価値があります。

一方、提案を受け入れる場合は、ゲーム内のオブジェクトを識別するためのより良い/より簡単なアプローチがあるかもしれません。しかし、最初に、このプロジェクトをあなたが望むもの、つまりスマートボットと呼びましょう。

ボットを実装する1つの方法は、ゲームクライアントのメモリにアクセスして、画面上のキャラクターの位置や状態などの関連情報を見つけます。コンピュータのメモリを読み取ることは簡単ですが、メモリ内のどこを探すべきかを正確に把握することは簡単ではありません。Cheat Engineのようなメモリスキャナーは、これに非常に役立ちます。

ゲームの下で機能する別の方法は、レンダリング情報を操作することを含みます。ゲームのすべてのオブジェクトを画面にレンダリングする必要があります。これは、すべての3Dオブジェクトの場所が最終的にビデオカードに送信されて処理されることを意味します。本格的なデバッグの準備をしてください。

この回答では、画像処理を通じて目的を達成するための2つの方法について簡単に説明しました。それらに興味がある場合は、このテーマに関する優れた本であるExploiting Online Games (第6章)でそれらについて詳しく知ることができます。

于 2011-07-03T17:12:00.483 に答える
44

更新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などのゲームへの機械学習の適用をカバーするコースがあります。
  • TorchCraftTorch(機械学習フレームワーク)と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プログラムの一部を画像処理に置き換えることができます。これにより、徐々に完全な目標を達成できます。たとえば、何かをうまく機能させることができる場合は、問題を複雑にし、監視対象の手順とメモリゲームデータを監視対象外の機械学習アルゴリズムでスクリーンショットに置き換えることができます)。

頑張ってください、そしてそれがうまくいくなら、記事を公開することを忘れないでください、あなたは確かにそのような難しい実用的な問題を解決することで有名になることができます!

于 2013-12-28T12:43:56.500 に答える
26

あなたが追求している問題は、あなたがそれを定義した方法では手に負えないものです。ニューラルネットワークが問題の豊富な表現を「魔法のように」学習すると考えるのは通常間違いです。ANNがタスクに適したツールであるかどうかを判断する際に留意すべき良い事実は、それが内挿法であるということです。関数の近似を見つけることとして問題を組み立てることができるかどうかを考えてください。この関数から多くのポイントがあり、ネットワークの設計とトレーニングに多くの時間がかかります。

あなたが提案する問題はこのテストに合格しません。ゲームコントロールは、画面上の画像の機能ではありません。プレイヤーが記憶に残さなければならない情報はたくさんあります。簡単な例として、ゲームでお店に入るたびに画面が同じように見えることはよくあることです。ただし、購入するものは状況によって異なります。ネットワークがどれほど複雑であっても、画面のピクセルが入力である場合は、ストアに入るときに常に同じアクションを実行します。

その上、規模の問題があります。あなたが提案するタスクは、単純に複雑すぎて、妥当な時間で学ぶことができません。ゲームAIの仕組みについては、 aigamedev.comをご覧ください。人工ニューラルネットワークは、一部のゲームで正常に使用されていますが、その方法は非常に限られています。ゲームAIは開発が難しく、多くの場合、開発に費用がかかります。機能的なニューラルネットワークを構築する一般的なアプローチがあったとしたら、業界はおそらくそれを利用していたでしょう。三目並べのような、はるかに単純な例から始めることをお勧めします。

于 2011-07-01T01:01:15.920 に答える
18

このプロジェクトの中心はANNで何ができるかを探求しているように思われるので、画像処理を処理する必要のないゲームを選ぶことをお勧めします(これは、ここでの他の回答から、リアルタイムゲーム)。Starcraft APIを使用してボットを構築すると、関連するすべてのゲーム状態にアクセスできます。

http://code.google.com/p/bwapi/

于 2011-07-03T18:05:15.440 に答える
2

最初のステップとして、連続するフレームの違いを確認できます。背景と実際のモンスタースプライトを区別する必要があります。世界にもアニメーションが含まれているのではないかと思います。それらを見つけるために、私はキャラクターを動かしてもらい、世界とともに動くすべてのものを大きな背景画像/アニメーションに集めます。

(FFTを使用して)相関関係のある敵を検出および識別することができます。ただし、アニメーションがピクセル単位で繰り返される場合は、いくつかのピクセル値を確認する方が高速です。主なタスクは、新しいオブジェクトが画面に表示されたときに識別し、スプライトフレームのすべてのフレームをデータベースに徐々に表示する堅牢なシステムを作成することです。おそらく、武器効果のモデルも作成する必要があります。それらは、対戦相手のデータベースを乱雑にしないように差し引く必要があります。

于 2011-07-04T17:05:23.967 に答える
1

いつでも、可能なすべての「動き」のセットから「結果」のセット(確率を含む可能性があります)を生成でき、ゲームには一貫性の概念があると仮定します(たとえば、レベルXを何度もプレイできます)。繰り返しますが、ランダムな重みを持つN個のニューラルネットワークから始めて、それぞれに次の方法でゲームをプレイさせることができます。

1)考えられるすべての「移動」について、考えられる「結果」のリストを生成します(関連する確率を含む)2)各結果について、ニューラルネットワークを使用して「結果」の関連する「価値」(スコア)を決定します(例: -1から1までの数字、1が最良の結果、-1が最悪)3)最高の確率*スコアにつながる「移動」を選択します。4)移動が「勝ち」または「負け」につながった場合、停止します。それ以外の場合は、手順1に戻ります。

一定の時間が経過した後(または「勝ち」/「負け」)、ニューラルネットワークが「目標」にどれだけ近かったかを評価します(これにはおそらくドメイン知識が含まれます)。次に、目標から最も遠いNNの50%(または他のパーセンテージ)を破棄し、上位50%のクロスオーバー/ミューテーションを実行して、新しいNNのセットを再度実行します。満足のいくNNが出るまで走り続けます。

于 2011-07-01T16:42:59.077 に答える
1

あなたの最善の策は、いくつかの/かもしれないネットワークを含む複雑なアーキテクチャだと思います:つまり、アイテムの認識と応答、ショップ用、戦闘用(おそらくここでは敵の認識用、攻撃用に1つ必要です)などです。 。

次に、可能な限り最も単純なディアブロIIゲームプレイ、おそらく野蛮人について考えてみてください。次に、最初は、第1幕のように、最初の領域のみを単純にします。

次に、価値のある「目標」は、敵のオブジェクトの消失とヘルスバーの減少(逆のスコア)になると思います。

これらの個別の「より単純な」タスクを処理したら、「マスター」ANNを使用して、アクティブ化するサブANNを決定できます。

トレーニングに関しては、3つのオプションしかありません。上記の進化的方法を使用できますが、そのためにまったく別のプログラムをコーディングしない限り、手動で「勝者」を選択する必要があります。ネットワークに誰かがプレイするのを「見る」ようにすることができます。ここでは、プレーヤーまたはプレーヤーのスタイルのグループをエミュレートする方法を学びます。ネットワークは、プレーヤーの次のアクションを予測しようとし、正しい推測のために強化されます。実際に必要なANNを取得した場合、これはビデオゲームプレイで実行でき、実際のライブゲームプレイは必要ありません。最後に、ネットワークにゲームをプレイさせ、敵の死亡、レベルアップ、健康の回復などを正の強化として、プレーヤーの死亡、健康の喪失などを負の強化として行うことができます。しかし、単純なネットワークでさえ、単純なタスクでさえ学ぶために何千もの具体的なトレーニングステップが必要であることがわかります。

全体として、あなたのプロジェクトは非常に野心的です。しかし、私は、十分な時間があれば、「理論的には実行できる」と考えています。

それがお役に立てば幸いです!

于 2012-01-20T12:15:40.150 に答える