Introdução
Na seção seguinte, primeiro descrevemos brevemente as premissas básicas de pontuação e seu funcionamento, e em seguida apresentamos as equações detalhadas usadas para o cálculo das pontuações.
Premissas
Nosso sistema de pontuação é baseado nos resultados anteriores obtidos pelos jogadores e, de certa forma, pode ser usado para predizer futuros resultados. Usamos métodos estatísticos para calcular o ranking apropriadamente, mas também tentamos criar um tipo de pontuação que atenda, tanto quanto possível, os anseios da comunidade de jogadores.
Apresentamos as premissas básicas para o cálculo da pontuação:
- o fato de você jogar com jogadores mais habilidosos ou mais fracos, tanto novatos quanto veteranos, não deveria causar sério impacto na pontuação;
- quanto mais você joga, mais estável fica a sua pontuação;
- jogadores novatos obtêm pontuação média devido não sabermos ainda quão boa sua pontuação poderá ser. Assim, após alguns partidas, alguns jogadores obterão pontuação mais baixa e outros mais alta do que o valor médio;
- quando um jogador de ranking mais alto ganha de um outro com ranking mais baixo, ele recebe menos pontos do que pode perder se perder o jogo para um jogador de ranking mais baixo;
- uma pontuação maior não tem a nada a ver com um jogador de ranking alto alcançar melhor resultado que um jogador de ranking mais baixo. Tem a ver com o fato de que quanto maior for a diferença, é mais provável que o jogador de ranking mais alto vencerá;
- a pontuação dos jogadores é flexível. A análise dos dados estatísticos prova que a pontuação flutua (no caso do nosso sistema de pontuação a flutuação não deverá exceder +-150 pontos para jogadores veteranos). Por que essas flutuações ocorrem? Principalmente porque as pessoas nem sempre jogam com outras com o mesmo nível de habilidade. Algumas vezes estão cansadas, outras vezes estão de baixo astral e algumas vezes estão tão bem que podem ganhar de qualquer um;
- queremos punir jogadores fraudulentos. Precisamos que você nos ajude nesse sentido, para melhor lhe proteger de pessoas que não jogam honestamente.
Regras matemáticas
Analisando sistemas de pontuação existentes, estivemos à procura de uma solução apropriada que se baseasse em princípios matemáticos e pudesse gerar resultados plausíveis. Provavelmente o sistema de pontuação mais popular (conhecido como sistema ELO) foi concebido pelo Dr. Arpad Elo para xadrez. O sistema foi adotado pela FIDE (Federation Internationale des Echecs), em 1970, e desde então suas variantes foram adotadas pela maioria das associações de xadrez no mundo todo. É usado também como sistema de pontuação para outros jogos.
O sistema ELO é muito bom, mas tem alguns problemas. Em 2001, o Professor Mark E. Glickman desenvolveu um novo sistema de pontuação (o famoso sistema Glicko). Basicamente, ele se parece com o sistema ELO. A principal diferença é que ele introduz o assim chamado "desvio de pontuação" que descreve a incerteza em uma pontuação. O sistema Glicko evita algumas situações patológicas que acontecem quando um jogador joga com um novato que tem um ranking desconhecido. Decidimos usar para os nossos jogos uma versão levemente modificada do sistema Glicko:
- Punimos jogadores fraudulentos.
A pontuação nos nossos jogos é calculada da seguinte forma:
GR: A pontuação Glicko usada nos nossos jogos
Passo a) Para cada jogador, convertemos a pontuação Glicko (nos nossos jogos, usamos duas variantes para pontuação. Alguns jogos (sinuca, dardos, etc.) têm uma variação de 0 a 10.000; outros (xadrez, damas, etc.) variam de 0 a 3.000. Apresentamos equações para pontuação no eixo de 0 a 10.000; a equação de pontuação no eixo de 0 a 3.000 são analógicas) para a pontuação Glicko interna(eixo de 0 a 3.000 com o centro em 1.500).
IGR: a pontuação Glicko interna
IGR = 1500 + 1500 * (GR-5000)/10000
Passo b) Na pontuação Glicko usamos um desvio de pontuação: recalculamos o desvio inicial de pontuação:
IGRD: o desvio da pontuação Glicko interna
Se nenhum jogo foi jogado ainda:
IGRD = 150 (no Glicko original, foi usado 350. Achamos essa constante imprópria por algumas razões).
De outra forma:
T: o tempo desde o último jogo (em dias)
IGRD = min(150,sqrt(IGRD* IGRD+63.2*T)
Passo c) Calculamos a nova pontuação Glicko interna.
NIGRA: a nova pontuação Glicko interna
NIGRDA: o desvio da nova pontuação Glicko interna
NIGRB: a nova pontuação Glicko interna
NIGRDB: o desvio da nova pontuação Glicko interna
NIGRA = IGRA + QA/(1/ IGRDA2 + 1/DA2) * QRDB * (SA,B - EA,B)
NIGRDA = sqrt(1/(1/ IGRDA2 + 1/DA2))
NIGRB = IGRB + QB/(1/ IGRDB2 + 1/DB2) * QRDA * (SB,A - EB,A)
NIGRDB = sqrt(1/(1/ IGRDB2 + 1/DB2))
Onde:
PI: pi constante (3.14...)
SX,Y: o resultado do jogo: 1 quando X ganha, 0 se Y ganha, 0.5 se há empate
Q = ln(10) / 400
QRD = 1/sqrt(1+3*(Q*IGRD/PI)2)
EX,Y = 1/(1+10-QRDy*(IGRx-IGRy)/400)
DX = 1/sqrt(QX*QX*QRD Y *QRD Y * EX,Y * (1-EX,Y))
Passo d) Convertemos a nova pontuação Glicko interna de volta ao sistema original:
NGR = 5000 + 5000 * (NIGR-1500)/3000
E essa pontuação é exibida no jogo.
Fraude
O que consideramos fraude? Quando alguém não termina um jogo com pontuação (intencionalmente ou por falha de conexão), ele é penalizado. Lamentavelmente, dessa maneira pessoas que têm serviços de Internet de baixa qualidade são adicionalmente penalizadas, mas somos forçados a tomar essa atitude porque algumas pessoas simulam problemas na rede a fim de abandonar jogos quando é mais conveniente pra elas não ir até o fim. A fim de minimizar o impacto de falhas de conexão, não consideramos as primeiras desconexões como fraudulentas. Se, entretanto, as quedas de conexão acontecerem com mais freqüência, começamos a penalizar esses jogadores rebaixando sua pontuação. Isso se faz através do armazenamento no nosso banco de dados de quantas vezes exatamente houve interrupção de conexão e aplicamos uma "bomba" nesse jogador, que afeta sua pontuação.
Regras exatas:
- Se nenhum jogo foi jogado ainda, um jogador tem um valor de bomba (B) fixado em 0.
- Se um jogador está fraudando (ou se observarmos que ele não vai até o fim dos jogos) e o valor B é maior que 20, modificamos a pontuação do jogador como se ele tivesse perdido o jogo para o oponente que tem a mais baixa pontuação possível.
- Se um jogador está fraudando, aumentamos o valor B em 10 pontos, mas B não pode ser maior que 50.
- Se um jogador termina um jogo sem fraudar, B é diminuído em 1. Assim, se alguém teve problema de conexão (B aumentado por 10) e depois jogou 10 vezes sem fraudar (10 x B diminuído em 1), seu B voltará ao seu valor anterior.