# Technical Difficulties

I messed up the game engine. I gave bots their own move in the `previous`

parameter instead of their opponent's move.

This is the primary factor behind the CloneBots diverging from each other. The bug caused CloneBot pairings to score 200-300 instead of 250-250.

I'm going to restart the tournament.

Sorry.

The original tournament, created by a blind idiot me, was exciting. It resembled real world population dynamics. I wrote an 8-part series with 11,277 words and 24 graphs.

Alas, the actual contest is between intelligent agents.

This will be fast.

# Edit: Everything below this line is in error too. Click here for the real, real game.

# Round 1

# Today's Obituary

Bot | Team | Summary | Round |
---|---|---|---|

Silly 0 Bot | NPCs | Always returns `0` |
1 |

The next installment of this series will be posted on October 30, 2020 at 5 pm Pacific Time.

Edit 2020-10-29: I'm sick. Next installment may be delayed.

Edit 2020-11-05: Since this is taking so long I feel I owe you guys an explanation. I have not forgotten about the tournament. Over the last couple of weeks, several correlated problems in meatspace triggered a cascading failure in my real life affairs. All the problems are temporary but I am temporarily unable to write bug-free software. (I actually did write a post for October 30 but it had multiple errors in it.) I would be surprised if it took more than a month to resolve everything but can make no guarantees. I plan to continue the tournament as soon as I can write bug-free software. I apologize for the delays.

Edit: 2020-11-10: I found some more bugs in the code and will have to restart things again.

I think a lot of us are still curious what happened! Maybe concatenate the whole thing into a non-Frontpageable post with an explanatory disclaimer at the top?

My tentative plan is something along those lines.

I just remembered something I forgot to post in an earlier thread:

CloneBot's cooperateWithClone method uses parity checking on its and the opponent's payloads to determine the first move, but after that it always plays whatever move the opponent played last. I.e. pure naive tit-for-tat.

This suggests a possible strategy for a MimicBot: against a clone, play 0, 5, 0, 5, 0, 5... Assuming the opposing clone started with 3, this results in plays (0, 3), (5, 0), (0, 5), (5, 0)...

If the number of turns per game is even, you end up with one 5 per two turns, for the same 2.5 points per turn as if you had cooperated. Because the clone played a 2 or 3 on the first turn instead of a 5, it loses 2 or 3 points compared to perfect cooperation. This could be a big advantage over the 90 rounds before the CloneBot showdown.

Unfortunately, if the number of turns is odd, the clone gets just as many 5s as you plus its initial 2 or 3, so you're the one who gets outscored. I haven't been able to think of any strategy that would get you 2.5 points per turn, get the clone fewer points, and work whether the number of turns was odd or even.

Using a defecting strategy would be a coinflip between a big advantage and a crippling disadvantage, so my actual submission played it safe and just cooperates with clones. The actual number of turns wound up being even, but I had no reasonable way of expecting that was more likely than not (IIRC, in Zvi's original game the number of turns was odd).

If you're willing to score fewer than 2.5 points per turn if the clone does much worse than you, there are a series of dastardly strategies that I'm thinking of as "Lucy pulling away the football", where you ruin the opponent's big play while setting up your next big play.

0, 5, 1, 4, 2, 3 repeated gives (0, 3), (5, 0), (1, 5), (4, 1), (2, 4), (3, 2) repeated. You get (5 + 4 + 3) / 6 = 2 per turn, while the opponent gets (3 + 1 + 2) /6 = 1 per turn.

0, 5, 1, 4, 2 repeated gives (0, 2), (5, 0), (1, 5), (4, 1), (2, 4) repeated. You get (5 + 4) / 5 = 1.8 per turn, opponent gets (2 + 1) / 5 = 0.6 per turn.

0, 5, 1 repeated gives (0, 1) (5, 0) (1, 5) repeated. You get 5/3 per turn, opponent gets 1/3 per turn.

Sacrificing some points to outscore the clones by a full five times might be worth it if there were four or fewer clones, but with one MimicBot against eight clones I don't think the penalty to my score is worth the damage I can inflict on them. (Also, I only thought of the dastardly strategies today; before submission I only considered the "minor edge" strategy described earlier.)

This analysis also applies generally to any bot known to be a naive tit-for-tat bot.

I love your "Lucy pulling away the football" ideas and its super impressive that this can outscore tit-for-tat.

I'm fairly sure the first idea is better than the last two if you want to play it even with a large number of clique bots as what matters is not how many times more you're getting than them but how many times more they are losing than you (from the normal 2.5 per round). Idea one forces them to lose 3x more than you and this means its worth it if there are fewer than 3x more clique bots than mimic bots (ignoring all other bots). If DefinitelyNotCollusionBot and PasswordBot played the same tactic against the clique bots it may have been worth it even with 8 clique bots.

Oops! I look forward to getting some more accurate beliefs...

So I notice that I'm still confused as to how CliqueZviBot outperformed the other clique bots so consistently in the previous game (and still is! At least for this one round). I assume that the 300-200 goes in the favour of whoever won the starting tiebreaker. No bot should be able to consistentely win this?

Edit: I realize I didn't understand your question, as I didn't connect your remark about 300-200 with lsusr's statement at the top of the post. You're confused about why CliqueZviBot won in the previous game, while I am about why it is still winning.

When a pair of clones face each other, one wins the tiebreaker on even rounds and the other on odd rounds. So yes, no bot should be able to consistently win this.

My comment before the edit:

My confusion is that I don't think the explanation in this post really resolves why CliqueZviBot outscored the clique bot average (multiplicatively) in every round last time out. This should only happen 1210=11024 times for a given bot or 1128 times given 8 bots.

To be fair this is only me reading it off the graphs so I could be wrong with this exact analysis but I do think CliqueZviBot was a very strong and consistent outlier and that this explanation doesn't resolve my confusion as to why.

In the mutant game where you always think that your opponent's last move was the same as your last move, I think EarlyBirdMimicBot behaves as follows in the first 10 rounds:

Against clones, gets full clone cooperation of either all 3-2 or all 2-3. I put in a check to stop cooperating with clone if the clone ever starts exploiting me, but the check doesn't notice that turns so far seem to have been all 2-2 or all 3-3.

Against simulatable bots, gets one turn of simulation, then next turn sees that the opponent's apparent move was not the same as what was predicted. Reverts to the fallback plan.

Against everything else, thinks that every turn so far has been a match, so continues its early match-breaking strategy of playing 2 with probability 2/3 and 3 with probability 1/3. I think that's close to a Nash equilibrium in the blind game.

Against outsiders, Clonebot will always play 3 if it played 2 last turn, and in an apparent 3-3 match it transitions between 50% chance to play 2 initially and 0% by turn 50.