00001
00002
00003
00004
00005
00006
package org.nees.rbnb;
00007
00008
import java.util.Random;
00009
00020 public class SimpleRandomWalk {
00021
00022
private static final double MIN_VALUE = -10.0;
00023
private static final double MAX_VALUE = 10.0;
00024
private static final boolean WRAP =
true;
00025
00026
private double minValue;
00027
private double maxValue;
00028
private double current;
00029
private boolean wrap;
00030
00031
private Random source;
00032
00033
public SimpleRandomWalk()
00034 {
00035 init(MIN_VALUE,MAX_VALUE,WRAP);
00036 }
00037
00038
public SimpleRandomWalk(
double min,
double max,
boolean wrap)
00039 {
00040 init(min,max,wrap);
00041 }
00042
00043
private void init(
double min,
double max,
boolean flag) {
00044 minValue = min;
00045 maxValue = max;
00046 current = (min + max)/2.0;
00047 wrap = flag;
00048 source =
new Random();
00049 }
00050
00051
public double next()
00052 {
00053
double step = (2.0 * source.nextDouble()) - 1.0;
00054
if ((current+step) > maxValue)
00055 {
00056
if (wrap) current = minValue + ((current+step)-maxValue);
00057
else
00058 current = maxValue + (maxValue-(current+step));
00059 }
00060
else if ((current+step) < minValue)
00061 {
00062
if (wrap) current = maxValue + ((current+step)-minValue);
00063
else
00064 current = minValue + (minValue - (current+step));
00065 }
00066
else current += step;
00067
00068
return current;
00069 }
00070
00071
public static void main (String[] args)
00072 {
00073
SimpleRandomWalk w =
new SimpleRandomWalk();
00074
00075
for (
int i = 0; i < 10000; i++)
00076 {
00077 System.out.println(i +
": " + w.
next());
00078 }
00079 }
00080 }