Thuật toán để giải quyết vấn đề ràng buộc phẳng (quái vật Pokemon Pokemon Go tìm kiếm)


8

[Lưu ý: Vấn đề này được lấy cảm hứng từ Pokemon Go. Trước tiên tôi sẽ giải thích vấn đề bằng thuật ngữ toán học, sau đó giải thích kết nối với Pokemon Go. Mục tiêu của tôi là không gian lận trong trò chơi. Nếu tôi muốn gian lận, thông tin tốt hơn sẽ có sẵn dễ dàng hơn.]

Giả sử có điểm ("điểm chưa biết") trong một mặt phẳng, gọi chúng là , với tọa độ không xác định. Hơn nữa, chúng tôi có các phép đo được thực hiện tại các vị trí đã biết .n 1 , ... , n NNn1,,nNMm1,,mM

Đặt là khoảng cách Euclide (thường không xác định) từ điểm đo đến điểm chưa biết .dist(mi,nj)minj

Đối với mỗi phép đo , chúng tôi có các thông tin sau:mi

  1. Các tọa độ chính xác của từng điểm chưa biết mà cho một số hằng số đã biết ; và dist ( m i , n j ) < d min d minnjdist(mi,nj)<dmindmin
  2. Danh sách tất cả các chỉ số mà cho một số hằng số đã biết , được sắp xếp theo \ text {dist} (m_i, n_j) .dist ( m i , n j ) < d max d max > d min dist ( m i , n j )jdist(mi,nj)<dmaxdmax>dmindist(mi,nj)

Có một thuật toán hiệu quả để tính toán các khu vực của mặt phẳng trong đó các điểm chưa biết, hoặc một điểm chưa biết , có thể được không? Thuật toán được đưa ra tọa độ của các điểm đo, thông tin đo được liệt kê ở trên và số của các điểm chưa biết; mục tiêu là thu hẹp khu vực các vị trí có thể có cho mỗi điểm chưa biết càng nhiều càng tốt. ( X i , Y i ) N n 1 , Mạnh , n Nnj(Xi,Yi)Nn1,,nN

Kết nối Pokemon:

Trong Pokemon Go, một trò chơi thực tế gia tăng, mục tiêu là tìm thấy Pokemon trong tự nhiên. Thỉnh thoảng, trò chơi sẽ hiển thị các Pokemon trong "phạm vi hiển thị" ( ) của vị trí người chơi. Hơn nữa, nó có một "công cụ tìm Pokemon" hiển thị danh sách các Pokemon gần đó ( ), được sắp xếp theo khoảng cách. (Nó cũng được cho là hiển thị khoảng cách gần đúng là một, hai hoặc ba bước chân, nhưng rõ ràng có một lỗi và nó luôn hiển thị ba bước chân.)dmindist<dmax


3
"Sắp xếp theo " - điều đó thực sự khó chịu! Nếu không có thông tin bổ sung này, bạn chỉ cần thực hiện giao điểm của một vài annuli và được thực hiện với nó, nhưng việc sắp xếp cung cấp cho bạn thông tin bổ sung khiến việc này trở nên khó khăn. dist(m,n)
Tom van der Zanden

Tôi không rõ liệu có được biết hay không, cũng không có thông tin nào được cung cấp cho mỗi . Có phải thông tin được cung cấp cho giống như "Mục 3 có tại ; các mục khác gần đó là mục 1, mục 7, mục 4 theo thứ tự đó" không? Nm(X1,Y1)(X1+1,Y10.2)
Peter Taylor

@PeterTaylor, Vâng, đúng vậy. Xem chỉnh sửa của tôi. Bây giờ có rõ không?
DW

Câu trả lời:


3

Tôi nghĩ rằng bạn có thể sử dụng một "tham gia không gian". Tôi chưa chơi trò chơi này, nhưng tôi cho rằng khá nhỏ, tức là có thứ tự 10 hoặc hơn và trong vùng lân cận của mỗi . Tôi cũng giả định rằng và là lớn, nói 1.000.000 trở lên.dmaxnmmNM

  1. Đặt tất cả là các điểm 2D trong một chỉ số không gianm
  2. Đối với mỗi trong chỉ mục, hãy thực hiện truy vấn phạm vi không gian với khoảng cách . Điều này cung cấp cho bạn tất cả các khác có khả năng chứa giống như . Điều này nên được quản lý bởi vì số lượng nên nhỏ (như tôi giả định ở trên).m12dmaxmxnm1mx
  3. Bây giờ, bằng cách lấy tất cả các phép đo ước tính khác cho một cụ thể , bạn có thể thử tính gần đúngnn
  4. (Tiềm năng tối ưu hóa): Tùy thuộc vào chỉ số không gian của bạn, bạn có thể loại bỏ các sau khi xử lý tất cả đó là . Điều này làm cho tập dữ liệu nhỏ hơn cho các truy vấn phạm vi sau. Cũng thế,m1n

Bằng cách nào đó bạn cũng cần xác định duy nhất mỗi , để bạn không tính lại vị trí của n nếu nó bật lên khi xử lý m khác .nnm

