อัลกอริทึม ELO สำหรับการจัดการผู้ที่ไม่ได้เล่นบ่อย


9

ฉันใช้อัลกอริทึม ELO เพื่อจัดอันดับผู้เล่นในการแข่งขันปิงปองที่ต่อเนื่อง ผู้เล่นส่วนใหญ่เล่นทุกวัน แต่เรามีผู้เล่นหนึ่งคนที่ไม่ได้เล่นในหนึ่งเดือน ปัจจุบันอัลกอริทึมของฉันติดตามเฉพาะคะแนนในช่วง 30 วันที่ผ่านมาและเป็นผลให้ผู้เล่นคนนี้เพิ่มขึ้นอย่างรวดเร็วผ่านอันดับแม้จะไม่เคยเล่น เขาแพ้เกมแรกไปหลายนัด แต่ชนะในเกมสองสามเกมสุดท้ายซึ่งหมายความว่าการสูญเสียของเขาจะลดลงจากชาร์ตและคะแนนของเขาก็จะเพิ่มขึ้นตามไปด้วย

เห็นได้ชัดว่าแผนของฉันที่จะส่งมอบคะแนนหลังจาก 30 วันไม่ทำงาน ฉันจะใช้วิธีอื่นใดเพื่อลงโทษผู้เล่นที่ไม่เล่นบ่อยครั้งได้อย่างไร

สิ่งเดียวที่ฉันคิดไว้ตอนนี้คือลดคะแนนตามเปอร์เซ็นต์ของวันที่ไม่มีกิจกรรม (เช่นหากผู้ใช้ไม่ได้เล่นในหนึ่งสัปดาห์คะแนนของเขาจะมีค่า 70% ของปกติเท่านั้น และเขาจะต้องเล่น X ครั้งเพื่อให้ได้คะแนนมากถึง 100%)

อย่างไรก็ตามสิ่งนี้ดูเหมือนว่าจะไม่เจาะจงเกินไป ใครบ้างมีความคิดหรือคำแนะนำที่ดีกว่าสำหรับการจัดการผู้เล่นที่ไม่ได้ใช้งานในสภาพแวดล้อมที่ใช้งานเป็นอย่างอื่น?

ขอบคุณล่วงหน้า.

คำตอบ:


18

ดูเหมือนว่าคุณกำลังเก็บคะแนนที่ได้รับสำหรับการแข่งขันแต่ละครั้งและจากนั้น 'หมดอายุ' การปรับจุดเหล่านั้นเมื่อเวลาผ่านไป ซึ่งตามที่คุณสังเกตเห็นจะเปิดให้มีการใช้ประโยชน์ง่าย

ในการปฏิบัติตามมาตรฐาน ELO คะแนน ELO ของคุณจะคงอยู่ตลอดไป มันไม่ได้ 'สลายตัว' เมื่อเวลาผ่านไปเนื่องจากการมีคะแนนออกจากระบบการจัดอันดับด้วยวิธีนี้ในที่สุดจะนำไปสู่ภาวะเงินฝืดคะแนนรวม (เช่น: 1500 จะไม่หมายถึง 'เฉลี่ย' อีกต่อไป)

โปรดจำไว้ว่าการจัดอันดับของ ELO ไม่ใช่ "คะแนน" ในแบบที่ผู้เล่นเกมมักนึกถึง พวกเขาเป็นความพยายามในการจัดอันดับทักษะของผู้เล่นเมื่อเทียบกับผู้เล่นอื่นพวกเขาไม่ใช่รางวัล คะแนนเหล่านี้ไม่ควรถูกนำไปลงโทษผู้เล่นเนื่องจากเป็นเครื่องมือเดียวที่คุณต้องพยายามจับคู่ผู้เล่นกับคู่แข่งในระดับทักษะที่คล้ายคลึงกัน สิ่งเดียวที่ควรมีผลต่อค่าเหล่านี้ - ตลอดไป - คือชัยชนะและการสูญเสียต่อผู้เล่นอันดับอื่น ๆ

