Zufälliges Gehen an den Rändern eines Würfels


35

Eine Ameise befindet sich in einer Ecke eines Würfels und kann sich nicht bewegen. Eine Spinne beginnt an der gegenüberliegenden Ecke und kann sich mit der gleichen Wahrscheinlichkeit entlang der Würfelkanten in jede Richtung bewegen . Wie viele Schritte braucht die Spinne im Durchschnitt, um zur Ameise zu gelangen?1 / 3(x,y,z)1/3

(Dies ist keine Hausaufgabe, es war eine Interviewfrage.)


7
Hausaufgaben? Was hast du bisher versucht?
Adrian

In Bezug auf Markov-Ketten, hier ist ein großartiges Intro setosa.io/blog/2014/07/26/markov-chains
DL Dahly

1
Normalerweise sollte diese Art von routinemäßiger Bucharbeit mit dem self-studyTag gekennzeichnet sein und den Richtlinien im Tag-Wiki folgen . Bitte bearbeiten Sie diese Frage und
fügen Sie

4
@GarethMcCaughan - Nein, es war eine Interviewfrage.
Elizabeth Susan Joseph

Nach @alesc habe ich einen JavaScript-Plunker erstellt. plnkr.co/edit/jYQVDI
abbaf33f

Antworten:


32

Ich schlage vor, das Problem als Markov-Kette zu modellieren, bei der jeder Zustand die Entfernung zwischen der Spinne und der Ameise darstellt. In diesem Fall haben wir 4 mögliche Zustände wie die Abstände kann . i { 0 , 1 , 2 , 3 }Sii{0,1,2,3}

Wenn sich die Spinne in der gegenüberliegenden Ecke des Würfels befindet, befindet sie sich in einem Abstand von 3 Schritten von der Ameise. Es befindet sich im Zustand .S3

Aufbau der Übergangsmatrix .P

  • Wenn wir einen Würfel zeichnen, sehen wir, dass im Zustand jede Bewegung den Abstand zwischen der Spinne und der Ameise auf 2 Stufen verringert. Wenn wir uns also im Zustand , bewegen wir uns mit Wahrscheinlichkeit 1 zum Zustand .S 3 S 2S3S3S2

  • Wenn wir uns im Zustand , können wir mit der von dort angekommenen Kante in den Zustand oder den Abstand auf nur einen Schritt verringern, wenn wir zwei andere Kanten auswählen. Wenn wir uns also im Zustand , können wir mit Wahrscheinlichkeit 2/3 in den Zustand und mit Wahrscheinlichkeit 1/3 in den Zustand übergehen.S 3 S 2 S 1 S 3S2S3S2S1S3

  • Wenn wir uns im Zustand , können wir mit einer der drei möglichen Kanten in den Zustand . Wenn wir die anderen beiden verwenden, wir zum Zustand . Wenn wir uns also im Zustand , können wir mit einer Wahrscheinlichkeit von 1/3 in den Zustand und mit einer Wahrscheinlichkeit von 2/3 in den Zustand übergehen.S 0 S 2 S 1 S 0 S 2S1S0S2S1S0S2

  • Wenn wir den Zustand , bleiben wir dort, da dies unser Ziel ist. ist ein absorbierender Zustand.S 0S0S0

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

Dies ist eine absorbierende Markov-Kette mit drei Übergangszuständen ( , , ) und einem absorbierenden Zustand ( ).S 2 S 1 S 0S3S2S1S0

Nach der Theorie wird die Übergangsmatrix von einer Markov - Kette mit transienten Zustände und können absorbierende Zustände neu geschrieben werden als: r P = [ Q t R 0 r × t I r ]tr

P=[QtR0r×tIr]

