Автор оригинала: Robin Andrews.
В этом посте мы смотрим на идею математики под названием Случайная прогулка Отказ В случайной прогулке каждый шаг в процессе определяется случайным образом, и мы заинтересованы в состоянии процесса после данного числа шагов. Существуют примеры этого феномена, происходящего вокруг нас. Например, все процессы могут быть смоделированы как случайные прогулки:
- Движение молекул в жидкостях и газах
- Изменения в ценах на акцию
- Спортивные результаты за данный период, такие как футбольный сезон
- Биологическая эволюция через изменение гена
- Оценка размера всемирной паутины
Одним из величайших способов почувствовать случайные прогулки – это следующее симуляция.
Уокер начинается определенное место в очень проложенном городе (например, многие в Соединенных Штатах), где каждый блок такой же размер, и дороги пересекаются под прямым углом.
На каждом пересечении ходунка достигает, они могут продолжать в одном направлении, либо выбрать один из других направлений с севера, Юго-Востока или Запада.
Мы можем решить, сколько блокирует ходунок, но направления на каждом пересечении определяются случайным образом (возможно, Walker бросает 4-х сторонние кубики …)
Как далеко от начальной точки будет в конечном итоге Уокер?
Очевидно, что это случайный процесс, мы не можем ответить на это точно, но мы можем получить смысл диапазона возможных результатов и их вероятности. В будущей статье мы рассмотрим эти явления более глубоко. Мы напишем функцию, чтобы рассчитать расстояние от начала, а затем использовать идею Монте-Карло Симуляция Чтобы выполнить большое количество испытаний, чтобы увидеть, есть ли какие-либо модели, которые мы можем обнаружить.
На данный момент я предоставил код для того, чтобы вы запустили симуляцию случайной прогулки. Вам нужно будет запустить его на «правильной» версии Python, установленной на вашем компьютере, в отличие от одной из реализации на основе браузера, таких как https://trinket.io/ , поскольку он использует некоторые довольно расширенные функции Модуль черепахи Python Отказ
Список кодов для симулятора случайного хода Python
"""
Random Walk Demonstration using Python Turtle Module
Compucademy - https://compucademy.net/
"""
import turtle
import random
BLOCK_SIZE = 60
BORDER = 13
STAMP_SIZE = 20 # Defualt value used to get pixel-level control of turtle size
ROWS = 8
COLUMNS = 10
SPEED = 10
def up():
# Don't let walker off grid
new_y = walker.ycor() - (BLOCK_SIZE + BORDER)
if new_y >= -BORDER // 2:
walker.sety(walker.ycor() - (BLOCK_SIZE + BORDER))
return True # Used to avoid counting moves which are disallowed
def down():
new_y = walker.ycor() + (BLOCK_SIZE + BORDER)
if new_y < screen.window_height():
walker.sety(walker.ycor() + (BLOCK_SIZE + BORDER))
return True
def left():
new_x = walker.xcor() - (BLOCK_SIZE + BORDER)
if new_x >= -BORDER // 2:
walker.setx(walker.xcor() - (BLOCK_SIZE + BORDER))
return True
def right():
new_x = walker.xcor() + (BLOCK_SIZE + BORDER)
if new_x < screen.window_width():
walker.setx(walker.xcor() + (BLOCK_SIZE + BORDER))
return True
def random_walk(num_steps):
counter = 0
directions = [up, down, left, right]
while counter < num_steps:
if random.choice(directions)(): # Call the chosen function and check the return value
counter += 1
screen = turtle.Screen()
WIDTH = COLUMNS * (BLOCK_SIZE + BORDER)
HEIGHT = ROWS * (BLOCK_SIZE + BORDER)
screen.setup(WIDTH, HEIGHT)
screen.title("Random Walks Demo")
screen.setworldcoordinates(0, screen.window_height(), screen.window_width(), 0)
screen.bgcolor("black")
screen.tracer(0) # Pause animation to get instant drawing
builder = turtle.Turtle(visible=False)
builder.shape("square")
builder.color("green")
builder.shapesize(BLOCK_SIZE / STAMP_SIZE)
builder.penup()
for row_num in range(ROWS):
for col_num in range(COLUMNS):
builder.goto((BLOCK_SIZE // 2) + col_num * (BLOCK_SIZE + BORDER),
(BLOCK_SIZE // 2) + row_num * (BLOCK_SIZE + BORDER))
builder.stamp()
walker = turtle.Turtle()
walker.shape("circle")
walker.color("white")
walker.width(BORDER // 2)
walker.speed(SPEED)
walker.penup()
walker.goto(screen.window_width() // 2 - BORDER // 2, screen.window_height() // 2 - BORDER // 2)
walker.pendown()
screen.tracer(1) # Restore animation
random_walk(15)
turtle.done()
Несколько баллов о коде:
- Вам придется тщательно выбирать значения для постоянных, если вы измените их, как только некоторые значения размещают Уокера на улицу!
- Контроль размера черепахи с
Turtle.shapesize ()требует некоторой неожиданной математики, как продемонстрировано вBuilder.shapesize (block_size/make_size) -
Random_walk ()Функция реализована очень кратко. Есть пути, которые, вероятно, более четкими. Если вы решили сделать более «очевидную» версию, используяЕсли ... Элиф ..И т. Д., Не забудьте убедиться, что неудачные попытки (те, которые будут размещены в соучревшем сетке), не учитываются в общем количестве предпринимаемых шагов.
Я надеюсь, что вы нашли это интересно. Не забудьте Подписаться Если вы хотите быть в нашем списке рассылки для новостей и предложений, относящиеся к программированию Python и GCSE/уровня компьютерной науки.