Случайная прогулка по краям куба


35

Муравей находится в углу куба и не может двигаться. Паук начинается с противоположного угла и может двигаться по краям куба в любом направлении с равной вероятностью . В среднем, сколько шагов нужно пауку, чтобы добраться до муравья?1 / 3(x,y,z)1/3

(Это не домашняя работа, это был вопрос для интервью.)


7
Домашнее задание? что ты уже испробовал?
Адриан

Что касается цепей Маркова, вот отличное вступление setosa.io/blog/2014/07/26/markov-chains
DL Dahly

1
Обычно этот вид обычной книжной работы должен быть помечен self-studyтегом и следовать инструкциям в его теге вики . Пожалуйста, отредактируйте этот вопрос и
включите

4
@GarethMcCaughan - Нет, это был вопрос для интервью.
Элизабет Сьюзен Джозеф

Вслед за @alesc я сделал JavaScript Plunker. plnkr.co/edit/jYQVDI
abbaf33f

Ответы:


32

Я предлагаю моделировать проблему как цепь Маркова, где каждое состояние представляет расстояние между пауком и муравьем. В этом случае у нас есть 4 возможных состояния поскольку расстояния могут быть .Sii{0,1,2,3}

Когда паук находится в противоположном углу куба, он находится на расстоянии 3 шагов от муравья. Он находится в состоянии .S3

Построение матрицы перехода .P

  • Если мы нарисуем куб, то увидим, что когда мы находимся в состоянии , каждое движение уменьшает расстояние между пауком и муравьем до 2 шагов. Итак, когда мы находимся в состоянии мы переходим в состояние с вероятностью 1.S 3 S 2S3S3S2

  • Когда мы находимся в состоянии , мы можем вернуться в состояние используя ребро, которое мы оттуда получили, или мы можем уменьшить расстояние до одного шага, если выберем два других ребра. Таким образом, когда мы находимся в состоянии мы можем перейти в состояние с вероятностью 2/3 и в состояние с вероятностью 1/3.S 3 S 2 S 1 S 3S2S3S2S1S3

  • Когда мы находимся в состоянии , мы можем перейти в состояние используя один из трех возможных ребер. Если мы используем два других, мы возвращаемся в состояние . Итак, когда мы находимся в состоянии мы можем перейти в состояние с вероятностью 1/3 и в состояние с вероятностью 2/3.S 0 S 2 S 1 S 0 S 2S1S0S2S1S0S2

  • Когда мы добираемся до состояния , мы остаемся там, так как это наша цель. - поглощающее состояние.S 0S0S0

P=[PS3S3PS3S2PS3S1PS3S0PS2S3PS2S2PS2S1PS2S0PS1S3PS1S2PS1S1PS1S0PS0S3PS0S2PS0S1PS0S0]=[01001/302/3002/301/30001]

Это поглощающая марковская цепь с тремя переходными состояниями ( , , ) и одним поглощающим состоянием ( ).S 2 S 1 S 0S3S2S1S0

Согласно теории, матрица переходов цепи Маркова с переходными состояниями и поглощающими состояниями может быть переписана как: r P = [ Q t R 0 r × t I r ]tr

P=[QtR0r×tIr]

где - это матрица которая показывает вероятность перехода из некоторого переходного состояния в другое переходное состояние, а - матрица с вероятностями перехода из одного из переходных состояний к одному из поглощающих состояний. Тождественная матрица показывает нам, что при достижении любого из поглощающих состояний переход из этого состояния отсутствует. Матрица всех нулей может быть интерпретирована как отсутствие перехода от любого из поглощающих состояний к любому из t×t R t×rtr I r r 0 r × t rtQtt×tRt×rtrIrr0r×trt переходные состояния.

Запись в представляет вероятность перехода из состояния в состояние ровно за один шаг. Чтобы получить вероятность для шагов, нам нужна запись в . Суммируя для всех , мы получаем матрицу, которая содержит в своей записи ожидаемое количество посещений переходного состояния после запуска из переходного состояния .Q t i j k ( i , j ) Q k t k ( i , j ) j i(i,j)Qtijk(i,j)Qtkk(i,j)ji

k=0Qtk=(ItQt)1

