Algorithme pour générer une marche aléatoire auto-évitable sur un réseau

9

Où puis-je trouver du code pour générer des promenades auto-évitables aléatoires sur des réseaux à 2 et 3 dimensions dont les longueurs latérales sont des puissances de deux? La marche doit passer par tous les points du réseau Plus précisément, comment puis-je trouver un chemin hamiltonien aléatoire sur une grande2n×2nou graphique en grille?2n×2n×2n

La distribution ne doit pas être complètement uniforme, mais en général, le réseau doit avoir l'air froissé. La méthode utilisée pour générer le chemin devrait avoir une faible probabilité de produire des tronçons de ligne droite extrêmement longs.

J. Antonio Perez
la source
2
C'est bien de poser des questions sur un algorithme ici. Mais la recommandation de logiciels est hors sujet. De plus, vous pourriez faire plus d'efforts pour 1. définir votre problème plus rigoureusement 2. montrer votre tentative de répondre à votre question.
Apiwat Chantawibul
2
Par exemple, voulez-vous dire un chemin hamiltonien aléatoire sur un graphique en grille ?
Apiwat Chantawibul
Oui; c'est exactement ce que je voulais dire.
J.Antonio Perez
2
Et comme c'est une génération aléatoire. Vous souciez-vous si un chemin particulier est plus susceptible d'être généré que d'autres? ie Avez-vous besoin d'une chance uniforme pour chaque chemin possible? (la chance uniforme sera probablement plus difficile à faire.)
Apiwat Chantawibul
1
Quelles sont exactement les exigences sur la distribution? Vous dites que vous n'avez pas besoin d'une distribution uniforme. Alors êtes-vous d'accord avec un algorithme qui génère n'importe quel chemin hamiltonien (même s'il est toujours le même)? Sinon, quelles sont précisément les exigences? Pouvez-vous également être plus précis sur la classe de graphiques que vous souhaitez gérer? Trouver un chemin hamiltonien sur un graphique en grille est NP-difficile en général, bien qu'il semble que votre graphique puisse provenir d'une classe de graphiques plus restreinte.
DW

Réponses:

4

Voici deux implémentations javascript d'un algorithme pour échantillonner des chemins hamiltoniens sur des graphiques à grille bidimensionnelle: http://clisby.net/projects/hamiltonian_path/ et http://clisby.net/projects/hamiltonian_path/hamiltonian_path_v1.html (c'est mon code. L'implémentation au premier lien a plus de fonctionnalités, tandis que le second vous permet de télécharger la séquence des sites visités par le chemin d'accès.)

Les programmes javascript génèrent des chemins hamiltoniens sur une grille n × n en utilisant le mouvement de morsure décrit dans l'article «Structures secondaires dans les polymères longs compacts» de Richard Oberdorf, Allison Ferguson, Jesper L. Jacobsen et Jané Kondev, Phys. Rev. E 74, 051801 (2006). Papier disponible via l'APS (abonnement requis) ou en pré-impression sur l'arXiv à https://arxiv.org/abs/cond-mat/0508094

Le code comprend un paramètre réglable qui détermine la proximité de la distribution uniforme de votre échantillon, et vous pouvez adapter la méthode (chaîne de Markov Monte Carlo avec mouvements de morsure) aux graphiques de grille 3D avec un peu de travail.

Nathan
la source
3
Quel algorithme ces programmes utilisent-ils? Comme il ne s'agit pas d'un site de programmation, nous nous intéressons plus à l'algorithme qu'à sa mise en œuvre.
Yuval Filmus
Merci pour la suggestion, j'ai ajouté une référence à l'algorithme utilisé.
Nathan
Merci beaucoup pour votre message. Je pense que je comprends mieux la méthode de backbite que l'autre, mais je ne comprends pas comment faire le processus de backbite efficacement. Je comprends comment le faire; mais pas rapidement. Pourriez-vous fournir plus de détails à ce sujet? Je n'ai pas encore couvert la théorie des graphes dans une classe et je suis un peu nouveau dans ce domaine de l'informatique. Merci beaucoup!
J.Antonio Perez