JELLYFISH 3.5 DICE ALGORITHM
This memo is for the information of anyone who has inquired about the
Jellyfish dice generation method. It explains how Jellyfish generates the
random dice throws that it displays, and how you can verify that the dice
are not generated to benefit the computer.
HOW DICE ARE GENERATED
Like all programs which require a steady stream of random numbers to
operate, Jellyfish uses a sub-program called a "pseudo-random-number"
generator. This is a mathematical routine which produces a series of
numbers that behave just like the numbers you would get by rolling
precision dice for a long time. Over a long sequence, all numbers appear
with equal frequency, and an outside observer cannot predict a future
number from looking at a series of past numbers.
The numbers are generated as follows: when a new game is begun, Jellyfish
queries the computer's internal clock and gets the current time to within
a hundredth of a second. The time is converted into a number between 0
and 32,767, which is known as the "seed". (You can view the
last-generated seed from within Jellyfish by clicking on Settings | Seed.)
Once the seed is established, a mathematical function is applied which
generates pairs of numbers between 1 and 6, which are the dice rolls for
the current game. When a new game is started, a new seed is generated and
the process begins again.
VERIFYING THE SEQUENCE OF DICE
One way to verify that Jellyfish is not generating dice to its own
advantage is to note the value of the seed at the beginning of each game
you play. If you believe Jellyfish was particularly lucky in a certain
game, start a new game, manually set the seed value to the seed value of
the previous game, and notice that the sequence of dice throws for both
sides is exactly the same. In other words, the dice sequence is not
dependent on the board position, but only on the seed used to start the
game.
USING MANUAL DICE
Another option you have is to bypass Jellyfish's dice generator entirely
and roll the dice manually. To use this feature, click on "Settings" and
then click on "Manual Dice". Jellyfish will now prompt you to enter the
dice rolls for both sides as the game goes on.
JELLYFISH'S PLAYING STRENGTH
Jellyfish is an extremely strong opponent, and on its highest setting
(level 7), plays at a level just slightly below the very best human
players. Unless you are a world-class player, most likely already making
a good living from the game, you should not be able to beat Jellyfish
consistently on level 7.
In our experience, many people who complain about Jellyfish's "luck" have
never had the experience of playing a truly strong opponent. Those who
play well appear lucky because they create positions where more of their
own rolls play well, while more of their opponent's rolls play badly. The
effect of this is that the strong player appears to roll better.
MORE DISCUSSION
The issue of computers and dice-rolling algorithms has been extensively
discussed in the backgammon newsgroup, "rec.games.backgammon". To access
past discussion, use the "Deja News" search engine.
Bill Robertie
The Gammon Press
=======
METHOD FOR VERIFYING THAT JELLYFISH DOES NOT GENERATE DICE ROLLS TO ITS
OWN ADVANTAGE
Record Jellyfish's current "seed" setting.
Play a game against Jellyfish, recording all the dice rolls and moves for
each side,
Reset the seed to its previous starting value.
Play a new game. The initial dice roll will be the same as before. When
ot is your turn to play your first move, make a completely different play
from the previous game. Do the same on your second move, then play
normally.
Record all the rolls and moves of this second game.
Notice that although Jellyfish is now faced with completely different
positions than before, the sequence of dice rolls is exactly the same. It
is not giving itself different numbers to benefit from the changed
situations. The dice rolls are entirely determined by the opening seed.
METHOD FOR VERIFYING THAT JELLYFISH DOES NOT TAKE UPCOMING ROLLS INTO
ACCOUNT IN DETERMINING ITS PLAYS
Since the sequence of rolls in the game is determined by the initial seed,
you might believe that Jellyfish adjusts its plays to take advantage of
upcoming rolls. Here's how to verify that this is not happening.
Play a game (or several games) against JF and record the rolls and moves.
(The simplest way to do this is to save each game as a *.gam file and
print it when the game is done.)
Pick a game where you think JF must have cheated because of its good luck.
Set up each of JF's positions in the game and, using the "Best Moves"
option, query as to what it thinks the best move is for the roll it had.
Note that it always made the best which its evaluation function thought
was best, not a play tailored to take advantage of upcoming rolls.