[PYTHON] Sprechen Sie über die Fluchtwahrscheinlichkeit eines zufälligen Gehens auf einem ganzzahligen Gitter

Problemstellung

Beginnen Sie in einem d-dimensionalen ganzzahligen Raster am Ursprung und führen Sie einen zufälligen Spaziergang (= wählen Sie zufällig aus 2d benachbarten Punkten aus und bewegen Sie sich) unendlich oft aus. Zu diesem Zeitpunkt frage ich mich, ob ich vielleicht wieder zum Ursprung zurückkehren werde oder ob ich weit weg gehen und niemals zurückkehren werde.

Um dies ungefähr durch Simulation zu erhalten, führen Sie N zufällige Spaziergänge mit einer Länge von n Schritten N-mal durch und erhalten Sie die empirische Wahrscheinlichkeit, mehr als einmal zum Ursprung zurückzukehren.

Bild des Experiments

Ich habe versucht, den Zustand des 3D-Zufallslaufs (100.000 Schritte) anhand von [hier] 2 zu visualisieren. In diesem Beispiel scheint es nicht um den Ursprung (oben links) herum zu beginnen, nach rechts unten zu gehen und zurückzukehren. Wiederholen Sie diesen Versuch viele Male, um die Wahrscheinlichkeit zu ermitteln, mit der ein Versuch zum Ursprung zurückkehrt. random3d.png

Code

Wir haben eine Numpy-Array-Berechnung und eine japanische Anzeige entwickelt, aber die Erklärung wird weggelassen.


% matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import matplotlib
import seaborn as sns
sns.set()
matplotlib.rcParams['font.family'] = 'sans-serif'
matplotlib.rcParams['font.sans-serif'] = ['Hiragino Maru Gothic Pro', 'Yu Gothic', 
'Meirio', 'Takao', 'IPAexGothic', 'IPAPGothic', 'VL PGothic', 'Noto Sans CJK JP']

def try_mc(n, N, dim):
    """Führen Sie N zufällige Spaziergänge vom Ursprung aus durch und bewegen Sie n Schritte in einem dim-dimensionalen Gitter.
    """
    index = np.random.randint(dim, size=(N, n))
    sign = np.random.choice([-1,1], size=(N, n))
    ps = np.zeros((N, n,dim), dtype=int)
    ps[np.arange(N).reshape(N,1), np.arange(n), index] += sign
    ps = ps.cumsum(axis=1)
    return ps

n = 100000
N = 1000
dims = [1,2,3]

fig, axes = plt.subplots(1,3, sharey=True, sharex=True, figsize=(15,5))

for i, dim in enumerate(dims):
    ps = try_mc(n, N, dim)
    ds = np.abs(ps).sum(axis=2)
    ax = axes[i]
    ax.set_xlabel("Zufällige Gehlänge")
    if i==0:
        ax.set_ylabel("Wahrscheinlichkeit, mehr als einmal zum Ursprung zurückzukehren")
    prob = ((ds == 0).cumsum(axis=1)>0).sum(axis=0) / N
    ax.plot(prob)

Simulationsergebnis

Wenn Sie den zufälligen Spaziergang fortsetzen, wird er eines Tages wiederkommen, daher möchte ich, dass die Wahrscheinlichkeit auf 1 konvergiert ... result.png

In der 1. und 2. Dimension beträgt die Wahrscheinlichkeit einer Rückkehr 1. Wenn Sie also ausreichend lange fortfahren, kehren Sie schließlich zum Ursprung zurück. In der 3. Dimension ist die Wahrscheinlichkeit, dass Sie nicht zurückkehren, größer als 0. Wenn Sie also ausreichend lange fortfahren, kehren Sie definitiv zurück. Dies bedeutet, dass Sie niemals zurückkehren werden (denn selbst wenn Sie ein- oder zweimal in der Mitte zurückkommen und den Neustart wiederholen, erhalten Sie eine Testversion, die irgendwann nicht mehr zurückkommt).

(Genau genommen kommt es nicht zurück, aber es geht bis ins Unendliche, bevor es zum Ursprung zurückkehrt, also verstehe ich den Ausdruck nicht wirklich.)

Hintergrundgeschichte

Mathematisch ist der Wert Fluchtwahrscheinlichkeit

p_ {Escape} (i, j): = (Wahrscheinlichkeit, von i zu beginnen und zu i zurückzukehren, bevor j erreicht wird)

Ist definiert als. In diesem Gitterdiagramm ist $ i = Ursprung $, $ j = $ {Punkt } mit n Abstand vom Ursprung (Manhattan) und $ p_ {Flucht} $, wenn $ n \ bis \ infty $ berechnet wurde. Es ist ein Bild. $ P_ {Escape} = 0 $ wenn $ dim = 1,2 $, $ dim = 3 $

1/6 <= p_{escape} <= 5/6

Es ist relativ einfach, das zu beweisen. Dieser Beweis zeigt, dass die Fluchtwahrscheinlichkeit in einem Stromkreis mit einem 1Ω-Widerstand an jeder Kante des Diagramms verwendet wird.

p_{escape} = c_{eff} / c_i

($ c_ {eff} $ ist die zusammengesetzte Leitfähigkeit zwischen i und j, $ c_i $ ist die Summe der Leitfähigkeiten der Kanten, die mit $ i $ verbunden sind) Es ist technisch interessant zu verwenden, was ausgedrückt wird. Wenn Sie interessiert sind, lesen Sie bitte [Referenzen] 1. Neben der Fluchtwahrscheinlichkeit gibt es noch andere Themen wie die Beziehung zwischen Spannung, Strom und Random Walk und die Beziehung zwischen Pendelzeit und kombiniertem Widerstand, was interessant ist. (Übrigens ist die Übung "Finden der Fluchtwahrscheinlichkeit in einem Computerexperiment" in der Übung enthalten.)

Recommended Posts

Sprechen Sie über die Fluchtwahrscheinlichkeit eines zufälligen Gehens auf einem ganzzahligen Gitter
Berechnen Sie die Wahrscheinlichkeit von Ausreißern auf den Box-Whiskern
Die Geschichte des Exportierens eines Programms
Die Geschichte eines Fehlers in PyOCR
Die Geschichte einer unveränderlichen Form
Die Geschichte der Verarbeitung A von Blackjack (Python)
Die Geschichte eines Mel-Icon-Generators
Eine Geschichte über einen Ingenieur, der nur auf der Serverseite kam, erstellte ein Portfolio
Machen Sie das ursprüngliche Verzeichnis von JupyterLab zu einem Google Drive, das auf einer externen Festplatte installiert ist
Die Geschichte des Starts eines Minecraft-Servers von Discord
Eine Geschichte, die den Aufwand für Betrieb / Wartung reduziert
Die Geschichte eines neuronalen Netzwerks der Musikgeneration
Erstellen Sie eine Zufallszahl mit einer beliebigen Wahrscheinlichkeitsdichte
Eine Geschichte über die Änderung des Master-Namens von BlueZ
Zip 4 Gbyte Problem ist eine Geschichte der Vergangenheit
Eine Geschichte, die die Lieferung von Nico Nama analysierte.
Eine Überlegung zur Visualisierung des Anwendungsbereichs des Vorhersagemodells
Die Geschichte von sys.path.append ()
VisibleDeprecationWarning: Die Verwendung einer Nicht-Ganzzahl anstelle einer Ganzzahl führt in Zukunft zu einem Fehler
Die Geschichte der Einrichtung eines VIP-Kanals im internen Chatwork
Hinweis zum Standardverhalten von collate_fn in PyTorch
Messen Sie die Wichtigkeit von Features mit einem zufälligen Gesamtstrukturwerkzeug
Sakura Die Geschichte, wie die Python-Flasche im Internet funktioniert hat
Die Geschichte des Django-Modellfeldes verschwindet aus der Klasse
Die Geschichte des Erstellens einer Datenbank mithilfe der Google Analytics-API
Die Geschichte, wie man mit discord.py einen Fragenkasten-Bot erstellt
Zum ersten Mal veröffentlichte GitHub x Circle CI ein Textüberprüfungstool von Python
Eine Geschichte, die ein Amateur, der das Terminal über 3 Wochen nicht kennt, in Kaggle gepostet hat
Die Geschichte, ein Tool zu erstellen, das auf Mac und Windows auf der Spieleentwicklungsseite ausgeführt wird
Die Geschichte des Baus von Zabbix 4.4
Eine Methode zum Konvertieren des Bildstils unter Beibehaltung der Farbe
Eine Geschichte, die mit der Installation der maschinellen Lernbibliothek JAX zusammenhängt
Unter Linux ist der Zeitstempel einer Datei etwas vorbei.
Zählen Sie mit NetworkX den maximal verketteten Teil eines zufälligen Diagramms
Die Geschichte der Erstellung einer Website, auf der die Veröffentlichungsdaten von Büchern aufgeführt sind
Finden Sie den Rang der Matrix in der XOR-Welt (Rang der Matrix auf F2)
[Pythonista] Die Geschichte einer Aktion zum Kopieren ausgewählten Textes
[Windows] Die Geschichte eines Anfängers, der über die Einstellung von Anacondas PFAD stolpert.
Die Geschichte, ein Modul zu erstellen, das E-Mails mit Python überspringt
Holen Sie sich die Anzahl der Leser von Artikeln über Mendeley in Python
Erstellen Sie ein Kompatibilitätsbewertungsprogramm mit dem Zufallsmodul von Python.
Die Geschichte, dass "calendar.day_abbr" auf dem Admin-Bildschirm von django nicht aktualisiert werden konnte
Die Geschichte, ein Tool zum Laden von Bildern mit Python zu erstellen ⇒ Speichern unter