-This model illustrates the movement of trout in a river. The 
river flows from right to left (i.e. 'upstream' is at the
right of the screen, and 'downstream' is at the left of the
screen). Rocks which jut above the water's surface are colored
brown. Deeper water is dark blue, and shallower water is light
blue. Water speed can also be observed by turning on the WATER-VIEW
switch in the interface window, which toggles the display between 
water speed and water depth. When observing the water-speed, faster
moving water is a lighter blue, while slower moving water is shaded

-Three sizes of trout inhabit our model riverbed. (Yellow fish are
the largest, red fish are of moderate size, and green fish are the
smallest.) All of these trout will seek out the ideal spots in which
to live, using a particular search routine. There are three pre-
defined search routines, to give you an idea of how trout will
react under a given search strategy. The first is to seek out the
deepest pool, the second to find the calmest pool, and the third
a combination of the two. In addition, size is a factor- larger
fish have a natural advantage because they can scare smaller fish
away from choice areas. Fish try to be the sole occupant of their

-Select the number of fish with the NUMBER slider, and press the
SETUP button. (You can press the SETUP button again and again 
until you are satisfied with the look of the riverbed.)

-Press the GO button to begin the model. If you find it is moving
too fast for you, set the SLOWDOWN? switch to 1.

-To view water-level elevation, set the WATER-VIEW switch to 0.
To view the speed of the water, set WATER-VIEW to 1.

-There are four monitors which report some information about
the riverbed. FASTEST and SLOWEST report the highest and lowest
water-speed of all the patches, and HIGHEST and LOWEST report
the maximum and minimum values of riverbed elevation.

-The first couple of times you run the model, pick out one fish, and
try to follow it as it moves around. In a model where the number of
fish is high, it can be confusing to try and watch the behavior of
the system as a whole. If your fish momentarily disappears, don't
worry- as fish compete for certain choice spots, sometimes two (or
more) fish try to move into the same patch. Another fish is probably
just sitting on top of your fish.

-Watch the activity within certain pools (dark blue patches when
viewing water-depth (WATER-VIEW set to 0). Where do the trout
settle? Does there seem to be a general guideline as to where the
water is deepest?

-Watch the interaction between different sized-trout. See if you
can find two large (yellow) fish competing for the same spot. See if
you can find a fish who has left a busy pool, and is travelling
far to find another good spot.

-With WATER-VIEW set to 1, watch how the fish settle. Toggle the
slider back and forth- which do the fish seem to prefer, deep but
fast pools, or shallow but calm pools? What do you notice about the
water-speed of the river as a whole? Where is it calmest?

-How do you think the trout are searching for deep and calm areas?
Try running the model with just one fish, or a very small amount.
The details of the search mechanism are explained below under 
'Extending the Model', and you should look at the procedures window
to best understand the algorithm.

-Increase the size of the graphics window if you can. (Select the
Settings item from the Edit menu, and modify the sliders in the
window that comes up.) Alternatively, shrink the window size. Given
a set number of fish, observe how their behavior changes in a small
or a large world.

-A related experiment is to press the SETUP button until you get
a riverbed with very few brown patches, so that the trout have a lot
of room to move around. Watch how they act. Press SETUP again, until
you have a lot of brown patches. How will the fish interact now, in
a densely-packed river?

-Try changing the NUMBER slider- add a lot of fish to the river.
How is this different from a riverbed where there are very few fish?

-The trout use the 'pick-desired-heading' procedure to pick the
direction in which they wish to move. Currently, 'pick-desired-
heading' calls another procedure, 'find-deepest-and-slowest', one of
the three search procedures included at the bottom of the procedures
window. Each trout, before swimming somewhere, looks around and
decides (according to the rules of the current search technique)
what the best patch next to it is. This model has been written so
that writing your own search procedures are easy. Look at the
three procedures 'find-deepest', 'find-slowest', and 'find-deepest-
and-slowest' and try to figure out how they work. Then see if you
can write your own simple rules for each fish. For starters, try
giving each size of fish (each breed) its own search algorithm.

-This model does not take into account the feeding patterns of 
trout.  Create a new version which includes insect life and the 
feeding patterns of the fish.  Create a new search routine which 
has the trout search for areas which provide the maximum amount 
of food.

-The model doesn't take temperature into account either. Add a
patch variable for water temperature, and incorporate it into a
search routine. Trout enjoy cool sections of rivers, and
temperatures above 78 degrees Fahrenheit will kill them. (Deeper
water is generally cooler... why is this?)

-There are many other directions this model can go, especially in
regards to the biology behind the riverbed ecosystem. For instance,
predation, both from within the system (bigger fish eating smaller
fish) and outside the system (a bear fishing for food); spawning
(which might be a good thing to include if you add predation); or
different species of fish, each perhaps with different kinds of

-If you are running this model under StarLogoT1.5, note that the
graphics window isn't square, as in previous versions of
StarLogo. StarLogoT1.5 now implements these 'rectangular patch
worlds'. You can set the size and shape of the graphics window by
selecting the Settings item from the Edit menu above.

-For the 'riverbed' model, we wanted the water-speed variable value
to propagate backwards from right to left. Normal StarLogo patch
parallelism prevents us from simply saying: 
	if (xcor = screen-edge-x) [setwater-speed 1000]
	setwater-speed (water-speed-at 1 0 + (random 10))

because each patch, including the patches at the edges, will
simultaneously set their values to that of their neighbor. (Hence
water-speed will be 0 for each patch.) Thus, there is the special
procedure 'setup-currents', which uses the patch variable 'speed-
set-counter'. We have a repeat loop that repeats a number of times
equal to the screen-size, incrementing the speed-set-counter each
time through the loop, and only set water-speed when the patches'
xcor is equal to speed-set-counter.

-The 'robots' model is another example of using distributed search
techniques to help learn how to write StarLogo programs. You can
find this model in the 'Systems and Computer Science' folder in the
Sample Projects folder that came with StarLogoT. If you don't have
this model, please download it at:

-At the Computer Museum in Boston, MA, the Virtual Fishtank exhibit
opened on June 13, 1998. Designed by Mitch Resnick and the MIT Media
Lab, the Virtual Fishtank allows you to design your own fish, write
rules for its behavior, and see how it interacts in a virtual
environment containing 100 other fish. (Similar, but more in-depth
than, this riverbed model.) For more details, please visit the
Computer Museum's Virtual Fishtank website at: