Marche aléatoire sur les bords d'un cube


35

Une fourmi est placée dans un coin du cube et ne peut pas bouger. Une araignée commence à partir de l'angle opposé, et peuvent se déplacer le long des bords du cube dans toutes les directions (x,y,z) avec une probabilité égale 1/3 . En moyenne, de combien de pas l'araignée aura-t-elle besoin pour se rendre à la fourmi?

(Ce n'est pas un devoir, c'était une question d'entrevue.)


7
Devoirs? Qu'avez-vous essayé jusqu'à présent?
Adrian

En ce qui concerne les chaînes de Markov, voici une excellente intro setosa.io/blog/2014/07/26/markov-chains
DL Dahly 26/02/2015

1
Normalement, ce type de livre doit être marqué avec l’ self-studyétiquette et suivre les directives de son wiki . Veuillez éditer cette question et l’inclure dans les questions similaires à venir
Glen_b -Reinstate Monica

4
@GarethMcCaughan - Non, c'était une question d'entrevue.
Elizabeth Susan Joseph

Après @alesc, j'ai créé un JavaScript Plunker. plnkr.co/edit/jYQVDI
abbaf33f

Réponses:


32

Je suggère de représenter le problème sous la forme d'une chaîne de Markov où chaque état représente la distance entre l'araignée et la fourmi. Dans ce cas, nous avons 4 états possibles car les distances i peuvent être { 0 , 1 , 2 , 3 } .Sii{0,1,2,3}

Lorsque l'araignée est au coin opposé du cube, elle se trouve à 3 pas de la fourmi. C'est dans l'état .S3

Construire la matrice de transition .P

  • Si nous dessinons un cube, nous voyons que lorsque nous sommes à l’état , chaque mouvement réduit la distance entre l’araignée et la fourmi de deux pas. Ainsi, lorsque nous sommes à l'état S 3, nous passons à l'état S 2 avec une probabilité de 1.S3S3S2

  • Lorsque nous sommes à l'état , nous pouvons revenir à l'étatS2 utilisant le bord d'où nous sommes arrivés ou nous pouvons réduire la distance à un seul pas si nous choisissons deux autres bords. Ainsi, lorsque nous sommes à l'état S 2, nous pouvons passer à l'état S 1 avec une probabilité de 2/3 et à l'état S 3 avec une probabilité de 1/3.S3S2S1S3

  • Lorsque nous sommes à l'état , nous pouvons passer à l'état S 0 en utilisant l'un des trois bords possibles. Si nous utilisons les deux autres, nous revenons à l’état S 2 . Ainsi, lorsque nous sommes à l'état S 1, nous pouvons passer à l'état S 0 avec une probabilité de 1/3 et à l'état S 2 avec une probabilité de 2/3.S1S0S2S1S0S2

  • Lorsque nous arrivons à l’état , nous y restons puisque c’est notre objectif. S 0 est un état absorbant.S0S0

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

Il s’agit d’une chaîne de Markov absorbante à trois états transitoires ( S3 , , S 1 ) et un état absorbant ( S 0 ).S2S1S0

Selon la théorie, la matrice de transition d'une chaîne de Markov avec états transitoires et r : états d' absorption peut être réécrite sous la forme P = [ Q t R 0 r × t I r ]tr

P=[QtR0r×tjer]

est une matrice t × t qui montre la probabilité de passer d'un état transitoire à un autre état transitoire, tandis que R est une matrice t × r avec les probabilités de passer de l'un des t états transitoires à l'un des r absorbants États. La matrice identité I r nous montre que lorsque l' un des r état d' absorption est atteint, il n'y a pas de transition loin de cet état. Les zéros matrix 0 r × t peut être interprété comme qu'il n'y a pas de transition de l' un des rQtt×tRt×rtrjerr0r×trétats absorbants à l’un des états transitoires.t

L' entrée de Q t représente la probabilité de passer d'un état i à un état j exactement en une étape. Pour obtenir la probabilité pour k pas, nous avons besoin de l' entrée ( i , j ) de Q k t . En sommant pour tout k , nous obtenons une matrice qui contient dans son entrée ( i , j ) le nombre attendu de visites dans l'état transitoire j après le départ de l'état transitoire i .(je,j)Qtjejk(je,j)Qtkk(je,j)jje

Σk=0Qtk=(jet-Qt)-1

Pour obtenir le nombre d'étapes jusqu'à l'absorption, additionnez simplement les valeurs de chaque ligne de . Ceci peut être représenté par(jet-Qt)-1

t=(jet-Qt)-11

est un vecteur colonne dont toutes les composantes sont égales à 1.1

Appliquons ceci à notre cas:

Comme indiqué plus haut, dans notre cas , nous avons = 3 états transitoires et r = 1 état absorbant donc: Q t = [ 0 1 0 1 / 3 0 2 / 3 0 2 / 3 0 ]tr

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

La matrice avec le nombre attendu de visites est

(jet-Qt)-1=[2,54,531,54,53133]

Cette matrice peut être interprétée comme suit. En partant de l’état et avant d’être absorbés à S 0, nous visitons en moyenne S 3 2,5 fois, S 2 4,5 fois et S 1 à 3 fois.S3S0S3S2S1

Le nombre attendu d'étapes de l'état à l'état S 0 est donné par la première composante du vecteur suivant:S3S0

t=[2,54,531,54,53133][111]=[dix97].

The second and third components of t are the expected number of steps to S0 if we start from S2 and S1 respectively.


I have no idea what mcmc is . I have to read it and then check your solution. Is there any good mcmc explanation that compliments your solution?
Elizabeth Susan Joseph

10
@ElizabethSusanJoseph Note that Markov chains and MCMC (Markov chain Monte Carlo) are two distinct concepts (although MCMC is based on Markov chains). This answer does not use MCMC for anything. So you are probably searching for a good explanation about Markov chains, not about MCMC.
Juho Kokkala

tiagotvv your explanation would be improved by defining and explaining the use of the transition matrix P, the meaning of the quantity r, and the height of the column vector. Bonus points for meaning of subsequent elements of the vector t. :)
Alexis

