Here is how I would make a multi-stage round robin.
There would be 1 input variable to determine number groups (and number of subsequent knockout rounds), which is number of players signed up. We will call this p.
I would set the standard group size to 6, but this would vary from 5-9 based on total number in the tournament (mostly 5 or 6 unless tournaments are very small).
The algorithm to determine number of groups (g) would be:
temp = ceiling(p/6);
if p/5 < temp
g = max(1, temp - 1); %Never want less than 1 group
else
g = temp;
end
In words this means if there are 9 or less players they go into a single group...so it would be equivalent to the current round robin format. If at least 10 join number of players is divided by 6 to get number of groups (number of groups will round up as long as it allows each group to still have at least 5 players, otherwise it will round down).
The result is this: 2-9 players: 1 group, 10-14: 2 groups, 15-19: 3 groups, 20-24: 4 groups...once you reach 20 the p/5 condition will never be met so it will just be ceiling(p/6) controlling things, which means all groups would be 5 or 6 players with 20+ players. So the only groups larger than 6 occur with 7-9 players (1 group of 7-9), 13 or 14 (1 or 2 groups of 7), and 19 (2 groups of 6, 1 of 7).
Then once the round robin is complete all winners advance to a knockout stage. These players would be seeded based on the following criteria:
1. Most points ( 1pt per win, 1/2 per tie as with current system)
2. Least games played (since not all groups will be the same size someone with 4 points in 4 games should be ranked above someone with 4 points in 5 games).
3. Point Diff in Games
4. Random/Elo...whatever you want to break a tie.
This creates a fairly straightforward 2 round system with a group stage followed by a knockout stage. Wildcards could be added to get to a number of players equal to the nearest 2^x >= g, so no byes would occur in the knockout stage. For wildcards you'd take all the 2nd place teams and apply the above criteria.
96 players would be a good practical limit to prevent the knockout stage from dragging on for too long (limits it to 16 players).
For initial assignment to groups, I recommend random as this seems ideal for common tournaments. Some tournaments you'll get a tougher than normal bracket, some easier, but it would provide more of a chance for an average player to make a run into the knockout stage, which I think can make it more fun for everyone. For a more formal championship an Elo based ordering could be implemented...players ranked 1:g (where g is number of groups) go into pools 1:g, then players g+1:2g go in groups g:1, then repeat the snake.
To me I like this better than both Swiss or knockout...
It is superior to knockout first of all b/c it both provides average players with a few more meaningful games (1/2 the players are 1 and done in a knockout, here you might advance with a loss) It also cuts down on total tournament time by compressing the 1st 2-3 knockout rounds into a simultaneous round robin style.
It is superior to Swiss b/c it shortens the total time by getting through several games simultaneously, it still gives the opportunity for multiple games against players of different ability, but the tournament does not drag out for those with no chance of winning the way it does in a Swiss when you've already been eliminated from a top 3 spot.