Чтобы получить количество шагов до поглощения, просто сложите значения в каждой строке . Это может быть представлено(ItQt)1

t=(ItQt)11

где - вектор-столбец со всеми компонентами, равными 1.1

Давайте применим это к нашему случаю:

Как указано выше, в нашем случае мы имеем = 3 переходных состояния и = 1 поглощающего состояния, поэтому: г Q т = [ 0 1 0 1 / 3 0 2 / 3 0 2 / 3 0 ]tr

Qt=[0101/302/302/30]R=[001/3]

Матрица с ожидаемым числом посещений:

(ItQt)1=[2.54.531.54.53133]

Эту матрицу можно интерпретировать следующим образом. Начиная с состояния и до поглощения в мы в среднем посещаем 2,5 раза, 4,5 раза и 3 раза.S 0 S 3 S 2 S 1S3S0S3S2S1

Ожидаемое количество шагов от состояния до состояния задается первым компонентом следующего вектора:S 0S3S0

t=[2.54.531.54.53133][111]=[1097].

Второй и третий компоненты - это ожидаемое количество шагов к если мы начнем с и соответственно.S 0 S 2 S 1tS0S2S1


Я понятия не имею, что такое mcmc. Я должен прочитать это и затем проверить ваше решение. Есть ли хорошее объяснение mcmc, которое дополняет ваше решение?
Элизабет Сьюзан Джозеф

10
@ElizabethSusanJoseph Обратите внимание, что цепи Маркова и MCMC (цепь Маркова Монте-Карло) являются двумя различными понятиями (хотя MCMC основан на цепях Маркова). Этот ответ не использует MCMC ни для чего. Таким образом, вы, вероятно, ищете хорошее объяснение цепей Маркова, а не MCMC.
Юхо Коккала

Ваше объяснение будет улучшено путем определения и объяснения использования матрицы перехода P , значения величины r и высоты вектора столбца. Бонусные баллы за смысл последующих элементов вектора t . :)
Алексис

@JuhoKokkala - спасибо, тогда я посмотрю объяснения цепи Маркова.
Элизабет Сьюзан Джозеф

@Alexis Я добавил некоторые пояснения относительно матриц и векторов.
tiagotvv

21

Пусть x будет числом ожидаемых шагов. Пусть будет числом ожидаемых шагов от любого угла, примыкающего к источнику паука, и x 0 то же самое для муравья.x1x0

Тогда и x 0 = 1 + 2x=1+x1. Поскольку х1=1+2x0=1+23x1

x1=1+23x0+13x=1+23x0+13+13x1

мы получаем, что . Таким образом,что означает, чтои.x1=x0+2 х0=7х1=9x0=1+23x0+43x0=7x1=9

Мы получаем наш ответ как .x=10

Редактировать:

Если мы нарисуем куб с координатами то - начальная позиция паука, а - позиция муравья.111 000(x,y,z)111000

Паук может двигаться к , или .101 110011101110

По симметрии куба они должны иметь одинаковое количество ожидаемых шагов к муравью, обозначаемое . Из мы можем либо вернуться к началу координат (с вероятностью ), либо (с вероятностьюх 1 1 / 3 2 / 3 001 100 010x1x11/32/3 ) мы можем перейти к одной из точек , , зависимости от того, в каком состоянии мы находимся.001100010

Опять же, по симметрии, эти точки будут иметь такое же количество ожидаемых шагов, которое мы называем . Из этих позиций мы можем достичь цели за один шаг с вероятностью или вернуться к одной из позиций с вероятностью . Это значит, что 1 / 3 х 1 2 / 3 х 0 = 1x01/3x12/3x0=131+23(1+x1)=1+23x1 .


Не могли бы вы уточнить свой ответ? Пожалуйста, объясните в терминах непрофессионала :)
Элизабет Сьюзен Джозеф

17

Одна хорошая абстракция, чтобы думать об этом, это:

Подумайте о Позиции Муравья как и Паука , теперь каждое движение, которое может сделать паук, по существу переключит ровно один из трех компонентов с или . Таким образом, вопрос становится:( 1 , 1 , 1 ) 1 0 0 1(0,0,0)(1,1,1)1001

If I randomly switch bits in (1,1,1) after how many steps in average do I get 0,0,0

