Thuật toán để tạo ra bước đi ngẫu nhiên tự tránh trên một mạng


9

Tôi có thể tìm một số mã ở đâu để tạo các bước tự tránh ngẫu nhiên trên các mạng 2 và 3 chiều có độ dài cạnh là sức mạnh của hai? Việc đi bộ phải đi qua mọi điểm trên mạng Cụ thể hơn, làm thế nào tôi có thể tìm thấy một đường hamiltonian ngẫu nhiên trên biểu đồ lưới lớn hoặc 2 n × 2 n × 2 n ?2n×2n2n×2n×2n

Sự phân phối không nhất thiết phải hoàn toàn đồng nhất, tuy nhiên nhìn chung mạng tinh thể sẽ bị nhăn. Phương pháp được sử dụng để tạo đường dẫn nên có xác suất thấp tạo ra các đường thẳng cực dài.


2
Thật tốt khi hỏi về một thuật toán ở đây. Nhưng đề xuất phần mềm là lạc đề. Ngoài ra, bạn có thể nỗ lực nhiều hơn vào 1. xác định vấn đề của bạn chặt chẽ hơn 2. cho thấy nỗ lực của bạn trong việc trả lời câu hỏi của bạn.
Apiwat Chantawibul 17/07/17

2
Ví dụ, bạn có nghĩa là đường dẫn Hamilton ngẫu nhiên trên biểu đồ lưới ?
Apiwat Chantawibul

Đúng; đó chính xác là những gì tôi muốn nói
J. Antonio Perez

2
Và vì đó là một thế hệ ngẫu nhiên. Bạn có quan tâm nếu một đường dẫn cụ thể có nhiều khả năng được tạo hơn các đường dẫn khác không? tức là bạn có cần cơ hội thống nhất cho từng con đường có thể không? (cơ hội đồng phục có thể sẽ khó thực hiện hơn.)
Apiwat Chantawibul 17/07/17

1
Chính xác các yêu cầu về phân phối là gì? Bạn nói rằng bạn không cần phân phối đồng đều. Vì vậy, bạn có ổn với thuật toán tạo ra bất kỳ đường dẫn hamiltonian nào không (ngay cả khi nó luôn luôn giống nhau)? Nếu không, cụ thể các yêu cầu là gì? Ngoài ra, bạn có thể chính xác hơn về lớp biểu đồ bạn muốn xử lý không? Tìm một đường hamiltonian trên biểu đồ lưới nói chung là NP-hard , mặc dù có vẻ như biểu đồ của bạn có thể đến từ một loại biểu đồ bị hạn chế hơn.
DW

Câu trả lời:



4

Dưới đây là hai triển khai javascript của một thuật toán để lấy mẫu các đường dẫn Hamilton trên biểu đồ lưới 2 chiều: http://clisby.net/projects/hamiltonian_path/http://clisby.net/projects/hamiltonian_path/hamiltonian_path_v1.html (Đây là mã của tôi. Việc triển khai ở liên kết đầu tiên có nhiều tính năng hơn, trong khi liên kết thứ hai cho phép bạn tải xuống chuỗi các trang web được truy cập bởi đường dẫn.)

Các chương trình javascript tạo các đường dẫn Hamilton trên lưới n × n bằng cách sử dụng di chuyển backbite được mô tả trong các cấu trúc Thứ cấp giấy trong các polyme nhỏ gọn dài của Richard Oberdorf, Allison Ferguson, Jesper L. Jacobsen và Jané Kondev, Phys. Rev E 74, 051801 (2006). Giấy có sẵn thông qua APS (yêu cầu đăng ký) hoặc dưới dạng in sẵn trên arXiv tại https://arxiv.org/abs/cond-mat/0508094

Mã này bao gồm một tham số có thể điều chỉnh để xác định mức độ gần với phân phối đồng nhất mẫu của bạn và bạn có thể điều chỉnh phương thức (chuỗi Markov Monte Carlo với các bước di chuyển ngược) với các biểu đồ lưới 3d với một chút công việc.


3
Những chương trình này sử dụng thuật toán gì? Vì đây không phải là một trang web lập trình, chúng tôi quan tâm đến thuật toán hơn là việc thực hiện nó.
Yuval Filmus

Cảm ơn đề xuất, tôi đã thêm một tham chiếu đến thuật toán được sử dụng.
Nathan

Cảm ơn bạn rất nhiều cho bài viết của bạn. Tôi nghĩ rằng tôi thực sự hiểu phương pháp backbite tốt hơn phương pháp kia, nhưng tôi không hiểu làm thế nào để thực hiện quá trình backbite một cách hiệu quả. Tôi hiểu làm thế nào để làm điều đó; chỉ không nhanh thôi Bạn có thể cung cấp thêm một số chi tiết về điều này? Tôi chưa bao gồm lý thuyết đồ thị trong một lớp và tôi là người mới đối với lĩnh vực khoa học máy tính này. Cảm ơn bạn rất nhiều!
J. Antonio Perez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.