nypc-perf 0.1.0

Performance calculation of NYPC
Documentation
  • Coverage
  • 62.5%
    10 out of 16 items documented3 out of 10 items with examples
  • Size
  • Source code size: 17.43 kB This is the summed size of all the files inside the crates.io package for this release.
  • Documentation size: 1.97 MB This is the summed size of all files generated by rustdoc for all configured targets
  • Ø build duration
  • this release: 15s Average build duration of successful builds.
  • all releases: 13s Average build duration of successful builds in releases after 2024-10-23.
  • Links
  • Repository
  • crates.io
  • Dependencies
  • Versions
  • Owners
  • nypc
nypc-perf-0.1.0 has been yanked.

A library for calculating player performance ratings based on battle results.

This library implements a Bradley-Terry model based rating system that estimates player performance levels from head-to-head battle outcomes. The algorithm uses Newton-Raphson iteration to find maximum likelihood estimates of player ratings that best explain the observed win/loss patterns.

Usage

use nypc_perf::{BattleResult, PerfCalc, Rating};

// Create battle results between players
let battles = vec![
    BattleResult {
        i: 0,           // Player 0
        j: 1,           // Player 1
        wij: 2.0,       // Player 0 won twice against Player 1
        wji: 1.0,       // Player 1 won once against Player 0
    },
    BattleResult {
        i: 0,
        j: 2,
        wij: 1.0,
        wji: 0.0,
    }
];

// Initialize performance ratings to 0
let mut perf = vec![Rating::new(0.0), Rating::new(0.0), Rating::new_fixed(0.0)];

// Run the rating calculation
let result = PerfCalc::new()
    .max_iters(100)     // Maximum iterations (default: 100)
    .epsilon(1e-6)      // Convergence threshold (default: 1e-6)
    .run(&mut perf, &battles);

// Check if calculation converged
match result {
    Ok(iters) => println!("Converged after {} iterations", iters),
    Err(err) => println!("Did not converge, final error: {}", err)
}

// perf now contains the estimated log-performance ratings
// Higher values indicate better performance

Mathematical Model

The library uses the Bradley-Terry model. Under this model, the probability of player i winning against player j is:

P(i beats j) = 1 / (1 + exp(βⱼ - βᵢ))

where βᵢ is the log-performance rating of player i.

The algorithm finds values of βᵢ that maximize the likelihood of the observed battle outcomes, with normal prior. For more details on the mathematical foundations and implementation, see docs/rating.pdf.

Performance

The algorithm typically converges within 10-20 iterations for moderately sized problems (100s of players, 10000s of battles).