ผู้เล่นอันดับที่ใช้ Elo ที่มีผู้เล่นมากกว่าสองคน


16

ฉันต้องการใช้ Elo เพื่อติดตามการจัดอันดับผู้เล่นระหว่างการแข่งขันของเกมบางเกมอย่างไรก็ตามเกมสามารถเล่นได้กับผู้เล่นสูงสุดสี่คนในการแข่งขัน ฉันเคยเห็นเกมอย่าง Carcassonne ใช้ Elo ที่มีผู้เล่นมากกว่าสองคนเล่น แต่ฉันไม่คุ้นเคยกับ Elo เกินกว่า 1-1 คู่

จากบทความวิกิพีเดียสมการของผู้เล่นสองคนที่ฉันต้องการขยายคือ:

E = 1 / (1 + 10 (R - R ) / 400 )

E b = 1 / (1 + 10 (R a - R b ) / 400 )

R x ใหม่ = R x เก่า + 32 * (W - E x ) โดยที่ W = 1 ถ้า X ชนะและ W = 0 ถ้า X แพ้

การคำนวณสำหรับ E xและ W จะให้ผู้เล่นมากกว่าสองคนได้อย่างไร


ฉันจะระมัดระวังเกี่ยวกับการใช้ระบบ Elo-style สำหรับเกมที่มีผู้เล่นมากกว่าสองคนเนื่องจากหลาย ๆ ปัจจัยสามารถสมคบกันเพื่อทำให้พวกเขามีทักษะน้อยกว่าเกมที่บริสุทธิ์ - ผู้เล่นที่รวมตัวกับผู้เล่นที่แข็งแกร่งที่สุดเป็นต้นหากคุณผสมคะแนนจากการแข่งขัน ด้วยจำนวนผู้เล่นที่แตกต่างกันฉันขอแนะนำให้ลดน้ำหนัก (เช่น '32' ในสูตรอัปเดตสำหรับ R) สำหรับเกมที่มีผู้เล่นมากขึ้น
Steven Stadnicki

@StevenStadnicki ขอบคุณสำหรับคำแนะนำ ฉันยังไม่ชัดเจนในการลดน้ำหนักอย่างต่อเนื่องถึงปัญหาที่คุณพูดถึง คุณสามารถทำอย่างละเอียด?
fbrereto

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

คำตอบ:


10

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

เช่นหากคุณมีผู้เล่น 4 คน (A, B, C, D) ให้คำนวณการเปลี่ยนแปลงการจัดอันดับของ A (R-sub-a-sub-new) จากคะแนนของพวกเขาเทียบกับ B, C และ D แล้วปรับอันดับ A โดย ผลรวมของค่า R ที่คำนวณได้


ฉันไปเส้นทางนี้และดูเหมือนว่าจะทำงานได้ดีจนถึงตอนนี้ขอบคุณ
fbrereto

3
ดูเหมือนว่านี่เป็นสูตรสำหรับความคิดนี้: sradack.blogspot.ru/2008/06/…
dbf

1

ฉันพบกระดาษที่มีซอร์สโค้ด PHP ของวิธีการที่คล้ายกับคำตอบของ fnord ที่นี่: http://elo-norsak.rhcloud.com/3.phpฉันได้สร้างการใช้งาน php ทั่วไปที่นี่: https://github.com/ FigBug / Multiplayer-ELOฉันใช้มันกับกลุ่มเกมกระดานของฉันและดูเหมือนว่ามันจะทำงานได้ดี

การคำนวณค่า Ex และ W จะคงเดิม แทนที่จะใช้ K เป็น 32 ให้ใช้ K เป็น 32 / (#players - 1) จากนั้นดูการเปลี่ยนแปลงของผู้เล่น 2 คนและคำนวณ (32 / (#players - 1) * (W - Ex) จากนั้น RxNew จะเท่ากับ RxOld + ผลรวมของค่าทั้งหมดที่คุณเพิ่งคำนวณ


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

ขอบคุณสำหรับรหัสฝึกหัดของคุณมันมีประโยชน์มาก! ข้อเสนอแนะเพียงข้อเดียวสำหรับการทำให้เป็นจริง - อาจเป็นการดีกว่าที่จะไม่ปัดเศษผลลัพธ์กลางeloChange += round($K * ($S - $EA));แต่ทำการปัดเศษเฉพาะหลังจากการคำนวณทั้งหมดเมื่อตั้งค่าeloPost
FlameStorm

-1

ฉันเพิ่งเขียนโพสต์นี้ในหัวข้อ ฉันหวังว่ามันจะช่วย ฉันจะเพิ่มรหัสในโพสต์อื่นในไม่ช้า

นี่คือโครงร่างของสิ่งที่เกี่ยวข้อง:

การตัดสินใจหนึ่งที่คุณต้องทำคือถ้าคุณมีการจับคู่ย่อยหรือไม่ ตัวอย่างเช่น: ใน foosball คุณจะเห็นว่าในเกม 2v2 จะมีผู้เล่นสองคนหันหน้าเข้าหากันโดยตรงและโดยอ้อมสองคน นั่นหมายความว่า: ผู้พิทักษ์ทั้งสองไม่เคยโต้ตอบกันจริงๆมันเป็นเพียงคู่ของผู้โจมตีและผู้ปกป้อง อีกทางเลือกหนึ่งคือสถานการณ์เช่น Dota ซึ่งเป็น 5v5 และไม่มีการจับคู่ 1v1 จริง ๆ ของแต่ละบุคคลที่สามารถทายได้ซึ่งเป็นส่วนหนึ่งของการแข่งขันจริง

กรณีที่หนึ่ง: ไม่มีโครงสร้างการจับคู่ย่อย:

ในกรณีนี้คุณสามารถให้คะแนนโดยเฉลี่ยของผู้เล่นทุกคนที่เกี่ยวข้องและใช้เป็นคะแนนของทีมสำหรับทีมนั้น ดังนั้นสำหรับ R_a และ R_b คุณเพียงแค่ใช้ผลรวมของคะแนนของผู้เล่นทั้งหมดของทีมนั้นหารด้วยจำนวนผู้เล่น เมื่อคุณคำนวณการอัปเดตสำหรับทีมแล้วคุณจะอัปเดตการให้คะแนนสมาชิกทุกคนในทีมด้วยการอัปเดต

กรณีที่สอง: การจับคู่ย่อย:

ในกรณีนี้คุณแบ่งการแข่งขันย่อยและชั่งน้ำหนักระหว่างกัน ดังนั้นคุณคำนวณ E_a และ E_b สำหรับทุกคู่แล้วชั่งน้ำหนักเหล่านี้ ตัวอย่างเช่น: สำหรับ 5v5 ที่มีโครงสร้างย่อย 1v1 คุณจะคำนวณค่า E_a 5 ค่าสำหรับ 5 คู่ จากนั้นคุณคำนวณคำถ่วงน้ำหนักสำหรับผู้เล่นแต่ละคนตามการจับคู่ย่อยที่เป็นส่วนหนึ่งของ ดังนั้นหากผู้เล่น 1 เป็นส่วนหนึ่งของการส่ง 1 คุณคำนวณบางอย่างเช่น 0.6 * E_a1 + 0.1 * E_a2 + 0.1 * E_a3 + 0.1 * E_a4 + 0.1 * E_a5 (โดยที่ E_a1 คือ E_a สำหรับการจับคู่ย่อยของผู้เล่น)

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

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