Algoritma untuk menghasilkan jalan acak yang menghindari diri sendiri pada kisi

9

Di mana saya dapat menemukan beberapa kode untuk menghasilkan jalan acak yang menghindar dari diri sendiri pada kisi 2 dan 3 dimensi yang panjang sisinya adalah kekuatan dua? Jalan kaki harus melewati setiap titik pada kisi. Lebih khusus, bagaimana saya bisa menemukan jalur hamiltonian acak di jalan besar2n×2n atau 2n×2n×2n grafik kotak?

Distribusi tidak harus sepenuhnya seragam, namun secara umum kisi-kisi akan terlihat kusut. Metode yang digunakan untuk menghasilkan jalur harus memiliki probabilitas rendah untuk menghasilkan garis lurus yang sangat panjang.

J. Antonio Perez
sumber
2
Tidak apa-apa untuk bertanya tentang algoritma di sini. Tetapi rekomendasi perangkat lunak di luar topik. Juga, Anda dapat melakukan lebih banyak upaya ke 1. mendefinisikan masalah Anda lebih keras 2. menunjukkan upaya Anda untuk menjawab pertanyaan Anda.
Apiwat Chantawibul
2
Misalnya, apakah maksud Anda jalur Hamiltonian acak pada grafik kotak ?
Apiwat Chantawibul
Iya; itulah yang saya maksudkan.
J. Antonio Perez
2
Dan karena ini adalah generasi acak. Apakah Anda peduli jika jalur tertentu lebih mungkin dihasilkan daripada yang lain? mis. Apakah Anda memerlukan kesempatan yang seragam untuk setiap jalur yang memungkinkan? (Kesempatan seragam kemungkinan akan lebih sulit untuk dilakukan.)
Apiwat Chantawibul
1
Apa sebenarnya persyaratan pada distribusi? Anda mengatakan Anda tidak perlu distribusi seragam. Jadi, apakah Anda baik-baik saja dengan algoritme yang menampilkan jalur hamiltonian apa pun (bahkan jika selalu sama)? Jika tidak, secara spesifik apa saja persyaratannya? Selain itu, dapatkah Anda lebih tepat tentang kelas grafik yang ingin Anda tangani? Menemukan jalur hamiltonian pada grafik kotak pada umumnya NP-hard , meskipun sepertinya grafik Anda mungkin berasal dari kelas grafik yang lebih terbatas.
DW

Jawaban:

4

Berikut adalah dua implementasi javascript algoritma untuk sampel jalur Hamiltonian pada grafik kotak 2 dimensi: http://clisby.net/projects/hamiltonian_path/ dan http://clisby.net/projects/hamiltonian_path/hamiltonian_path_v1.html (Ini adalah kode saya. Implementasi di tautan pertama memiliki lebih banyak fitur, sedangkan yang kedua memungkinkan Anda untuk mengunduh urutan situs yang dikunjungi oleh jalur.)

Program javascript menghasilkan jalur Hamiltonian pada grid n × n menggunakan langkah backbite yang dijelaskan dalam makalah "Struktur sekunder dalam polimer kompak panjang" oleh Richard Oberdorf, Allison Ferguson, Jesper L. Jacobsen dan Jané Kondev, Phys. Pd E 74, 051801 (2006). Kertas tersedia melalui APS (diperlukan berlangganan) atau sebagai pra-cetak di arXiv di https://arxiv.org/abs/cond-mat/0508094

Kode ini mencakup parameter yang dapat disesuaikan yang menentukan seberapa dekat dengan distribusi seragam sampel Anda, dan Anda dapat menyesuaikan metode (rantai Markov Monte Carlo dengan gerakan backbite) ke grafik kotak 3d dengan sedikit kerja.

Nathan
sumber
3
Algoritma apa yang digunakan oleh program ini? Karena ini bukan situs pemrograman, kami lebih tertarik pada algoritma daripada implementasinya.
Yuval Filmus
Terima kasih atas sarannya, saya telah menambahkan referensi ke algoritma yang digunakan.
Nathan
Terimakasih banyak atas postingan anda. Saya pikir saya benar-benar memahami metode backbite lebih baik daripada yang lain, tetapi saya tidak mengerti bagaimana melakukan proses backbite secara efisien. Saya mengerti bagaimana melakukannya; tidak cepat. Bisakah Anda memberikan detail lebih lanjut tentang ini? Saya belum membahas teori grafik di kelas dan saya agak baru dalam bidang ilmu komputer ini. Terima kasih banyak!
J. Antonio Perez