Elo'dan ikiden fazla oyuncuyla oyuncu sıralaması


16

Elo'u belirli bir oyunun maçları arasındaki oyuncu sıralamasını izlemek için kullanmak istiyorum, ancak oyun bir maçta dört oyuncuya kadar oynanabilir. Carcassonne gibi oyunları Elo'dan iki oyuncudan fazla oynadığında gördüm, ancak 1-1 maçın ötesinde Elo'ya aşina değilim.

Gönderen wikipedia makalesinde ben genişletmek istiyorum iki oyunculu denklemleri şunlardır:

E , bir = 1 / (1 + 10 (R, B - Ar bir ) / 400 )

D b = 1 / (1 + 10 (R, bir - R ' b ) / 400 )

R x yeni = R x eski + 32 * (W - E x ), burada X kazanırsa W = 1 ve X kaybederse W = 0.

İkiden fazla oyuncuya göre E x ve W hesaplamaları nasıl değişecekti?


İkiden fazla oyunculu oyunlar için Elo tarzı bir sistem kullanma konusunda temkinli olurum, çünkü birçok faktör onları saf beceri oyunlarından daha az yapmak için komplo kurabilir - oyuncular algılanan en güçlü oyuncuları toplar, vb. farklı sayıda oyuncu ile daha fazla oyuncuya sahip oyunlar için ağırlıkların düşürülmesini şiddetle tavsiye ederim (yani R için güncelleme formülündeki '32').
Steven Stadnicki

@StevenStadnicki tavsiye için teşekkürler. Bununla birlikte, ağırlık sabitini düşürmenin bahsettiğiniz sorunlara nasıl hitap ettiği konusunda net değilim. Detaylandırabilir misin?
fbrereto

Çok oyunculu maçlar için ağırlığı düşürerek, doğası gereği iki oyunculu maçlar kadar bir oyuncunun reytingi kadar önemli olmadıklarını söylüyorsunuz; aslında, oyuncunun gerçekte ne kadar iyi olduğunu daha az temsil ettiklerini söylüyorsunuz. Magic, farklı turnuva seviyelerinin, bir oyuncunun reytingini belirlerken ne kadar ağırlık vermeleri gerektiğini göstermek için farklı K değerlerine sahip olduğu turnuva yapısı ile buna benzer bir şey yapar .
Steven Stadnicki

Yanıtlar:


10

Üst bağlantı tarafından önerildiği gibiGoogle aramamdaki , bir oyuncu Elo puanındaki (R değerleriniz) bireysel değişiklikleri hesaplayabilir ve ardından her bir oyuncunun puanına uygulanacak toplam değişikliği sağlamak için bunları toplayabilirsiniz.

4 oyuncunuz (A, B, C, D) varsa, A'nın reytingindeki (R-sub-a-sub-new) B, C ve D'deki skorlarından değişikliği hesaplayın ve A'nın reytingini hesaplanan R-değerlerinin toplamı.


Bu rotaya gittim ve şimdiye kadar iyi çalışıyor gibi görünüyor, teşekkürler.
fbrereto

3
Görünüşe göre bu fikir için formüller: sradack.blogspot.ru/2008/06/…
dbf

1

Burada fnord'un cevabına benzer bir yöntemin PHP kaynak koduna sahip bir kağıt buldum: http://elo-norsak.rhcloud.com/3.php Burada daha genel amaçlı bir php uygulaması oluşturdum: https://github.com/ FigBug / Multiplayer-ELO Kurulu oyun grubumla kullanıyorum ve şimdiye kadar iyi çalışıyor gibi görünüyor.

Ex ve W hesaplamaları aynı kalacaktı. 32 K K kullanmak yerine, 32 K (#players - 1) K kullanın. Ardından, 2 oyuncunun her bir permütasyonuna bakın ve (32 / (#players - 1) * (W - Ex)) hesaplayın. Sonra RxNew az önce hesapladığınız tüm değerlerin RxOld + Sum değerine eşittir.


2
Tamamen harici bağlantılara güvenmek yerine, yönteminizin / tavsiyenizin bir özetini yanıt gövdesine eklemek genellikle iyi bir uygulamadır. Bağlantılar zamanla kopma alışkanlığına sahiptir, bu da birileri bundan sonra aramaya çalıştığında cevabınızı önemli ayrıntılar bırakabilir.
DMGregory

Pratik kodunuz için teşekkürler, faydalıdır! eloChange += round($K * ($S - $EA));eloPost
Farkına varmanız

-1

Geçenlerde konuyla ilgili bu yazıyı yazdım . Umut ediyorum bu yardım eder. Yakında başka bir yazıya da kod ekleyeceğim.

İşte ne gerektirdiğinin bir özeti:

Vermeniz gereken bir karar, bir tür alt eşleşmeniz olup olmadığıdır. Örneğin: Langırtta, 2v2'lik bir oyunda her zaman doğrudan iki oyuncu ve dolaylı olarak iki oyuncu olduğunu göreceksiniz. Bu şu anlama gelir: İki savunucu asla gerçekten etkileşime girmez, sadece saldırgan savunucu çiftleri. Alternatif, 5v5 olan Dota gibi bir senaryodur ve gerçek maçın bir parçası olarak gerçek, öngörülebilir 1v1 eşleşmeleri yoktur.

Birinci durum: Alt eşleme yapısı yok:

Bu durumda, ilgili tüm oyuncuların derecelendirmesini ortalayabilir ve bunu o takım için bir takım derecelendirmesi olarak kullanabilirsiniz. Yani R_a ve R_b için, o takımın tüm oyuncularının reytinglerinin toplamını oyuncu sayısına bölerdiniz. Ekibin güncellemesini hesapladıktan sonra, tüm ekip üyelerinin derecelendirmelerini güncellemeyle güncellersiniz.

İkinci durum: Alt eşleşmeler:

Bu durumda, alt eşleşmelere ayrılır ve bunları birbirine karşı tartarsınız. Böylece her çift için E_a ve E_b'yi hesaplar ve sonra bunları tartarsınız. Örneğin: 1v1 alt yapısına sahip 5v5 için 5 çift için 5 E_a değerini hesaplarsınız. Ardından, her bir oyuncu için bir parçası olduğu alt eşlemeye dayalı ağırlıklı bir terim hesaplarsınız. Yani oyuncu 1 alt maç 1'in bir parçasıysa, 0.6 * E_a1 + 0.1 * E_a2 + 0.1 * E_a3 + 0.1 * E_a4 + 0.1 * E_a5 (burada oyuncunun dahil olduğu alt maç için E_a1 E_a'dır).

Buradaki parametreler serbestçe seçilebilir, ancak bazı verileriniz olduğunda bunları optimize edebilirsiniz. Oyuncu puanlarının o kadar da dalgalanmadığı bir ağırlık şeması bulmaya çalışın. Bu, değerlerin varyansını hesaplayarak ve daha sonra belirli bir maç sonuçları için ağırlıkları adapte ederek bunu en aza indirerek otomatik olarak yapılabilir. Umarım bu yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.