У меня проблемы с написанием кода для следующего упражнения:
Напишите программу RandomWalkers.java, которая принимает два целочисленных аргумента командной строки r и trials. В каждом из пробных независимых экспериментов моделируйте случайное блуждание до тех пор, пока случайный блуждающий не окажется на манхэттенском расстоянии r от начальной точки. Выведите среднее количество шагов. Предварительный просмотр изображения здесь
Запуск программы должен выглядеть следующим образом:
~/Desktop/loops> java RandomWalkers 5 1000000
average number of steps = 14.98188
~/Desktop/loops> java RandomWalkers 5 1000000
average number of steps = 14.93918
~/Desktop/loops> java RandomWalkers 10 100000
average number of steps = 59.37386
~/Desktop/loops> java RandomWalkers 20 100000
average number of steps = 235.6288
~/Desktop/loops> java RandomWalkers 40 100000
average number of steps = 949.14712
~/Desktop/loops> java RandomWalkers 80 100000
average number of steps = 3775.7152
~/Desktop/loops> java RandomWalkers 160 100000
average number of steps = 15113.61108
Я пытался реализовать код, но довольно скептически отношусь к своей логике кода.
public class RandomWalkers {
public static void main(String [] args){
int r = Integer.parseInt(args[0]);
int trials = Integer.parseInt(args[1]);
int x = 0;
int y = 0;
int distance = 0;
int sumOfSteps = 0;
double averageSteps = 0;
int steps = 0;
for(int i = 1 ; i <=trials ; i++){
while(distance!=r){
double random = Math.random();
if(random > 0 && random < 0.25){
x = x + 1;
steps++;
}
if(random > 0.25 && random < 0.50){
x = x - 1;
steps++;
}
if(random > 0.50 && random < 0.75){
y = y + 1;
steps++;
}
if(random > 0.75 && random < 1){
y = y - 1;
steps++;
}
distance = Math.abs(x+y);
}
sumOfSteps = sumOfSteps + steps;
}
averageSteps = (double)(sumOfSteps / trials);
System.out.println("average steps" + averageSteps);
}}
Вот моя программа запуска:
~/IdeaProjects/MonteCarloSimulation/src$ java RandomWalkers 5 1000000
average steps27.0
~/IdeaProjects/MonteCarloSimulation/src$ java RandomWalkers 5 1000000
average steps7.0
Вы можете видеть, что средние шаги сильно отличаются от примера модели времени выполнения, который мне дал инструктор. Кроме того, мои средние шаги всегда относятся к целочисленному типу данных, даже если я установил, что переменная averageSteps
должна быть двойной.