*At least one bot tries to simulate me after the showdown and doesn’t get disqualified: 10%.
At least one bot tries to simulate me after the showdown and succeeds: 5%.
I now think these were overconfident. I think it would be fairly easy to simulate incomprehensibot safely; but hard to simulate incomprehensibot in a way that would be both safe and generically useful.
The difficulty with simulating is that you need to track your opponent’s internal state. If you just call MyOpponentBot(round).move(myLastMove) you’ll be simulating “what does my opponent do on the first turn of the game, if it gets told that my last move was...”. If you do this against incomprehensibot, and myLastMove is not None, incomprehensibot will figure out what’s up and try to crash you.
So at the beginning, you initialize self.opponent = MyOpponentBot(round). And then every turn, you call self.opponent.move(myLastMove) to see what it’s going to do next. I don’t expect incomprehensibot to figure this out.
But if your opponent has any random component to it, you want to do that a couple of times at least to see what’s going to happen. But if you call that function multiple times, you’re instead simulating “what does my opponent do if it sees me play myLastMove several times in a row”. And so you need to reset state using deepcopy or multiprocessing or something, and incomprehensibot has ways to figure out if you’ve done that. (Or I suppose you can just initialize a fresh copy and loop over the game history running .move(), which would be safe.)
But actually, the simple “initialize once and call .move() once per turn” isn’t obviously terrible? Especially if you keep track of your predictions and stop paying attention to them once they deviate more than a certain amount (possibly zero) from reality. And Taleuntum’s bot might catch that, I’m not sure, but I think Incomprehensibot wouldn’t.
I think at some point I decided basically no one would do that, and then at some other point I forgot that it was even a possibility? But I now think that was silly of me, and someone might well do that and last until the showdown round. Trying to put a number on that would involve thinking in more depth than I did for any of my other predictions, so I’m not going to try, just leave this note.
I now think these were overconfident. I think it would be fairly easy to simulate incomprehensibot safely; but hard to simulate incomprehensibot in a way that would be both safe and generically useful.
The difficulty with simulating is that you need to track your opponent’s internal state. If you just call
MyOpponentBot(round).move(myLastMove)
you’ll be simulating “what does my opponent do on the first turn of the game, if it gets told that my last move was...”. If you do this against incomprehensibot, andmyLastMove
is notNone
, incomprehensibot will figure out what’s up and try to crash you.So at the beginning, you initialize
self.opponent = MyOpponentBot(round)
. And then every turn, you callself.opponent.move(myLastMove)
to see what it’s going to do next. I don’t expect incomprehensibot to figure this out.But if your opponent has any random component to it, you want to do that a couple of times at least to see what’s going to happen. But if you call that function multiple times, you’re instead simulating “what does my opponent do if it sees me play myLastMove several times in a row”. And so you need to reset state using
deepcopy
or multiprocessing or something, and incomprehensibot has ways to figure out if you’ve done that. (Or I suppose you can just initialize a fresh copy and loop over the game history running.move()
, which would be safe.)But actually, the simple “initialize once and call
.move()
once per turn” isn’t obviously terrible? Especially if you keep track of your predictions and stop paying attention to them once they deviate more than a certain amount (possibly zero) from reality. And Taleuntum’s bot might catch that, I’m not sure, but I think Incomprehensibot wouldn’t.I think at some point I decided basically no one would do that, and then at some other point I forgot that it was even a possibility? But I now think that was silly of me, and someone might well do that and last until the showdown round. Trying to put a number on that would involve thinking in more depth than I did for any of my other predictions, so I’m not going to try, just leave this note.