グラフノード間にエッジをランダムに生成する良い方法は何ですか?


10

私は4X宇宙ゲームのランダムマップジェネレーターをやっています。

ゲームの各ノードは、2Dグリッド上のランダムな(x、y)座標に配置されます。ノードは、別のノード(ワームホールを表す)への1つ以上の双方向エッジを持つことができます。すべてのノードに少なくとも1つのワームホールがあり、すべてのノードが同じグラフに属している必要があります。

理想的には、ワームホールが最大長を超えないようにし、可能であれば、ワームホールが互いに交差しないようにする必要があります。

私の素朴な実装は、すべてのノードを反復処理し、最も近い3つのノードへのノードリンクを持つことです。ただし、最終的には多数のサブグラフが表示されます。ノードのエッジを生成する良い方法は何ですか?


ノードは銀河全体にどのように散在していますか?つまり、銀河のすべての点(X、Y)にノードがあると仮定してもよいでしょうか。または少なくともそれらの大部分については?
Ali1S232 2010年

すべての座標にノードがあるわけではありません。約40%と思います。
Extrakun

回答:


9

同様の質問に対する適切な回答を以下に示します。

まず、上記のリンクのように最小のスパニングツリーを使用して、接続グラフを作成します。彼は、ランダムなエッジの重みを使用して「最小」ツリーをランダムにすることを提案しています。次に、ランダムにさらにエッジを追加して、最小のツリーだけではないようにすることができます。ランダムエッジを正確に追加する方法は、必要なグラフの種類によって異なります。


実際、問題がすべてのノードが同じグラフに属していることを確認することだけの場合は、現在のランダム生成方法(またはその他)を使用して、その上にプリムのアルゴリズムを適用できます。グラフに最小限の変更を加えて、サブグラフがすべて接続されていることを確認したい場合は、すでに存在するエッジのエッジコストを0に設定できます。


+1は非常に良い答えなので、私はこの種の世代が好きではないので、今後数日でより良いアルゴリズムについて考えます!
Ali1S232 2010年

ええ、これに対する「正しい」答えはありません。他の人が思いつくものを見たいです。
フィリップ、

トピック外ですが、私も私の回答にリンクするつもりでした!:p
r2d2rigo

この方法でポイントを獲得できます。
フィリップ、

7

問題の主な制約は2つあります。1連結グラフを作成することです。近位接続で作成します。フィリップの答えは、いくらか価値がありますが、問題のすべての制約に対応しているわけではありません

理想的には、ワームホールが最大長を超えないようにし、可能であれば、ワームホールが互いに交差しないようにする必要があります。

クラウド内のポイントを単純に接続すると、これらの条件が満たされないというリスク(そしてその点で高いもの)が発生します。

つまり、問題は接続性の問題ではなく、それらの接続の近接性の問題です。グラフ内のすべてのノードを他のすべてのノードに接続するのは簡単ですが、グラフ全体の1接続を維持しながら、最も近いノードのみに接続するのは少し難しいです。

これは、n次元でDelaunay三角形分割が作成するものです。Delaunay三角形分割を使用する最初の理由は、それがこれらの両方を暗黙的に満たすことです。2番目の理由は、他の方法で作成しようとするよりも、そのようなグラフから逆方向に作業する(不要なエッジと頂点を差し引く)ほうがはるかに簡単であることです。

  1. 完全な点群をランダムに作成します。
  2. ドローネ三角形分割します。
  3. グラフを作成します(点の接続)。この場合、最初にグラフ全体(星ごと)を生成し、次にマイナーとしてグラフを派生させることができます場合、ステップ4を実行するときに、ワームホールに接続された領域を表すことができます。あるいは、ワームホールに接続された領域のみを生成することもできます。最初にスーパーグラフノードとして、次に第2フェーズで、これらの領域の境界ボリューム内に個々の星を生成します(これらの場合、私はDelaunay三角形分割のグラフデュアル(3次元のボロノイ図)を派生させます)をサブグラフとして生成します。これで、近位に接続されたスタークラスターができました。すべてのクラスターは、よりまれなワームホールによって接続されています。トポロジーと地形は、プレーヤーにとって意味のあるものです。
  4. ステップ3での処理方法の選択に応じて、インテリジェントな方法を適用してスーパーグラフとサブグラフを形成します。

これは階層的なプロセスであることを確認することが重要です。最初のレベルはワームホール接続を扱います。2つ目は、おそらく標準の船のドライブを使用して移動できる距離を扱います。Delaunayを1つまたは両方のレベルで適用して、制約を満たすことができます。

これを純粋にトポロジー的に行うと、間に星の密度が高いにも関わらず銀河の一方の側が別の側に接続される可能性があるため(そしておそらくは、ワームホールの直接ルートに落ちる可能性さえある)、ワームホールは意味をなさなくなります。トポロジーは地形ではありません。後者は前者に加えて考慮事項です。あなたは近接性、したがって地形に関心があります。


Delaunay三角形分割は良い考えですが、ランダムなエッジを作成しません。Delaunay三角形分割によって作成されたエッジからランダムにエッジを削除することもできますが、その場合は別のグラフが再度表示される危険があります...
bummzack

@Bummzack「ランダムエッジを作成しません」。グラフのマイナーについて聞いたことがありますか?Delaunayを使用してより困難な制約を解決したら、必要に応じてそのグラフで追加または削除を実行するのは簡単です。
エンジニア

@Bummzack、私はそれをもう一度更新しました-フィードバックをありがとう。
エンジニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.