tags:

views:

61

answers:

3

The gist

I'm implementing a website that hosts fitness competitions, and I need a good way to generate a "score" or "rank".

How the competitions work

Competitions consist of a team of one or more athletes/contestants from a given gym challenging the same number of contestants from one or more other gyms. There isn't any limit to the number of gyms that can enter the competition - there could potentially be over one hundred gyms that enter the competition. Points are assigned to each team based on various factors: time, reps, heaviest lift, etc.

Attributing a score to each team within a single competition is the easy part; things get a little more interesting when we try to generate a ranking for each gym based on their history of competitions. Intuitively, a team that places 1st amongst 10 other gyms in a competition should rank higher than a team that places 1st among 5 other gyms from a different competition.

I'm having trouble coming up with an intuitive, fair ranking mechanism. Any concrete ideas or suggestions on perhaps a family of ranking algorithms would be appreciated.

+1  A: 

How about treating each team as 'beating' all the teams it placed above in a particular competition, and 'losing' to all teams it placed below? You could then compute an ELO for each team over time.

Ani
ELO makes sanse in one tournament where each player had equal number of games. But here, as I understand, other gyms can join later and they would be in great disadvantage to the oldest ones (having lots of wins and losses already).
Nikita Rybak
@Nikita Rybak: As I understand the question, a *single* tournament will not have gyms entering late; the competitors are decided ahead of time. And ELO is perfectly capable of ranking competitors who have played a different number of games, so gyms who miss a few competitions should not get unduly disadvantaged.
Ani
@Ani I quote question "Attributing a score to each team within a single competition is the easy part; things get a little more interesting when we try to generate a ranking for each gym based on their history of competitions."
Nikita Rybak
@Nikita Rybak: Exactly, that's why ELO is fine. It would only be a problem if a single competition doesn't work that way.
Ani
@Ani I think we're talking about different things. There's no concept of "tournament" in the question. It looks like competitions just happen from time to time and there's need to determine best gym basing on "history of competitions".
Nikita Rybak
@Nikita Rybak: As I mention in my answer, treat a competition as a tournament.
Ani
@Ani And ELO makes sense within single tournament only. We don't use it to 'extrapolate' data from past 15 tournaments, right?
Nikita Rybak
@Nikita Rybak: Your ELO score for that tournament will impact your overall ELO rating. So it is stateful.
Ani
@Ani: this definitely sounds like what I'm after. I like the fact that an entry level competitor (`A`) can "catch up" to other highly ranked competitors (`B`) when `A` beats `B`. From briefly reading the wikipedia link, it looks like this system is also used on online games, which I feel share a lot in common with the type of competition I'm talking about. Thank you for this answer - I think this could be what I end up using.
Charles
@Charles: Great.
Ani
+1  A: 

To rank with competitions of varying size, couldn't you simply award last place +1 and first place +n (where n is the number of contestants) which rewards all gyms for competing, and rewards a first place win in a larger competition a great score than a smaller.

Rudu
This method of scoring is known as the Borda count: http://en.wikipedia.org/wiki/Borda_count It is used to determine the winner of the Heisman Trophy in American college football, among other things.
las3rjock
That's not a bad idea; definitely going to consider it. The one thing I don't quite like is the fact that the rank doesn't vary in proportion to the difference in rank between the competitors. An entry level competitor winning against highly ranked competitors should give a large rank boost, IMO (it just "feels" right).
Charles
All that does is compress your standard deviation - a high ranked gym can't rank up as much as a low ranked gym can (so can't get so far ahead). If #1 took 10 competitions to obtain rank (you mentioned multiple scoring practices so I'm simplifying) #10 could - say- catch up with only 5 late wins against leaders.
Rudu
+1  A: 

If you see the competition as gym. Maybe the fair rank depends on their muscle which surely relies on how many exercise they have done and how regular it is. Of course some variable from 'before' and 'after' exercising must be taken. In a brief, calculate the effectiveness of the exercise they do.

For example:

Normally, when exercise x is done 40 times, one can increase his muscle 5 points

Mr. A does exercise x 30 times and got 4 muscle. Hence Score for Mr. A = (4 / 30 ) / (5 / 40)

The total score is the sum of another exercise done by Mr. A. Total = Score(x) + Score(y) + Score(z)

This is fair enough since the actual result is compared directly to expected result. This can also prevents a stronger person taking an easy exercise. Since, you know, Arnold Schwarzenegger can't increase his muscle using 1 kg dumbell.

Of course the unit (muscle) may vary depends on the exercise.

jancrot
I think he said that this part ("Attributing a score to each team within a single competition") is trivial :)
Nikita Rybak