Ini adalah paket yang berisi implementasi beberapa sistem peringkat untuk kompetisi multi-pemain: Glicko all-pairs, BAR BT-all-pairs, Codeforces, Topcoder, TrueSkill-SPb, dan sistem baru Elo-MMR. Semua di bawah lisensi MIT kecuali konten deprecated/cpp/trueskill.
Sistem penilaian memperkirakan keterampilan pemain yang berpartisipasi dalam aktivitas umum. Algoritme Elo-MMR dirancang untuk aktivitas yang memperingkat pemain dalam jumlah sedang hingga besar di ajang kompetitif, dan hasilnya tidak dapat distandarisasi di berbagai ajang karena alasan berikut:
Setiap acara menampilkan tantangan baru, seperti lomba rintangan, panjat tebing, dan olimpiade akademik.
Para kontestan dievaluasi relatif terhadap kontestan lain pada acara yang sama, mungkin oleh panel juri dengan tingkat subjektivitas tertentu, seperti dalam kompetisi ballroom, figure skating, dan senam.
Para kontestan banyak berinteraksi dengan orang lain di acara yang sama, seperti di kebanyakan permainan papan.
Dalam pengaturan ini, sering kali berguna untuk mengukur seberapa bagus seorang pemain. Pemeringkatan dapat digunakan untuk melacak kemajuan pemain dalam program pelatihan, menetapkan tujuan motivasi, memprediksi kemungkinan juara, atau membuat acara undangan khusus pemula atau khusus ahli. Tiga sifat Elo-MMR membuatnya sangat cocok untuk tujuan berikut:
Multipemain Besar-besaran: algoritmenya cepat dan stabil secara numerik, bahkan dengan ribuan atau jutaan kontestan yang diperingkat secara individual.
Kompatibel dengan Insentif: semakin baik kinerja Anda dalam kompetisi, semakin tinggi peringkat Anda.
Respons yang Kuat: satu peristiwa yang sangat buruk (atau sangat baik) tidak dapat mengubah peringkat Anda terlalu banyak.
Catatan: secara teori, Elo-MMR juga dapat diterapkan dalam kompetisi tim, namun diperlukan penelitian tambahan untuk menentukan cara terbaik untuk melakukan hal ini.
Pertama, instal Rust. Dari direktori multi-skill/
, jalankan perintah
RUST_LOG=debug cargo run --release --bin rate mmr-fast codeforces
UPDATE: sekarang juga dimungkinkan untuk menjalankan sistem rating dari file konfigurasi. Berikut contohnya: (file konfigurasi ini sudah kedaluwarsa, kami akan segera memperbaruinya.)
RUST_LOG=debug cargo run --release --bin rate file: ../experiments/codeforces/mmr-fast-acc.json
Untuk menguji fitur pos pemeriksaan baru, cobalah
RUST_LOG=debug cargo run --release --bin rate_from_configs ../experiments/testing/mmr-cf-1to10.json ../experiments/testing/mmr-cf-11to20.json
yang menghasilkan file pos pemeriksaan negara di direktori experiments/testing/
.
RUST_LOG=debug
menyetel variabel lingkungan untuk mencetak informasi tambahan ke terminal selama eksekusi. Perhatikan bahwa variabel lingkungan diatur secara berbeda di Windows.
cargo run
mengkompilasi dan menjalankan proyek Rust.
--release
membuat versi rilis, yang membutuhkan waktu lebih lama untuk dikompilasi tetapi dijalankan lebih cepat daripada versi dev.
--bin rate
memilih titik masuk multi-skill/src/bin/rate.rs
.
mmr-fast
adalah argumen baris perintah yang menentukan sistem peringkat. Coba mmr
untuk versi Elo-MMR yang lebih lambat namun lebih presisi.
codeforces
adalah argumen baris perintah yang menentukan kumpulan data.
Argumen bilangan bulat opsional dapat digunakan untuk menentukan berapa banyak kontes yang akan diproses.
Ini mengambil data dari kontes Codeforces yang ditentukan dalam data/codeforces/contest_ids.json
. Jika kontes belum disimpan di cache/codeforces/
, maka kontes diunduh di sana melalui API online Codeforces. Terakhir, peringkat keterampilan yang dihasilkan dari semua kontestan disimpan di data/codeforces/ratings_output.csv
.
Harap perhatikan bahwa proses Codeforces pertama Anda akan lebih lambat, karena kedudukan kontes diambil dari Codeforces API. Bahkan mungkin gagal jika Codeforces.com mengalami downtime, atau memutuskan bahwa Anda telah menggunakan terlalu banyak bandwidth; jika ini terjadi, harap tunggu beberapa menit untuk mencoba lagi.
Kontes disimpan dalam format JSON, dengan klasemen diurutkan dari tempat pertama hingga terakhir. Berikut ini contoh file kontes, yang tanda kurung siku dan elipsisnya harus diganti dengan data Anda sendiri:
{
"name": <str, human-readable name of the contest>,
"time_seconds": <int, seconds since the Unix epoch>,
"standings": [[<str, player 0's name>, <int, low rank>, <int, high rank>],
[<str, player 1's name>, <int, low rank>, <int, high rank>],
...]]
"weight": <optional float, defaults to 1 if not included>,
"perf_ceiling": <optional float, defaults to infinity if not included>
}
Peringkat rendah dan tinggi diindeks 0 dan akan berbeda untuk pemain yang terlibat dalam seri. Mereka menentukan kisaran pemain yang terikat dengan pemain ini. Misalnya, jika ada seri tiga arah di atas, pemain 0, 1, dan 2 masing-masing akan memiliki peringkat rendah 0 dan peringkat tinggi 2.
Jika Anda menjalankan perintah Codeforces di atas setidaknya selama beberapa detik, Anda akan mengunduh beberapa contoh file kontes di cache/codeforces/
, yang dapat Anda gunakan sebagai referensi.
Dengan mempertimbangkan format file ini, Anda dapat menjalankan kontes Anda sendiri sebagai berikut:
Beri nomor pada file Anda dengan bilangan bulat berurutan, kontes pertama disimpan dalam 0.json
, kontes kedua dalam 1.json
, dan seterusnya.
Tempatkan file Anda di cache/{dataset_name}/
.
Terakhir, jalankan perintah yang sama, tetapi dengan codeforces
diganti dengan {dataset_name}
.
Silakan lihat makalah lengkap yang diterbitkan di Konferensi Web 2021. Jika Anda menggunakan peti ini dalam penelitian Anda, mohon pertimbangkan untuk mengutip makalah kami.