From 6f68e1818229e0d2dad760062e6b5bb137b88f5b Mon Sep 17 00:00:00 2001 From: zhang Date: Sun, 23 Jan 2022 12:42:38 +0800 Subject: =?UTF-8?q?=E9=9A=8F=E6=9C=BA=E6=B8=B8=E8=B5=B0=20&=20ortools=20de?= =?UTF-8?q?mo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- prob/random_walk_demo.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 prob/random_walk_demo.py (limited to 'prob/random_walk_demo.py') diff --git a/prob/random_walk_demo.py b/prob/random_walk_demo.py new file mode 100644 index 0000000..6212528 --- /dev/null +++ b/prob/random_walk_demo.py @@ -0,0 +1,48 @@ + +import random + + +def random_walk(N): + x, y = 0, 0 + choices = ['N', 'S', 'E', 'W'] + for i in range(N): + step = random.choice(choices) + if step == 'N': + y += 1 + elif step == 'S': + y -= 1 + elif step == 'E': + x += 1 + else: + x -= 1 + return x, y + + +def random_walk_2(N): + x, y = 0, 0 + for i in range(N): + dx, dy = random.choice([[0, 1], [0, -1], [1, 0], [-1, 0]]) + x += dx + y += dy + return x, y + + +def distance_from_home(x, y): + return abs(x) + abs(y) + + +if __name__ == '__main__': + # for i in range(25): + # x, y = random_walk_2(10) + # print(f'x = {x}, y = {y}, distance from home: {distance_from_home(x, y)}') + + number_of_walks = 50000 + for walk_length in range(1, 31): + no_transport = 0 + for i in range(number_of_walks): + x, y = random_walk(walk_length) + dist = distance_from_home(x, y) + if dist <= 5: + no_transport += 1 + no_transport_percentage = float(no_transport)/number_of_walks + print(f'walk_length: {walk_length}, no_transport_percentage: {no_transport_percentage}') -- cgit v1.2.3