I'm currently using a cone-based random walk with reflections at the boundaries (denoted R[n]
), with the following properties:
R[n]
is always in a user defined range (called the boundaries)[a, b]
(or[-a, a]
if that's easier)R[0]
is defined by the user|R[n]-R[n-1]|<d
for somed <= b - a
(this is the cone property)- If the generated
R[n]
falls outside the boundaries, reflect it across the nearest boundary so that no probability mass is accumulated at the edge
You can see a visualization of this process here (R[0] is "R" in the graphic):
As you can see, the red points are reflections, and the dashed lines represent the "cone"
This is very nice process for several reasons:
- It uniformly walks the range
- It has a well defined expected value, namely
(b-a)/2
- It's not quite as chaotic as
Uni[a, b]
, which is nice for modelling real world drifts in e.g., sensor error.
However, the one flaw of this method is that to reconstruct the walk, you need to record every single point of the walk. I'd like to have a process that has these properties, but can also be regenerated using just a few initial parameters.
Is this possible?