Để tối ưu hóa, bạn có thể muốn sử dụng truy vấn cửa sổ (hình chữ nhật) thay vì truy vấn phạm vi vòng tròn. Truy vấn cửa sổ có thể nhanh hơn nhiều và chỉ cho kết quả nhiều hơn một chút. Ngoài ra, có thể là trò chơi thực sự không sử dụng khoảng cách euclide (vòng tròn) mà là khoảng cách manhatten nhanh hơn, chính xác là một hình chữ nhật.

Đối với một phép nối không gian như vậy, bạn có thể sử dụng bất kỳ chỉ số không gian nào, chẳng hạn như R-Tree, kd-Tree, quadtree hoặc bất kỳ biến thể nào của chúng.

Đối với các bộ dữ liệu lớn, có lẽ tôi sẽ không sử dụng R-Tree (R + cây, R * -tree, X-Tree) hoặc một biến thể đặc biệt của tứ giác, PH-Tree, rất phù hợp cho các truy vấn phạm vi cũng như cho phép loại bỏ nhanh chóng (hoặc bổ sung) các điểm.

Đối với Java, việc triển khai R-Plants có thể được tìm thấy ở bất kỳ đâu trên internet, ví dụ như trong khung ELKI hoặc thư viện TinSpin Index của riêng tôi . Cây PH cũng có sẵn trong Java.

Một thuật toán nối không gian chung được gọi là TOUCH , nhưng tôi không nghĩ đó là nguồn mở.


1
Tôi không thấy làm thế nào điều này giải quyết vấn đề. Nó cho phép bạn tìm tất cả các cặp mà điểm n j chưa biết nằm trong phạm vi của điểm đo m i , nhưng dường như đó không phải là phần khó. Phần cứng là sử dụng thông tin đó để xác định tập hợp các vị trí có thể có cho mỗi n j . Hình dạng của khu vực đó trông như thế nào? Bạn có thể xuất ra khu vực chính xác? Làm thế nào bạn có tính đến thông tin từ đơn đặt hàng, như được nhấn mạnh bởi Tom van der Zanden ? (mi,nj)njminj
DW

Uh, vụ nổ từ quá khứ :-). "Tham gia không gian" là điều mà ít người nghe thấy, vì vậy tôi nghĩ đó là cốt lõi của câu hỏi. Tôi chỉ đơn giản xem xét câu trả lời cho 'khu vực nào' là 'xung quanh những điểm này'. Rõ ràng tôi đã hiểu nhầm điều này.
TilmannZ

Theo như tôi có thể nói, các vùng kết quả sẽ rất bất thường, nhưng đủ dễ để hình dung bằng cách vẽ một vòng tròn (giữa d m a x xung quanh mỗi m (kẻo nói với một màu xanh mờ. Nếu một vòng trùng nhau Với một vòng khác, màu xanh lá cây được tăng cường. Sau khi vẽ tất cả các vòng, loại bỏ tất cả các khu vực có cường độ màu xanh lá cây không tối đa. Bạn cũng có thể thực hiện điều này hoàn toàn trong bộ nhớ bằng cách 'vẽ' các vòng trên lưới / ma trận hạt mịn và chỉ cần tăng bộ đếm trong mỗi ô lưới. Đó có phải là những gì bạn đang hỏi không?dmindmaxm
TilmannZ

1

Nếu một số vị trí đối tượng được biết chính xác (ví dụ: bởi vì nó nằm trong d m i n của một số phép đo), thì bất cứ khi nào n j này xuất hiện trong annulus cho một số phép đo m i (có nghĩa là d m i nd i s t ( m i , n j ) < d m a x ), chúng ta có thể thu nhỏ các vùng có thể cho các vị trí chưa biết khác trong cùng một annulus. Cụ thể, chúng ta có thể chỉ đơn giản là tính toán d i jnjdminnjmidmindist(mi,nj)<dmax vì chúng ta biết chính xác cả hai vị trí ( m i n j ), và sau đó chúng ta có thể chia annulus cho m i thành hai phần phụ: một phần "gần" (chứa tất cả điểm p sao cho d m i nd i s t ( m i , p ) < d i j ) và một mảnh "xa" (chứa tất cả các điểm p sao chodij=dist(mi,nj)minjmipdmindist(mi,p)<dijp ). Mọi đối tượng được liệt kê trước n j để đo m i nhất thiết phải giới hạn ở annulus gần và mọi đối tượng được liệt kê sau n j đều bị giới hạn ở annulus xa.dijdist(mi,p)<dmaxnjminj

Có thể làm gì (ngoài giao điểm của annuli đã được đề xuất bởi Tom van der Zanden trong một bình luận) cho các vị trí đối tượng không liên quan đến một số vị trí đối tượng đã biết theo cách này? Điều này có vẻ rất khó khăn. Tuyên bố

" không thể xuất hiện tại p "njp

tương đương với

nj=p

Dường như với tôi rằng để đi đến bất cứ đâu, chúng ta cần phải có (ít nhất) 2 vị trí đối tượng không xác định xuất hiện trong phần phụ của (ít nhất) cùng 2 phép đo. Nhưng trong khi thông tin này sẽ loại trừ nhiều cặp vị trí cho hai đối tượng, tôi không thể đưa ra bất kỳ tình huống nào trong đó một vị trí có thể bị loại trừ chỉ một trong số họ, độc lập với vị trí của đối tượng kia.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.