@JuhoKokkala - thanks I will then look at the markov chain explanations.
Elizabeth Susan Joseph

@Alexis I added some explanation regarding the matrices and vectors.
tiagotvv

21

Let x be the number of expected steps. Let x1 be the number of expected steps from any corner adjacent to the origin of the spider and x0 ditto for the ant.

Then x=1+x1 and x0=1+23x1. Since

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

we get that x1=x0+2. So x0=1+23x0+43 implying that x0=7 and x1=9.

We get our answer as x=10.

Edit:

If we draw the cube with coordinates (x,y,z) then 111 is the starting position of the spider and 000 the position of the ant.

The spider can move to either 011, 101 or 110.

By the symmetry of the cube these must have the same number of expected steps to the ant, denoted by x1. From x1, we can either return to the origin (with probability 1/3) or (with probability 2/3) we can go to one of the points 001, 100, 010 depending on which state we are in.

x01/3x12/3x0=131+23(1+x1)=1+23x1.


Could you further elaborate your answer? Please explain in layman terms :)
Elizabeth Susan Joseph

17

One nice abstraction to think of it is this:

Think of the Position of the Ant as (0,0,0) and Spider (1,1,1), now each move the spider can make will essentially switch exactly one of the three components from 10 or 01. So the question becomes:

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

We see the shortest way is 3 switches. Since it doesn't matter with which bit I start the probability of that happening is 1 * 2/3 * 1/3 = 2/9. If we make 1 mistake (switch one bit back to 1) we will need 5 steps. And the chances of making a mistake are 7/9 - if we want to make only one mistake, we have to get from there back and do everything right again - so the chance of making exactly 1 mistake resulting in 5 steps is 7/9 * 2/9 and the chance of making 2 mistakes aka 7 steps is (7/9)² * 2/9 and so on.

So the formula for the expected average number of steps is:

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

Your solution is some what confusing. What is this formula? what is n here?
Elizabeth Susan Joseph

5
It is actually the shortest and cleanest solution. The solution is in the form of an infinite sum of numbers from zero to infinity and n is the current integer in that infinite sum.
alesc

This is really nice! My answer is similar, but breaks up the sequence of switches into pairs - which lets me expectate a geometric variable (or alternatively, sum a geometric series) rather than sum an arithmetico-geometric series. That's the only substantive difference: it doesn't matter much whether one takes "first three switches, then subsequent pairs" (as you did) or "first switch, then subsequent pairs" (as I did), since unless the fly is caught in 3 switches, then either way you're dealing with one odd and two even parities.
Silverfish

