Random Walk Simulation with Distance Metrics

  • Share this:

Code introduction


This function simulates a simple random walk process, calculating the average distance, maximum distance, minimum distance, and the distance of each step in the walk.


Technology Stack : random, math, statistics, string, os, sys, time, datetime, subprocess, hashlib, json

Code Type : Function

Code Difficulty : Intermediate


                
                    
def random_walk(n):
    import random
    import math
    import statistics
    import string
    import random
    import os
    import sys
    import time
    import datetime
    import subprocess
    import hashlib
    import json

    def generate_random_string(length):
        return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(length))

    def calculate_distance(x1, y1, x2, y2):
        return math.sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2)

    def save_walk_data(data, filename):
        with open(filename, 'a') as file:
            file.write(json.dumps(data) + '\n')

    walk_data = []
    x, y = 0, 0
    for _ in range(n):
        direction = random.choice(['up', 'down', 'left', 'right'])
        if direction == 'up':
            y += 1
        elif direction == 'down':
            y -= 1
        elif direction == 'left':
            x -= 1
        elif direction == 'right':
            x += 1
        walk_data.append((x, y))

    average_distance = statistics.mean([calculate_distance(walk_data[i], walk_data[i-1]) for i in range(1, len(walk_data))])
    max_distance = max([calculate_distance(walk_data[i], walk_data[i-1]) for i in range(1, len(walk_data))])
    min_distance = min([calculate_distance(walk_data[i], walk_data[i-1]) for i in range(1, len(walk_data))])
    distances = [calculate_distance(walk_data[i], walk_data[i-1]) for i in range(1, len(walk_data))]

    save_walk_data({
        'walk_data': walk_data,
        'average_distance': average_distance,
        'max_distance': max_distance,
        'min_distance': min_distance,
        'distances': distances
    }, 'walk_data.json')

    return average_distance, max_distance, min_distance, distances