Dabei ist eine Matrix, die die Wahrscheinlichkeit eines Übergangs von einem Übergangszustand in einen anderen Übergangszustand , während eine Matrix mit der Wahrscheinlichkeit eines Übergangs von einer der ist die Übergangszustände in einen der Absorptionszustände. Die Identitätsmatrix zeigt uns, dass es, wenn einer der absorbierenden Zustände erreicht ist, keinen Übergang von diesem Zustand weg gibt. Die Matrix aus Nullen kann interpretiert werden , dass es keinen Übergang von einem der ist Staaten jedem der absorbierenden t×t R t×rtr I r r 0 r × t rtQtt×tRt×rtrIrr0r×trt Übergangszustände.

Der -Eintrag von repräsentiert die Wahrscheinlichkeit des Übergangs von einem Zustand in einen Zustand in genau einem Schritt. Um die Wahrscheinlichkeit für Schritte zu erhalten, benötigen wir den Eintrag von . Summiert man für alle , so erhält man eine Matrix, die in ihrem -Eintrag die erwartete Anzahl von Besuchen des Übergangszustands nach dem Start des Übergangszustands .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

Um die Anzahl der Schritte bis zur Absorption zu erhalten, einfach die Werte jeder Zeile von . Dies kann durch dargestellt werden(ItQt)1

t=(ItQt)11

Dabei ist ein Spaltenvektor, bei dem alle Komponenten gleich 1 sind.1

Wenden wir dies auf unseren Fall an:

Wie oben angegeben, haben wir in unserem Fall = 3 Übergangszustände und = 1 Absorptionszustand, daher: r Q t = [ 0 1 0 1 / 3 0 2 / 3 0 2 / 3 0 ]tr

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

Die Matrix mit der erwarteten Anzahl von Besuchen lautet

(ItQt)1=[2.54.531.54.53133]

Diese Matrix kann wie folgt interpretiert werden. Ausgehend von Zustand und bevor wir bei , besuchen wir durchschnittlich 2,5-mal, 4,5-mal und 3-mal.S 0 S 3 S 2 S 1S3S0S3S2S1

Die erwartete Anzahl von Schritten vom Zustand zum Zustand ist durch die erste Komponente des folgenden Vektors gegeben:S 0S3S0

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

Die zweite und dritte Komponente von ist die erwartete Anzahl von Schritten zu wenn wir von bzw. .S 0 S 2 S 1tS0S2S1


Ich habe keine Ahnung, was mcmc ist. Ich muss es lesen und dann deine Lösung überprüfen. Gibt es eine gute Erklärung für mcmc, die Ihre Lösung ergänzt?
Elizabeth Susan Joseph

10
@ElizabethSusanJoseph Beachten Sie, dass Markov-Ketten und MCMC (Markov-Kette Monte Carlo) zwei unterschiedliche Konzepte sind (obwohl MCMC auf Markov-Ketten basiert). Diese Antwort verwendet MCMC für nichts. Sie suchen also wahrscheinlich nach einer guten Erklärung für Markov-Ketten, nicht für MCMC.
Juho Kokkala

Um Ihre Erklärung zu verbessern, definieren und erklären Sie die Verwendung der Übergangsmatrix P , die Bedeutung der Größe r und die Höhe des Spaltenvektors. Bonuspunkte für die Bedeutung nachfolgender Elemente des Vektors t . :)
Alexis

@JuhoKokkala - danke ich werde mir dann die markov ketten erklärungen ansehen.
Elizabeth Susan Joseph

@Alexis Ich habe einige Erläuterungen zu den Matrizen und Vektoren hinzugefügt.
Tiagotvv

21

Sei die Anzahl der erwarteten Schritte. Sei die Anzahl der erwarteten Schritte von jeder Ecke neben dem Ursprung der Spinne und dito für die Ameise.x 1 x 0xx1x0

Dann ist und . Da x 0 = 1 + 2x=1+x1x1=1+2x0=1+23x1

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

wir bekommen das . Also ist was bedeutet, dass und .x 0 = 1 + 2x1=x0+2 ×0=7×1=9x0=1+23x0+43x0=7x1=9

Wir bekommen unsere Antwort als .x=10