Мы видим самый короткий путь - 3 переключателя. Поскольку не имеет значения, с какого бита я начинаю, вероятность того, что это произойдет, равна 1 * 2/3 * 1/3 = 2/9. Если мы допустим 1 ошибку (переключим один бит обратно на 1), нам потребуется 5 шагов. И шансы на ошибку составляют 7/9 - если мы хотим сделать только одну ошибку, мы должны вернуться оттуда и снова все сделать правильно - так что вероятность совершить ровно 1 ошибку с 5 шагами есть, 7/9 * 2/9и шанс делать 2 ошибки ака 7 шагов (7/9)² * 2/9и так далее.

Таким образом, формула для ожидаемого среднего количества шагов:

E(steps)=n=0(3+2n)29(79)n=10

Ваше решение несколько сбивает с толку. Что это за формула? что здесь?
Элизабет Сьюзан Джозеф

5
На самом деле это самое короткое и чистое решение. Решение находится в форме бесконечной суммы чисел от нуля до бесконечности и nявляется текущим целым числом в этой бесконечной сумме.
Alesc

Это действительно мило! Мой ответ аналогичен, но разбивает последовательность переключателей на пары - что позволяет мне ожидать геометрическую переменную (или, альтернативно, суммировать геометрический ряд), а не суммировать арифметико-геометрический ряд . Это единственное существенное различие: не имеет большого значения, берете ли вы «первые три переключателя, затем последующие пары» (как вы сделали) или «сначала переключение, затем последующие пары» (как я), поскольку, если муха не поймана в 3 переключателя, то в любом случае вы имеете дело с одним нечетным и двумя четными четностями.
Серебряная

16

Просто для комплимента ответ Тиаготвв:

Я естественно не думаю о таких проблемах как о матрицах (даже если они есть). Я должен сделать это, что я сделал ниже. Вы можете видеть, что есть 3 места для перемещения из S, все из которых как. Из любого A вы можете либо вернуться к S, либо перейти к одному из двух B. Из любого B вы можете перейти к E или к одному из двух As. Все это переводит в матрицу переходов, заданную tiagotvv, которая также может быть нарисована в виде графика.

введите описание изображения здесь

Поскольку я ужасно разбираюсь в математике, я просто попытался бы смоделировать вашу проблему. Вы можете сделать это с помощью пакета markovchain в R.

  library(markovchain)
  library(ggplot2)

  # Create a markovchain object, given the states and their transition matrix

  mcCube <- new("markovchain", 
                states = c("S", "A", "B", "E"),
                transitionMatrix = matrix(data = c(0,   1,   0,   0,
                                                   1/3, 0,   2/3, 0,
                                                   0,   2/3, 0,   1/3,
                                                   0,   0,   0,   1), 
                                          byrow = T, nrow = 4),
                name = "cube")

  # The following code calcuates the probability of landing on E after taking
  # between 1 and 100 steps from the start, given the above set of transition
  # probabilities.

  start <- c(1, 0, 0, 0)

  list <- list()

  for (i in 1:100){

    list[[i]] <- (start * mcCube^i)[4] 

  }

   a <- do.call(rbind, list)

   data <- data.frame(propE = a, 
                      steps = c(1:100))

   ggplot(data, aes(x = steps, y = propE)) +
    geom_line(size = 1) +
    ylab("Probability you reached the spider") +
    xlab("Number of steps taken") +
    theme_bw() +
    theme(panel.grid.minor = element_blank())

введите описание изображения здесь

  # This code simulates 1000 different applications of the markov chain where you 
  # take 1000 steps, and records the step at which you landed on E

  list <- list()
  for (i in 1:1000) {


    b <- rmarkovchain(n = 1000, object = mcCube, t0 = "S", include.t0 = T)

    list[[i]] <- 1001 - length(b[b == "E"])

  }

  data <- as.data.frame(do.call(rbind, list))

  ggplot(data, aes(x = V1)) +
    geom_density(fill = "grey50", alpha = 0.5) +
    geom_vline(aes(xintercept = mean(V1))) +
    ylab("Density") +
    xlab("Number of steps to reach E") +
    theme_bw() +
    theme(panel.grid.minor = element_blank())

  mean(data$V1)  # ~10 is the average number of steps to reach E in this set of
                 # simulations

