You're looking at Less Wrong's discussion board. This includes all posts, including those that haven't been promoted to the front page yet. For more information, see About Less Wrong.

faul_sname comments on Announcing the 2014 program equilibrium iterated PD tournament - Less Wrong Discussion

24 Post author: tetronian2 31 July 2014 12:24PM

You are viewing a comment permalink. View the original post to see all comments and the full post content.

Comments (61)

You are viewing a single comment's thread. Show more comments above.

Comment author: faul_sname 04 August 2014 12:37:16AM 1 point [-]

That does seem exploitable, if one can figure out exactly what's happening here.

Comment author: lackofcheese 06 August 2014 06:11:22AM *  2 points [-]

Yes, it's an issue with how the "time" command is set up. Basically, timeouts are done via threads an exceptions; there's a detailed description of the "timeout" function in System.Timeout here: http://chimera.labs.oreilly.com/books/1230000000929/ch09.html#sec_timeout

However, tetronian2's "time" command catches all exceptions, which means that if multiple timeouts are nested, you can get some pretty strange behaviour.

In the TB vs SMB scenario, here's what happens:
1. The world runs TB vs SMB
2. TB runs SMB vs MB (timeout #1, 10000us)
3. SMB runs MB vs MB (timeout #2, 10000us)
4. Timeout #1 triggers an exception, which is caught by timeout #2 and handled, causing (3) to return Nothing.
5. Before the exception for timeout #2 can actually trigger, (2) finishes normally and kills the timeout thread; this means that (2) return Just Cooperate.
6. Since (2) returned Just Cooperate, TrollBot returns Defect.

I've brought this up as an issue on the GitHub issues page here: https://github.com/pdtournament/pdtournament/issues/3

I've suggested a solution that fixes this problem, but unfortunately race conditions are ultimately still present.

Comment author: tetronian2 06 August 2014 10:51:08AM 3 points [-]

Thank you very much for catching this and for explaining it in detail here and on the github page; I'm going to play around with your proposed solution today and brainstorm any other ways of dealing with this.