グリッドベースのマップで2つ以上のポイントを区切る壁を手続き的に見つけるにはどうすればよいですか?


8

特定のポイントを他の特定のポイントから遮断する壁を生成しようとしています。添付画像は私が求めているものを示しています:

ここに画像の説明を入力してください

  1. 青が赤から分離されました。
  2. 赤と黄色から分離された青。
  3. タイルの障害物で青が赤から分離されています。
  4. 複数の青が複数の赤から分離されています。

これを行う方法はありますか?


1
これは少し広すぎます...青い領域を最小化しますか、それとも等しい面積を望みますか、または面積は重要ではありませんが、壁の長さを最小化しますか、それとも無関係なものすべてを最小化しますそして本当に重要なのは、ソリューションをすばやく見つけることです...など
Theraot

1
あなたや他の人に、これが聞こえる1つの可能な方向を与えるために、これは「マンハッタン距離ボロノイ」のバリアントに関連しています。これは、目的の外観または通常のボロノイに依存します。
Sirisian

他の両方のコメントに同意した私の最初の考えは、「無限の数の解決策がある」ということでした。「無限」は、任意の大きさで無限ではない場合があります。これを許可するものこれ許可ないものに制限はありません
Draco18sは、

より具体的にならないことを残念に思う。本当に、唯一の厳密な要件は、壁が与えられた点を分離することでした。私が提供した画像は、私が何をしようとしているのかという一般的な考え以上のものではありませんでした。そのため、編集したドラコは、私の目的にとって完全に有効な結果になります。結果が非常に多い場合でも、そのような結果が得られるような方法を探していました。
IanLarson、2018年

回答:


8

一般的な概念と、その概念を使用した3つのソリューションを紹介します。

コンセプトはインフルエンスマップです。マップ内の場所ごとに、各カラーポイントまでの距離を表す数値を保存します。このようにして、各位置について、青、赤、緑などからの距離を問い合わせることができます。結果をインフルエンスマップと呼びます。

ゲームにおけるインフルエンスマップの動機、作成、および使用の詳細については、「インフルエンスマッピングのメカニズム:表現、アルゴリズム、およびパラメーター」を参照してください。

私はこの壁が何のためにあるのかわかりません、私の頭の正教会は私たちが戦略ゲームについて話していることであり、AIが壁をどこに配置するかを決定しています。それを行うには、ここに提示されている以外にも多くのアプローチがあります。シンプルなアプローチは、カラーポイントから一定の距離に壁を配置し、それらが重なったときに領域を結合することです。もちろん、障害物の上にそれらを構築しないでください。この方法の利点は、壁があまりにも大きくないことを保証することです。それらを守るために軍隊を送るのは遠く離れており、計算上非常に安価です。もっと複雑なものが欲しいと思います。

解決策1

青をラップする方法を見つけるには、各ポイントについて、青と他の物との距離の差を見つけます。補遺:差が正である領域は、青の影響のドメインです。すべてのカラーポイントの影響領域を取得すると、ボロノイ図を作成できます。それらについて言及してくれたSirisianに感謝します

青に近い点の場合、差は正になり、別の色の点に近い点の場合、差は負になると主張できます。距離が連続関数であるとすると、中間値の定理により、差の中央の少なくとも1つの点が差がゼロに近づくと主張できます。解決策は、差がゼロに近づくすべてのタイル間の距離を最小化する壁をトレースすることです。

その解決策が障害を考慮に入れるかどうかは、距離関数に依存します。可能なパスを考慮せずにマンハッタンまたはユークリッド距離のみを使用する場合、結果の壁はマップ内の既存の障害物を利用しません。

注:このソリューションは、フラットシナリオでは青と残りの部分の面積を等しくします。

解決策2

抽象的には、青と他の影響範囲の間にチョークポイントを見つけ、そこに壁を配置できます。これを行うと、影響が平衡していない場所に壁が配置されます(壁の端が一方の側に近くなります)が、壁の長さは最小になります。

チョークポイントを見つけるための便利なアプローチは、シナリオを凸型ノードに分割し、シナリオを表すネットワークを作成することです。青色が直接あるノードの周りに壁を配置すると想定し、次にネットワークを進め(常に青色からの距離を増やします)、これまでに進めたものの周囲に壁を配置した場合は、壁の長さを考慮します。あなたの解決策は、最小の長さの位置です(そして壁の場所はチョークポイントです)。

実際には、シナリオに影響がある可能性があるため、アルゴリズムはそれよりも少し複雑です。各分岐を1度だけ検討し、その分岐のために壁に最適な位置を選択する必要があります。

ソリューション3

最初の解決策は、壁が長すぎることにつながる可能性があるという問題があります。2番目のソリューションには、壁が青から離れすぎている可能性があるという問題があります。

カラーポイントまでの距離の表現として、ピクセル、タイル、またはネットワークの操作、インフルエンスマップの概念が有効かつ有用であることに注意してください。したがって、凸ノードのネットワークを介してソリューション1を適用することが可能です。

私の3番目の解決策は、上記のアプローチを組み合わせることです。ネットワークを介して作業している場合は、壁の長さと影響力の差、およびその他の必要なメトリックを、最適化できる単一の指標メトリック「コスト」と見なすことができます。


1
これはとても役に立ちます。インフルエンスマップの使用は、私が必要としているものとまったく同じように聞こえます。リンクと詳細な応答をありがとう。
IanLarson
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.