問題タブ [path-finding]
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.
c# - A* パスファインダー障害物衝突問題
私は、ロボットがオブジェクトへの道を見つけ、そのオブジェクトに行くときにいくつかの障害を回避しなければならないプロジェクトに取り組んでいます。
問題は、ロボットとロボットが拾う必要のあるオブジェクトの両方が、パスファインダー内で 1 ピクセル幅であることにあります。実際には、それらははるかに大きいです。多くの場合、A* パスファインダーは、障害物の端に沿ってルートを配置することを選択します。これにより、障害物と衝突することがありますが、これは望ましくありません。
障害物に歩行不可能なフィールドを追加しようとしましたが、常にうまくいくとは限りません。それでも障害物と衝突し、歩けない場所にあまりにも多くのポイントを追加すると、実行できるパスがなくなります。
この問題について何をすべきかについて何か提案はありますか?
編集:
そこで、ジャスティン L が提案したように、障害の周りに多くのコストを追加して、次のようにしました 。
ここでは、障害物周辺のコストを確認できます。最初は、中央の 2 つの障害物がコーナーの障害物と同じように見えるはずですが、パスファインダーを実行すると、コストが上書きされているように見えます。
パスを持つグリッド http://sogaard.us/uploades/1_map_grid.png
写真で見つかったものを示す写真 http://sogaard.us/uploades/2_complete_map.png
上の写真は、写真で見つかったものを示しています。
見つかったパス http://sogaard.us/uploades/3_path.png
これは、私たちの問題が以前にもあったように、障害を抱えていることがわかった道です。
http://sogaard.us/uploades/4_mg_path.png 上のパスを含む前のグリッド
そして、パスがオンになっているコスト マップの別の写真。
私が奇妙に思うのは、なぜ A* パスファインダーがこれらの非常に高いフィールド コストを無効にしているのかということです。
開いているリスト内のノードを現在のフィールドで評価して、現在のフィールド パスが開いているリスト内のパスよりも短いかどうかを確認するときでしょうか?
そして、パスファインダーに使用しているコードは次のとおりです。
Pathfinder.cs: http://pastebin.org/343774
Field.cs および Grid.cs: http://pastebin.org/343775
language-agnostic - 優れたクイックパスファインディングアルゴリズムとは何ですか?
パスの長さではなく、かかる時間を気にする場合の優れたパスファインディングアルゴリズムは何ですか。
また、パスをまったく気にせず、到達可能性を確認したいだけの場合は、より高速なアルゴリズムがあります。
(Flood Fillは、この種のものに適したアルゴリズムですか?)
artificial-intelligence - 2人のパクマンのためのパスファインディングアルゴリズム
Pacmanを実装しようとしています。これは正常に機能しますが、これまでのところ、ゴーストはパスファインディングを使用していません。代わりに、各パスジャンクションでどのパスを取るかをランダムに決定します。したがって、パックマンがゲームに勝つことはそれほど難しいことではないことを想像できます;)
だから私はパックマンのパスファインディングアルゴリズムについて少し読んだので、ここで私は本当に良い答えを見つけました:パックマンのパスファインディングアルゴリズム
答えはhttp://home.comcast.net/~jpittman2/pacman/pacmandossier.html#Chapter%204を参照しています
これはすべて問題ありませんが、パックマンの私の実装では、2人の異なるプレーヤーによってプレイされる2つのパクマンがあります。ですから、幽霊が常に1人のプレイヤーを追いかけるとは限らないように、パスファインディングアルゴリズムをどのように適応させるのか疑問に思います。
ゴーストが両方のプレイヤーにほぼ等しく公平になるようにアルゴリズムを変更する方法について何か考えはありますか?
java - パスファインダーで最短経路を見つけるのに問題がある
パスファインダーに問題があります (これは私の初めてのことなので、当然のことでした) : 常に最短の道をたどるとは限りません。たとえば、1 マス下に移動したい場合、パスは 1 マス左、1 マス下、1 右になります。
SquareListener は、正方形の位置とそのパスを出力する単純な MouseListener です。Map.x、Map.y はマップ サイズです。getSquares2 は開始点で呼び出され、6 手離れたすべての正方形を描画し、値が "11" のすべてのケースを障害と見なします。
私が間違ったことを見つけるのを手伝ってくれませんか?
結果のスクリーンショットは次のとおりです。 http://img808.imageshack.us/img808/96/screen.gif 赤い四角が可能な目標です。実際のものは、プレーヤーが 1 つの正方形をクリックしたときにのみ定義されます (MouseListener は SquareListener であり、たどるパスを知っているはずです)。家屋は、値が「11」のケースで、障害物です。
artificial-intelligence - パックマン:目はどのようにしてモンスターの穴に戻るのですか?
パックマンで幽霊のAIについて多くの言及を見つけましたが、パックマンが幽霊を食べた後、目が中央の幽霊の穴に戻る方法については言及していませんでした。
私の実装では、単純ですがひどいソリューションを実装しました。どちらの方向に進むべきか、隅々までハードコーディングしました。
より良い/または最良の解決策はありますか?おそらく、さまざまなレベルの設計で機能する一般的なものですか?
java - 2D 配列でのパスファインディング
この2D配列マップがあるとしましょう
ブロックされたタイルを定義する整数でいっぱいの HashSet があります。プレイヤーが立っている場所からマップの一部をクリックしたときに、適切な経路探索を行うにはどうすればよいでしょうか? A* (ノードなどを使用)? 何を指示してるんですか?
ありがとう。
java - 最適な次の方向へのパックマン キャラクター AI の提案
まず、これはゴーストではなくパックマンの AI です。
アイコンの周りでパックマンを再生する Android ライブ壁紙を作成しています。画面タッチによるユーザーの提案をサポートしていますが、ゲームの大部分は AI によってプレイされます。ゲームのプログラミングはすべて 99% 完了しましたが、パックマン自身の AI はまだ非常に弱いです。パックマンの次の移動方向を判断するための優れた AI の開発について、助けを求めています。
私の最初の計画はこれでした:
- 各方向のスコア カウンターをゼロの値で初期化します。
- 現在の位置から開始し、BFS を使用して、可能な最初の 4 つの方向をキューに追加することで外側にトラバースします。
要素をキューからポップし、まだ「見られていない」ことを確認し、それが有効なボード位置であることを確認し、対応する初期方向スコアに現在のセルの値を以下に基づいて追加します。
- ドットあり: プラス 10
- パワーアップあり:プラス50
- 果物がある: プラス果物の値 (レベルによって異なります)
- ゴーストがパックマンに向かって移動している: 200 を引く
- ゴーストがパックマンから離れていく: 何もしない
- ゴーストが垂直に移動している: 50 を引く
- セルまでのステップ数に基づくパーセンテージをセルの値に掛けます。最初の方向からのステップが多いほど、セルの値はゼロに近づきます。
現在のセルから可能な 3 つの方向をキューに入れます。
- キューが空になったら、4 つの可能な最初の方向のそれぞれについて最高スコアを見つけ、それを選択します。
紙の上ではいいように聞こえましたが、幽霊はパックマンを非常に急速に取り囲み、パックマンは同じ2つまたは3つのセルで前後にぴくぴく動き、1つが到達するまで. ゴーストの存在の値を調整しても役に立ちません。私の最も近いドット BFS は、ゲームが終了する前に、少なくともレベル 2 または 3 に到達できます。
適切な AI を開発するためのコード、考え、および/またはリソースへのリンクを探しています。できれば前者の 2 つです。今週末には市場に出したいので少し急いでいます。どんな助けでも大歓迎です。
参考までに、これは手動でGameDev.StackExchangeにクロスポストされました。
c - Cで実装された*
C での A* 実装はどこにありますか?
私は周りを見回していましたが、私のgoogle-fuは十分に強力ではないようです. 独自の実装を書き始めましたが、Stack Overflow を思い出し、最初にここで質問する必要があると考えました。実際の A* 実装を作成するのは少し複雑に思えます - バイナリ グリッド用の Dijkstra のアルゴリズムの実装だけを作成したくなりましたが、それが本当に必要なためです。レパートリー。
algorithm - 'teleporters'による1Dパスファインディング
問題
簡単な1DRTSゲームを書いて、次のパスファインディングの問題があります。1次元の線がたくさんあり、線の間を移動するだけでなく、現在の線の内部を移動するために使用できるテレポーターがどこにでもあります。テレポーターは、回線間を移動する唯一の方法です。行li1の位置po1からli2のpo2までの最短経路を決定するために使用できるアルゴリズムまたは擬似コードは何ですか?ゼロのコストで相互に接続されたテレポーターTのセット(それぞれにpoとliがあります)があります。
なぜA*またはダイクストラアルゴリズムではないのですか?
これは、1Dではやり過ぎだと思うからです。
明確化
- 少し二次元に聞こえるかもしれませんが、1行で左または右にしか移動できないためではありません。
- テレポーターへの移動には費用がかかりますが、ある場所から別の場所へのテレポートには費用がかかりません。このアスキーアートを参照してください:
ここで、最短は開始sからターゲットxまでの方法です。
- 正しいテレポーターに行く
- 1行下にテレポートします(この図のみ。実際には飛行機は順序付けられていません)
- そして目標に向かって右に行きます(最終コスト= 5)
.net - ベジェ曲線アルゴリズム-多分カノニカルスプライン?
複数のポイントで構成されるパスがあります-つまり、0,0 0,50 50,50 70,20
この線を画面に描くだけでは、各点の接合部に鋭角がつくため、かなりきついように見えます。
したがって、鋭角を「タイトな」曲線に自動的に変更するベジェ曲線のアルゴリズム/メソッドはどのように見えるのでしょうか。
カーブが大きくなりすぎたり、一般的にメインパスの落下に影響を与えたりしたくないので、結合を柔らかくします。以下をご覧になると、私がまとめた簡単なサンプルがここにあります。左側の線は私が今持っているもので、真ん中の線は私が欲しい線です。
右の画像は、アルゴリズムが必要だと思うことを表しています。基本的に、結合から10%離れたポイントで結合を構成する各アークに追加のポイントを追加し、次に結合ポイントを削除して、ポイントがあった場所になるようにハンドルを調整します(図ではありません)。少し離れていますが、これはあなたが見ることができるようにするためです)。これが私ができるようにする必要があることです。