उन लोगों को संभालने के लिए ईएलओ एल्गोरिथ्म जो अक्सर नहीं खेलते हैं


9

मैं चल रहे पोंग प्रतियोगिता में खिलाड़ियों को रैंक करने के लिए ELO एल्गोरिथ्म का उपयोग कर रहा हूं। अधिकांश खिलाड़ी हर दिन खेलते हैं, लेकिन हमें एक खिलाड़ी मिला है जो एक महीने में नहीं खेला है। मेरा एल्गोरिथ्म वर्तमान में केवल पिछले 30 दिनों में स्कोर को ट्रैक करता है, और इसके परिणामस्वरूप, यह खिलाड़ी कभी नहीं खेले जाने के बावजूद तेजी से रैंक के माध्यम से बढ़ रहा है। उसने अपने पहले गेम का एक गुच्छा गंवा दिया, लेकिन अपने आखिरी कुछ मैचों में से अधिकांश जीते, जिसका मतलब है कि उसके नुकसान चार्ट से बाहर हो रहे हैं और परिणामस्वरूप उसका स्कोर बढ़ रहा है।

जाहिर है, 30 दिनों के बाद स्कोर छोड़ने की मेरी योजना काम नहीं कर रही है। अक्सर नहीं खेलने के लिए मैं खिलाड़ियों को दंडित करने के लिए किन अन्य तरीकों का उपयोग कर सकता हूं?

केवल एक चीज जो मैंने इस प्रकार की है, वह प्रतिशत के आधार पर अंकों को कम करने के लिए है जो निष्क्रियता के दिनों पर आधारित है (यानी यदि कोई उपयोगकर्ता एक सप्ताह में नहीं खेला है, तो उसके अंक केवल 70% सामान्य मूल्य के हैं,) और उसे 100% अंक प्राप्त करने के लिए एक्स बार खेलना होगा)।

हालाँकि, यह बहुत अधिक मनमाना लगता है। क्या किसी के पास अन्यथा सक्रिय वातावरण में निष्क्रिय खिलाड़ियों को संभालने के लिए कोई बेहतर विचार या सुझाव है?

अग्रिम में धन्यवाद।

जवाबों:


18

ऐसा लगता है कि आप प्रत्येक मैच के लिए दिए गए अंकों को संग्रहीत कर रहे हैं, और फिर समय के साथ उन बिंदु समायोजन को 'समाप्त' कर रहे हैं। जैसा कि, आपने देखा है, आसान शोषण के लिए खुला है।

एक मानक ईएलओ कार्यान्वयन में, आपका ईएलओ स्कोर हमेशा के लिए है; यह समय के साथ 'क्षय' नहीं करता है, क्योंकि अंक रैंकिंग प्रणाली को इस तरह से छोड़ देते हैं, जिससे अंततः समग्र स्कोर अपस्फीति हो जाएगी (यानी: 1500 का मतलब अब 'औसत' नहीं होगा)।

याद रखें कि ईएलओ रैंकिंग "अंक" नहीं है जिस तरह से खेल खिलाड़ी आमतौर पर उनके बारे में सोचते हैं; वे अन्य खिलाड़ियों के सापेक्ष एक खिलाड़ी के कौशल के स्तर को क्रमबद्ध करने का प्रयास करते हैं, वे पुरस्कार नहीं हैं। इन बिंदुओं को खिलाड़ी को सजा के रूप में नहीं लिया जाना चाहिए, क्योंकि वे एकमात्र उपकरण हैं जो आपको समान कौशल स्तर के विरोधियों के खिलाफ खिलाड़ियों से मेल खाने की कोशिश करना है। केवल एक चीज जो इन मूल्यों को प्रभावित करना चाहिए - कभी - अन्य रैंक वाले खिलाड़ियों के खिलाफ जीत और नुकसान।