Bearbeiten:

Wenn wir den Würfel mit Koordinaten zeichnen ist die Startposition der Spinne und die Position der Ameise.111 000(x,y,z)111000

Die Spinne kann sich entweder auf , oder bewegen .101 110011101110

Aufgrund der Symmetrie des Würfels müssen diese die gleiche Anzahl erwarteter Schritte zur Ameise haben, die mit bezeichnet wird . Von können wir entweder zum Ursprung zurückkehren (mit einer Wahrscheinlichkeit von ) oder (mit einer Wahrscheinlichkeit von ) zu einem der Punkte , , je nachdem in welchem ​​Zustand wir uns befinden.x 1 1 / 3 2 / 3 001 100 010x1x11/32/3001100010

Aus Symmetriegründen haben diese Punkte wieder die gleiche Anzahl erwarteter Schritte, die wir nennen . Von diesen Positionen aus können wir mit Wahrscheinlichkeit das Ziel in einem Schritt erreichen oder mit Wahrscheinlichkeit zu einer der Positionen zurückkehren . Dies bedeutet, dass . 1 / 3 x 1 2 / 3 x 0 = 1x01/3x12/3x0=131+23(1+x1)=1+23x1


Könnten Sie Ihre Antwort weiter ausarbeiten? Bitte erklären Sie in Laienbegriffen :)
Elizabeth Susan Joseph

17

Eine schöne Abstraktion ist folgende:

