Comment author: Gavin 07 August 2014 03:47:51AM 3 points [-]

I suppose if you really can't stand the main character, there's not much point in reading the thing.

I was somewhat aggravated by the first few chapters, in particular the conversation between Harry and McGonagall about the medical kit. Was that one where you had your aggravated reaction?

I found myself sympathizing with both sides, and wishing Harry would just shut up--and then catching myself and thinking "but he's completely right. And how can he back down on this when lives are potentially at stake, just to make her feel better?"

Comment author: tetronian2 08 August 2014 05:23:32PM 2 points [-]

Yes, I did find that section grating. I'm describing my emotions post-hoc here (which is not generally reliable), but what I found irritating about the first few chapters was the fact that Harry acts in an extremely arrogant way, nearly to the point of coercing the adult characters, and the story-universe appears to back him up at every turn. This is the "Atlas Shrugged" effect described downthread by CellBioGuy. Harry is probably right in most of those arguments, but he is only so effortlessly correct and competent because the story-universe is designed so that he can teach these rationality lessons to other characters. It feels like the world is unfair, and unfair in the favor of an unlikeable and arrogant character. There is a real-world corollary of this, of course--very arrogant people who always get what they want--and I suspect my emotional reactions to these real and fictional situations are very similar.

(I have since caught up with the rest of the fic, and enjoyed most of it.)

Comment author: Gavin 06 August 2014 07:40:12PM *  4 points [-]

I would go even further and point out how Harry's arrogance is good for the story. Here's my approach to this critique:

"You're absolutely right that Harry!HPMOR is arrogant and condescending. It is a clear character flaw, and repeatedly gets in the way of his success. As part of a work of fiction, this is exactly how things should be. All people have flaws, and a story with a character with not flaws wouldn't be interesting to read!

Harry suffers significantly due to this trait, which is precisely what a good author does with their characters.

Later on there is an entire section dedicated to Harry learning "how to lose," and growing to not be quite as blind in this way. If his character didn't have anywhere to develop, it wouldn't be a very good story!"

Comment author: tetronian2 06 August 2014 09:41:01PM 6 points [-]

While this is true, there can be a distinction between a character with flaws and a character who is extremely irritating to read about. And this is one of those judgement calls where The Audience is Always Right; it seems very reasonable to stop reading a story if the protagonist noticeably irritates you.

In general, commentary to the effect of "you should like this thing" is not very useful, especially if you are trying to figure out why someone reacted negatively.

(These discussions in which one group has an overwhelmingly strong "squick" or "ew" reaction and another group does not are fascinating to me, not least of all because they seem to pop up quite frequently here, e.g. about Eliezer's OKCupid profile and NYC cuddle piles. Both sides spew huge amounts of ink explaining their emotional reactions, and yet there never seems to be any actual sharing of understanding. In the interests of trying harder...I was also very aggravated by the first few chapters of HPMOR, and would be happy to discuss it calmly 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.

Comment author: AlexMennen 01 August 2014 05:56:19PM 3 points [-]

Last year, AlexMennen ran an iterated prisoner's dilemma tournament

Correction: my tournament was one-shot prisoner's dilemma.

Anyway, I'm glad to see this is being tried again.

Comment author: tetronian2 01 August 2014 06:50:48PM 1 point [-]

Whoops, fixed. And thanks, I'm curious to see what happens with this ruleset.

Comment author: Ander 31 July 2014 11:16:11PM 2 points [-]

Thanks for running this, and for translating my psuedocode bot into Haskell!

I assume we are only allowed to enter one bot, correct?

Comment author: tetronian2 01 August 2014 12:04:30PM 1 point [-]

Thank you for submitting! Yes, I am accepting one bot per person.

Comment author: V_V 01 August 2014 08:14:42AM 4 points [-]

I don't think this game is a prisoner's dilemma, since the tournament implies that all pure deterministic strategies yield the same outcome (an all-players tie) if applied by everyone, while the interesting thing about PD is that mutual cooperation is preferable to mutual defection.

Also, it is not a "program equilibrium" game, since running simulations gives much less information than analyzing the source code. For instance, clique strategies, which are often occur in the Nash equilibria of program equilibrium games, are impossible in your game.

Comment author: tetronian2 01 August 2014 12:04:27PM 1 point [-]

Good points. Simulations do give much less information than visible source code--this was a deliberate design choice on my part, but you are probably right that this kind of setup is not really "program equilibrium." I admit, I don't have a very good understanding of where the limits of the PD game really are, and I hadn't considered the problem of the all-players tie (fortunately I don't think it is going to happen in practice). Mutual cooperation and cliques are still viable strategies here, but they may not be the Nash equilibrium anymore. Regardless, I agree that this tournament is horribly misnamed.

Comment author: Strilanc 31 July 2014 07:12:08PM 2 points [-]

In the examples you show how to run the opponent, but how do you access the source code? For example, how do you distinguish a cooperate bot from a (if choice < 0.0000001 then Defect else Cooperate) bot without a million simulations?

Comment author: tetronian2 31 July 2014 07:24:47PM 3 points [-]

Unlike last year's tournament, you can't, and this is part of the challenge. Simulations are a precious resource, and you have to make an educated guess about your opponent based on the limited simulations you have.

Comment author: DataPacRat 31 July 2014 05:55:55PM 4 points [-]

Is there a particular reason you've decided on using exactly 100 rounds per bout? Having a fixed end-point can cause some unusual behaviour to crop up at the end turn, and depending on how many levels of recursion are applied, multiple turns before that.

(One alternative I've seen is that after any given round, there's a 99.30925% chance there will be another, which gives close to 50% odds that the game will last 100 turns or less.)

Comment author: tetronian2 31 July 2014 07:20:59PM 3 points [-]

I figured that this game is sufficiently different from the classical PD that the same Nash equilibrium/style of thinking isn't going to apply, and I was interested to see what participants can do with the fixed-size rounds. So it's just an arbitrary experimental parameter that I'm curious about.

Comment author: philh 31 July 2014 06:16:32PM 3 points [-]

To clarify: your score in each round-robin round is the sum of your scores from each of the matches; and this score doesn't carry over to the next round-robin round?

Comment author: tetronian2 31 July 2014 06:18:12PM 5 points [-]

Exactly right.

Comment author: William_Quixote 31 July 2014 03:32:33PM 2 points [-]

Thanks for running this!

One thought however is that Haskell is a lot less well known then python, so if you want a large stable of bots, you may wind up needing to give some coding help to aspiring entrants

Comment author: tetronian2 31 July 2014 03:56:26PM 6 points [-]

I agree. I chose Haskell because I was intrigued by how easy it was to restrict what bots are able to do, using only Haskell's type system. I would actually love it if a large number of non-Haskellers participated--I enjoy coding Haskell, and I don't mind putting aside some time to help if the result is a larger, more interesting tournament.

View more: Prev | Next