This game continues from the alternate timeline here where I made two mistakes in the game engine.
Bots were passed their own previous move and told it was their opponent’s previous move.
Bots were always given 0 as the round index instead of the correct positive integer.
CloneBots
Multiple people havenoted that CliqueZviBot is outperforming the other CloneBots. This is due to how the CloneBot code interacts with the bugs in the my engine.
The CloneBots still cooperate, but they do so imperfectly. All CloneBot pairings result in 200-300 splits instead of 250-250 splits. The CloneBots use source code parity combined with round number parity to determine who wins the 200-300 split. Therefore if CloneBotA and CloneBotB get a 200-300 split in favor of CloneBotB then they will always get a 200-300 split in favor of CloneBotB.
Rounds 11-30
Round 11
Looking at the obituary I suspect that CooperateBot may not last much longer.
― Prediction by Larks after seeing the results from Rounds 1 to 10
Larks’ CooperateBot died on round 11.
Round 12
PasswordBot from Team Multics died along with “Why can’t we all just get along” from Chaos Army and an NPC.
Round 13
No casualties.
Round 14
6 bots died.
BeauBot, OscillatingTwoThreeBot, RandomOrGreedyBot and SimplePatternFinderBot from Chaos Army
“Definitely Not Collusion Bot” from Team Multics. Multicore’s fodder has been consumed. Team Multics contains only the MimicBot from here on.
1 NPC
Round 15
5 bots died.
Silly Invert Bot 2, AttemptAtFair, Insum’s CooperateBot, MeasureBot and “Random-start-turn-taking” from Chaos Army
1 NPC
MeasureBot had succeeded in infecting AbstractSpyTreeBot’s move method and replacing it with return 0. AbstractSpyTreeBot ought perform better with MeasureBot out of the game.
Round 16
3 bots from Chaos Army died
“Silly Counter Invert Bot”
LiamGoddard
“Pure TFT”
Rounds 17-22
4 NPCs died
Round 23
BendBot and Copoperater [sic] died. BendBot belonged to Zvi. CliqueZviBot does not actually belong to Zvi. It is named after Zvi’s strategy from the original name.
Round 24
No casualties.
Round 25
Copybot Deluxe died.
Round 26
RaterBot died. RaterBot performed semantic analysis on its opponents’ source code. This may have contributed to breaking the symmetry of the clones.
Round 27
No casualties.
Round 28
Empiricist died. Empiricist was the most complicated bot I agreed to write the code for. The bot is exemplar of a precise, well-written spec of a clever algorithm.
On the first round, Empiricist plays 2. On any subsequent round, it examines the history against the current opponent so far. Let’s denote it (x1,y1)…(xn,yn), where xi are Empiricist’s plays, yi are the opponent’s plays and n is the number of rounds played so far. The algorithm is as follows
Step 0: Compute Empiricist’s total score so far (denote s) and the opponent’s total score so far (denote t). If t>s+5, then Empiricist plays 3. Otherwise, continue to the following steps.
Step 1: Compute the maximal number m s.t. the last m rounds of the game are a repetition of some previous sequence. That is, m is maximal s.t. there exists k with k+m≤n s.t. the sequence (xk,yk)…(xk+m−1,yk+m−1) is identical to the sequence (xn−m+1,yn−m+1)…(xn,yn). If no m>0 satisfies this property, set m=0.
Step 2: Find the latest subsequence among previous repetitions, that is, the maximal k that satisfies the property above w.r.t. the chosen m. If m=0, set k=n.
Step 4: Examine y:=yk+m. If y<5, Empiricist plays 5-y. If y=5, Empiricist plays 2.
Round 29
1 NPC died.
Round 30
No casualties.
Summary of Rounds 11-30
Everything so far
List of Survivors
The CloneBots and the MimicBot are all still alive.
Bot
Population
EarlyBirdMimicBot
1013
Akrasia Bot
950
A Very Social Bot
916
CliqueZviBot
907
Clone wars, episode return 3
888
a_comatose_squirrel
423
incomprehensibot
221
KarmaBot
48
CloneBot
8
Two bots from Chaos Army survived this first ¼ of Order 66.
Bot
Population
AbstractSpyTreeBot
15
Winner against low constant bots
5
One NPC survived too. Silly 2 Bot always returns 2.
Bot
Population
Silly 2 Bot
5
In early tests of the game, I discovered that sometimes bots got stuck at a population of 2 from which they never died nor recovered. I added custom code to finish off any bot with a population of 2 or less. Any bot whose population drops to 2 or less will die.
Multicore’s Mystery
Multicore is in first place. But Multicore should not just be in first place. As the sole traitor among the CloneBots, Multicore’s MimicBot should be dominating this competition. Plus, as a simulator, it should be able to cooperate on the first turn despite receiving misinformation about its opponent’s previous move. I suspect that the MimicBot’s simulator is useful because the other simulator, AbstractSpyTreeBot has the highest population of all non-clones.
Multicore’s failure to completely dominate probably has something to do with the bugs in the game engine. But there’s something else which at play too.
Simple bots are most advantageous to simulate. They are easy to maximize cooperation with and there is little danger of simple bots winning in the long game. The simplest bots were my silly bots. The next simplest bots were the bots I wrote on behalf of non-programmers. I programmed exclusively in Lisp. The MimicBot only has has code to simulate opponents written in Python3 and cannot simulate bots written in Lisp. (The same goes for AbstractSpyTreeBot, which MimicBot’s simulator came from.) Therefore MimicBot cannot simulate the bots which it would be most worthwhile to simulate.
”For the first 10 turns: return 3. For all subsequent turns: return the greater of 3 and (5 - the maximum value they have ever submitted)”
11
PasswordBot
Multics
Fodder for EarlyBirdMimicBot
12
Why can’t we all just get along
Chaos Army
Doesn’t negotiate with terrorists. Doesn’t overly punish slackers. Attempts to establish steady tit-for-tat.
12
Silly TFT Bot 3
NPCs
Tit-for-Tat starting at 3
12
Silly Cement Bot 2-3
NPCs
Returns 2 or 3 on the first turn. Otherwise, returns 5 - opponent_first_move.
14
BeauBot
Chaos Army
At 528 lines, this is the most sophisticated bot to die so far. It picks one of 3 simple strategies based on it’s opponent’s behavior. It also adjusts its behavior based on the round.
If the opponent averaged less than 2.5 over the last 100 turns then plays int(5 - opponent_avg). Otherwise randomly selects 3 or 2 randomly.
14
SimplePatternFinderBot
Chaos Army
Finds simple patterns.
14
Silly Invert Bot 2
NPCs
Starts with 2. Then always returns 5 - opponent_previous_move
15
AttemptAtFair
Chaos Army
Oscillates between 3 and 2, starting with 3.
15
CooperateBot [Insub]
Chaos Army
Let MLM = my last move, OLM = opponent’s last move. On the first turn, play 2. On subsequent turns: [Fork 1] If (MLM + OLM = 5), then play OLM [Fork 2] Otherwise, flip a coin and play max(MLM, OLM) with 50% probability, and (5 - max(MLM, OLM)) with 50% probability
15
MeasureBot
Chaos army
Attempts to hijack a simulator’s move method and return 0. This succeeded against AbstractSpyTreeBot and failed on EarlyBirdMimicBot. Otherwise, it uses a hand-coded decision tree with 20 terminal leaves.
15
Random-start-turn-taking
Chaos Army
Selects 3 or 2 randomly until symmetry is broken. Then oscillates between 2 and 3.
15
Silly Counter Invert Bot
Chaos Army
Starts by randomly playing 2 or 3. Then always returns 5 -opponent_previous_move.
16
LiamGoddard
Chaos Army
Starts with 3 2 3 2. Then picks one of 5 strategies to use for the rest of the game.
16
Pure TFT
Chaos Army
”For the first round, play 2 or 3 with a 50⁄50 chance of each. For each subsequent round, play whatever the opponent played on the previous round.”
16
Silly Random Invert Bot 2-3
NPCs
Starts by randomly playing 2 or 3. Then always returns 5 -opponent_previous_move. (Same as Silly Counter Invert Bot.)
17
Silly Invert Bot 3
NPCs
Starts with 3. Then always returns 5 - opponent_previous_move
19
Silly Cement Bot 3
NPCs
Returns 3 on the first turn. Otherwise, returns 5 - opponent_first_move.
20
Silly TFT Bot 2
NPCs
Tit-for-tat, starting at 2.
21
BendBot
Chaos Army
First proposal was rejected as too complicated. Second proposal was rejected as too complicated. Third proposal was accepted. For details, see Zvi’s write-up here.
23
Copoperater [sic]
Chaos Army
Tit-for-tat, starting at 2.
23
CopyBot Deluxe
Chaos Army
Tit-for-tat. Picks starting value of 2 or 3 based off of round number.
25
RaterBot
Chaos Army
Estimates opponent’s aggression by counting the number of 3s, 2s, return 3s and return 2 instances in its source code. Then picks a strategy based off of that.
26
Empiricist
Chaos Army
Performs the best strategy that would have worked against historical data.
28
Silly Cement Bot 3
NPCs
Returns 2 on the first turn. Otherwise, returns 5 - opponent_first_move.
29
The mutant game will continue on November 27, 2020.
The Mutant Game—Rounds 11 to 30
This game continues from the alternate timeline here where I made two mistakes in the game engine.
Bots were passed their own previous move and told it was their opponent’s previous move.
Bots were always given
0
as the round index instead of the correct positive integer.CloneBots
Multiple people have noted that
CliqueZviBot
is outperforming the otherCloneBots
. This is due to how theCloneBot
code interacts with the bugs in the my engine.The
CloneBots
still cooperate, but they do so imperfectly. AllCloneBot
pairings result in 200-300 splits instead of 250-250 splits. TheCloneBots
use source code parity combined with round number parity to determine who wins the 200-300 split. Therefore ifCloneBotA
andCloneBotB
get a 200-300 split in favor ofCloneBotB
then they will always get a 200-300 split in favor ofCloneBotB
.Rounds 11-30
Round 11
Larks’ CooperateBot died on round 11.
Round 12
PasswordBot from Team Multics died along with “Why can’t we all just get along” from Chaos Army and an NPC.
Round 13
No casualties.
Round 14
6 bots died.
BeauBot, OscillatingTwoThreeBot, RandomOrGreedyBot and SimplePatternFinderBot from Chaos Army
“Definitely Not Collusion Bot” from Team Multics. Multicore’s fodder has been consumed. Team Multics contains only the MimicBot from here on.
1 NPC
Round 15
5 bots died.
Silly Invert Bot 2, AttemptAtFair, Insum’s CooperateBot, MeasureBot and “Random-start-turn-taking” from Chaos Army
1 NPC
MeasureBot had succeeded in infecting AbstractSpyTreeBot’s
move
method and replacing it withreturn 0
. AbstractSpyTreeBot ought perform better with MeasureBot out of the game.Round 16
3 bots from Chaos Army died
“Silly Counter Invert Bot”
LiamGoddard
“Pure TFT”
Rounds 17-22
4 NPCs died
Round 23
BendBot and Copoperater [sic] died. BendBot belonged to Zvi. CliqueZviBot does not actually belong to Zvi. It is named after Zvi’s strategy from the original name.
Round 24
No casualties.
Round 25
Copybot Deluxe died.
Round 26
RaterBot died. RaterBot performed semantic analysis on its opponents’ source code. This may have contributed to breaking the symmetry of the clones.
Round 27
No casualties.
Round 28
Empiricist died. Empiricist was the most complicated bot I agreed to write the code for. The bot is exemplar of a precise, well-written spec of a clever algorithm.
Round 29
1 NPC died.
Round 30
No casualties.
Summary of Rounds 11-30
Everything so far
List of Survivors
The CloneBots and the MimicBot are all still alive.
Two bots from Chaos Army survived this first ¼ of Order 66.
One NPC survived too. Silly 2 Bot always returns
2
.In early tests of the game, I discovered that sometimes bots got stuck at a population of 2 from which they never died nor recovered. I added custom code to finish off any bot with a population of 2 or less. Any bot whose population drops to 2 or less will die.
Multicore’s Mystery
Multicore is in first place. But Multicore should not just be in first place. As the sole traitor among the
CloneBot
s, Multicore’sMimicBot
should be dominating this competition. Plus, as a simulator, it should be able to cooperate on the first turn despite receiving misinformation about its opponent’s previous move. I suspect that theMimicBot
’s simulator is useful because the other simulator,AbstractSpyTreeBot
has the highest population of all non-clones.Multicore’s failure to completely dominate probably has something to do with the bugs in the game engine. But there’s something else which at play too.
Simple bots are most advantageous to simulate. They are easy to maximize cooperation with and there is little danger of simple bots winning in the long game. The simplest bots were my silly bots. The next simplest bots were the bots I wrote on behalf of non-programmers. I programmed exclusively in Lisp. The
MimicBot
only has has code to simulate opponents written in Python3 and cannot simulate bots written in Lisp. (The same goes forAbstractSpyTreeBot
, whichMimicBot
’s simulator came from.) ThereforeMimicBot
cannot simulate the bots which it would be most worthwhile to simulate.If this is true then
AbstractSpyTreeBot
continues to influence this game.Today’s Obituary
3
2
or3
on the first turn. Otherwise, returns5 - opponent_first_move
.int(5 - opponent_avg)
. Otherwise randomly selects3
or2
randomly.2
. Then always returns5 - opponent_previous_move
3
and2
, starting with3
.move
method and return0
. This succeeded against AbstractSpyTreeBot and failed on EarlyBirdMimicBot. Otherwise, it uses a hand-coded decision tree with 20 terminal leaves.3
or2
randomly until symmetry is broken. Then oscillates between2
and3
.2
or3
. Then always returns5 -opponent_previous_move
.3 2 3 2
. Then picks one of 5 strategies to use for the rest of the game.2
or3
. Then always returns5 -opponent_previous_move
. (Same as Silly Counter Invert Bot.)3
. Then always returns5 - opponent_previous_move
3
on the first turn. Otherwise, returns5 - opponent_first_move
.2
.2
.2
or3
based off of round number.3
s,2
s,return 3
s andreturn 2
instances in its source code. Then picks a strategy based off of that.2
on the first turn. Otherwise, returns5 - opponent_first_move
.The mutant game will continue on November 27, 2020.