วิธีการที่ใช้โดยเกมส่วนใหญ่ที่ต้องการหยุดผู้เล่นจากการทำคะแนนสูงสุดและหายไปไม่เล่นอีกครั้งคือการมีกิจกรรมที่จำเป็นสำหรับการแสดงลีดเดอร์บอร์ด หากผู้เล่นไม่ได้เล่นเกมใน 30 วัน (หรืออะไรก็ตาม) พวกเขาก็จะไม่ปรากฏในกระดานผู้นำจนกว่าพวกเขาจะทำ เมื่อผู้เล่นกลับมาและเล่นอีกนัดหนึ่งพวกเขากลับมาพร้อมอันดับ ELO แบบเต็มราวกับว่าพวกเขาไม่เคยออกจาก หากระดับความสามารถของพวกเขาเปลี่ยนไปเมื่อเทียบกับผู้เล่นอื่น ๆ ในระหว่างนั้นเกมจะสังเกตเห็นได้อย่างรวดเร็วและปรับระดับของพวกเขาผ่านกระบวนการมาตรฐานในการชนะและแพ้การแข่งขันกับคู่ต่อสู้


1
+1 ในขณะที่นี่คือคำอธิบายที่ถูกต้องว่าทำไมสิ่งนี้ถึงล้มเหลวฉันแค่เอา ELO แทนแล้วไปหาบางอย่างที่แตกต่างออกไปโดยสิ้นเชิง (ฉันไม่รู้อะไรเลยหรือฉันจะโพสต์มัน ^^)
o0 '

4
@ โลโฮริสนั่นเป็นทางเลือกในการพัฒนาที่สมบูรณ์แบบ หากเป้าหมายนั้นไม่ได้มีไว้เพื่อการเปรียบเทียบระดับความรู้ความสามารถของผู้คนที่มีความสัมพันธ์ซึ่งกันและกัน (เช่น: เพื่อจุดประสงค์ในการจับคู่) ELO ไม่ใช่ตัวเลือกที่ยอดเยี่ยมสำหรับใช้เป็นกลไกการให้คะแนน และยังมีเกมบางเกมที่ใช้ระบบเช่น ELO ภายใต้ประทุนเพื่อการจับคู่ในขณะที่ใช้ระบบ "คะแนน" ที่แตกต่างกันอย่างสิ้นเชิงสำหรับจุดประสงค์ในการแสดงผลซึ่งช่วยให้พวกเขาให้รางวัลแก่คนที่เล่นบ่อยขึ้น ตัวอย่างเช่น StarCraft 2 ทำเช่นนี้
Trevor Powell

4

อัลกอริทึมเช่น Elo และ TrueSkill กำหนดทักษะของผู้เล่นตามผลของการเล่นแต่ละเกมโดยไม่คำนึงถึงกาลเวลา อย่างไรก็ตามอัลกอริธึมทั้งสองมาพร้อมกับปัจจัย "ความไม่แน่นอน" - ในกรณีของ Elo นั้นจะมีการK Factorตั้งค่าที่สูงสำหรับผู้เล่นใหม่เช่นการจัดอันดับ Elo จะรวมอยู่ในการจัดอันดับทักษะ "จริง" ของพวกเขาได้อย่างรวดเร็ว หลังจากเวลาที่กำหนดหรือจำนวนเกมที่กำหนดK Factorปกติจะลดลงเพื่อให้คะแนนการเปลี่ยนแปลงน้อยลงระหว่างเกม

สิ่งที่คุณเห็นกำลังเป็นพฤติกรรม Elo แนวโน้มทั่วไป (ขึ้นอยู่กับการดำเนินงานอีโลของคุณ): ผู้เล่นของคุณได้เล่นเกมน้อยกว่าคู่แข่งของเขาซึ่งทำให้เขาเป็น "ผู้เล่นใหม่" ที่มีสูงขึ้นK Factor; ตั้งแต่เขาชนะเกมอัลกอริทึมมองว่าเขาเป็นผู้เล่นที่มีทักษะสูงขึ้นและให้อันดับที่สูงกว่า!

โปรดทราบว่าอัลกอริทึมการจัดอันดับโดยทั่วไปจะใช้สำหรับการเปรียบเทียบระหว่างผู้เล่นเท่านั้นและไม่ได้ตัดสินผลลัพธ์ของการแข่งขันเนื่องจากพฤติกรรมของพวกเขา เมื่อคุณต้องการให้รางวัลกับการมีส่วนร่วมฉันขอแนะนำให้ผู้เล่นทำคะแนนในการแข่งขันด้วยวิธีอื่น ข้อเสนอแนะบางส่วน:

  • ทำคะแนนผู้เล่นตามจำนวนที่ชนะ
  • กำหนดค่าคะแนนให้กับการชนะ / การสูญเสียเช่น 2 คะแนนสำหรับการชนะ 1 คะแนนสำหรับการแพ้
  • นับเฉพาะเกม X ที่ดีที่สุดของผู้เล่นในสัปดาห์ / เดือนที่ระบุ
  • กำหนดให้ผู้เล่นเล่นเกมขั้นต่ำเพื่อ "มีคุณสมบัติ"

