19 votes

Game and programming exercise based on The Prisoner's Dilemma (need Beta Testers)

20 comments

  1. [6]
    mattw2121
    Link
    BTW, I forgot to mention that no user accounts, emails, phone #s, etc will be required. That's some big feedback on got on my last game: https://toggles.codewalkers.net.

    BTW, I forgot to mention that no user accounts, emails, phone #s, etc will be required. That's some big feedback on got on my last game: https://toggles.codewalkers.net.

    5 votes
    1. [2]
      kej
      Link Parent
      I was really into that one and then got sidetracked and forgot to come back to it. How is it going? Has it been "solved" yet?

      I was really into that one and then got sidetracked and forgot to come back to it. How is it going? Has it been "solved" yet?

      1 vote
      1. mattw2121
        Link Parent
        Yes, 3 people made it to 30 days with a perfect score. The game is still up and running and people can still play it. The spoilers are on this site.

        Yes, 3 people made it to 30 days with a perfect score.

        The game is still up and running and people can still play it. The spoilers are on this site.

        3 votes
    2. [3]
      dellC
      Link Parent
      I would prefer signing-up on your site, instead of creating an AWS account.

      I would prefer signing-up on your site, instead of creating an AWS account.

      1 vote
      1. mattw2121
        Link Parent
        I hear and understand, but providing a full blown code development platform of my own just isn't in the books. The security implications I would need to account for are insane. By having people...

        I hear and understand, but providing a full blown code development platform of my own just isn't in the books. The security implications I would need to account for are insane. By having people host their own API, they can do it where ever they are comfortable (it doesn't have to be AWS), and I can easily be sure their responses meet the required specs.

        3 votes
      2. vord
        Link Parent
        I'm going to be posting a typescript sample soonish, Dockerfile, and docker-compose, which should allow many (most?) self-hosters add it to their stack pretty easily.

        I'm going to be posting a typescript sample soonish, Dockerfile, and docker-compose, which should allow many (most?) self-hosters add it to their stack pretty easily.

        1 vote
  2. [9]
    mattw2121
    Link
    I've created an interesting (at least to me) game that I think some other people might enjoy. It's based on The Prisoner's Dilemma. Specifically, my inspiration is Axelrod's tournament/experiment...

    I've created an interesting (at least to me) game that I think some other people might enjoy. It's based on The Prisoner's Dilemma. Specifically, my inspiration is Axelrod's tournament/experiment he ran in the 1980s.

    In summary, you create a strategy that's exposed via HTTP. Multiple times a day, my game server matches your strategy with someone else's strategy, and the two strategies play a variation of the Iterated Prisoner's Dilemma. My game server keeps track of the scores and puts you on a leaderboard. All the decisions from every matchup are available for public viewing.

    The goal is for you to tweak and refine your strategy to be the best.

    I'm looking for Beta Testers. Please PM me, and I'll send you the Beta Key so you can register. I'm definitely looking for people who will provide frank feedback. I would love to see the feedback come back to this thread so we could all discuss and collaborate.

    4 votes
    1. [3]
      vord
      Link Parent
      I see that your spec in your API section is different than in your sample code section. I'm readying my strategy, and hope to be done tonight! I'm using this as an excuse to try out Deno. I'll...

      I see that your spec in your API section is different than in your sample code section.

      I'm readying my strategy, and hope to be done tonight! I'm using this as an excuse to try out Deno. I'll post my project somewhere tomorrow so others can copy it.

      2 votes
      1. mattw2121
        Link Parent
        It's been corrected now. Thank you!

        It's been corrected now. Thank you!

        2 votes
      2. mattw2121
        Link Parent
        I see there is a discrepancy. Sorry about that! The API spec is correct. I'm in the office now, but will update the code example when I get home in about 1-2 hours.

        I see there is a discrepancy. Sorry about that! The API spec is correct. I'm in the office now, but will update the code example when I get home in about 1-2 hours.

        1 vote
    2. [5]
      vord
      Link Parent
      New bit of feedback which probably warrants discussion: My one bot is currently at the top of the charts, and all it does is defect. I think there needs to be a rebalance of scoring, as I can't...

      New bit of feedback which probably warrants discussion:

      My one bot is currently at the top of the charts, and all it does is defect. I think there needs to be a rebalance of scoring, as I can't think of how to 'game' it.

      1 vote
      1. [4]
        mattw2121
        Link Parent
        I'm not sure if you've noticed, but your bot's avg round score has been decreasing. Other strategies have learned to recognize that your strategy always defects, so they always defect when matched...

        I'm not sure if you've noticed, but your bot's avg round score has been decreasing. Other strategies have learned to recognize that your strategy always defects, so they always defect when matched up against yours. This is one of the variations I thought would be useful -- giving the opponent ID from the very first round. With this, a strategy can know what the previous matches against the same strategy were like and react accordingly.

        Definitely open for other ideas too!

        1 vote
        1. [3]
          vord
          Link Parent
          Gotcha, so long as the bots never cooperate with it, its average will fall.

          Gotcha, so long as the bots never cooperate with it, its average will fall.

          1 vote
          1. [2]
            mattw2121
            Link Parent
            Thoughts on providing the "Defect Rate" in the opponent data? This would allow strategies to know how often their opponent defects, even if they haven't kept that history themselves (plus it would...

            Thoughts on providing the "Defect Rate" in the opponent data? This would allow strategies to know how often their opponent defects, even if they haven't kept that history themselves (plus it would be a defect rate across all their opponent's matchups).

            1. vord
              Link Parent
              Nah, i like the idea of strategies having to adapt.

              Nah, i like the idea of strategies having to adapt.

              2 votes
  3. [3]
    unkz
    (edited )
    Link
    What are you hoping to achieve from this? It’s unlikely anyone (who isn't colluding) is going to significantly outperform tit-for-tat or its minor variations (generous, two tats, forgiving), and...

    What are you hoping to achieve from this? It’s unlikely anyone (who isn't colluding) is going to significantly outperform tit-for-tat or its minor variations (generous, two tats, forgiving), and if they do it will mostly if not entirely be the result of statistical noise.

    3 votes
    1. mattw2121
      Link Parent
      Just hoping that people can enjoy themselves. Also, I think there there are some interesting things can be done. Specifically since you will know the ID of the Strategy you are matched up against.

      Just hoping that people can enjoy themselves. Also, I think there there are some interesting things can be done. Specifically since you will know the ID of the Strategy you are matched up against.

      9 votes
    2. MimicSquid
      Link Parent
      Sometimes people enjoy playing games even when they know what the statistical likelihood of various results happen to be.

      Sometimes people enjoy playing games even when they know what the statistical likelihood of various results happen to be.

      4 votes
  4. mattw2121
    Link
    FYI, I've removed the need for a beta key and it is now "open beta". Anyone can submit their strategy.

    FYI, I've removed the need for a beta key and it is now "open beta". Anyone can submit their strategy.

  5. DataWraith
    (edited )
    Link
    I've cobbled together a strategy in Rust, and I thought I'd provide some feedback. Most of these are me-problems, but I thought I'd share my thoughts. The Mario messages are silly. It's probably...

    I've cobbled together a strategy in Rust, and I thought I'd provide some feedback. Most of these are me-problems, but I thought I'd share my thoughts.

    • The Mario messages are silly. It's probably for fun, but String matching also feels very error-prone (capitalization, accidentally using a different kind of apostrophe). Maybe use single-letter messages next time? Or at least make the messages have a distinct first character, so that one can match on that.
    • The requirement for JSON strings is similarly onerous. Why not accept bare Cooperate (or even just C) on the server-side without having them be wrapped in quotation marks? Abbreviating Cooperate to C would also make it much harder to misspell the word.
    • I tested my strategy using curl POST requests, and it seems to work fine, but the server says that it does not receive a response from the strategy for the game-start message. I added some more logging to try and catch what is going on, but it would be nice if there was a "test this strategy" button that plays a 5-turn game with the strategy when it is clicked. Maybe gated behind the strategy's secret key.
    • The documentation says in multiple places that the secret key is provided to you on registration, but I could enter my own secret key when registering?
    • Removing badly-performing strategies might apply some evolutionary pressure, but I think it'd be nice to actually be able to play as long as you're willing to host the strategy. People are going to drop out of the rotation naturally over time anyway.
    • The documentation says games happen every 4h, but actual frequency appears to be 1h.

    Edit: Figured out why it wasn't working using my logs. Apparently the opponent_id is sent as an integer instead of the String suggested in the documentation (the opponent_id value is enclosed in quotation marks in the example).