นี่คือแพ็คเกจที่มีการใช้งานระบบการให้คะแนนหลายระบบสำหรับการแข่งขันแบบผู้เล่นหลายคน: Glicko all-pairs, BAR BT-all-pairs, Codeforces, Topcoder, TrueSkill-SPb และระบบใหม่ Elo-MMR ทั้งหมดอยู่ภายใต้ใบอนุญาตของ MIT ยกเว้นเนื้อหาของ deprecated/cpp/trueskill
ระบบการให้คะแนนประเมินทักษะของผู้เล่นที่เข้าร่วมในกิจกรรมทั่วไป อัลกอริธึม Elo-MMR ได้รับการออกแบบมาสำหรับกิจกรรมที่มีการจัดอันดับผู้เล่นจำนวนมากถึงปานกลางในกิจกรรมการแข่งขัน และผลลัพธ์ไม่สามารถเป็นมาตรฐานในกิจกรรมต่างๆ ได้ด้วยเหตุผลใดๆ ต่อไปนี้:
แต่ละงานมีความท้าทายใหม่ๆ เช่น การแข่งขันบนเส้นทางวิบาก การปีนหน้าผา และโอลิมปิกวิชาการ
ผู้เข้าแข่งขันจะได้รับการประเมินโดยเทียบกับคนอื่นๆ ในงานเดียวกัน บางทีอาจโดยคณะกรรมการตัดสินที่มีระดับความเป็นส่วนตัว เช่น ในห้องบอลรูมแข่งขัน สเก็ตลีลา และยิมนาสติก
ผู้เข้าแข่งขันมีปฏิสัมพันธ์อย่างหนักกับผู้อื่นในงานเดียวกัน เช่นเดียวกับในเกมกระดานส่วนใหญ่
ในการตั้งค่าเหล่านี้ การวัดปริมาณว่าผู้เล่นเก่งมักจะมีประโยชน์ การให้คะแนนสามารถใช้เพื่อติดตามความคืบหน้าของผู้เล่นในโปรแกรมการฝึกซ้อม กำหนดวัตถุประสงค์ในการสร้างแรงบันดาลใจ ทำนายโอกาสเป็นแชมป์ หรือสร้างกิจกรรมเฉพาะผู้เริ่มต้นหรือผู้เชี่ยวชาญที่ได้รับเชิญเท่านั้น คุณสมบัติสามประการของ Elo-MMR ทำให้เหมาะสมกับเป้าหมายเหล่านี้เป็นพิเศษ:
ผู้เล่นหลายคนจำนวนมาก: อัลกอริธึมนั้นรวดเร็วและมีเสถียรภาพทางตัวเลข แม้ว่าจะมีผู้เข้าแข่งขันที่ได้รับการจัดอันดับเป็นรายบุคคลนับพันหรือหลายล้านคนก็ตาม
เข้ากันได้กับสิ่งจูงใจ: ยิ่งคุณทำผลงานได้ดีขึ้นในการแข่งขัน คะแนนของคุณก็จะสูงขึ้นตามไปด้วย
การตอบสนองที่แข็งแกร่ง: เหตุการณ์ที่แย่มาก (หรือดีมาก) เหตุการณ์หนึ่งไม่สามารถเปลี่ยนแปลงคะแนนของคุณได้มากเกินไป
หมายเหตุ: ตามทฤษฎีแล้ว Elo-MMR สามารถนำไปใช้ในการแข่งขันแบบทีมได้เช่นกัน แต่จำเป็นต้องมีการวิจัยเพิ่มเติมเพื่อกำหนดวิธีที่ดีที่สุดในการดำเนินการนี้
ขั้นแรกให้ติดตั้ง Rust จากไดเร็กทอรี multi-skill/
ให้รันคำสั่ง
RUST_LOG=debug cargo run --release --bin rate mmr-fast codeforces
อัปเดต: ขณะนี้สามารถเรียกใช้ระบบการให้คะแนนจากไฟล์กำหนดค่าได้แล้ว นี่คือตัวอย่าง: (ไฟล์กำหนดค่านี้ล้าสมัย เราจะอัปเดตในไม่ช้า)
RUST_LOG=debug cargo run --release --bin rate file: ../experiments/codeforces/mmr-fast-acc.json
หากต้องการทดสอบคุณสมบัติจุดตรวจสอบใหม่ ให้ลอง
RUST_LOG=debug cargo run --release --bin rate_from_configs ../experiments/testing/mmr-cf-1to10.json ../experiments/testing/mmr-cf-11to20.json
ซึ่งสร้างไฟล์จุดตรวจสอบสถานะในไดเร็กทอรี experiments/testing/
RUST_LOG=debug
ตั้งค่าตัวแปรสภาพแวดล้อมเพื่อพิมพ์ข้อมูลเพิ่มเติมไปยังเทอร์มินัลระหว่างการดำเนินการ โปรดทราบว่าตัวแปรสภาพแวดล้อมได้รับการตั้งค่าแตกต่างกันบน Windows
cargo run
รวบรวมและดำเนินโครงการ Rust
--release
สร้าง release build ซึ่งใช้เวลาในการคอมไพล์นานกว่า แต่ดำเนินการได้เร็วกว่า build dev
--bin rate
เลือกจุดเข้า multi-skill/src/bin/rate.rs
mmr-fast
เป็นอาร์กิวเมนต์บรรทัดคำสั่งที่ระบุระบบการให้คะแนน ลองใช้ mmr
เพื่อให้ได้ Elo-MMR เวอร์ชันที่ช้ากว่าแต่แม่นยำยิ่งขึ้น
codeforces
เป็นอาร์กิวเมนต์บรรทัดคำสั่งที่ระบุชุดข้อมูล
อาร์กิวเมนต์จำนวนเต็มเพิ่มเติมอาจตามมา เพื่อระบุจำนวนการแข่งขันที่ต้องดำเนินการ
โดยดึงข้อมูลจากการแข่งขัน Codeforces ที่ระบุใน data/codeforces/contest_ids.json
หากการแข่งขันไม่ได้ถูกจัดเก็บไว้ใน cache/codeforces/
การแข่งขันจะถูกดาวน์โหลดที่นั่นผ่านทาง Codeforces online API สุดท้าย ผลการจัดอันดับทักษะของผู้เข้าแข่งขันทั้งหมดจะถูกบันทึกไว้ใน data/codeforces/ratings_output.csv
โปรดทราบว่าการใช้งาน Codeforces ครั้งแรกของคุณจะช้าลง เนื่องจากอันดับการแข่งขันจะถูกดึงมาจาก Codeforces API มันอาจจะล้มเหลวหาก Codeforces.com ประสบปัญหาการหยุดทำงานหรือตัดสินใจว่าคุณใช้แบนด์วิธมากเกินไป หากเกิดเหตุการณ์เช่นนี้ โปรดรอสักครู่แล้วลองอีกครั้ง
การแข่งขันจะถูกจัดเก็บในรูปแบบ JSON โดยเรียงลำดับจากที่หนึ่งไปสุดท้าย นี่คือตัวอย่างไฟล์การแข่งขัน ซึ่งควรแทนที่วงเล็บมุมและจุดไข่ปลาด้วยข้อมูลของคุณเอง:
{
"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>
}
อันดับต่ำและสูงจะมีดัชนี 0 และจะแตกต่างกันไปสำหรับผู้เล่นที่เสมอกัน พวกเขาระบุช่วงของผู้เล่นที่ผู้เล่นรายนี้เสมอกัน ตัวอย่างเช่น หากมีการเสมอกันสามทางที่ด้านบน ผู้เล่น 0, 1 และ 2 แต่ละคนจะมีอันดับต่ำเป็น 0 และอันดับสูงเป็น 2
หากคุณรันคำสั่ง Codeforces ข้างต้นเป็นเวลาอย่างน้อยสองสามวินาที คุณจะดาวน์โหลดไฟล์การแข่งขันตัวอย่างบางส่วนใน cache/codeforces/
ซึ่งคุณอาจใช้เป็นข้อมูลอ้างอิงได้
เมื่อคำนึงถึงรูปแบบไฟล์นี้ คุณสามารถจัดการแข่งขันของคุณเองได้ดังต่อไปนี้:
กำหนดหมายเลขไฟล์ของคุณด้วยจำนวนเต็มติดต่อกัน การแข่งขันครั้งแรกจะถูกบันทึกใน 0.json
การแข่งขันครั้งที่สองใน 1.json
และอื่นๆ
วางไฟล์ของคุณใน cache/{dataset_name}/
สุดท้าย ให้รันคำสั่งเดียวกัน แต่แทนที่ด้วย codeforces
ด้วย {dataset_name}
โปรดดูรายงานฉบับเต็มซึ่งเผยแพร่ในงาน Web Conference 2021 หากคุณใช้ลังนี้ในการวิจัย โปรดพิจารณาอ้างอิงรายงานของเรา