問題タブ [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.

0 投票する
0 に答える
596 参照

java - ステアリング動作: 到着動作の問題

私の OpenGL Android プロジェクトでステアリング動作の実装に取り​​組んでいますが、Arrive 動作コードが本来の動作をしない理由を理解するのに少し苦労しています。

更新ループ中に、私のプログラムは、モバイル エージェントの位置を更新するための操舵力を計算します。現在、Targetpos で定義された位置に移動するという点で、「シーク」動作と同じように動作しますが、速度を落としてポイントに近づくと停止するのではなく、前進し続け、ターゲットを何度もオーバーシュートします。また。

以下は、エージェントに適切なステアリング力を返すはずのコードです。

減速は、エージェントが減速する必要がある異なる速度をエンコードする 1 ~ 3 の単なる列挙型です。

0 投票する
2 に答える
855 参照

artificial-intelligence - ゲーム内の Q ラーニングが期待どおりに機能しない

私が書いた単純なゲームに Q ラーニングを実装しようとしました。このゲームは、迫り来るボックスを避けるために「ジャンプ」する必要があるプレーヤーに基づいています。

私は 2 つのアクションを持つシステムを設計しました。jumpそしてdo_nothing、状態は次のブロックからの距離です (状態の数が多くならないように分割され、フロア化されています)。

私の問題は、アルゴリズムの実装が「将来の報酬」を考慮していないため、間違ったタイミングでジャンプしてしまうことです。

これが私の Q 学習アルゴリズムの実装です。

そして、これによって使用されるプロパティの一部を次に示します。

現在のデータを使用できないため、lastAction/lastDistance を使用して Q を計算する必要があります (前のフレームで実行されたアクションに作用します)。

このthinkメソッドは、すべてのレンダリングとゲーム処理 (物理、コントロール、死など) が完了した後、フレームごとに 1 回呼び出されます。

0 投票する
0 に答える
660 参照

artificial-intelligence - ステアリング挙動の操舵力を理解する方法

ステアリング動作の Seek 動作を実装する方法のチュートリアルを読みました。リンクはこちら です。アルゴリズムを説明するグラフは次のとおりです。

グラフ.

速度、力、加速度はすべてベクトルであることを知っています。しかし、この記事では、定式化された "steering = desired_velocity - current_velocity" の "steering" が速度ではなく力になるのはなぜですか? なぜこれが理にかなっているのですか?1回の計算で混ぜてもいいということですか?それは、速度ベクトルが別の速度ベクトルを加算または減算して、力ベクトルを生成できるということですか? そうでない場合、なぜ結果が「力」と呼ばれるのですか? AI でステアリング動作がどのように機能するかを知っています。これを達成するための重要なポイントは、さまざまな操舵力をすべて合計して、総力を計算できることです。この総力は、式「a = F/m」で加速度を得るために使用できます。その後、この加速度を使用して、ゲーム ループの更新でオブジェクトの新しい位置と速度を計算できます。私の見解に基づいて、

0 投票する
1 に答える
6648 参照

c# - 4 行 (connect4) ゲームでの MinMax の実装と使用

4 連続 (または connect4 または connect 4) ゲームの MinMax アルゴリズムを実装しようとしています。

私はそれのアイデアを得たと思います、それは可能なボードのツリーを特定の深さまで構築し、それらを評価してスコアを返し、それらのスコアの最大値を取るだけです。

そのため、aiChooseCol()呼び出して可能なすべての列のスコアをチェックMinMax()し、最大スコアの列を返します。

よくわかりませんでしたが、これは正しい呼び出し方MinMax()ですか?

チェックするのは正しいtemp = Math.Max(temp, 1000);ですか?

私はまだヒューリスティック関数を作成していませんが、これは少なくとも勝者の列を認識して選択する必要がありますが、現在は左から最初の空いている列を選択するだけです...何が間違っているのかわかりません。

いくつかのメモ:

FillSignInBoardAccordingToCol()成功した場合はブール値を返します。

boardタイプには、実際のボードとプレーヤーのサインを含む配列char[,]があります。

このコードは AI Player クラスにあります。

0 投票する
1 に答える
1390 参照

lisp - Lisp で実装された Tic tac toe は、1 つの動きをする代わりにゲームを終了する

LISP を使用してアルファ ベータ プルーニングを使用する negamax アルゴリズムを使用する AI を使用して、単純な CLI tic-tac-toe ゲームを作成していますが、AI がどのように動くかについて問題があります。本来あるべき 1 つの動きをする代わりに、ゲームを完全にプレイしているので、ゲームは 2 つの動きしか続きません。私はそれを(ステップ)実行しましたが、問題は、そのブロックが実行されていないと言われている場合でも、negamax 関数の (when (> value bestValue)) ブロックに bestPath 変数が設定されていることです。また、設定される値は、設定するのが適切である場合に正しい値ではありません。助言がありますか?これが私のコードです。

AI のコードは次のとおりです。