I need to implement a tournament system for a one-time tournaments between a finite sets of anonymous players.

Single-elimination or a Groups-system tournament (for a bigger number of players) would have been enough, but there is a twist.

When the match is assigned, the participants are free to organize it in a place or time they agree on.

If the game was assigned to be played by two participants and it didn't happen in a predefined amount of time (say, a week), than we need to expire it and move on to the next round so as to not to delay the tournament overall.

But with our implementation of getting the match results (external API), we can't tell if one of the supposed players of this game ignored the challenge while another was looking for him to play the match. And if one did, which one of the two did it. So just writing the game off as a draw seems extremely unfair for the player who was looking to play the game, since in a non-anonymous tournament with the set dates of matches and attendance control, he would have been judged a winner due to opponent's absence.

So we are looking into round-robin systems giving points for matches (3 for win, 1 for draws, and so on), considering the possibility of giving a variable amount of points for the "expired" matches depending on their quantity.

Like, if you only missed one match, while your opponent for that match have missed three others, than chances are high that it was you who showed up, so you get 2 points while he gets 0. But even that approach seems questionable and open for abuse.

I am looking for the algorithm that will allow me to implement the tournament system like that without sacrificing too much fairness. Maybe it is a known solved problem so I won't need to invent a mathematical bicycle here?


Announce a predetermined time of the meeting if they fail to determine it themselves

I appreciate the effort made by @realUser404, but "making the decision as a human being and not a computer" is generally a bad idea for your tournament's routine. You need to reduce human factor to a value as low as possible.

A good idea for your scenario is to have a set time at which the participants have to meet if they didn't make an agreement. Let's imagine that one round takes one week to complete. You announce the pairings on Monday, and tell that if they do not agree about the time, thay have to start their play at 18:00 GMT+N Saturday (always designate the time zone, but choose it wisely).

You need to somehow reliably and (ideally) automatically register:

  • If the play happened during the week, so no player can lose and then claim that they didn't meet at all yet.
    • In this case you have a clear winner and loser according to your rules, or a clear draw.
  • If any of the players comes at the pre-set time (18:00 GMT+N Saturday).
    • If both players come and have a valid play, the same applies. Ideally, the play should start automatically once both players hit the button called along the lines of "I am here and ready".
    • If none of the players come on time, it is not a draw (1 point for each of them), it is a loss (0 points). They have just ignored the match and delayed the tournament.
    • If only one player comes, he has a technical win, registered as a normal win for all means and purposes (3 points), and the other player loses (0 points).
  • Sometimes the power difference is so big that there is no need to play the round at all. None of the players wants to show up, but the stronger one needs their 3 points and the weaker one will often get an additional punishment if not showing up at all. So if one of the players announces giving up during the week, take this as a result.
| improve this answer | |

As you say, it is difficult to find a fair algorithm. It is because in my humble opinion the principle of having an algorithm for this is opening the door for abuses.

For example with the solution you came with, in a group of 4 people with one insanely strong guy inside, if the other 3 make a draw on purpose with him, he will end up disqualified. That goes for any algorithm you will come up with.

I believe the solution to this is to act yourself as a referee in the case of people not playing their match.

  1. Inform players that they need to send you a mail if they cannot find an agreement with the other player.
  2. Inform them that if they do not send you a mail and then do not play, they will be out of the tournament.
  3. If both sent you an email saying they cannot find an agreement with the other player, you then need to decide who won or if it is a draw.

It is really important that you make the decision as a human being and not a computer, as it is the only way people cannot hack the system to get free wins or free draws.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.