118 lines
3.3 KiB
Python
Executable File
118 lines
3.3 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
"""
|
|
Simulation of a random walk on a finite b-ary tree of depth k
|
|
|
|
"""
|
|
|
|
import random as rn
|
|
import numpy as np
|
|
import matplotlib.pyplot as plt
|
|
#import math as mt
|
|
|
|
#rn.seed(666)
|
|
|
|
k = 10 # depth of the tree
|
|
b = 2 # arity of the tree
|
|
T = 100 # number of steps taken by the MC
|
|
|
|
X = np.zeros(T)
|
|
Y = np.zeros(T)
|
|
Z = np.zeros(T)
|
|
|
|
for a in range(0, T):
|
|
Z[a] = T
|
|
|
|
X[0] = rn.randint(0,k) # setting the starting level for X
|
|
Y[0] = rn.randint(0,k) # setting the starting level for Y
|
|
|
|
for a in range(0, (T - 1)):
|
|
monX = rn.randint(0,1)
|
|
probArisX = rn.randint(0,(b + 1))
|
|
monY = rn.randint(0,1)
|
|
probArisY = rn.randint(0,(b + 1))
|
|
if X[a] != Y[a]: # if X is different to Y
|
|
if X[a] > 0 and X[a] < k: # if the MC is in the middle depths of the tree
|
|
if monX == 1:
|
|
X[a + 1] = X[a]
|
|
if monX == 0:
|
|
if probArisX == 0:
|
|
X[a + 1] = (X[a] - 1)
|
|
if probArisX != 0:
|
|
X[a + 1] = (X[a] + 1)
|
|
if X[a] == 0: # if the MC is in the root node
|
|
if monX == 1:
|
|
X[a + 1] = X[a]
|
|
if monX == 0:
|
|
X[a + 1] = (X[a] + 1)
|
|
if X[a] == k: # if the MC is in the leaf of the tree
|
|
if monX == 1:
|
|
X[a + 1] = X[a]
|
|
if monX == 0:
|
|
X[a + 1] = (X[a] - 1)
|
|
if Y[a] > 0 and Y[a] < k:
|
|
if monY == 1:
|
|
Y[a + 1] = Y[a]
|
|
if monY == 0:
|
|
if probArisY == 0:
|
|
Y[a + 1] = (Y[a] - 1)
|
|
if probArisY != 0:
|
|
Y[a + 1] = (Y[a] + 1)
|
|
if Y[a] == 0:
|
|
if monY == 1:
|
|
Y[a + 1] = Y[a]
|
|
if monY == 0:
|
|
Y[a + 1] = (Y[a] + 1)
|
|
if Y[a] == k:
|
|
if monY == 1:
|
|
Y[a + 1] = Y[a]
|
|
if monY == 0:
|
|
Y[a + 1] = (Y[a] - 1)
|
|
|
|
if X[a] == Y[a]: # if X is equal to Y
|
|
Z[a] = a
|
|
if X[a] > 0 and X[a] < k:
|
|
if monX == 1:
|
|
X[a + 1] = X[a]
|
|
Y[a + 1] = X[a] #X[a + 1]
|
|
if monX == 0:
|
|
if probArisX == 0:
|
|
X[a + 1] = (X[a] - 1)
|
|
Y[a + 1] = (X[a] - 1) #X[a + 1]
|
|
if probArisX != 0:
|
|
X[a + 1] = (X[a] + 1)
|
|
Y[a + 1] = (X[a] + 1) #X[a + 1]
|
|
if X[a] == 0:
|
|
if monX == 1:
|
|
X[a + 1] = X[a]
|
|
Y[a + 1] = X[a] #X[a + 1]
|
|
if monX == 0:
|
|
X[a + 1] = (X[a] + 1)
|
|
Y[a + 1] = (X[a] + 1) #X[a + 1]
|
|
|
|
if X[a] == k:
|
|
if monX == 1:
|
|
X[a + 1] = X[a]
|
|
Y[a + 1] = X[a] #X[a + 1]
|
|
if monX != 1:
|
|
X[a + 1] = (X[a] - 1)
|
|
Y[a + 1] = (X[a] - 1) #X[a + 1]
|
|
|
|
|
|
#plt.plot(X,'ro',ms=0.8)
|
|
#plt.plot(Y,'bo',ms=0.8)
|
|
plt.plot(X,'r')
|
|
plt.plot(Y,'b')
|
|
plt.show()
|
|
|
|
t = np.amin(Z)
|
|
print("t_cou = " + str(t))
|
|
|
|
#n = (mt.pow(b,k + 1) - 1)/(b - 1) # number of vertex in the tree T_{b,k} b - arity, k - depth
|
|
|
|
#if t != 0:
|
|
# if t <= ((4 * n)/T):
|
|
# print("The test is passed")
|
|
#else:
|
|
# print("The MC started coupled")
|
|
|