12.7. Random Walks¶
The basic idea is to think about a process in terms of a series of steps. These steps are done with some degree of randomness: maybe a fixed distance in a random direction, or in a fixed direction with a random distance. In a simulation, “direction” and “distance” may not mean actual physical dimensions. In a stock market simulation random walk, a step might be a price movement from one day to the next.
However, the Python turtle makes for a great visual way to do a random walk where “direction” and “distance” refer to actual physical movement. This example does a random walk where each step involves moving 10 pixels forward in one of the cardinal directions (north, south, east, west).
To generate a random direction, we are picking a random integer from 0-3 and then multiplying
that by 90. This guarantees that the only numbers we can pick are 0, 90, 180, and 270.
Try changing line 3 to
direction = random.randrange(0, 360) and removing line 5. What
is the result?
To simulate something like the stock market, we might want to do something like the following. Try running this program and think of the x dimension as time - the far left is day 0 and each step to the right is another day - and the y dimension as value - the price of a stock.
To take steps in this program, we track the current location of the turtle. To do a
step, we increase
currentX by 2 and change
currentY by a random amount between
-10 and 10. This will mean each step moves slightly to the right and move up/down
by anywhere from -10 to 12.
One possible flaw with this program is that the change in stock prices uses a different distribution of random changes. Most days the price goes up or down by a very small amount. However, some days it climbs or drops by a lot more. Let’s figure out that logic.
This program should work like the one above. However, at each step, we want there
to be a 2% chance that the stock change up to 80 in either direction instead of just
10. To do that, we will make a variable
randValue hold a value between 1 and 100.
If that is less than or equal to 2, then we will adjust
currentY with a random
value chosen form the larger range.
Order and indent the codeblocks to build this logic. Make sure to update
currentY before you do the
Now that you have figured out the recipe, try using it in the program above. Does the graph look more like a stock market price history?