Algoritma pencarian jalan Triangulasi A * (TA *)

11

Saya perlu bantuan untuk memahami algoritma Triangle A * (TA *) yang dijelaskan oleh Demyen dalam makalahnya Pathfinding Berbasis Triangulasi Efisien , pada halaman 76-81.

Dia menjelaskan bagaimana mengadaptasi algoritma A * biasa untuk triangulasi, untuk mencari jalur lain yang mungkin lebih optimal, bahkan setelah simpul terakhir tercapai / diperluas. Reguler A * berhenti ketika simpul terakhir diperluas, tetapi ini tidak selalu jalur terbaik ketika digunakan dalam grafik triangulasi. Inilah masalah yang saya alami.

Masalahnya diilustrasikan pada halaman 78, Gambar 5.4: masukkan deskripsi gambar di sini

Saya mengerti bagaimana cara menghitung nilai g dan h yang disajikan dalam makalah (halaman 80).

Dan saya pikir syarat berhenti pencarian adalah:

if (currentNode.fCost > shortestDistanceFound)
{
    // stop
    break;
}

di mana currentNode adalah simpul pencarian yang muncul dari daftar terbuka (antrian prioritas), yang memiliki skor-f terendah. shortestDistanceFound adalah jarak sebenarnya dari jalur terpendek yang ditemukan sejauh ini.

Tetapi bagaimana cara mengecualikan jalur yang ditemukan sebelumnya dari pencarian di masa depan? Karena jika saya melakukan pencarian lagi, itu pasti akan menemukan jalan yang sama. Apakah saya mereset daftar tertutup? Saya perlu memodifikasi sesuatu, tetapi saya tidak tahu apa yang harus saya ubah. Makalah ini tidak memiliki kodesemu, sehingga akan sangat membantu.

Tanpa Morrow
sumber

Jawaban:

3

Saya belum menerapkan ini, tetapi ketika saya membacanya, saya pikir Anda akan melakukan sesuatu seperti ini:

shortestDistance = infinity
do A* with modified g cost
    if node.fCost > shortestDistance (section 5.5)
        don't open node
    if node.isGoal()
        run funnel algorithm (string pulling)
        update shortestDistance

Perbedaannya adalah bahwa bahkan jika Anda menemukan sebuah jalan ke tujuan, itu belum tentu terpendek jalan. Tetapi Anda akan terus meningkatkan batas atas pada jalur terpendek, artinya Anda tidak perlu membuka semua node. Akhirnya set terbuka Anda harus kosong, dan jalur terbaik yang Anda temukan sejauh ini harus yang terpendek.

Biaya modifikasi yang ia gambarkan tampak seperti perkiraan yang terlalu rendah, jadi saya skeptis tentang seberapa baik kerjanya dalam praktik.

selion
sumber
Hmm, saya bisa saja salah, tetapi saya menafsirkannya sebagai kondisi berhenti daripada kondisi untuk menambah daftar terbuka. Berikut ini terdengar seperti syarat untuk menambahkan ke daftar terbuka: "Sebagai catatan, anak dari keadaan pencarian tidak akan dihasilkan untuk segitiga berdekatan tertentu jika keadaan yang sesuai dengan segitiga itu sudah merupakan leluhur dari keadaan itu. Ini pengecualian dapat dilakukan karena itu tidak akan pernah menghilangkan jalur yang optimal, hanya satu yang bisa menjadi lebih pendek dengan menghapus bagian dari itu, sebagaimana dinyatakan dalam Teorema 4.3.4. "
Morrowless