Algoritmo para gerar uma caminhada aleatória que evita a auto-estrutura

9

Onde posso encontrar algum código para gerar percursos aleatórios e evitáveis ​​em treliças bidimensionais e tridimensionais cujos comprimentos laterais são potências de dois? A caminhada deve passar por todos os pontos da treliça. Mais especificamente, como posso encontrar um caminho hamiltoniano aleatório em uma grande2n×2nou gráfico da grade?2n×2n×2n

A distribuição não precisa ser completamente uniforme; no entanto, em geral, a rede deve parecer enrugada. O método usado para gerar o caminho deve ter baixa probabilidade de produzir trechos extremamente longos de linha reta.

J. Antonio Perez
fonte
2
É bom perguntar sobre um algoritmo aqui. Mas a recomendação de software é fora de tópico. Além disso, você pode se esforçar mais: 1. definindo seu problema com mais rigor; 2. mostrando sua tentativa de responder sua pergunta.
Apiwat Chantawibul 17/07/19
2
Por exemplo, você quer dizer caminho hamiltoniano aleatório no gráfico de grade ?
Apiwat Chantawibul 17/07
Sim; foi exatamente isso que eu quis dizer.
J. Antonio Perez
2
E já que é uma geração aleatória. Você se importa se um caminho específico é mais provável de ser gerado do que outros? Você precisa de uma chance uniforme para cada caminho possível? (possibilidade uniforme provavelmente será mais difícil de fazer.)
apiwat Chantawibul
1
Quais são exatamente os requisitos da distribuição? Você diz que não precisa de uma distribuição uniforme. Você concorda com um algoritmo que produz qualquer caminho hamiltoniano (mesmo que seja sempre o mesmo)? Caso contrário, especificamente quais são os requisitos? Além disso, você pode ser mais preciso sobre a classe de gráficos que deseja manipular? Encontrar um caminho hamiltoniano em um gráfico de grade é geralmente difícil para NP , embora pareça que seu gráfico possa vir de uma classe de gráficos mais restrita.
DW

Respostas:

4

Aqui estão duas implementações javascript de um algoritmo para amostrar caminhos hamiltonianos em gráficos de grade bidimensionais: http://clisby.net/projects/hamiltonian_path/ e http://clisby.net/projects/hamiltonian_path/hamiltonian_path_v1.html (Este é meu código. A implementação no primeiro link possui mais recursos, enquanto o segundo permite baixar a sequência de sites visitados pelo caminho.)

Os programas javascript geram caminhos hamiltonianos em uma grade n × n usando o movimento de backbite descrito no artigo “Estruturas secundárias em polímeros compactos longos” de Richard Oberdorf, Allison Ferguson, Jesper L. Jacobsen e Jané Kondev, Phys. Rev. E 74, 051801 (2006). Artigo disponível através do APS (requer assinatura) ou como uma pré-impressão no arXiv em https://arxiv.org/abs/cond-mat/0508094

O código inclui um parâmetro ajustável que determina a proximidade da distribuição uniforme da amostra e você pode adaptar o método (cadeia de Markov Monte Carlo com movimentos de backbite) aos gráficos da grade 3D com um pouco de trabalho.

Nathan
fonte
3
Qual algoritmo esses programas usam? Como este não é um site de programação, estamos mais interessados ​​no algoritmo do que em sua implementação.
Yuval Filmus
Obrigado pela sugestão, adicionei uma referência ao algoritmo usado.
26717 Nathan
Muito obrigado pela sua postagem. Eu acho que realmente entendi o método de backbite melhor do que o outro, mas não entendo como fazer o processo de backbite com eficiência. Eu entendo como fazer isso; apenas não rapidamente. Você poderia fornecer mais detalhes sobre isso? Ainda não abordei a teoria dos grafos em uma aula e sou meio novo nessa área da ciência da computação. Muito obrigado!
J. Antonio Perez