Banyak algoritma pencarian jalur telah dikembangkan dalam beberapa tahun terakhir yang dapat menghitung jalur terbaik dalam menanggapi perubahan grafik jauh lebih cepat daripada A * - apa sajakah itu, dan bagaimana perbedaannya? Apakah mereka untuk situasi yang berbeda, atau melakukan beberapa yang lain usang?
Inilah yang saya dapat temukan sejauh ini:
- D * (1994)
- Berfokus D * (1995)
- DynamicSWSF-FP (1996)
- LPA (1997)
- LPA * / Incremental A * (2001)
- D * Lite (2002)
- SetA * (2002)
- HPA * (2004)
- Anytime D * (2005)
- PRA * (2005)
- Field D * (2007)
- Theta * (2007)
- HAA * (2008)
- GAA * (2008)
- BELAJAR (2009)
- BDDD * (2009 - Saya tidak dapat mengakses makalah ini: |)
- Incremental Phi * (2009)
- GFRA * (2010)
- MTD * -Lite (2010)
- Tree-AA * (2011)
Saya tidak yakin yang mana dari ini berlaku untuk masalah spesifik saya - saya akan membaca semuanya jika perlu, tetapi itu akan menghemat banyak waktu jika seseorang dapat menulis ringkasan.
Masalah spesifik saya: Saya punya kisi dengan permulaan, akhir, dan beberapa dinding. Saat ini saya menggunakan A * untuk menemukan jalur terbaik dari awal hingga akhir.
Pengguna kemudian akan memindahkan satu dinding , dan saya harus menghitung ulang seluruh jalan lagi. Langkah "pindah-dinding / menghitung ulang-jalan" terjadi berkali-kali berturut-turut, jadi saya mencari algoritma yang akan dapat dengan cepat menghitung ulang jalur terbaik tanpa harus menjalankan iterasi penuh A *.
Meskipun, saya tidak perlu mencari perubahan ke A * - itu bisa menjadi algoritma yang sepenuhnya terpisah.
sumber
Jawaban:
Jadi, saya membaca sekilas kertas-kertas itu, dan inilah yang saya kilaukan. Jika ada orang yang lebih berpengetahuan dalam masalah ini, perbaiki saya jika saya salah (atau tambahkan jawaban Anda sendiri, dan sebagai gantinya saya akan menerimanya!) .
Tautan ke setiap makalah dapat ditemukan di pos-pertanyaan di atas.
Mengingat semua ini, tampaknya LPA * paling cocok untuk masalah saya.
sumber
Ada peringatan besar ketika menggunakan D *, D * -Lite, atau salah satu algoritma tambahan dalam kategori ini (dan perlu dicatat bahwa peringatan ini jarang disebutkan dalam literatur). Jenis algoritma ini menggunakan pencarian terbalik. Yaitu, mereka menghitung biaya keluar dari simpul tujuan, seperti riak yang menyebar keluar. Ketika biaya tepi berubah (misalnya Anda menambah atau menghapus dinding dalam contoh Anda) mereka semua memiliki berbagai strategi yang efisien untuk hanya memperbarui subset dari node yang dieksplorasi (alias 'dikunjungi') yang dipengaruhi oleh perubahan.
Peringatan besar adalah bahwa lokasi perubahan ini sehubungan dengan lokasi tujuan membuat perbedaan besar pada efisiensi algoritma. Saya menunjukkan dalam berbagai makalah dan tesis saya bahwa sangat mungkin untuk kinerja kasus terburuk dari salah satu algoritma inkremental ini menjadi lebih buruk daripada membuang semua informasi dan mulai lagi dengan sesuatu yang non-incremental seperti A * biasa.
Ketika informasi biaya yang diubah dekat dengan batas depan pencarian yang diperluas (wilayah 'yang dikunjungi'), beberapa jalur harus diubah, dan pembaruan tambahannya cepat. Contoh terkait adalah robot seluler dengan sensor yang melekat pada tubuhnya. Sensor hanya melihat dunia di dekat robot, dan karenanya perubahan ada di wilayah ini. Wilayah ini adalah titik awal pencarian, bukan tujuan, sehingga semuanya berjalan dengan baik dan algoritme sangat efisien untuk memperbarui jalur optimal untuk memperbaiki perubahan.
Ketika informasi biaya yang diubah dekat dengan tujuan pencarian (atau skenario Anda melihat lokasi perubahan tujuan, bukan hanya permulaan), algoritma ini mengalami pelambatan bencana. Dalam skenario ini, hampir semua informasi yang disimpan perlu diperbarui, karena wilayah yang diubah sangat dekat dengan tujuan sehingga hampir semua jalur pra-perhitungan melewati perubahan dan harus dievaluasi kembali. Karena overhead menyimpan informasi tambahan dan perhitungan untuk melakukan pembaruan tambahan, evaluasi ulang pada skala ini lebih lambat daripada awal yang baru.
Karena skenario contoh Anda muncul untuk membiarkan pengguna memindahkan setiap dinding yang mereka inginkan, Anda akan mengalami masalah ini jika Anda menggunakan D *, D * -Lite, LPA *, dll. Kinerja waktu algoritma Anda akan bervariasi, tergantung pada pengguna memasukkan. Secara umum, "ini adalah hal yang buruk" ...
Sebagai contoh, kelompok Alonzo Kelly di CMU memiliki program fantastis bernama PerceptOR yang mencoba menggabungkan robot darat dengan robot udara, yang semuanya berbagi informasi persepsi secara real-time. Ketika mereka mencoba menggunakan helikopter untuk memberikan pembaruan biaya waktu-nyata ke sistem perencanaan kendaraan darat, mereka menemukan masalah ini karena helikopter dapat terbang di depan kendaraan darat, melihat perubahan biaya yang lebih dekat ke tujuan, dan dengan demikian memperlambat algoritma mereka. Apakah mereka membahas pengamatan yang menarik ini? Tidak. Pada akhirnya, yang terbaik yang mereka kelola adalah memiliki helikopter yang terbang tepat di atas kendaraan darat - menjadikannya tiang sensor termahal di dunia. Tentu, saya picik. Tapi itu masalah besar yang tidak ingin dibicarakan orang - dan mereka harus,
Hanya ada beberapa makalah yang membahas hal ini, kebanyakan oleh saya. Dari makalah yang ditulis oleh penulis atau siswa dari penulis makalah asli yang tercantum dalam pertanyaan ini, saya hanya bisa memikirkan satu yang benar-benar menyebutkan masalah ini. Likhachev dan Ferguson menyarankan untuk mencoba memperkirakan skala pembaruan yang diperlukan, dan menyiram informasi yang tersimpan jika pembaruan tambahan diperkirakan akan memakan waktu lebih lama daripada awal yang baru. Ini adalah solusi yang cukup masuk akal, tetapi ada juga yang lain. PhD saya menggeneralisasi pendekatan yang serupa di berbagai masalah komputasi dan semakin melampaui ruang lingkup pertanyaan ini, namun Anda dapat menemukan referensi yang bermanfaat karena memiliki tinjauan menyeluruh tentang sebagian besar algoritma ini dan banyak lagi. Lihat http://db.acfr.usyd.edu.au/download.php/Allen2011_Thesis.pdf?id=2364 untuk detail.
sumber
Gagasan utamanya adalah menggunakan algoritme inkremental, yang dapat memanfaatkan perhitungan sebelumnya ketika rute awal yang dihitung diblokir. Ini sering diselidiki dalam konteks robot, navigasi, dan perencanaan.
Koenig & Likkachev, Perencanaan ulang cepat untuk Navigasi di Medan yang Tidak Diketahui, Transaksi IEEE pada Robotika, Vol. 21, No. 3, Juni 2005 memperkenalkan D * Lite. Tampaknya aman untuk mengatakan bahwa D * sudah usang dalam arti bahwa D * Lite selalu secepat D *. Selain itu, D * rumit, sulit dipahami, dianalisis, dan diperluas. Gambar 9 memberikan pseudocode untuk D * Lite, dan Tabel 1 menunjukkan hasil eksperimen dengan D * Lite dibandingkan dengan BFS, Backward A *, Forward A *, DynamicSWSF-P dan D *.
Saya tidak tahu algoritma terbaru yang Anda daftarkan (Kapan saja D *, Bidang D *, PELAJARI). Baru-baru ini saya melihat robot yang menggunakan D * Lite untuk perencanaan di lingkungan dengan pejalan kaki acak di dalamnya. Dalam hal ini, saya tidak berpikir D * Lite sudah usang sama sekali. Untuk masalah praktis Anda, saya kira tidak ada salahnya mencoba cara teknik yang biasa: mengambil beberapa pendekatan, dan jika tidak sesuai dengan kebutuhan Anda, coba sesuatu yang lain (lebih kompleks).
sumber
Saya ingin menambahkan sesuatu tentang pohon acak yang dieksplorasi dengan cepat, atau RRT. Ide dasarnya memiliki diskusi yang baik di seluruh internet, tetapi mungkin aman untuk memulai dengan tautan dari halaman Wikipedia dan dengan tulisan asli Kuffner dan LaValle tentang topik tersebut.
Fitur terpenting RRT adalah mereka dapat menangani ruang bernilai nyata dari dimensi yang sangat tinggi tanpa tersedak. Mereka dapat menangani dinamika, tidak optimal tetapi probabilistically lengkap (dijamin akan berhasil jika mungkin karena waktu komputasi pergi hingga tak terbatas), dan mampu menangani target bergerak. Ada beberapa ekstensi yang memungkinkannya bekerja di ruang non-statis, yang terbaik terlihat sebagai pekerjaan RRT Multipartit yang saya tautkan di bawah ini.
sumber
Struktur data yang disebut jarak oracle menangani masalah seperti itu. Namun, sebagian besar hasil penelitian hanya untuk grafik statis .
Jika grafik adalah kisi-kisi (dan karenanya planar), beberapa struktur data dinamis ada (tidak jelas apakah konstanta cukup kecil untuk aplikasi yang dimaksud):
Jalur terpendek yang tepat:
Jittat Fakcharoenphol, Satish Rao: Grafik planar, tepi bobot negatif, jalur terpendek, dan waktu linear dekat. J. Comput. Syst. Sci. 72 (5): 868-889 (2006)
Perkiraan jalur terpendek:
Philip N. Klein, Sairam Subramanian: Skema Pendekatan Sepenuhnya Dinamis untuk Jalur Terpendek dalam Grafik Planar. Algorithmica 22 (3): 235-249 (1998)
Ittai Abraham, Shiri Chechik, Cyril Gavoille: Peramalan perkiraan dinamis sepenuhnya untuk grafik planar melalui label jarak terlarang-set. STOC 2012: 1199-1218
sumber
Di sekolah saya berkecimpung dengan optimasi koloni semut . Dalam beberapa teks itu disebut-sebut sebagai solusi untuk terus mengubah grafik, merute jaringan, dll. Ini bukan solusi rekayasa, tetapi adaptasi dari bagaimana semut menavigasi rintangan dengan menyebarkan feromon untuk menandai jalur yang baik dan buruk. Saya tidak tahu apakah itu bekerja untuk masalah Anda, tetapi saya pikir itu sudut pandang yang menarik.
sumber