Stellen Sie sich die Position der Ameise als und Spinne . Jetzt schaltet jede Bewegung der Spinne genau eine der drei Komponenten von oder . Die Frage lautet also:( 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

Wir sehen, der kürzeste Weg sind 3 Schalter. Da es egal ist, mit welchem ​​Bit ich beginne, ist die Wahrscheinlichkeit, dass das passiert 1 * 2/3 * 1/3 = 2/9. Wenn wir 1 Fehler machen (ein Bit zurück auf 1 schalten), brauchen wir 5 Schritte. Und die Chance, einen Fehler zu machen, ist 7/9 - wenn wir nur einen Fehler machen wollen, müssen wir von dort zurück und alles wieder richtig machen -, also ist die Chance, genau einen Fehler zu machen, der in 5 Schritten resultiert, 7/9 * 2/9und die Chance 2 Fehler aka 7 Schritte zu machen ist (7/9)² * 2/9und so weiter.

Die Formel für die erwartete durchschnittliche Anzahl von Schritten lautet also:

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

Ihre Lösung ist etwas verwirrend. Was ist diese Formel? Was ist n hier?
Elizabeth Susan Joseph

5
Es ist eigentlich die kürzeste und sauberste Lösung. Die Lösung liegt in Form einer unendlichen Summe von Zahlen von null bis unendlich vor und nist die aktuelle ganze Zahl in dieser unendlichen Summe.
Alesc

Das ist wirklich schön! Meine Antwort ist ähnlich, teilt aber die Folge von Schaltern in Paare auf - wodurch ich eine geometrische Variable erwarten (oder alternativ eine geometrische Reihe summieren) anstatt eine arithmetisch-geometrische Reihe zu summieren . Das ist der einzige wesentliche Unterschied: Es spielt keine Rolle, ob man "die ersten drei Schalter, dann die nachfolgenden Paare" (wie Sie) oder "die ersten Schalter, dann die nachfolgenden Paare" (wie ich) nimmt, es sei denn, die Fliege wird gefangen In 3 Schaltern haben Sie es dann mit einer ungeraden und zwei geraden Paritäten zu tun.
Silberfischchen

16

Nur um die Antwort von tiagotvv zu beglückwünschen:

Ich sehe solche Probleme natürlich nicht als Matrizen (obwohl sie es sind). Ich muss es herausziehen, was ich unten getan habe. Sie können sehen, dass es 3 Orte gibt, an denen Sie sich von S aus bewegen können. Alle sind As. Von jedem A können Sie entweder zum S zurückkehren oder zu einem von zwei Bs wechseln. Von jedem B können Sie zum E oder zu einem von zwei As wechseln. Dies alles übersetzt sich in die durch tiagotvv gegebene Übergangsmatrix, die auch in graphischer Form gezeichnet werden kann.

Bildbeschreibung hier eingeben

Da ich in Mathe schrecklich bin, würde ich nur versuchen, Ihr Problem zu simulieren. Sie können dies mit dem markovchain-Paket in R tun.

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

Bildbeschreibung hier eingeben

  # 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

Bildbeschreibung hier eingeben

Die Antwort von tiagotvv kann in R wie folgt berechnet werden:

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

Paritätsüberlegungen ergeben eine sehr saubere Lösung, bei der überraschend einfache Maschinen zum Einsatz kommen: keine Markov-Ketten, keine wiederholten Erwartungen und nur Hochschulsummen. Die Grundidee ist, dass die Spinne, wenn sie sich eine gerade Anzahl von Malen in der Richtung bewegt hat, zu ihrer ursprünglichen Koordinate zurückgekehrt ist und sich daher nicht an der Position der Ameise befinden kann. Wenn es sich ungerade oft in Richtung bewegt hat , stimmt seine Koordinate mit der der Ameise überein. Nur wenn es sich ungerade oft in alle drei Richtungen bewegt hat, stimmt es mit den , und Koordinaten der Ameise überein .x x x x y zxxxxxyz

Anfänglich hat die Spinne keine Bewegungen in eine der drei Richtungen ausgeführt, sodass die Parität für jede Richtung gleichmäßig ist. Alle drei Paritäten müssen umgedreht werden, um die Ameise zu erreichen.

Nach der ersten Bewegung der Spinne (beschriften wir diese Richtung mit ) hat genau eine Richtung eine ungerade Parität und die anderen beiden ( und ) sind gerade. Um die Ameise zu fangen, müssen nur diese beiden Paritäten umgekehrt werden. Da dies in einer ungeraden Anzahl aufeinanderfolgender Züge nicht möglich ist, betrachten wir ab sofort Paare von Zügen. Es gibt neun mögliche Kombinationen für den ersten gepaarten Zug:y zxyz

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

Wir müssen uns in und Richtung bewegen, um die Ameise nach einem gepaarten Zug zu erreichen, und zwei von neun Kombinationen werden dies erreichen: und würden sicherstellen, dass alle drei Paritäten ungerade sind.yz(y,z)(z,y)

Die anderen sieben Kombinationen ergeben eine ungerade und zwei gerade Paritäten. Die drei wiederholten Züge , oder lassen alle Paritäten unverändert, sodass wir immer noch eine und eine Bewegung benötigen , um die Ameise zu erreichen. Die anderen Paare enthalten zwei unterschiedliche Züge, darunter einen in Richtung. Dies ändert die Parität von und einer der anderen Paritäten (entweder oder ), so dass wir immer noch eine ungerade und zwei gerade Paritäten haben. Zum Beispiel benötigt das Paar ein weiteres und ein weiteres(x,x)(y,y)(z,z)yzxxyz(x,z)xyum die Ameise zu erreichen: eine äquivalente Situation (nach dem Umetikettieren von Äxten) wie zuvor. Wir können dann den nächsten gepaarten Zug auf die gleiche Weise analysieren.

Im Allgemeinen beginnen gepaarte Züge mit einer ungeraden und zwei geraden Paritäten und enden entweder mit drei ungeraden Paritäten (mit Wahrscheinlichkeit ) und der sofortigen Erfassung der Ameise oder mit einer ungeraden und zwei geraden Paritäten ( mit der Wahrscheinlichkeit ), die uns zur gleichen Situation zurückbringt.2979

Sei die Anzahl der paarweisen Züge, die erforderlich sind, um die Ameise zu erreichen. Es ist klar, dass der geometrischen Verteilung auf dem Träger mit Erfolgswahrscheinlichkeit folgt, also bedeutet . Lassen die Gesamtzahl von Zügen erforderlich sein, einschließlich der anfänglichen Bewegung und die nachfolgende gepaarte bewegt. Dann ist , und unter Anwendung der Linearität der Erwartungen ist .MM{1,2,3,}p=29E(M)=p1=92=4.5NMN=2M+1E(N)=2E(M)+1=2×4.5+1=10

Alternativ können Sie notieren und die bekannte Formel für den Mittelwert einer diskreten Verteilung anwenden, wobei nur nicht negative ganzzahlige Werte verwendet werden. . Dies ergibt , eine geometrische Reihe mit dem ersten Term und gemeinsam Das Verhältnis also die Summe . Wir können dann wie bisher .P(Mm)=(79)m1E(M)=m=1P(Mm)E(M)=m=1(79)m1a=1r=79 a1r=117/9=12/9=92E(N)

Vergleich mit Markov-Kettenlösungen

Wie hätte ich das aus der Markov-Kettenübergangsmatrix ersehen können? Unter Verwendung der @ DLDahly-Notation entsprechen die Zustände in der Übergangsmatrix meiner Beschreibung der Anzahl der Richtungen mit ungerader Parität.

Spinnenjagdameise im Würfel

Die einstufige Übergangsmatrix ist

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

Die erste Reihe zeigt uns, dass sich die Spinne nach einer Bewegung garantiert im Zustand A befindet (eine ungerade und zwei gerade Paritäten). Die zweistufige Übergangsmatrix lautet:

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

Die zweite Reihe zeigt uns, dass die Spinne, sobald sie in den Zustand A eingetreten ist, in zwei Zügen entweder mit einer Wahrscheinlichkeit von in den Zustand A zurückgekehrt ist oder den Zustand E (alle ungeraden Paritäten) erreicht hat und die Ameise mit einer Wahrscheinlichkeit von gefangen hat . Wenn wir also den Zustand A erreicht haben, sehen wir aus der zweistufigen Übergangsmatrix, dass die Anzahl der erforderlichen zweistufigen Bewegungen unter Verwendung der oben angegebenen geometrischen Verteilung analysiert werden kann. So habe ich meine Lösung nicht gefunden, aber manchmal lohnt es sich, die ersten Potenzen der Übergangsmatrix zu berechnen, um zu sehen, ob ein nützliches Muster wie dieses ausgenutzt werden kann. Ich habe gelegentlich festgestellt, dass dies einfachere Lösungen bietet, als eine Matrix umzukehren oder eine Neukomposition von Hand durchzuführen - zugegebenermaßen etwas, das nur in einer Klausur- oder Interview-Situation wirklich relevant ist.2 / 97/92/9


2

Ich habe ein kurzes Java-Programm geschrieben, um Ihre Frage numerisch zu beantworten. Das Überqueren der Spinne ist wirklich zufällig, was bedeutet, dass sie auch in Zyklen überqueren kann, bevor sie zur Ameise gelangt.

Sie haben den Begriff "gegenüberliegende Ecke" jedoch nicht definiert, daher habe ich zwei verschiedene Szenarien. Entgegengesetzt wie in derselben Ebene oder quer zum Würfel. Im ersten Szenario beträgt der kürzeste Pfad 2 Schritte und im zweiten Szenario 3 Schritte.

Ich habe 100 Millionen Wiederholungen verwendet und die Ergebnisse sind die folgenden:

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

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

Quellcode:

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

    }

}

