Algoritmo per generare una camminata casuale auto-evitante su un reticolo


9

Dove posso trovare del codice per generare passeggiate casuali che si auto-evitano su reticoli bidimensionali e tridimensionali le cui lunghezze laterali sono potenze di due? La camminata dovrebbe passare attraverso ogni punto del reticolo Più precisamente, come posso trovare un percorso hamiltoniano casuale su un grande2n×2no grafico a griglia?2n×2n×2n

La distribuzione non deve essere completamente uniforme, tuttavia in generale il reticolo dovrebbe apparire rugoso. Il metodo utilizzato per generare il percorso dovrebbe avere una bassa probabilità di produrre tratti estremamente lunghi di retta.


2
Va bene chiedere di un algoritmo qui. Ma la raccomandazione del software è fuori tema. Inoltre, potresti fare uno sforzo maggiore per 1. definire il tuo problema in modo più rigoroso 2. mostrando il tuo tentativo di rispondere alla tua domanda.
Apiwat Chantawibul,

2
Ad esempio, vuoi dire percorso hamiltoniano casuale sul grafico della griglia ?
Apiwat Chantawibul,

Sì; questo è esattamente ciò che intendevo.
J. Antonio Perez,

2
E dal momento che è una generazione casuale. Ti interessa se un determinato percorso ha maggiori probabilità di essere generato rispetto ad altri? cioè hai bisogno di opportunità uniformi per ogni percorso possibile? (Probabilmente sarà più difficile fare
un'uniforme

1
Quali sono esattamente i requisiti per la distribuzione? Dici che non hai bisogno di una distribuzione uniforme. Quindi stai bene con un algoritmo che emette un percorso hamiltoniano (anche se è sempre lo stesso)? In caso contrario, in particolare quali sono i requisiti? Inoltre, puoi essere più preciso sulla classe di grafici che vuoi gestire? Trovare un percorso hamiltoniano su un grafico a griglia è NP-difficile in generale, anche se sembra che il tuo grafico possa provenire da una classe più ristretta di grafici.
DW

Risposte:



4

Ecco due implementazioni javascript di un algoritmo per campionare percorsi hamiltoniani su grafici a griglia bidimensionali: http://clisby.net/projects/hamiltonian_path/ e http://clisby.net/projects/hamiltonian_path/hamiltonian_path_v1.html (Questo è il mio codice. L'implementazione al primo link ha più funzionalità, mentre la seconda consente di scaricare la sequenza di siti visitati dal percorso.)

I programmi javascript generano percorsi hamiltoniani su una griglia n × n usando la mossa di backbite descritta nel documento "Strutture secondarie in polimeri lunghi compatti" di Richard Oberdorf, Allison Ferguson, Jesper L. Jacobsen e Jané Kondev, Phys. Rev. E 74, 051801 (2006). Documento disponibile tramite APS (è richiesto l'abbonamento) o come prestampa su arXiv all'indirizzo https://arxiv.org/abs/cond-mat/0508094

Il codice include un parametro regolabile che determina quanto sarà vicina alla distribuzione uniforme del campione e potresti adattare il metodo (catena Markov Monte Carlo con mosse di backbite) ai grafici a griglia 3D con un po 'di lavoro.


3
Quale algoritmo usano questi programmi? Poiché questo non è un sito di programmazione, siamo più interessati all'algoritmo che alla sua implementazione.
Yuval Filmus,

Grazie per il suggerimento, ho aggiunto un riferimento all'algoritmo utilizzato.
Nathan,

Grazie mille per il tuo post. Penso di capire davvero il metodo del backbite meglio dell'altro, ma non capisco come eseguire il processo di backbite in modo efficiente. Capisco come farlo; solo non rapidamente. Potresti fornire qualche dettaglio in più su questo? Non ho ancora trattato la teoria dei grafi in una classe e sono un po 'nuovo in questo settore dell'informatica. Grazie mille!
J. Antonio Perez,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.