введите описание изображения здесь

Ответ tiagotvv может быть рассчитан в R как:

q = matrix(c(0,   1,   0,   
             1/3, 0,   2/3, 
             0,   2/3, 0), byrow = T, nrow = 3)


(solve(diag(3) - q) %*% c(1, 1, 1))[1] # = 10

11

xxxxxyz

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

xyz

(x,x),(x,y),(x,z),(y,x),(y,y),(y,z),(z,x),(z,y),or(z,z)

yz(y,z)(z,y) обеспечат нечетность всех трех четностей.

(x,x)(y,y)(z,z)yzxxyz(x,z)xy

2979

MM{1,2,3,}p=29E(M)=p1=92=4.5NMN=2M+1E(N)=2E(M)+1=2×4.5+1=10

P(Mm)=(79)m1E(M)=m=1P(Mm)E(M)=m=1(79)m1a=1r=79 a1r=117/9=12/9=92E(N)

Сравнение с марковскими цепными решениями

Как я мог определить это по матрице марковских цепных переходов? Используя обозначения @ DLDahly, состояния в матрице переходов соответствуют моему описанию числа направлений с нечетной четностью.

Охотник на пауков в кубе

Матрица одношагового перехода

P=[PSSPSAPSBPSEPASPAAPABPAEPBSPBAPBBPBEPESPEAPEBPEE]=[01001/302/3002/301/30001]

Первый ряд показывает нам, что после одного движения паук гарантированно находится в состоянии A (одна нечетная и две четные четности). Матрица двухступенчатого перехода:

P(2)=P2=[1/302/3007/902/92/904/91/30001]

7/92/9, Таким образом, достигнув состояния A, мы видим из матрицы двухступенчатого перехода, что количество требуемых двухступенчатых перемещений может быть проанализировано с использованием геометрического распределения, как указано выше. Это не то, как я нашел свое решение, но иногда стоит рассчитать первые несколько степеней матрицы перехода, чтобы посмотреть, можно ли использовать такой полезный шаблон. Иногда я обнаружил, что это дает более простые решения, чем необходимость инвертировать матрицу или выполнять собственное разложение вручную - по общему признанию, то, что действительно важно только в ситуации экзамена или собеседования.


2

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

Однако вы не определили термин «противоположный угол», поэтому у меня есть два разных сценария. Напротив как в той же плоскости или как через куб. В первом сценарии самый короткий путь - 2 шага, а во втором - 3 шага.

Я использовал 100 миллионов повторов, и результаты следующие:

-- First scenario --
Steps sum: 900019866
Repeats: 100000000
Avg. step count: 9.00019866

-- Second scenario --
Steps sum: 1000000836
Repeats: 100000000
Avg. step count: 10.00000836

Исходный код:

import java.util.Random;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.IntStream;

public class ProbabilityQuizSpider {

    // Edges of the cube
    private static final int[][] EDGES = new int[][] {
            {1, 3, 7}, // corner 0
            {0, 2, 4}, // corner 1
            {1, 3, 5}, // corner 2
            {0, 2, 6}, // corner 3
            {1, 5, 7}, // corner 4
            {2, 4, 6}, // corner 5
            {3, 5, 7}, // corner 6
            {0, 4, 6}  // corner 7
    };

    private static final int START = 0; // Spider
    private static final int FINISH = 5; // Ant
    private static final int REPEATS = (int) Math.pow(10, 8);

    public static void main(String[] args) {

        final Random r = new Random();
        final AtomicLong stepsSum = new AtomicLong();

        IntStream.range(0, REPEATS).parallel().forEach(i -> {

            int currentPoint = START;
            int steps = 0;

            do {

                // Randomly traverse to next point
                currentPoint = EDGES[currentPoint][r.nextInt(3)];

                // Increase number of steps
                steps++;

            } while(currentPoint != FINISH);

            stepsSum.addAndGet(steps);

        });

        // Results
        System.out.println("Steps sum: " + stepsSum.get());
        System.out.println("Repeats: " + REPEATS);
        System.out.println("Avg. step count: " + (((double) stepsSum.get()) / ((double) REPEATS)));

    }

}

