هذه حزمة تحتوي على تطبيقات العديد من أنظمة التصنيف للمسابقات متعددة اللاعبين: Glicko all-pairs، وBAR BT-all-pairs، وCodeforces، وTopcoder، وTrueSkill-SPb، والنظام الجديد Elo-MMR. كل ذلك بموجب ترخيص MIT باستثناء محتويات مهملة/cpp/trueskill.
تقوم أنظمة التصنيف بتقدير مهارات اللاعبين الذين يشاركون في نشاط مشترك. تم تصميم خوارزمية Elo-MMR للأنشطة التي يتم فيها تصنيف أعداد متوسطة إلى كبيرة من اللاعبين في الأحداث التنافسية، ولا يمكن توحيد النتائج عبر الأحداث المختلفة لأي من الأسباب التالية:
يتميز كل حدث بتحديات جديدة، مثل سباقات مضمار العوائق، وتسلق الصخور، والأولمبياد الأكاديمي.
يتم تقييم المتسابقين مقارنة بالآخرين في نفس الحدث، ربما من قبل لجنة من الحكام بدرجة معينة من الذاتية، كما هو الحال في قاعة الرقص التنافسية، والتزلج على الجليد، والجمباز.
يتفاعل المتسابقون بشكل كبير مع الآخرين في نفس الحدث، كما هو الحال في معظم ألعاب الطاولة.
في هذه الإعدادات، غالبًا ما يكون من المفيد قياس مدى جودة اللاعب. يمكن استخدام التقييمات لتتبع تقدم اللاعب خلال برنامج تدريبي، أو تحديد أهداف تحفيزية، أو التنبؤ بالأبطال المحتملين، أو إنشاء أحداث دعوة للمبتدئين فقط أو للخبراء فقط. ثلاث خصائص لـ Elo-MMR تجعله مناسبًا بشكل خاص لهذه الأهداف:
تعدد اللاعبين على نطاق واسع: الخوارزمية سريعة ومستقرة عدديًا، حتى مع وجود الآلاف أو الملايين من المتسابقين المصنفين بشكل فردي.
متوافق مع الحوافز: كلما كان أدائك أفضل في المسابقات، ارتفع تقييمك.
استجابة قوية: لا يمكن لحدث واحد سيء جدًا (أو جيد جدًا) أن يغير تقييمك كثيرًا.
ملحوظة: من الناحية النظرية، يمكن تطبيق Elo-MMR في مسابقات الفرق أيضًا، ولكن هناك حاجة إلى بحث إضافي لتحديد أفضل الطرق للقيام بذلك.
أولاً، قم بتثبيت الصدأ. من الدليل 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
ينشئ بنية إصدار، والتي تستغرق وقتًا أطول لتجميعها ولكنها يتم تنفيذها بشكل أسرع من بنية التطوير.
--bin rate
يحدد نقطة الدخول multi-skill/src/bin/rate.rs
.
mmr-fast
هي وسيطة سطر أوامر تحدد نظام التصنيف. جرب mmr
للحصول على إصدار أبطأ ولكن أكثر دقة من Elo-MMR.
codeforces
هي وسيطة سطر أوامر تحدد مجموعة البيانات.
قد تتبع وسيطة عدد صحيح اختياري لتحديد عدد المسابقات التي سيتم معالجتها.
يقوم بسحب البيانات من مسابقات Codeforces المحددة في data/codeforces/contest_ids.json
. إذا لم تكن المسابقة مخزنة بالفعل في cache/codeforces/
، فسيتم تنزيلها هناك عبر واجهة برمجة تطبيقات Codeforces عبر الإنترنت. وأخيرًا، يتم حفظ تقييمات المهارات الناتجة لجميع المتسابقين في 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}
.
يرجى الاطلاع على الورقة الكاملة المنشورة في مؤتمر الويب 2021. إذا كنت تستخدم هذا الصندوق في بحثك، فيرجى التفكير في الاستشهاد بورقتنا البحثية.