| Crates.io | nypc-perf |
| lib.rs | nypc-perf |
| version | 0.1.2 |
| created_at | 2025-07-22 06:55:27.171453+00 |
| updated_at | 2025-07-22 08:06:27.958106+00 |
| description | Performance calculation of NYPC |
| homepage | |
| repository | https://github.com/nypc/nypc-perf |
| max_upload_size | |
| id | 1763091 |
| size | 20,269 |
A Rust library for calculating player performance based on battle results using the Bradley-Terry model.
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.
Add this to your Cargo.toml:
[dependencies]
nypc-perf = "0.1.2"
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);
}
NEXON Algorithm Research Team - _algorithm@nexon.co.kr
For detailed API documentation, visit docs.rs/nypc-perf.