РЕДАКТИРОВАТЬ: исправлена ​​опечатка в скрипте (а также обновлены результаты)


2
Я думаю, что ваши края не правы. Угол 3 имеет 7 в своем списке, но угол 7 не имеет 3 в своем списке. (Я полагаю, что правильный путь для сопоставления вершин с числами 0..7 состоит в том, чтобы сказать, что каждая позиция бита соответствует одной оси, так что пересечение ребра равно XOR с 1, 2 или 4.)
Гарет МакКоган,

1
Спасибо за комментарий. Я сделал опечатку при определении угла № 3, так и должно быть {0, 2, 6}. Я перезапустил программу и получил следующий результат: 10.00000836 шагов для перемещения из угла № 0 в угол № 5 (диагональ тела куба). Это также согласуется с @Hunaphu.
Alesc

Да, намного лучше.
Гарет МакКоган

2

n=104mean(steps)10

Моделирование Монте-Карло ($ n = 10 ^ 4 $)

Вот код R, который я использовал:

ant = c(0,0,0) # ant's coordinates 

sim = 1e4 # number of MC simulations
steps = numeric() # initialize array of steps

for (i in 1:sim)
{
  spider = c(1,1,1) # spider's coordinates
  count = 0 # initialize step counter

  # while ant's coordinates == spider's coordinates
  while (!isTRUE(all.equal(ant, spider)))
  {

  # random walk in one of three dimensions
  xyz = trunc(runif(1,1,4))

  # let the spider move
  if (spider[xyz] == 1) 
    {
    spider[xyz] = 0
    } else if (spider[xyz] == 0) 
    {
    spider[xyz] = 1
    }

  # add one step
  count = count + 1
  }

# add the number of step occurred in the ith iteration
steps = c(steps, count)

# print i and number of steps occurred
cat("\n", i, " ::: ", count)
}

# print the mean of steps
(mean(steps))

9
10.000001Rn.sim <- 1e6; x <- matrix(runif(n.sim*3), ncol=3); moves <- x >= pmax(x[, 1], x[, 2], x[, 3]); positions <- apply(moves, 2, cumsum) %% 2; types <- rowSums(positions); vertices <- types[types==0 | types==3]; transitions <- cumsum(diff(vertices) != 0); n.sim / transitions[length(transitions)]

-1

Я полагаю, что alesc находится на правильном пути, когда упоминает «Тем не менее, вы не определили термин« противоположный угол ». Если я не пропустил что-то в этом вопросе, нет правильного ответа, просто ответы основаны на предположениях. Размер куба не определен IE 10 кубических футов, 1000 кубических футов и т. Д. Размер муравья не определен IE маленький сад, плотник, гигантский красный и т. Д., Тип паука не определен (для определения размера шага) IE маленький сад, тарантул и т. Д. Если вы объединяете все «не определено "Переменные. Ответ может быть 0 шагов или неопределенное / бесконечное количество шагов.


3
Этот ответ не приведет к переходу на следующий уровень собеседования, если только он не будет для садоводства.
whuber

1
В этом случае достаточно ясно, что «шаг» означает «перемещение от одного узла (угла) к соседнему узлу», и совершенно ясно, что означает «противоположный угол» куба - например, возьмем единичный куб - если муравей находится в углу (x, y, z) на единичном кубе, паук находится в точке (1-x, 1-y, 1-z) (поэтому, если муравей находится в начале координат, паук находится в точке (1,1 , 1)). Таким образом, ни одна из ваших проблем, кажется, не имеет существенного отношения к задаваемому вопросу. [Примечание для избирателей: хотя я не думаю, что это хороший ответ без существенного редактирования, я не думаю, что это должно быть предметом голосования за удаление - достаточно голосов «за» и «против»]
Glen_b

@Glen_b Так как кажется, что он ищет ясности в деталях вопроса, я подумал, что это, скорее всего, задумано как комментарий, а не как содержательный ответ.
Серебряная

1
@Silverfish Вы можете быть правы, но тогда он закроется как «не ответ». Вместо этого я читаю его как попытку сказать «этот вопрос не подлежит ответственности», который я обычно расцениваю как ответ, когда подкрепляюсь рассуждениями, но я думаю, что причины просто основаны на неправильном понимании вопроса.
Glen_b
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.