You are a contestant on a game show. You, of all people,
have made it to the final round, where you have the chance
to win some fabulous prize- a car, a million dollars,
eternal youth, etc... The hostess of the game show takes you up
on stage, where you stand before three doors, marked "0",
"1", and "2".

"Your prize is behind one of these three doors. Behind the
other two are goats, and you don't want these goats. So,
which one will you pick?" she says. You make your selection,
and reach for the door- but before you open it, the hostess
says to you: "Alright, now I'm going to give you a choice."
She opens another one of the doors, one you didn't pick. And
sure enough, there's an ugly old goat.

The hostess then points to the other door, saying: "If you want,
you can change your mind, and pick the last door; the door
you didn't pick that I didn't open. So now, which will it
be? Your first selection? Or the other door?" You think for
a brief moment...

Which will it be? Will you stick with your first choice, or
switch to the other door? Does it matter? Do you have better
odds of winning the prize by switching or staying? Or is it
even odds either way? (We're assuming here that you want the
prize and have an aversion to goats. If you really would
prefer the goat, then the prize is the goat, and the two
other doors are empty, or contain mulch, whatever...)

This is a classic puzzle in thinking about probability. It
has several other names: the 'Monty Hall' puzzle (named after
the host of the game show this is taken from: "Let's Make a
Deal") and 'Goats-and-Car' being the two most common. The
puzzle is based around the questions being asked above,
which really boil down to one question at the heart of the
matter: which is it better to do, stay or switch?

This project is called 'three doors'. Essentially
what goes on is this: an arbitrary number of turtles (around
several hundred, usually) gather together at the bottom of 
the screen. They then begin to play this three-doors game
over and over again. The prize they can win is a
turtle-command: 'fd 1'. If they lose, nothing happens. Thus,
the turtles are having a race to the top of the screen, and
they can only advance in the race if they win a prize.

Turtles determine the results of each round of the contest
by themselves, alternately acting as contestant and host.
Also, each turtle has a 'hunch'- a percentage chance that it
will switch to the other door. The value of 'hunch'
determines a turtle's color. A turtle with a low 'hunch'
value will tend to stay with its first door, and be colored
grey, red, orange, or brown. Turtles that have around a 50% 
chance of switching will be yellow or green. Turtles that
have a larger value for 'hunch' will tend to switch more
often than they stay, and are in the upper range of StarLogo
colors- shades of blue. (No violets or pinks, because their 
StarLogo colors evaluate to numbers greater than 100, and no
turtle's 'hunch' can exceed 100.)

Before you begin playing with the model, read the paragraphs
above. Ask yourself what YOU would do- stay with your
initial pick, or switch to the other door. Why? Try to come
up with an argument for your decision. And then, think about
the alternative. Suppose you think it's 'better' to switch.
Why do you think so? How much better do you think it is? Why
might it be better to stick with your initial decision?
Think about those questions, and talk about them with some
of your peers (explain the scenario if they haven't already
heard it).

This model is quite easy to run. First, select the number of
turtles you want to be present with the NUMBER slider. (The
more, the better, but you don't want to sacrifice too much
speed.) When you are ready to begin, press the SETUP button.
This will spread turtles randomly across the bottom row of
the screen. Each turtle will be assigned a random 'hunch'
between 0 and 100 ('hunch' is described above), and its
color will be determined from this. As already mentioned,
turtles who tend to 'stay' will be grey or red, and turtles
who tend to 'switch' will be in shades of blue.

Finally, make a prediction as to how the different colors of
turtles will perform in their race. The turtles will
repeatedly play the three-doors game, until one turtle has 
made it to the top of the screen. When you are all set,
press the GO button.

The main point of this model is demonstrated by the results
of the turtles' race. Try to understand these results.
Run the model a second time, with the same value for NUMBER
and see what happens. Do you accept these results? In light
of what you have observed, ask yourself the above questions
again. Is it better for a turtle to 'play its hunch'?

Try running the model with many more turtles, or just a few
turtles. How does the number of turtles relate to the behavior?

In the first paragraph of 'How To Use It', it asks you to
discuss this puzzle with some of your peers. Important
'things to notice' are their own arguments one way or
another. How vehement were their beliefs? How sound were
their arguments? How did you react to what they said, and
how did they react to the results of this project?

The 'hostess' will always open a door that contains a goat-
we're assuming that she has perfect information about the
location of the prize. Of what importance is this to the
model? How would the model be different if she opened a
random door instead of a goat-door?

Look at the code for this model, especially if you disagree
with its results. Try to step through the procedure
'make-choices'. Do you think this procedure, and the model
as a whole, is fair?

Next, try writing your own procedure for one round of the
three-doors contest. Compare its performance with what
you've seen here.

Find someone who hasn't yet seen this model, or thought
about this problem before. Ask them for their opinion, and
listen to their argument in defense of their choice. Try not
to argue with them (yet), just hear them out. Then have them
run this model, and see what they think. If you've looked at
the code, try to explain to them what is really going on.

This model has been kept very simple for a good reason- to
allow you to expand upon it at your leisure. There are
several directions in which it could go. First of all, as
mentioned above, try writing a different set of procedures
for running a round of the contest.

Change the number of doors from three to four, or five, or
n (where 'n' could be a slider value). How will this change
the model? You also might consider having several doors lead
to prizes.

If there are 'n' doors, and 'm' different kinds of prizes,
as suggested above, you could assign different values to the
different prizes. Maybe create different breeds of turtles,
each of which has a different set of prize-values?

Regardless of what you do, always make sure to make a
prediction about what you think will happen, and to compare
the actual results with what you see.

As the turtles are all competing with one-another, it's
important that they all take the same amount of time to 'do
a round'. If you have many turtles, it's possible that some
turtles could cheat, and get ahead of the others, just by
getting through the code quicker. Thus, we make use of the
comma primitive ','. Anywhere StarLogo sees a comma, it
stalls until all turtles have caught up to that point. Use
of the comma is relatively free- if all turtles are caught
up, it will never wait an additional length of time. So any
place in your code where ensuring lockstep (i.e. making sure
that all turtles act in synchrony) just might be an issue,
drop a comma.

We'd like to run 'three doors' with as many turtles as
possible (so that we make sure we've got a large, evenly-
distributed sample). Thus speed is an issue. That is one
reason why almost all the code is turtle code. (We have to
have observer code for stopping the run when someone wins,
as 'stop' is an observer command only.) The
other reason being that the code is simplest when each
turtle plays the game with itself, as opposed to playing
against a patch, another turtle, or the observer itself. It
does no harm to have a turtle determine the prize door
itself- it cannot know what this value is when deciding
which door to pick.