16

Juste pour complimenter la réponse de tiagotvv:

Je ne pense pas naturellement à ce genre de problèmes en tant que matrices (même s’ils le sont). Je dois le dessiner, ce que j'ai fait ci-dessous. Vous pouvez voir qu'il y a 3 endroits pour passer de S, qui sont tous en tant que. De tout A, vous pouvez soit revenir au S, soit passer à l’un des deux B. De n’importe quel B, vous pouvez passer au E ou à l’un des deux As. Tout cela se traduit par la matrice de transition donnée par tiagotvv, qui peut également être dessinée sous forme de graphe.

enter image description here

Parce que je suis terrible en maths, je voudrais juste essayer de simuler votre problème. Vous pouvez le faire avec le paquet markovchain dans 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())

enter image description here

  # 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

enter image description here

La réponse de tiagotvv peut être calculée en R comme suit:

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

Parity considerations give a very clean solution, using surprisingly simple machinery: no Markov chains, no iterated expectations, and only high school level summations. The basic idea is that if the spider has moved an even number of times in the x direction, it has returned to its original x coordinate so can't be at the ant's position. If it has moved an odd number of times in the x direction, then its x coordinate matches the ant's. Only if it has moved an odd number of times in all three directions will it match the x, y and z coordinates of the ant.

Initially the spider has made zero moves in any of the three directions, so the parity for each direction is even. All three parities need to be flipped to reach the ant.

After the spider's first move (let's label that direction x), exactly one direction has odd parity and the other two (y and z) are even. To catch the ant, only those two parities need to be reversed. Since that can't be achieved in an odd number of subsequent moves, from now on we consider pairs of moves. There are nine possible combinations for the first paired move:

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

We need to move in the y and z directions to reach the ant after one paired move, and two out of nine combinations will achieve this: (y,z) and (z,y) would ensure all three parities are odd.

The other seven combinations leave one odd and two even parities. The three repeated moves, (x,x), (y,y) or (z,z), leave all parities unchanged so we still require one y and one z movement to reach the ant. The other pairs contain two distinct moves, including one in the x direction. This switches the parity of x and one of the other parities (either y or z) so we are still left with one odd and two even parities. For instance the pair (x,z) leaves us needing one more x and one more y to reach the ant: an equivalent situation (after relabelling of axes) to where we were before. We can then analyse the next paired move in the same way.

In general paired moves start with one odd and two even parities, and will either end with three odd parities (with probability 29) and the immediate capture of the ant, or with one odd and two even parities (with probability 79) which returns us to the same situation.

Let M be the number of paired moves required to reach the ant. Clearly M follows the geometric distribution on the support {1,2,3,} with probability of success p=29 so has mean E(M)=p1=92=4.5. Let N be the total number of moves required, including the initial move and the M subsequent paired moves. Then N=2M+1 so, applying linearity of expectations, E(N)=2E(M)+1=2×4.5+1=10.

Alternatively you might note P(Mm)=(79)m1 and apply the well-known formula for the mean of a discrete distribution taking only non-negative integer values, E(M)=m=1P(Mm). This gives E(M)=m=1(79)m1 which is a geometric series with first term a=1 and common ratio r=79 so has sum a1r=117/9=12/9=92. We can then take E(N) as before.

Comparison to Markov chain solutions

How might I have spotted this from the Markov chain transition matrix? Using @DLDahly's notation, the states in the transition matrix correspond to my description of the number of the number of directions with odd parity.

Spider hunting ant in cube

The one-step transition matrix is

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

The first row show us that after one movement, the spider is guaranteed to be in state A (one odd and two even parities). The two-step transition matrix is:

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

The second row shows us that once the spider has entered state A, in two moves time it has either returned to state A with probability 7/9 or has reached state E (all odd parities) and captured the ant, with probabilty 2/9. So having reached state A, we see from the two-step transition matrix that the number of two-step moves required can be analysed using the geometric distribution as above. This isn't how I found my solution, but it is sometimes worth calculating the first few powers of the transition matrix to see if a useful pattern like this can be exploited. I have occasionally found this to give simpler solutions than having to invert a matrix or perform an eigendecomposition by hand - admittedly something that is only really relevant in an exam or interview situation.


2

J'ai écrit un court programme Java pour répondre à votre question numériquement. La traversée de l'araignée est vraiment aléatoire, ce qui signifie qu'elle peut également parcourir des cycles avant d'arriver à la fourmi.

Cependant, vous n'avez pas défini le terme "coin opposé", j'ai donc deux scénarios différents. En face comme dans le même plan ou dans le cube. Dans le premier scénario, le chemin le plus court est constitué de 2 étapes et de 3 étapes dans le second scénario.

J'ai utilisé 100 millions de répétitions et les résultats sont les suivants:

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

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

Code source:

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)));

    }

}

EDIT: correction d'une faute de frappe dans le script (et mise à jour des résultats)


2
I think your edges are wrong. Corner 3 has 7 in its list, but corner 7 doesn't have 3 in its list. (I suggest that the Right Way to map the vertices to the numbers 0..7 is to say that each bit position corresponds to one axis, so that traversing an edge equals XOR with 1, 2, or 4.)
Gareth McCaughan

1
Merci pour le commentaire. J'ai fait une faute de frappe en définissant le coin n ° 3, cela devrait être {0, 2, 6}. J'ai relancé le programme et obtenu le résultat suivant: 10.00000836 étapes pour le passage du coin 0 au coin 5 (diagonale du cube). Ceci est également compatible avec @Hunaphu.
alesc

Yup, beaucoup mieux.
Gareth McCaughan

2

I solved your conundrum via Monte Carlo simulations (n=104) and obtained mean(steps)10.

Monte Carlo Simulation ($n = 10^4$)

Here is the R code I used:

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
Le code est beau et clair - mais vos utilisateurs doivent regarder un million de lignes imprimées en une demi-heure! Et comment savez-vous que la bonne réponse n’est pas, par exemple,10.000001? :-) FWIW, vous pouvez exploiter certaines Rfonctions natives pour accélérer ceci jusqu’à moins d’une seconde:n.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)]
whuber

-1

Je pense qu'Alesc est sur la bonne voie en mentionnant "Cependant, vous n'avez pas défini le terme" coin opposé ", à moins que quelque chose ne me manque dans la question, il n'y a pas de réponse correcte, juste des réponses basées sur des hypothèses. La taille du cube n'est pas définie IE 10 pieds cubes, 1000 pieds cubes etc. La taille de la fourmi n'est pas définie IE petit jardin, charpentier, rouge géant etc. Le type d'araignée n'est pas défini (pour déterminer la taille de l'étape) IE petit jardin, Tarantula etc. "variables. la réponse pourrait être 0 pas ou un nombre indéterminé / infini de pas.


3
Cette réponse ne permettrait pas d’interviewer au niveau suivant, sauf peut-être pour un poste de jardinage.
whuber

1
Dans ce cas, il est assez clair que "step" signifie "le passage d'un nœud (coin) à un nœud adjacent", et il est tout à fait clair ce que signifie "coin opposé" d'un cube - prenons un cube d'unité par exemple - si la fourmi est au coin (x, y, z) sur un cube unitaire, l'araignée est à (1-x, 1-y, 1-z) (donc si la fourmi est à l'origine, l'araignée est à (1,1 ,1)). En tant que tel, aucune de vos préoccupations ne semble avoir trait à la question posée. [Note aux électeurs: bien que je ne pense pas que ce soit une bonne réponse sans une vérification de fond, je ne pense pas que cela devrait faire l'objet d'un vote par suppression - des suffrages suffisants]
Glen_b -Reinstate Monica

@Glen_b Puisqu'il semble avoir besoin de clarté sur les détails de la question, j'ai pensé que ceci était probablement conçu comme un commentaire plutôt que comme une réponse de fond.
Silverfish

1
@ Silverfish Vous avez peut-être raison, mais alors cela serait considéré comme «pas une réponse». Je l’ai plutôt interprétée comme une tentative de dire «cette question n’est pas recevable», ce que j’appellerais normalement une réponse appuyée d’un raisonnement, mais je pense que les raisons sont simplement fondées sur une mauvaise compréhension de la question.
Glen_b -Reinstate Monica
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.