Bagaimana cara mewakili situasi berikut ini - agen ( @
) perlu mencapai tujuan ( $
). Path diblokir oleh parit ( ~~~
). Tersedia penggaruk (atau perangkat lain, seperti sepatu berjalan air) yang memungkinkan untuk melewati rintangan.
.....~~~... . ground
...=.~~~... = rake
.....~~~.$. ~ water
.@...~~~... @ agent
.....~~~... $ goal
Bagaimana benar pathfind dari @
ke $
asalkan tidak ada segera tersedia jalan? Haruskah jalan saya tidak hanya memiliki biaya tetapi juga prasyarat?
UPD : Masalahnya adalah tujuannya tidak dapat diakses dan menyapu hanya salah satu dari banyak objek yang mungkin di peta. Pertanyaannya kemudian adalah "bagaimana membuat agen mengerti bahwa ia membutuhkan penggaruk?"
ai
path-finding
zandy
sumber
sumber
Jawaban:
Saya sedang memikirkan setumpuk tujuan, merintis jalan harus dianotasi :
get $
$
- jalur yang ada dengan kemampuan jalan air diperlukan.get waterwalking
.get waterwalking, get $
get $
.$
- sekarang kami memiliki kemampuan dan dapat mencapai tujuan.sumber
Seluruh hal yang menemukan jalur hanyalah pencarian jalur terpendek di atas grafik. untuk menyelesaikan masalah Anda, satu-satunya perubahan yang perlu Anda terapkan adalah dengan menambahkan beberapa tepi tambahan (mewakili jalur yang dapat diambil perahu), dan lakukan algoritma pencarian jalur sederhana. tidak masalah apakah Anda menggunakan BFS, Dijkstra atau A *, hanya menerapkan algoritma pencarian jalur normal dengan beberapa tepi tambahan. untuk informasi lebih lanjut tentang pencarian jalur di halaman wiki periksa grafik
sumber
no path from @ to $
kegoto rake, bring it to water, place it, goto $
.Saya akan melakukan ini dengan semacam solusi pohon perilaku - Anda jalan ke tujuan, dan perhatikan semua hambatan yang telah menghalangi A * Anda. Jika Anda gagal, Anda memeriksa apakah ada objek yang dapat membantu mengatasi hambatan itu, dalam hal ini, jalur ke objek itu. Ulang. Ini berarti bahwa agen perlu mencoba untuk mencapai tujuan dan gagal sebelum mendapatkan ide menggunakan alat, yang mungkin membutuhkan waktu, terutama jika ada dunia ubin besar yang semuanya perlu diperiksa. Mungkin tidak terlihat terlalu aneh sehingga agen membutuhkan waktu untuk merenungkan bagaimana menyelesaikan masalah.
Saya dapat membayangkan solusi nyata yang keras. Tambahkan dimensi lain ke grid jalur pencarian Anda. Jadi dalam kasus peta 2D, Anda membuat grid pathfinding 3D. Dalam contoh sederhana ini, dimensi baru ini hanya akan memiliki kedalaman dua, tetapi dalam game nyata akan menjadi besar dengan cepat.
Pada z = 0 Anda memetakan medan selama keadaan normal, artinya ubin air dianggap tidak bisa dilewati.
Pada z = 1 Anda memetakan medan seperti saat menyapu, yang berarti bahwa ubin air dianggap walkable (tetapi jika Anda memiliki misalnya ubin dinding, itu mungkin tetap solid).
Temuan path adalah A * biasa dalam dimensi x dan y, yang berarti bahwa setiap sel grid dianggap memiliki akses ke tetangganya. Namun dalam dimensi z, A * TIDAK diizinkan untuk menyebar.
Kecuali di mana penyapu. Objek menyapu bertindak sebagai celah antara z = 0 dan z = 1 di jalur pencarian path.
Ini berarti bahwa A * akan banjir mengisi ke luar di z = 0, menabrak air, dan kehabisan pilihan - maka itu akan menyebar ke z = 1 melalui rake tile, dan pada z = 1 (di mana air bisa dilalui dengan berjalan kaki) temukan jalannya ke tujuan. Efeknya adalah bahwa NPC tanpa keraguan bergerak ke rake, dan kemudian memindahkan jalur terpendek ke gawang.
sumber