Рубрики
Без рубрики

Разблокировка сетки: используя симуляцию в Python, чтобы продемонстрировать более быстрый способ прогуляться

Использование Python для сравнения двух методологий принятия маршрута с результатами, визуализированными на участке. Помечено Python, Datascity, статистика, датавиз.

Я ученый данных, который любит проводить эксперименты на своем родном городе Нью-Йорк. Этот пост использует несколько простых симуляторов, встроенных в Python, чтобы сравнить два методологии принятия маршрута, с результатами, визуализированными на участке.

Один из моих домашних животных, когда прогуливается вокруг Нью-Йорка, заключается в том, что мой товарищ пешеход выбирает неэффективный маршрут в наше место назначения. В частности, кажется, что многие ходунки неосознанно придерживаются «L» -Route между конечными точками, когда на самом деле наличие stoplights создает возможность сэкономить время в вашем путешествии, превратившись чаще.

Этот надзор, вероятно, является результатом нашего понимания сетки как способ подключения точек только с двумя линиями, а также подкрепление, которые цифровые карты дают нам при предположении маршрутов, которые часто являются одноразовым разнообразием:

Конечно, если вы ограничены заранее определенным маршрутом с одним поворотом, вы находитесь во власти любой прогулки/не ходили знаки, которые вы получаете между блоками. И хотя Нью-Йорксеры внесли настоящую науку вне сроки своих джейочинга между встречными транспортными средствами, в некоторых двянках вам просто придется ждать.

С другой стороны, если вы готовы сделать несколько оборотов и зигзаг на свой путь к месту назначения, у вас есть свобода движения по другой оси, если вы столкнулись с светящейся красной рукой. По определению мотивация для этих результатов гарантирует, что они будут немедленно доступны: на стандартном пересечении, трафик в пути, останавливается так, что он может двигаться в другом. И, наконец, работая вокруг этих задержек не удлиняет физическое расстояние от вашей поездки, поскольку сегменты в вашем маршруте все равно добавят на все ноги.

Многие из нас, скорее всего, уже интегрируют эту логику в нашу прогулку, преднамеренно или подсознательно. Но я хотел построить простой симулятор в Python, чтобы точно оценить, сколько времени мы можем действительно сохранить.

Давайте представим, что вы на сетке 8×8, и вам нужно добраться от юго-запада на северо-восточный угол, расстояние 16 единиц. На каждом этапе есть запас, который мы дадим 50% шанс останавливать свой прогресс каждый раз и добавлять минутую длительную задержку.

import random
def dumbwalk(up, over):
    # set timer and position
    delay = 0
    up_progress = 0
    over_progress = 0

    # walks north until nothern boundary is reached 
    # confronts stoplight (flip) before each block
    while up_progress < up:
        flip = random.randint(0,1)
        if flip == 1:
            delay += 1
        up_progress += 1

    # then walks east until finish line 
    # confronts stoplight (flip) before each block
    while over_progress < over:
        flip = random.randint(0,1)
        if flip == 1:
            delay += 1
        over_progress += 1


    return delay

Если вы запустите 10 000 испытаний по этому процессу, а затем график результатов, вы получите хорошее обычное распределение, сосредоточенное вокруг 8-минутной задержки:

import plotly.plotly as py
import plotly.graph_objs as go

dumb_delays = [dumbwalk(8,8) for i in range(10000)]
data = [go.Histogram(x=dumb_delays)]
py.iplot(data, filename='basic histogram')

Мы получаем эту особую форму от графика, потому что наш сценарий, противоречащий Stoplights аналогично переворачиванию монеты 16 прямого времени, поэтому мы получаем биномиальное распределение в центре 8.

Давайте имитируем умнее, в этот раз подход поворота.

def smartwalk(up, over):
    # set timer and position
    delay = 0
    up_progress = 0
    over_progress = 0

    # begins by walking vertically
    direction = "up"

    while up_progress < up or over_progress < over:
        # approximates dumbwalk on either border
        if up_progress == up:
            flip = random.randint(0,1)
            if flip == 1:
                delay += 1
            over_progress += 1

        elif over_progress == over:
            flip=random.randint(0,1)
            if flip == 1:
                delay += 1
            up_progress += 1


        # otherwise walker will continue in direction for greens and pivot for reds
        else:
            if direction == "up":
                flip = random.randint(0,1)
                if flip == 1:
                    direction = "over"
                    over_progress += 1
                else:
                    up_progress += 1

            elif direction == "over":
                flip = random.randint(0,1)
                if flip == 1:
                    direction = "up"
                    up_progress += 1

                else:
                    over_progress += 1

    return delay

Теперь вместо того, чтобы потребоваться ждать на каждом задержите, вы попадаете, вы можете просто изменить направление каждый раз, если вы еще не достигли своей горизонтальной или вертикальной границы. Сколько времени это на самом деле сохраняет? Давайте снова пройдем 10 000 испытаний:

smart_delays = [smartwalk(8,8) for i in range(10000)]
data = [go.Histogram(x=smart_delays)]

py.iplot(data, filename='basic histogram')

Поскольку гистограмма указывает, используя методологию «Smartwalk», у вас есть бесплатная прогулка по задержке около 20% времени, а два или меньше задержек 80% времени. Это большая разница от прерывания в 8 раз в среднем от stoplights!

Функция массы вероятности для этого подхода – Многое более сложный, чем «ганмер» и его биномиальный аналог. Мне потребовалось много кофе и скомканной бумаги, чтобы выяснить его, и если вы заинтересованы, это объяснил в этом блогопосте.

В противном случае, спасибо за чтение и в следующий раз, когда вы идете по городу, помните: самый большой подарок сетки не является одним из Big L, который вы можете сделать между дальними местами, это много Это, что вы можете заменить его.

Оригинал: “https://dev.to/walker/grid-unlock”