平面制約問題を解くためのアルゴリズム(「Pokemon Goモンスターの発見」)


8

[注:この問題はPokemon Goに触発されました。最初に問題を数学的な用語で説明し、次にポケモンゴーとの関連を説明します。私の目標は、ゲームでごまかすことではありません。私がカンニングしたいのであれば、より良い情報をより簡単に入手できます。]

あると仮定N点(「未知点」)が平面で、それらを呼び出すn1,,nN、未知の座標。さらに、既知の場所で測定が行われています。m 1m MMm1,,mM

ましょう測定点から(一般に未知)のユークリッド距離で未知点に。m i n jdist(mi,nj)minj

各測定について、次の情報があります。mi

  1. 各未知点の正確な座標ためいくつかの既知の定数のためのD 。そして dist m in j< d minnjdist(mi,nj)<dmindmin
  2. すべてのインデックスの一覧いるDIST M 、IN jが< D maxのいくつかの既知の定数のためのD maxが > D 、並び順DIST M 、IN Jjdist(mi,nj)<dmaxdmax>dmindist(mi,nj)

未知の点、または与えられた未知の点が可能な平面の領域を計算するための効率的なアルゴリズムはありますか?アルゴリズムには、測定点の座標X iY i、上記の測定情報、および未知の点の数Nが与えられます。目標は、未知の各ポイントn 1n Nの可能な場所の領域をできるだけ絞り込むことです。nj(Xi,Yi)Nn1,,nN

ポケモン接続:

拡張現実ゲーム、ポケモンゴーの目標は、自然の中でポケモンを見つけることです。時々、ゲームはポケモンをプレーヤーの位置の「可視範囲」()で表示します。さらに、近くにある(d i s t < d m a x)ポケモンのリストを距離でソートして表示する「ポケモンファインダー」があります。(おおよその距離を1、2、または3つの足跡として表示することも想定されていますが、明らかにバグがあり、常に3つの足跡が表示されます。)dmindist<dmax


3
「並べ替え」-それは本当に厄介です!この追加情報がなければ、いくつかの年輪の共通部分を取り、それで処理する必要がありますが、並べ替えを行うと、追加情報が得られ、困難になります。dist(m,n)
トムファンデルザンデン

が既知であるかどうか、また各mについてどのような情報が提供されるかは、私にはわかりません。X 1Y 1)に与えられた情報は、「アイテム3はX 1 + 1 Y 10.2 )にあり、他の近くのアイテムはアイテム1、アイテム7、アイテム4の順になっていますか?」Nm(X1,Y1)(X1+1,Y10.2)
Peter Taylor

@PeterTaylor、はい、そうです。私の編集を参照してください。今ははっきりしていますか?
DW

回答:


3

「空間結合」が使えると思います。私はゲームをプレイしていませんが、はかなり小さいと想定しています。つまり、各mの近くに10程度のnmがあると思います。さらに、NMは大きく、たとえば1,000,000以上と仮定します。dmaxnmmNM

  1. すべてのを空間インデックスの2Dポイントとして配置するm
  2. インデックス内の各について、距離2 d m a xで空間範囲クエリを実行します。これにより、m 1と同じnを含む可能性のある他のすべてのm xが得られます。m xの数は少なくなければならないので、これは扱いやすいはずです(上で想定したとおり)。m12dmaxmxnm1mx
  3. ここで、特定のについて他のすべての推定測定値を取得することにより、正しいnを近似することができますnn
  4. (潜在的な最適化):空間インデックスに応じて、すべてのnを処理した後で削除できます。これにより、次の範囲クエリのデータセットが小さくなります。また、m1n

どういうわけか、各を一意に識別する必要があります。これにより、別のmを処理するときにnの位置が判明した場合に、その位置を再び計算しないようにします。nnm

最適化として、循環範囲クエリではなくウィンドウクエリ(長方形)を使用することができます。ウィンドウクエリの方がはるかに高速で、結果が少し多くなるだけです。また、ゲームは実際にはユークリッド距離(円)ではなく、より速いマンハッタン距離(正確には長方形)を使用している可能性があります。

このような空間結合では、Rツリー、kdツリー、クワッドツリー、またはそれらのバリアントなど、任意の空間インデックスを使用できます。

大規模なデータセットの場合、おそらくRツリー(R +ツリー、R *ツリー、Xツリー)、または範囲クエリだけでなくポイントをすばやく削除(または追加)できます。

Javaの場合、R-Treeの実装はインターネット上のどこにでも見つけることができます。たとえば、ELKIフレームワークや自分のTinSpin Indexライブラリなどです。PH-ツリーは Javaでも使用可能です。

一般的な空間結合アルゴリズムはTOUCHと呼ばれますが、オープンソースではないと思います。


1
これがどのように問題を解決するかわかりません。未知の点n jが測定点の範囲内にあるすべてのペアを見つけることができます(mi,nj)nj、難しい部分ではないようです。難しいのは、その情報を使用して、各 n jの可能な場所のセットを識別することです。その領域の形状はどのように見えますか?正確な領域を出力できますか?Tom van der Zandenによって強調されているように、注文からの情報をどのように考慮していますか?minj
DW

ええと、過去からの爆風:-)。「空間参加」は聞いたことのない人が多いので、問題の核心だと思いました。私は単に「どの地域」が「これらの点の周り」であるかの答えを考えました。どうやら私はこれを誤解したようです。
TilmannZ 2018

私の知る限り、結果の領域は非常に不規則になりますが、リングを描画することで視覚化するのは簡単です( mの周りに n d m a xの(淡い緑色で言う必要はありません。リングが重なる場合別のリングを使用すると、グリーンが強調されます。すべてのリングを描画した後、最大強度でないグリーンの領域をすべて削除します。細かいグリッド/マトリックスにリングを「描画」し、単純に各グリッドセルのカウンター。それはあなたが何を求めているのですか?dmindmaxm
TilmannZ 2018

1

一部のオブジェクト位置した場合正確に知られている(例えば、それは内にあるので、DのM I nは、いくつかの測定)は、このたびのn jは、いくつかの測定のための環状部に表示されますメートル、私は意味(dはM I ND I S T m in j< d m a x)、同じ環内の他の未知の位置の可能な領域を縮小できます。具体的には、d i jを簡単に計算できます。njdminnjmidmindist(mi,nj)<dmax両方の位置( m i n j)が正確にわかっているため、 m iの環状体を2つのサブ環状体に分割できます。点 Pように D M I ND I S T M 、IP < D I J)、すべての点を含む"遠い"部分( Pようにdij=dist(mi,nj)minjmipdmindist(mi,p)<dijp)。測定 m iのn jの前にリストされているすべてのオブジェクトは必然的に近い環に限定され、 n jの後にリストされているすべてのオブジェクトは遠い環に限定されます。dijdist(mi,p)<dmaxnjminj

この方法で既知のオブジェクトの位置に関連していないオブジェクトの位置に対して、(コメントでトムファンデルザンデンがすでに提案している年輪の交差を超えて)何ができるでしょうか?これは非常に難しいようです。ステートメント

pに現れることができない」njp

に相当

「残りのすべての未知の点のすべての可能な配置について、設定すると、各測定の環に属するオブジェクトがリストされる順序によって暗示される距離の不等式とともに、矛盾が生じます。」nj=p

どこかに到達するには、少なくとも2つの未知のオブジェクト位置が(少なくとも)同じ2つの測定の輪に現れる必要があるように思えます。しかし、この情報は2つのオブジェクトの多く位置のペアを除外しますが、他のオブジェクトの位置とは関係なく、それらの1つだけの位置を除外できる状況を思いつくことはできませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.