Apakah Pencarian Titik Langsung (A * dengan JPS) cocok untuk kisi-kisi non-diagonal?

8

Saya mencoba untuk mempercepat pencarian jalan saya dan menemukan A * dengan JPS . Pada dasarnya memangkas ubin sebelum menambahkannya ke set OPEN.

Bisakah saya menggunakan teknik itu dengan kisi saya yang hanya memungkinkan arah lurus?

Sven
sumber

Jawaban:

10

Jika Anda membaca artikel , Anda akan melihat bahwa mereka mencantumkan ini sebagai masalah terbuka di bagian "Kesimpulan":

"Salah satu arahan yang menarik untuk pekerjaan lebih lanjut adalah untuk memperluas titik lompatan ke jenis grid lain, seperti hexagon atau tex (Yap 2002). Kami mengusulkan untuk mencapai ini dengan mengembangkan serangkaian aturan pemangkasan yang analog dengan yang diberikan untuk grid persegi."

Jadi, untuk menerapkan Pencarian Titik Langsung ke kisi orthogonal Anda, Anda harus memutuskan titik mana yang harus dihitung sebagai titik lompatan pada kisi itu. Setelah memikirkan hal ini sejenak, saya pikir - tetapi belum terbukti! - bahwa aturan berikut (berdasarkan Definisi 1 dan 2 dalam makalah, agak diucapkan ulang agar mudah dibaca) dapat berfungsi:

Sebuah simpul y adalah titik lompatan dari simpul x, menuju ke arah d, jika y dapat dijangkau dari x dengan bergerak lurus ke arah d, dan merupakan simpul terdekat ke x untuk memenuhi setidaknya salah satu dari kondisi berikut:

  1. simpul y adalah simpul tujuan,
  2. d adalah gerakan horizontal, dan salah satu sel berdekatan secara vertikal dengan sel y - d (yaitu, sel satu langkah sebelum y ketika bergerak ke arah d) diblokir, atau
  3. d adalah gerakan vertikal, dan terdapat simpul z yang merupakan titik lompat dari y (dengan kondisi 1 atau 2) dalam beberapa arah horisontal d '.

Tentu saja, kata "vertikal" dan "horisontal" dapat dipertukarkan dalam definisi di atas. Intinya adalah bahwa kita perlu memilih beberapa cara untuk memecahkan simetri sehingga hanya satu dari jalur yang mungkin untuk melintasi wilayah persegi panjang terbuka dipertimbangkan. Harabor dan Grastien melakukan itu dengan memilih jalur "diagonal-pertama", tetapi karena kita tidak bisa melakukan itu, kita harus melakukannya dengan lebih memilih jalur vertikal-pertama (atau horizontal-pertama).

Ini mungkin juga dimungkinkan untuk mengembangkan aturan pemangkasan alternatif yang menghasilkan lebih "terlihat alami" jalur, seperti lebih memilih judul saat ini lebih berputar, atau bahkan mungkin lebih memilih terus berputar jalur tangga. Aturan yang saya berikan di atas hanyalah terjemahan yang paling mudah dari aturan Harabor & Grastien ke grid ortogonal yang bisa saya pikirkan.

Ilmari Karonen
sumber
+1 Inilah yang akan saya jawab. Adalah mungkin untuk membuktikan bahwa ini masih akan optimal.
BlueRaja - Danny Pflughoeft
2

Sebenarnya, jika Anda melihat definisi rute 45 derajat, selalu mungkin untuk mengubah jalur dengan rute 45 derajat menjadi jalur tanpa putaran 45 derajat. Dan itu juga optimal (Anda dapat dengan mudah membuktikannya dengan kontradiksi).

Jadi, cara paling sederhana adalah dengan menjalankan pencarian titik lompatan dan kemudian mengubahnya menjadi rute ortogonal.

Jas
sumber