अधिकांश खेलों द्वारा लिया गया दृष्टिकोण जो खिलाड़ियों को एक उच्च स्कोर प्राप्त करने से रोकना चाहता है और फिर गायब हो जाता है, फिर कभी नहीं खेलना है, लीडरबोर्ड प्रदर्शन के लिए गतिविधि की आवश्यकता है; यदि किसी खिलाड़ी ने 30 दिनों (या जो भी) में कोई खेल नहीं खेला है, वे बस लीडरबोर्ड में नहीं दिखाते हैं जब तक कि वे ऐसा नहीं करते हैं। जब खिलाड़ी वापस लौटता है और दूसरा स्थान प्राप्त मैच खेलता है, तो वे अपनी पूरी ईएलओ रैंकिंग के साथ लौटते हैं, जैसे कि वे कभी नहीं गए थे। यदि उनका कौशल स्तर अंतरिम में अन्य सक्रिय खिलाड़ियों के सापेक्ष बदल गया है, तो गेम जल्दी से नोटिस करेगा और विरोधियों के खिलाफ मैच जीतने और खोने की मानक प्रक्रिया के माध्यम से उनकी रैंकिंग को समायोजित करेगा।


1
+1 जबकि यह सही स्पष्टीकरण है कि यह क्यों विफल हो रहा है, मैं सिर्फ ELO को छोड़ दूंगा और कुछ पूरी तरह से अलग करूंगा। (मैं नहीं जानता कि क्या, या मैंने इसे ^ ^ पोस्ट किया होगा)
o0 '।

4
@ लोरिस यह पूरी तरह से समझदार विकास विकल्प होगा। यदि लक्ष्य एक दूसरे के सापेक्ष कौशल के उद्देश्य स्तर के लोगों की सार्थक तुलना को बनाए रखने का नहीं है, (यानी मंगनी के उद्देश्यों के लिए), तो ईएलओ स्कोरिंग तंत्र के रूप में उपयोग के लिए एक बढ़िया विकल्प नहीं है। और यहां तक ​​कि कुछ गेम भी हैं जो प्रदर्शन के उद्देश्यों के लिए पूरी तरह से अलग "अंक" प्रणाली का उपयोग करते हुए मंगनी के लिए हुड के तहत ईएलओ जैसी प्रणाली का उपयोग करते हैं, जो उन्हें लोगों को अधिक बार खेलने के लिए पुरस्कृत करता है। उदाहरण के लिए, StarCraft 2 ऐसा करता है।
ट्रेवर पॉवेल

4

एलो और ट्रूस्किल जैसे एल्गोरिदम एक खिलाड़ी के खेल के परिणाम के आधार पर उसके कौशल का निर्धारण करते हैं, बिना समय बीतने के संबंध में। हालांकि, दोनों एल्गोरिदम एक "अनिश्चितता" कारक के साथ आते हैं - एलो के मामले में, K Factorआम तौर पर नए खिलाड़ियों के लिए उच्च सेट किया जाता है, जैसे कि उनकी एलो रेटिंग उनके "सही" कौशल रेटिंग को जल्दी से परिवर्तित करेगी। एक निर्धारित समय या गेम की एक निर्धारित संख्या के बाद, K Factorसामान्य रूप से कम कर दिया जाता है, ताकि गेम के बीच रेटिंग कम हो जाए।

आप जो देख रहे हैं, वह संभवतः विशिष्ट एलो व्यवहार है (आपके एलो कार्यान्वयन के आधार पर): आपके खिलाड़ी ने अपने प्रतिद्वंद्वियों की तुलना में कम गेम खेले हैं, जो उसे एक उच्चतर के साथ "नया खिलाड़ी" बनाता है K Factor; चूंकि वह अपने गेम जीत रहा है, एल्गोरिथ्म उसे एक उच्च-कुशल खिलाड़ी के रूप में देखता है और उसे उच्च रैंकिंग देता है!

ध्यान दें कि रैंकिंग एल्गोरिदम का उपयोग आमतौर पर केवल खिलाड़ियों के बीच तुलना के लिए किया जाता है, कि प्रतियोगिताओं के परिणाम को निर्धारित करने के लिए, उनके व्यवहार को देखते हुए। यह देखते हुए कि आप भागीदारी को पुरस्कृत करना चाहते हैं, मैं प्रतियोगिता में खिलाड़ियों को दूसरे तरीके से स्कोर करने की सलाह दूंगा। कुछ सुझाव:

  • जीत की संख्या के आधार पर स्कोर खिलाड़ी।
  • जीत / हार के लिए बिंदु मान निर्दिष्ट करें, जैसे एक जीत के लिए 2 अंक, एक नुकसान के लिए 1 अंक।
  • किसी दिए गए सप्ताह / महीने में केवल खिलाड़ी के सर्वश्रेष्ठ X खेलों की गिनती करें।
  • "योग्य" के लिए खिलाड़ियों को न्यूनतम संख्या में खेल खेलने की आवश्यकता होती है।

