Почему Java-версия Random walk не сходится к ожидаемому значению? - PullRequest
0 голосов
/ 15 сентября 2018

По сути, я реализовал программу Random Walk в Java.И я знаю, что расстояние должно сходиться к l * (n ^ 0.5) (l - длина шага, n - общее количество шагов).Если пусть l равно 1, то d = n ^ 0.5 или другими словами: d = sqrt(n).

Но, как ни странно, хотя я не могу найти никакой ошибки в своем коде, он просто сходится к неожиданному значению,Например, если l = 1, n = 100, d должно сходиться к 10, но на самом деле оно сходится к 8.86 после 1000000 экспериментов.

Вот мой код:

public class RandomWalk {
    private int x = 0;
    private int y = 0;

    private final Random random = new Random();

    private void move(int dx, int dy) {
        x += dx;
        y += dy;
    }

    private void randomWalk(int m) {
        for (int i = 0; i < m; i++)
            randomMove();
    }

    private void randomMove() {
        boolean xOry = random.nextBoolean();
        boolean plusOrminus = random.nextBoolean();
        int delta = plusOrminus ? 1 : -1;
        int dx = xOry ? delta : 0, dy = xOry ? 0 : delta;
        move(dx, dy);
    }

    public double distance() {
        return Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
    }

    public static double randomWalkMulti(int m, int n) {
        double totalDistance = 0;
        for (int i = 0; i < n; i++){
            RandomWalk walk = new RandomWalk();
            walk.randomWalk(m);
            totalDistance += walk.distance();
        }
        return totalDistance/n ;
    }
}

Я подумал о некоторых возможностях.Сначала я думаю, что это может быть вызвано тем, что сгенерированный boolean на random имеет уклон.Во-вторых, я думаю, что это может быть вызвано потерей точности.Но так как это очень простой вариант использования, я не думаю, что эти две ситуации возможны.

Может кто-нибудь сказать мне, почему это не работает, как ожидалось?

1 Ответ

0 голосов
/ 15 сентября 2018

Не думаю, что это правда, что расстояние должно составлять в среднем √ n . Согласно https://math.stackexchange.com/questions/103142/expected-value-of-random-walk, квадрат расстояния должен усредняться до n , но это не одно и то же (поскольку среднее значение для квадратных корней из набора чисел это не то же самое, что квадратный корень из их среднего значения).

...