nypc-perf

Crates.ionypc-perf
lib.rsnypc-perf
version0.1.2
created_at2025-07-22 06:55:27.171453+00
updated_at2025-07-22 08:06:27.958106+00
descriptionPerformance calculation of NYPC
homepage
repositoryhttps://github.com/nypc/nypc-perf
max_upload_size
id1763091
size20,269
NYPC (nypc)

documentation

https://docs.rs/nypc-perf

README

nypc-perf

Crates.io Documentation License: MIT

A Rust library for calculating player performance based on battle results using the Bradley-Terry model.

Overview

This library implements a Bradley-Terry model based performance 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 performances that best explain the observed win/loss patterns.

Installation

Add this to your Cargo.toml:

[dependencies]
nypc-perf = "0.1.2"

Usage

Basic Example

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),       // Variable rating
    Rating::new(0.0),       // Variable rating  
    Rating::new_fixed(0.0)  // Fixed anchor rating
];

// 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
for (i, rating) in perf.iter().enumerate() {
    println!("Player {}: {:.6}", i, rating.value);
}

Authors

NEXON Algorithm Research Team - _algorithm@nexon.co.kr

Documentation

For detailed API documentation, visit docs.rs/nypc-perf.

Commit count: 0

cargo fmt