ध्यान दें कि इन समाधानों में से कोई भी पूरी तरह से "उचित" परिणाम नहीं देगा, क्योंकि जो खिलाड़ी अधिक खेलते हैं, उन खिलाड़ियों की तुलना में उच्च स्कोर होगा जो नहीं करते हैं। निष्पक्षता सुनिश्चित करने का एकमात्र तरीका खिलाड़ियों को समान संख्या में खेल खेलना है।


मुझे लगता है कि यह केवल उचित है कि जो खिलाड़ी अधिक खेलते हैं (एक ही औसत जीत / हानि अनुपात होने पर) उन खिलाड़ियों की तुलना में अधिक स्कोर होना चाहिए जो अधिक से अधिक नहीं खेलते हैं ...
डेविड गौवेया

3
@davidluzgouveia - यह कड़ाई से "निष्पक्ष" की परिभाषा नहीं है। जब एक टूर्नामेंट में खिलाड़ियों को स्कोर किया जाता है, तो परिणाम "निष्पक्ष" होता है यदि किसी खिलाड़ी को ऐसा फायदा नहीं होता है जो दूसरे खिलाड़ी को नहीं मिलता है (कौशल के सम्मान के बिना)। यह कहने के बाद, मुझे लगता है कि हम जिस मामले के बारे में बात कर रहे हैं, वह दोस्तों के बीच एक आकस्मिक प्रतियोगिता है; स्कोरिंग बाहरी जीत की तुलना में भागीदारी को प्रोत्साहित करने के बारे में अधिक है।
ब्लेयर होलोवे

हां, यह एक सख्त टूर्नामेंट के बजाय एक आकस्मिक प्रतियोगिता है। मैं डेविड की टिप्पणी से सहमत हूं, जाहिर है, यही वजह है कि मैं यहां समाधान चाह रहा हूं। आपके सहयोग के लिए धन्यवाद!
जेमक्लस

0

मैं ELO एल्गोरिथ्म के बारे में नहीं जानता, लेकिन उन लोगों को दंडित करने के बजाय जो अक्सर नहीं खेलते हैं, आप अक्सर खेलने वाले लोगों को इनाम देते हैं? उदाहरण के लिए यदि आपने अपना स्कोर कुछ इस तरह बनाया है:

Score = (Wins / Losses) * (Total Games Played) * Some_Scale_Factor

फिर जो लोग अक्सर खेलते हैं वे शायद अधिक गेम खेलना और उच्च स्कोर प्राप्त करने के लिए अधिक संभावना रखते हैं।

और एक और बात जो आप बदलना चाहते हैं, वह यह है कि खिलाड़ी के कुल स्कोर पर पुराने स्कोर को प्रभावित करने से रोका जाए। यही मुख्य कारण है कि वह खिलाड़ी रैंकों में बढ़ रहा है (और यह भी कि वह अंततः चार्ट से पूरी तरह से क्यों गिर जाएगा)।

इसके अलावा, जो लोग थोड़ी देर के लिए गंभीरता से खेलते हैं और एक महान ट्रैक रिकॉर्ड हासिल करते हैं, शायद यह जानकर खुश नहीं होंगे कि उनकी उपलब्धियां अंततः दूर हो जाएंगी और गायब हो जाएंगी। वह व्यवस्था गंभीरता से हतोत्साहित कर रही है।

यह प्रत्येक खिलाड़ी के "कुल खेले गए खेल" और "जीत / हार अनुपात" को कैश रखने के द्वारा आसानी से तय किया जाता है, भले ही आप स्वयं स्कोर हटा दें।

उस जानकारी के साथ आप आसानी से वापस कटौती कर सकते हैं कि खिलाड़ी ने कितने जीत और नुकसान किए हैं और जब भी वह फिर से खेलता है, उसके अनुसार उन्हें अपडेट करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.