This may be more a reflection that programming interesting strategies which run each others code and fully do what you want them to do is tough. It might be interesting to look at the strategies which did look at the other’s code and see if any are responding in an obviously wrong fashion in that particular instance.
I wasn’t expecting there to be so much randomness. If I had been, I guess I would have spent the time to figure out how to test for it in some kind of loop and defect if the opponent was random. Looping in lisp is unnecessarily complicated though, so I didn’t bother...
My own strategy-if i’d felt like joining-would have started by checking the opponent against defectbot; anybody who cooperates with even one of the 5 or so defect-varaints is clearly insane and not to be trusted; defect immediately. OR maybe take a detour and check if they’re actually a mimicbot that got unlucky.
well...I might have played Hawkbot instead; Hawkbot spends 9.999 seconds dithering before finally defecting, so it does insanely well against any opponent that tries to run it.
Several of the bots using simulation also used multithreading to create timer processes so they can quit and defect against anyone who took to long to simulate.
I was also thinking of doing something similar, which was to infinite loop if the opposing programs code was small enough, since that probably meant something more complex was simulating it against something.
Quinn appears to have submitted something similar. As far as I can tell, against CooperateBot it cooperates; otherwise, it waits 9 seconds before defecting. (The weird timing conditional in there should never return true if things are working properly, and checking the results, indeed, it defected against everything but the three CooperateBots.)
Unless I’m going insane, Luke_A_Somers’ comment below is incorrect. If you defect and your opponent times out, you still get 1 point and they get 0, which is marginally better than both getting 1 point in the case of mutual defection.
That was the purpose my (sleep 9). I figured anyone who was going to eval me twice against anything other than CooperateBot is going to figure out that I’m a jerk and defect against me, so I’m only getting one point from them anyway. Might as well lower their score by 1.
My assumption might not have been correct though. In the original scoreboard, T (who times out against me) actually does cooperate with K, who defected against everybody!
The bizarre-looking always-false conditional was a long shot at detecting simulation. I heard an idea at a LW meetup (maybe from So8res?) that players might remove sleeps from each other’s code before calling eval. I figured I might as well fake such players out if there were any (there were not).
well...I might have played Hawkbot instead; Hawkbot spends 9.999 seconds dithering before finally defecting, so it does insanely well against any opponent that tries to run it.
Anybody who runs the other program without an interrupt timer and so times out is, as you put it, “clearly insane”. Hawkbot gets 1 against any sane opponent that tries to run it.
Collaborateurbot: Times out against everyone except the bot it is secretly helping. If it’s not against the letter of the rules, it’s fair game from a “rational = winning” perspective.
This may be more a reflection that programming interesting strategies which run each others code and fully do what you want them to do is tough. It might be interesting to look at the strategies which did look at the other’s code and see if any are responding in an obviously wrong fashion in that particular instance.
I wasn’t expecting there to be so much randomness. If I had been, I guess I would have spent the time to figure out how to test for it in some kind of loop and defect if the opponent was random. Looping in lisp is unnecessarily complicated though, so I didn’t bother...
That suggests that a large part of this behavior may have been due to limited amounts of programming time.
My own strategy-if i’d felt like joining-would have started by checking the opponent against defectbot; anybody who cooperates with even one of the 5 or so defect-varaints is clearly insane and not to be trusted; defect immediately. OR maybe take a detour and check if they’re actually a mimicbot that got unlucky.
well...I might have played Hawkbot instead; Hawkbot spends 9.999 seconds dithering before finally defecting, so it does insanely well against any opponent that tries to run it.
Several of the bots using simulation also used multithreading to create timer processes so they can quit and defect against anyone who took to long to simulate.
I was also thinking of doing something similar, which was to infinite loop if the opposing programs code was small enough, since that probably meant something more complex was simulating it against something.
Ah, so multithreading was allowed...so instead of dithering for 9.999 seconds, it would have called forkbomb(9.9seconds)
Quinn appears to have submitted something similar. As far as I can tell, against CooperateBot it cooperates; otherwise, it waits 9 seconds before defecting. (The weird timing conditional in there should never return true if things are working properly, and checking the results, indeed, it defected against everything but the three CooperateBots.)
Unless I’m going insane, Luke_A_Somers’ comment below is incorrect. If you defect and your opponent times out, you still get 1 point and they get 0, which is marginally better than both getting 1 point in the case of mutual defection.
That was the purpose my (sleep 9). I figured anyone who was going to eval me twice against anything other than CooperateBot is going to figure out that I’m a jerk and defect against me, so I’m only getting one point from them anyway. Might as well lower their score by 1.
My assumption might not have been correct though. In the original scoreboard, T (who times out against me) actually does cooperate with K, who defected against everybody!
The bizarre-looking always-false conditional was a long shot at detecting simulation. I heard an idea at a LW meetup (maybe from So8res?) that players might remove sleeps from each other’s code before calling eval. I figured I might as well fake such players out if there were any (there were not).
Anybody who runs the other program without an interrupt timer and so times out is, as you put it, “clearly insane”. Hawkbot gets 1 against any sane opponent that tries to run it.
I reread the payoff matrix some time after posting that....and the defect-bot test was only the first in a series of tests I had planned out.
Forget sanity—if your opponent fails to play, the most you can get is one point. Hawkbot is awful.
That wouldn’t work well since timing out causes both players to get 0. You’d do better just defecting.
It does? The payoff matrix had entries for.. … double checks original contest rules OH. I see. I misread how the payoffs work when “other” occurs.
Collaborateurbot: Times out against everyone except the bot it is secretly helping. If it’s not against the letter of the rules, it’s fair game from a “rational = winning” perspective.
I suspect that sort of thing is why the rules forbade multiple entrants.
Are you saying my Grandma can’t submit an entry?
How will we tell her?