問題タブ [game-ai]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - ペグソリティア / 千空解法
Peg solitaire / Senkuのゲームのソルバーをプログラムする必要があります ここに
既に質問がありますが、提案された答えはバックトラッキングを使用したブルート フォース アルゴリズムであり、これは私が探しているソリューションではありません。
A* アルゴリズムを適用するには、ヒューリスティックを見つける必要があります。残りのペグは、すべての移動で 1 つのペグが破棄されるため、コストが常に均一になるため、適切なヒューリスティックではありません。
何か案は?
machine-learning - シューティング ゲームのゲーム AI 研究を行うための API
機械学習関連のコースプロジェクトを探しています。私は基本的に、トップ ビュー 2D シューティング ゲームのフレームワークを探しており、それに機械学習アルゴリズムを適用しています。
TORCSと呼ばれるカーレースの研究に利用できるフレームワークがあり、私はこれに似たものを探していましたが、シューティング ゲーム用です。
基本的に、ボットを動かしたり、撃ったり、武器を選んだりするための高レベルの API が必要です。
実行できる作業の一部: ボットが戦闘中にどのように戦うかをモデル化する必要があるとしましょう。ニューラル ネットワークを使用して、敵の位置、ボットの位置、ボットの弾薬などを移動方法や選択する武器にマッピングします。
これを行うのに役立つ(2D、Pythonが望ましい)フレームワークはありますか?
python - 困ったレベルのソルバーを書くためのアドバイス
Vexed は人気のあるパズル ゲームであり、多くのバージョンが利用可能です (一部は GPL フリー ソフトウェア)。小さな画面のデバイスに非常に適しています。バージョンは、Android、iOS などで利用できます。PalmOS プラットフォームで発見しました。
楽しみのために、困ったレベルを解決するソルバーを書きたいと思います。
Vexed は、ブロック スライディング パズル ゲームです。ルールを簡単に説明すると、次のようになります。
0) 各レベルは四角形のグリッドで、通過できない境界線で囲まれています。どのレベルでも、通過できない塗りつぶされた四角がいくつかあります。さまざまな色のブロックがいくつかあります。これらは、下の境界線、黒の正方形、または他のブロック (異なる色) に置かれている可能性があります。ほとんどのレベルは 8x8 以下です。
1) ブロックを左右にスライドさせる操作しかできません。ブロックが移動する各正方形は、1 回の移動としてカウントされます。
2) 重力があります。ブロックをスライドさせた後、ブロックが塗りつぶされた正方形または別のブロックに置かれなくなった場合、ブロックは別のブロック、塗りつぶされた正方形、または下の境界線に収まるまで落下します。二度と持ち上げることはできませんのでご注意ください。
3) 同じ色のブロックが 2 つ以上接触すると、ブロックは消えます。チェーンが可能であることに注意してください: 支持ブロックが消えると、その上に載っていたブロックが落下し、同じ色のブロックがさらに接触して消える可能性があります。
4) 目標は、最小限の手数ですべてのブロックを消すことです。各レベルには、移動の最小数を示す「標準スコア」があります。(元の PalmOS ゲームでは、「パー スコア」は必ずしも最小ではありませんでしたが、最近プレイしている Android バージョンでは最小です。)
これは、ゲームの PalmOS バージョンのソースを含む SourceForge プロジェクトです。
http://sourceforge.net/projects/vexed/
私は経験豊富なソフトウェア開発者ですが、AI に関する作業 (パスファインディング、問題解決など) を実際に行ったことはありません。正しい方向に向けるためのアドバイスを探しています。
現時点では、私が追求すべき基本的な戦略が 2 つあります。
0) すべてのゲームで考えられるすべての解を調べて、すべての解のリスト (最良の解から順に) を返す総当たりソルバを、おそらく速度のために C で作成するだけです。これは合理的なアプローチでしょうか?それとも可能な移動の総数がこれを遅くしすぎますか? 10x10 より大きいレベルは存在しないと思います。
1) いくつかの AI っぽいアルゴリズムを学び、おそらく Python を使用して、問題を解決するためにそれらを巧妙な方法で適用します。
PalmOS Vexed のソースにはソルバーが含まれていることに注意してください。著者によると、「ソルバーは A* とプルーニング ヒューリスティックを使用してソリューションを見つけます。」
http://www.scottlu.com/Content/Vexed.html
したがって、私が追求できる戦略の 1 つは、A* アルゴリズムを研究してから、既存のソルバーの C++ コードを研究し、そこから学ぼうとすることです。
これを Python と C タグでタグ付けしますが、何か他のものを使用する必要があると思われる場合は、売り込みを行ってください。検討します!
「バラエティ25パック」のレベルのアスキーアートです。レベル48、「ダークロード」。私はほとんどのレベルを解決することができますが、これは私を悩ませました. このレベルの標準スコアは 25 手ですが、まだまったく解決していません。
この図では、境界線はアンダースコア、縦棒、および等号文字です。塗りつぶされた四角は「#」です。オープン スペースはスペース文字です。色付きのブロックは「g」(緑)、「b」(青)、「p」(紫)です。
ちなみに、ソルバーへの入力ファイル形式はレベルの ASCII アートにする予定です。
アドバイスをありがとう!
編集:
回答を受け付けました。回答をくださった方々、ありがとうございました。
これは半力ずくのソルバーです。A*は使っていませんが、木の不採算枝を短く切っています。
レベル データを含む単純なテキスト ファイルを読み込みます。文字はブロック、'_' (アンダースコア) は空白、'#' は埋め込みスペースです。
レベル ファイルの例を次に示します。
私のコンピューターでは、14252 の異なるボード構成を考慮して、"Dark Lord" をほぼ正確に 10 秒で解決します。Python 3 ではなく Python 2.x で書いたのは、これを PyPy で試してどれだけ高速になるかを確認したいからです。
次に、これに A* を適用する作業を行う必要があります。「オレンジ色のブロックを別のオレンジ色のブロックに近づけるよりも、別のオレンジ色のブロックに近づける方が良い」のようなメトリックを作成して、それを機能させることができると思います。(最小手数である解が 3 つある場合は、3 つすべてを見たいと思います。)
この Python プログラムに関するコメントを歓迎します。書いてて楽しかった!
編集: PyPy でこれを試しましたが、今まで更新したことはありません。私が PyPy で使用したコンピューターでは、ソルバーは CPython を使用して「Dark Lord」レベルを 10 秒で解決できました。PyPy では 4 秒に短縮されました。クールな部分は、JIT が開始されたときに速度が向上したことです。このプログラムは、動作中にドットを出力します。PyPy では、ドットの開始が遅くなり、その後加速することがわかります。PyPy は気の利いたものです。
artificial-intelligence - 現在の「部屋」への入り口を識別する*経路探索アルゴリズム?
これにアプローチする方法について良いアイデアが 1 つまたは 2 つあるオンライン記事を探していましたが、あまり見つかりませんでした。そのほとんどは、既知の宛先タイプへのパスを生成してたどるさまざまな方法を扱います。
基本的には、既存のノード グラフがあり、そのデータを利用して、AI ユニットが防御したい現在のエリアへの入り口を特定するという考えです。半径のあるポイントを防御するタスクを割り当てられた AI ユニットを考えてみてください。防御ポイントに向かう敵が現れるのを待っている間に、最適な方向を選択したいと考えています。
私が入力を求めていた重要なポイントは、入口ポイントを特定する方法です。または、防御されているエリアへの出入り口であるノード。
artificial-intelligence - Q-Learning で MinMax ツリーを使用するには?
Q-Learning で MinMax ツリーを使用するには?
Q-Learning コネクト フォー エージェントを実装したいのですが、MinMax ツリーを追加すると役立つと聞きました。
vb.net - CPUプレーヤー VB.NET
それで、マインスイーパ フラグ ゲームを開発していて、マルチプレイヤー バージョンはすべてセットアップされていますが、シングル プレイヤー バージョンはまだ開発中です。私が DataGridView を使用していることを参照し、適用r = tab1.CurrentCell.RowIndex + 1
しc = tab1.CurrentCell.ColumnIndex + 1
て、プレーヤーがクリックする場所を確認することが重要です。私がやりたいことは、AI が順番になったときにランダムなセルをクリックするようにすることですが、どうすればよいでしょうか。何かご意見は?
よろしく、ジョアオ。
java - AI パスのノード座標の保存
私は現在ゲームに取り組んでおり、少し問題が発生しています。
AI キャラクターがゲーム内でたどるパスを作成するアルゴリズムに取り組んでいます。これはトップダウン型のアドベンチャー ゲームで、AI は 50 x 50 のマップ上でランダムな場所を選択し、障害物を考慮して最短経路を選択します。
元々は AI が 0 ~ 3 を使用して移動方法を決定するように持っていました。0 の場合、上、1、右などに移動します。現在、A* アルゴリズムを使用して移動のリストを作成しようとしています。彼らが到着すると、彼らは新しい目的地を選択し、プロセスが繰り返されます.
私が抱えている問題は、正方形を保存することです。私の理解では、クローズド リストとオープン リストが必要です。私はこれらに連結リストを使用することを計画していましたが、最終的には、たどるパスを格納する 3 つ目の連結リストを使用しました。
問題は、x 座標と y 座標の両方を格納する必要があることです。それぞれに 2 つのリストを使用できると思っていましたが、効率が悪いようです。
ちなみにプログラミングにはJavaを使っています。
c++ - ゲームで放浪動作を実装する
私はいくつかのゲームを行っており、現在、タンクの移動動作を実装しようとしているところですが、うまく実装できません。
問題は、その位置を計算し、それが (430,130) のようで、rand_floatRange 関数を使用して、0 と画面の高さ (500) の間の値を自分自身に与えることです。320 としましょう。画面から消えます。
私のデバッグプロセスにはまったくエラーはありません。それは問題なく構築され、戦車はフィールド上を移動しますが、高い値に達するのを止める制限がないため、しばらくすると画面から消えます (例: 戦車の位置は (450,100) で、画面は (600,600) です) 、そしてタンクが新しいターゲットを取得した場合(そのターゲットはその場所から( 300,200 )に到達します( 0 から 600 の値を取ります)、それは(750,300)になり、画面から消えます。
screenHeight と screenWidth の範囲で問題なく動作するように修正できるものは他にありますか。
他に必要なものがありましたら、こちらで提供させていただきます。
path-finding - cryengineで大きなサイズのエンティティの正しいPathFindingを作成するにはどうすればよいですか?
パスファインディングの問題で数日間混乱してきましたが、生成されたパスと禁止エリアの間のスペースは一定のようです。私は本当に乾燥していて、公式文書で私の質問に関連するものは何も見つかりませんでした。
「pathfindProperties.xml」を変更しようとしましたが、別の「タイプ」を切り替えても違いはありません。コライダーの半径を拡大します。
誰か助けてくれる人はいますか?ほんとうにありがとう!
{私の質問のスクリーンショット:http ://www.crydev.net/download/file.php?id = 86461 }
python - スプライトの位置をラグなしで非常に高速に段階的に増加させる-Python
PythonでKivyを使用して学校のプロジェクト用のPONGゲームを作成しています。これまでのところ、このフォーラムのおかげで、NPCパドル用のAIを作成しました。これはコードです:
これは、ArtificialIntelligence()と呼ばれるPongGame()クラスのメソッドにあります。
私はこれを使ってそれを呼びます:
これにより、1/300秒に1回呼び出すことができます。ただ、1/300以上なら何の違いもないようです。つまり、1/9001は1/9001秒ごとに1回は呼び出されません。
それが機能する方法は、ボールの位置に対してy座標を4ピクセル増やすことであり、これは1/300秒ごとに1回行われるため、この速度で「遅れ」ることはありません。これは基本的にプレイヤーにとって「簡単な」モードです。「ハード」モードを実行したい場合は、NPCをより正確にする必要があります。私はこれを行うことによってこれを行うことができます
このようなもの。これは非常に正確です。ただし、「流動的」ではなく、「遅延」しているように見えます。ピクセルの動きを変更して移動量を変更する代わりに、メソッドをより頻繁に呼び出すことで、同じ量の移動を取得できると思います。ただし、これを行う方法はわかりません。前述したように、1/300より上から変更しても違いはないようです。
これが私のパドルの使い方です:
マウスを動かすと更新されるので、好きなだけ速く動かすことができます。また、更新が必要な頻度で更新されるため、流動的に見えます。AIでこれを行う方法がわかりません。
基本的にNPCパドルをより正確にして、流動性とラグを維持しながら、イージー-ノーマル-ハードなどを実行できるようにする方法を知っている人はいますか?私はそれを行うことができる唯一の方法を見ています:メソッドが呼び出される量を増やします。
しかし、私はもっと良い方法があるに違いない、そして私はそれをする方法を知らない。誰かが私がこれをどのように行うことができるかについて何か考えを持っていますか?ありがとう。
編集:私はこのようにそれを行うことができるように見えます:
しかし、それは本当に醜くて本当に非効率的なようです...私はもっとクリーンな方法を好むでしょう。