A Python/Sage framework for creating rock-paper-scissors bots and testing them against one another.
Includes some examples of machine learning algorithms, described at the author's blog: http://inventingsituations.net/tag/rps/
The script is best used with iPython or Sage. All functionality should work fine in standard iPython except for the plot command for the game master, which is written with Sage in mind.
Choosing Players - There are a wide array of RPS players in the main file. Each is implemented as an individual class. The required methods for a player-bot are a
get_move method and a
get_move decides on the next move to play, and
report is called by the game master after each round to tell the bot how things played out.
rps_random is a good template to start from if you would like to make your own. Note that some bots, like
bayes, can also take arguments when initialized.
The Game Master - The
game_master class is used to pit two bots against each other. For example:
R=random_rps(); S=switchbot(); G=game_master(R,S); G.run_game(); print G.score
will initialize the players
switchbot, then play 1001 rounds of iterated rock paper scissors, then print the final score.
Tournaments - The
tournament function can be used to play a large number of games amongst a collection of bots. It will then print out the results of the tournament.
The default tournament produces the following kind of output:
sage: %time tournament() Number of players: 23 Games per player: 66 Average number of games won: 32.8 Sdev of games won: 15.5 55 | Bayes 3 53 | Rfind 50 | Bayes 5 50 | Terminator 49 | Bayes 1 49 | Bayes 4 48 | Bayes 2 47 | Frequentist 3 46 | Frequentist 4 45 | Bayes 6 36 | Michael Jackson 33 | Naive Bayes 1 28 | Randy 27 | ho0m4nbot 26 | Naive Bayes 20 21 | Freqbot 18 | Switchbot 16 | Smrt Homer 14 | Edward Scissorhands 13 | Lisa Simpson 12 | Random bias (0.11, 0.87) 10 | Bart Simpson 9 | noskcaJ leahciM CPU times: user 27.88 s, sys: 0.07 s, total: 27.95 s Wall time: 28.01 s
followed by a matrix encoding how many games were won between pairs of bots.