npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

glicko2.ts

v1.3.2

Published

Implementation of the Glicko2 ranking system in Typescript

Downloads

437

Readme

glicko2.ts

Codecov Continuous Integration npm npm

About

An Implementation of the Glicko-2 rating system in typescript. The Glicko-2 rating system is a method for assessing a player's strength in games of skill, such as chess and go. The algorithm is explained by its author, Mark E. Glickman, on http://glicko.net/glicko.html.

Each player begins with a rating, a rating deviation (accuracy of the rating) and a volatility (speed of rating evolution). These values will evolve according to the outcomes of matches with other players.

This implementation is fully typed and written in Typescript.

It also includes things that where not in the base Glicko-2 system including races and teams for games that have more than two players.

Installing

Node(npm/yarn)

npm i glicko2.ts

or

yarn add glicko2.ts

Deno

To install in a Deno environment you can use the package hosted at

https://deno.land/x/glicko2/deno_dist/mod.ts

Usage

First we initiate a ranking manager and create players with initial ratings, rating deviations and volatilities.

import { Player, Glicko2 } from 'glicko2.ts'

const ranking = new Glicko2({
    // tau : "Reasonable choices are between 0.3 and 1.2, though the system should
    //        be tested to decide which value results in greatest predictive accuracy"
    tau : 0.5,
    // rating : default rating
    rating : 1500,
    //rd : Default rating deviation 
    //     small number = good confidence on the rating accuracy
    rd : 200,
    //vol : Default volatility (expected fluctuation on the player rating)
    vol : 0.06
})

const Player1 = ranking.makePlayer()
const Player2 = ranking.makePlayer(1400, 30, 0.06)
const Player3 = ranking.makePlayer(1500, 100, 0.06)

Afterwards we can create a simple match or matches and calculate the ratings

const matches = []
matches.push([Player1, Player2, 1]) //Player1 won over Player2
matches.push([Player1, Player3, 0.5]) //A draw between Player1 and Player3
ranking.updateRatings(matches)

When to update rankings

You should not update the ranking after each match. The typical use of glicko is to calculate the ratings after each tournament (ie collection of matches in a period of time). A player rating will evolve after a tournament has finished, but not during the tournament.

Here is what says Mark E. Glickman about the number of matches in a tournament or rating period (cf. http://www.glicko.net/glicko/glicko2.pdf ) :

The Glicko-2 system works best when the number of games in a rating period is moderate to large, say an average of at least 10-15 games per player in a rating period.

Races

Another function that is included in this library is for multiple competitor matches called "Races" where they are competing at the same time.

const race = raking.makeRace(
    [
        [Player1], //Player1 won the race
        [Player2, Player3], //Player2 and Player3 both tied at 2nd position
    ]
)

ranking.updateRatings(race)

API Documentation

The API documentation is hosted at https://glicko2.js.org

License

This repository is licensed under GNU General Public License v3.0