問題タブ [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.
java - ステアリング動作: 到着動作の問題
私の OpenGL Android プロジェクトでステアリング動作の実装に取り組んでいますが、Arrive 動作コードが本来の動作をしない理由を理解するのに少し苦労しています。
更新ループ中に、私のプログラムは、モバイル エージェントの位置を更新するための操舵力を計算します。現在、Targetpos で定義された位置に移動するという点で、「シーク」動作と同じように動作しますが、速度を落としてポイントに近づくと停止するのではなく、前進し続け、ターゲットを何度もオーバーシュートします。また。
以下は、エージェントに適切なステアリング力を返すはずのコードです。
減速は、エージェントが減速する必要がある異なる速度をエンコードする 1 ~ 3 の単なる列挙型です。
artificial-intelligence - ゲーム内の Q ラーニングが期待どおりに機能しない
私が書いた単純なゲームに Q ラーニングを実装しようとしました。このゲームは、迫り来るボックスを避けるために「ジャンプ」する必要があるプレーヤーに基づいています。
私は 2 つのアクションを持つシステムを設計しました。jump
そしてdo_nothing
、状態は次のブロックからの距離です (状態の数が多くならないように分割され、フロア化されています)。
私の問題は、アルゴリズムの実装が「将来の報酬」を考慮していないため、間違ったタイミングでジャンプしてしまうことです。
これが私の Q 学習アルゴリズムの実装です。
そして、これによって使用されるプロパティの一部を次に示します。
現在のデータを使用できないため、lastAction/lastDistance を使用して Q を計算する必要があります (前のフレームで実行されたアクションに作用します)。
このthink
メソッドは、すべてのレンダリングとゲーム処理 (物理、コントロール、死など) が完了した後、フレームごとに 1 回呼び出されます。
artificial-intelligence - ステアリング挙動の操舵力を理解する方法
ステアリング動作の Seek 動作を実装する方法のチュートリアルを読みました。リンクはこちら です。アルゴリズムを説明するグラフは次のとおりです。
.
速度、力、加速度はすべてベクトルであることを知っています。しかし、この記事では、定式化された "steering = desired_velocity - current_velocity" の "steering" が速度ではなく力になるのはなぜですか? なぜこれが理にかなっているのですか?1回の計算で混ぜてもいいということですか?それは、速度ベクトルが別の速度ベクトルを加算または減算して、力ベクトルを生成できるということですか? そうでない場合、なぜ結果が「力」と呼ばれるのですか? AI でステアリング動作がどのように機能するかを知っています。これを達成するための重要なポイントは、さまざまな操舵力をすべて合計して、総力を計算できることです。この総力は、式「a = F/m」で加速度を得るために使用できます。その後、この加速度を使用して、ゲーム ループの更新でオブジェクトの新しい位置と速度を計算できます。私の見解に基づいて、
c# - 4 行 (connect4) ゲームでの MinMax の実装と使用
4 連続 (または connect4 または connect 4) ゲームの MinMax アルゴリズムを実装しようとしています。
私はそれのアイデアを得たと思います、それは可能なボードのツリーを特定の深さまで構築し、それらを評価してスコアを返し、それらのスコアの最大値を取るだけです。
そのため、aiChooseCol()
呼び出して可能なすべての列のスコアをチェックMinMax()
し、最大スコアの列を返します。
よくわかりませんでしたが、これは正しい呼び出し方MinMax()
ですか?
チェックするのは正しいtemp = Math.Max(temp, 1000);
ですか?
私はまだヒューリスティック関数を作成していませんが、これは少なくとも勝者の列を認識して選択する必要がありますが、現在は左から最初の空いている列を選択するだけです...何が間違っているのかわかりません。
いくつかのメモ:
FillSignInBoardAccordingToCol()
成功した場合はブール値を返します。
board
タイプには、実際のボードとプレーヤーのサインを含む配列char[,]
があります。
このコードは AI Player クラスにあります。
lisp - Lisp で実装された Tic tac toe は、1 つの動きをする代わりにゲームを終了する
LISP を使用してアルファ ベータ プルーニングを使用する negamax アルゴリズムを使用する AI を使用して、単純な CLI tic-tac-toe ゲームを作成していますが、AI がどのように動くかについて問題があります。本来あるべき 1 つの動きをする代わりに、ゲームを完全にプレイしているので、ゲームは 2 つの動きしか続きません。私はそれを(ステップ)実行しましたが、問題は、そのブロックが実行されていないと言われている場合でも、negamax 関数の (when (> value bestValue)) ブロックに bestPath 変数が設定されていることです。また、設定される値は、設定するのが適切である場合に正しい値ではありません。助言がありますか?これが私のコードです。
AI のコードは次のとおりです。