DebasishDhal99's picture
Random seed bug removal
50fd4d2
raw
history blame
3.23 kB
import matplotlib.pyplot as plt
import random
import gradio as gr
import numpy as np
import pandas as pd
def generate_random_walk(iters, step_size = 1, random_seed = None):
# random.seed(random_seed)
iters = int(iters)
directions = ['east', 'north', 'west', 'south']
start_point = [0, 0]
if random_seed is None:
random_seed = random.randint(1, 100000)
else:
random_seed = random_seed
random.seed(random_seed)
def distance_from_start(final_coord, start_coord, round_to=2):
return round(np.sqrt((final_coord[0] - start_coord[0])**2 + (final_coord[1] - start_coord[1])**2), round_to)
def step_addition(old_coord, step):
return [sum(x) for x in zip(old_coord, step)]
def step_determination():
direction = random.choice(directions)
if direction == 'east':
return [1*step_size, 0]
elif direction == 'west':
return [-1*step_size, 0]
elif direction == 'north':
return [0, 1*step_size]
elif direction == 'south':
return [0, -1*step_size]
coordinate_list = [start_point]
for i in range(iters):
new_step = step_determination()
new_coordinate = step_addition(coordinate_list[-1], new_step)
coordinate_list.append(new_coordinate)
x = [i[0] for i in coordinate_list]
y = [i[1] for i in coordinate_list]
df = pd.DataFrame({'x':x,'y':y})
csv_file = "2d_random_walk_coordinates.csv"
df.to_csv(csv_file, index=False)
fig, ax = plt.subplots(1)
base_marker_size = 10
markersize = base_marker_size / np.sqrt(iters)
ax.plot(x, y, marker='o', markersize=markersize, linestyle='None')
ax.plot(x[0], y[0], marker='o', markersize=5, color="red")
ax.plot(x[-1], y[-1], marker='o', markersize=5, color="orange")
ax.text(start_point[0], start_point[1], 'Start', color='red')
ax.text(x[-1], y[-1], 'End', color='orange')
x_max_index = x.index(max(x))
x_min_index = x.index(min(x))
y_max_index = y.index(max(y))
y_min_index = y.index(min(y))
info_text = 'Start point=' + str(start_point) + '\n' +'End point=' + str([x[-1],y[-1]]) + '\n' +'Displacement =' + str(distance_from_start([x[-1], y[-1]], start_point)) + '\n' +'Max x = ' + str(max(x)) + '\n' + 'Min x = ' + str(min(x)) + '\n' + 'Max y = ' + str(max(y)) + '\n' + 'Min y = ' + str(min(y))
ax.legend([info_text], loc='best', handlelength=0, handletextpad=0, fancybox=True, fontsize=8)
plt.title( '2D Random Walk\nsteps=' + str(iters)+', step size='+ str(step_size)+ ', seed = '+str((random_seed)) )
plt.grid()
fig.canvas.draw()
image_array = np.array(fig.canvas.renderer.buffer_rgba())
return image_array, csv_file
iters = gr.Number(value=1e5,label="How many random steps?")
step_size = gr.Number(value=1,label="Step size")
random_seed = gr.Number(value=42,label="Random seed (Delete it to go full random mode)")
iface = gr.Interface(fn=generate_random_walk, inputs=[iters, step_size, random_seed], outputs=["image","file"], title="2-D Random Walk", description="Uniform steps along NEWS directions only")
iface.launch()