BEARBEITEN: Tippfehler im Skript behoben (und auch die Ergebnisse aktualisiert)


2
Ich denke, deine Kanten sind falsch. Ecke 3 hat 7 in seiner Liste, aber Ecke 7 hat 3 nicht in seiner Liste. (Ich schlage vor, dass der richtige Weg, um die Eckpunkte den Zahlen 0..7 zuzuordnen, darin besteht, dass jede Bitposition einer Achse entspricht, sodass das Überqueren einer Kante XOR mit 1, 2 oder 4 entspricht.)
Gareth McCaughan

1
Danke für deinen Kommentar. Ich habe einen Tippfehler gemacht, als ich Ecke 3 definiert habe, das sollte es sein {0, 2, 6}. Ich habe das Programm erneut ausgeführt und das folgende Ergebnis erhalten: 10.00000836 Schritte zum Überqueren von Ecke 0 zu Ecke 5 (Körperdiagonale des Würfels). Dies stimmt auch mit @Hunaphu überein.
Alesc

Ja, viel besser.
Gareth McCaughan

2

Ich habe Ihr Rätsel durch Monte-Carlo-Simulationen gelöst ( ) und .m e a n ( s t e p s )10n=104meeinn(steps)10

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

Hier ist der R-Code, den ich verwendet habe:

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
Der Code ist nett und klar - aber er fordert Ihre Benutzer auf, sich eine Million Zeilen anzusehen, die innerhalb einer halben Stunde ausgedruckt wurden! Und woher wissen Sie, dass die richtige Antwort nicht beispielsweise ? :-) FWIW, Sie können einige native Funktionen nutzen, um dies in 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)]
weniger als