โปรดทราบว่าการแก้ปัญหาเหล่านี้จะไม่ให้ผลลัพธ์ที่ "ยุติธรรม" อย่างสมบูรณ์เนื่องจากผู้เล่นที่เล่นมากกว่าจะมีคะแนนสูงกว่าผู้เล่นที่ไม่ได้ทำ วิธีเดียวที่จะรับประกันความยุติธรรมสำหรับผู้เล่นในการเล่นเกมจำนวนเท่ากัน


ฉันคิดว่ามันยุติธรรมเท่านั้นที่ผู้เล่นที่เล่นมากกว่า (ในขณะที่มีอัตราส่วนการชนะ / การสูญเสียโดยเฉลี่ยเท่ากัน) ควรมีคะแนนสูงกว่าผู้เล่นที่ไม่ได้เล่นมาก ...
David Gouveia

3
@davidluzgouveia - นั่นไม่ใช่คำจำกัดความของ "งาน" อย่างเคร่งครัด เมื่อให้คะแนนผู้เล่นในทัวร์นาเมนต์ผลที่ได้คือ "ยุติธรรม" หากไม่มีผู้เล่นที่มีข้อได้เปรียบที่ผู้เล่นอื่นไม่ได้ (โดยไม่ต้องเคารพทักษะ) ต้องบอกว่าฉันคิดว่ากรณีที่เรากำลังพูดถึงคือการแข่งขันกันเองระหว่างเพื่อน การให้คะแนนนั้นเกี่ยวกับการส่งเสริมการมีส่วนร่วมมากกว่าการชนะทันที
แบลร์ฮอลโลเวย์

ใช่นี่เป็นการแข่งขันกันเองมากกว่าการแข่งขันที่เข้มงวด ฉันเห็นด้วยกับความเห็นของเดวิดซึ่งเป็นเหตุผลว่าทำไมฉันจึงมองหาวิธีแก้ปัญหาที่นี่ ขอบคุณสำหรับข้อมูลของคุณ!
Jemaclus

0

ฉันไม่รู้เกี่ยวกับอัลกอริทึม ELO แต่วิธีการแทนที่จะลงโทษคนที่ไม่ได้เล่นบ่อยๆคุณให้รางวัลแก่คนที่เล่นบ่อยๆ ตัวอย่างเช่นถ้าคุณทำคะแนนของคุณเช่น:

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

จากนั้นผู้ที่เล่นบ่อยครั้งอาจจบลงด้วยการเล่นเกมมากขึ้นและมีโอกาสมากขึ้นในการทำคะแนนให้สูงขึ้น

และอีกสิ่งหนึ่งที่คุณอาจต้องการเปลี่ยนคือการป้องกันไม่ให้คะแนนเก่าหมดไปส่งผลกระทบต่อคะแนนรวมของผู้เล่น นั่นเป็นเหตุผลหลักที่ทำให้ผู้เล่นคนนั้นขึ้นอันดับ (และทำไมเขาถึงล้มลงในชาร์ต)

นอกจากนี้ผู้ที่เล่นอย่างจริงจังมาระยะหนึ่งแล้วจะได้รับผลงานที่ยอดเยี่ยมอาจจะไม่มีความสุขเมื่อรู้ว่าความสำเร็จของพวกเขาจะหายไปและหายไปในที่สุด ระบบนั้นท้อใจอย่างจริงจัง

สิ่งนี้ได้รับการแก้ไขอย่างง่ายดายเพียงแค่เก็บแคชของ "เล่นเกมทั้งหมด" และ "ชนะ / แพ้อัตราส่วน" ของผู้เล่นแต่ละคนแม้กระทั่งหลังจากที่คุณลบคะแนนเอง

ด้วยข้อมูลดังกล่าวคุณสามารถอนุมานจำนวนชัยชนะและความสูญเสียที่ผู้เล่นมีและอัปเดตได้อย่างง่ายดายเมื่อใดก็ตามที่เขาเล่นอีกครั้ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.