-1

Ich glaube, dass alesc auf dem richtigen Weg ist, wenn er "Allerdings haben Sie den Begriff" gegenüberliegende Ecke "nicht definiert. Wenn ich in der Frage nichts vermisse, gibt es keine richtige Antwort, nur Antworten auf der Grundlage von Annahmen. Die Würfelgröße ist nicht definiert IE 10 Kubikfuß, 1000 Kubikfuß usw. Ameisengröße ist nicht definiert IE kleiner Garten, Zimmermann, Riesenrot usw., Spinnenart ist nicht definiert (zur Bestimmung der Schrittgröße) IE kleiner Garten, Vogelspinne usw. WENN Sie alle kombinieren "nicht definiert "Variablen. Die Antwort könnte 0 Schritte oder eine unbestimmte / unendliche Anzahl von Schritten sein.


3
Diese Antwort würde einen nicht auf die nächste Ebene der Befragung bringen, wenn es nicht vielleicht eine Gartenarbeitsposition gäbe.
Whuber

1
In diesem Fall ist es klar genug, dass "Schritt" "eine Bewegung von einem Knoten (Ecke) zu einem benachbarten Knoten" bedeutet, und es ist ziemlich klar, was "gegenüberliegende Ecke" eines Würfels bedeutet - nehmen Sie zum Beispiel einen Einheitswürfel - wenn Die Ameise befindet sich an der Ecke (x, y, z) eines Einheitswürfels. Die Spinne befindet sich bei (1-x, 1-y, 1-z). Wenn sich die Ameise also am Ursprung befindet, befindet sich die Spinne bei (1,1 1)). Insofern scheint sich keines Ihrer Anliegen inhaltlich auf die gestellte Frage zu beziehen. [Hinweis an die Wähler: Ich denke, dies ist keine gute Antwort ohne eine inhaltliche Änderung, aber ich denke nicht, dass dies Gegenstand einer Löschungsabstimmung sein sollte - hoch und runter genügen Abstimmungen]
Glen_b

@ Glen_b Da es zu sein scheint, Klarheit über die Einzelheiten der Frage zu suchen, dachte ich, dass dies wahrscheinlich eher als Kommentar als als inhaltliche Antwort gedacht war.
Silverfish

1
@Silverfish Sie können richtig sein, aber dann würde es als "keine Antwort" schließen. Ich lese es stattdessen als Versuch zu sagen, dass "diese Frage nicht beantwortbar ist", was ich normalerweise als Antwort betrachte, wenn es mit Argumenten untermauert wird, aber ich denke, die Gründe beruhen einfach auf einem Missverständnis der Frage.
Glen_b -Reinstate Monica
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.