Bu makale çoğunlukla, herhangi bir sayıda oyuna veya spora uygulanabilen çok oyunculu bir derecelendirme sisteminin matematiksel tasarımı ile ilgilidir. Yol boyunca bir Python paketi geliştirdim ve (eksikliği) poker becerimi sergilemek için bir web uygulaması oluşturdum. Bu konulardan herhangi biri ilginizi çekiyorsa, okumaya devam edin!
Elo belki de en iyi bilinen derecelendirme sistemidir. Başlangıçta satranç oyuncularının göreceli becerilerini ölçmek için icat edildi ve o zamandan beri birçok başka oyuna uygulandı. Son yıllarda Elo, FiveThirtyEight tarafından popüler hale getirildi - örneğin, NFL tahminleri için kullanıyorlar .
Elo'nun en büyük gücü basitliğidir. Her oyuncunun (veya takımın) bir oyun oynanmadan önce bir derecesi vardır ve oyunun sonucunu gözlemledikten sonra her oyuncunun yeni Elo derecesini hesaplamak için basit bir formül kullanırız. Bu, her oyuncunun puanını zaman içinde izlemeyi kolaylaştırır. Derecelendirmeler beklediğiniz gibi değişir. Kazanmak her zaman oyuncunun reytingini artırır ve kaybetmek her zaman onu incitir. Güçlü bir oyuncuyu yenmek, zayıf bir oyuncuyu yenmekten daha değerlidir. (Matematiksel ayrıntılar daha sonra.)
Açık bir eksiklik, Elo'nun yalnızca iki oyunculu oyunlar için çalışmasıdır. Pek çok oyunun ikiden fazla oyuncusu vardır - yarışlar, video oyunları, masa oyunları vb. - ve bu oyunlardaki oyunculara derecelendirme atamak isteyebiliriz. Bu oyunlar için basit bir derecelendirme sistemine sahip olmak güzel olurdu, ancak Elo'nun ötesine geçmemiz gerekecek.
Arkadaşlarımla poker oyunları oynadıktan sonra çok oyunculu bir derecelendirme sistemi oluşturmaya motive oldum. Poker, COVID-19 salgını sırasında karantina hobilerimizden biriydi - haftada bir kez görüntülü görüşmeye atlar, her birine birkaç dolar verir ve birkaç saat poker oynardık. Sosyal mesafeli eğlenmek için iyi bir yoldu ama büyük bir sorun vardı: Ben iyi bir poker oyuncusu değilim. Zaten en başta öyle düşündüm ama yanıldığımı çabucak anladım. Ben berbat bir poker oyuncusuyum.
Neyse ki senin için sevgili okuyucu, ben de hobilerine matematiği sokmayı seven büyük bir ineğim. Berbat bir poker oyuncusu olduğumu bilmek beni tatmin etmedi; Tam olarak ne kadar korkunç olduğumu ölçmek istedim . Bu yüzden standart Elo derecelendirme sistemine basit bir uzantı geliştirdim.
Standart Elo'nun iki oyuncuyla nasıl çalıştığını anlayarak başlayalım. Elo derecelendirmeleri oluşturmanın üç adımı vardır:
Beklenen puan, Oyuncu A'nın kazanma olasılığını gösterir. Örneğin, 0.75'lik bir beklenen puan, Oyuncu A'nın Oyuncu B'yi zamanın %75'inde yeneceği anlamına gelir. Derecelendirmelerdeki daha büyük bir fark, daha yüksek dereceli oyuncu için daha büyük bir beklenen puana yol açar. Orada bir D değişkeni olduğuna dikkat edin . Bu, Elo algoritmasında ayarlayabildiğimiz parametrelerden biri ve derecelendirmelerdeki farkın kazanma olasılıklarına nasıl dönüştüğünü kontrol ediyor. D = 400 olarak ayarlamak oldukça yaygındır .
Ardından, eşleşmenin sonuçlarını gözlemliyoruz. Sonuçları beklenen puanlarla kolayca karşılaştırabilmemiz için aşağıdaki ikili gösterimi kullanalım:
Artık oyuncularımızın reytinglerini güncellemeye hazırız. Bir oyuncunun reytingindeki değişiklik, beklenen ve gözlemlenen sonuçlardaki farka bağlıdır. Oyuncu A için yeni reyting:
Gözlenen sonucun beklenen puandan daha büyük (daha iyi) olması durumunda, derecelendirmenin yükseleceği açıktır. Aksi halde aşağı iner. K değeri kabaca bir oyuncunun Derecelendirme, tek oyundan sonra değiştirebilir ne kadar belirler başka Elo parametredir. K'yi , K = 32 gibi sabit bir değere ayarlamak yaygındır .
Bazen bir örnek üzerinden yürümek faydalı olabilir. Oyuncu A'nın 1200 puanla başladığını ve Oyuncu B'nin 1000 puanla başladığını ve Oyuncu A'nın oyunu kazandığını varsayalım. Yukarıdaki denklemler bize Oyuncu A'nın beklenen puanının Eᴀ = 0.76, gerçek puanın Sᴀ = 1 ve yeni derecenin R ˊ ᴀ = 1207.7 olduğunu söylüyor. ( Bu örnekte D = 400 ve K = 32 kullandım.)
İşte burada düşünme kapaklarımızı takıyoruz. Bakalım Elo hesaplamasının her adımını ikiden fazla oyuncuyu barındıracak şekilde değiştirebilecek miyiz. Standart Elo ile aynı üç adımı izleyerek her seferinde bir adım atacağız.
Elo, aynı anda yalnızca iki oyuncuyu nasıl karşılaştıracağını bilir. Çok oyunculu oyunumuzu ikili eşleşmelerin bir kombinasyonu olarak yeniden şekillendirelim. Örneğin, üç oyunculu bir oyunun üç farklı eşleşmesi vardır (A'ya karşı B, A'ya karşı C ve B'ye karşı C). Daha genel olarak, bir oyun , N oyuncu sahip , N ( N -1) / 2 farklı ikili matchups.
Bir önceki bölümdeki formülü kullanarak tüm ikili beklenen puanları hesaplamak için standart Elo'yu kullanalım. Ardından, her oyuncu için beklenen toplam puanı elde etmek için her oyuncunun bireysel beklenen puanlarını toplayacağız. Son olarak, puanları tüm oyuncularda 1 olacak şekilde ölçeklendireceğiz (standart Elo'da yaptığımız gibi puanları olasılıklar olarak yorumlamamıza izin verir). Matematiksel olarak, A oyuncusu için beklenen puanımız şöyle görünür:
Denklem biraz hantal görünüyor, ancak standart Elo sürecinden gerçekten çok farklı değil (yukarıdaki Denklem 1 ile karşılaştırın). Birinci adım, bitti.
Sıradaki, sonuçları gözlemlemek ve not etmek. Bu, standart Elo için gerçekten basitti, ancak burada biraz daha ilgili olacak. Standart Elo'ya benzer şekilde, sonuçları aşağıdaki gibi bir puanla kodlamak istiyoruz:
Fakat s ₁, s ₂, …, sɴ değerleri tam olarak ne olmalıdır ? İki oyuncu ile önemsizdi - kazanan 1 puan alır ve kaybeden 0 puan alır - ancak daha fazla oyuncu ile daha fazla olasılık vardır. Meli s ₁ = 1 veya gerektiği s ₁ + ... + sɴ = 1? Değerler bir yerden diğerine doğrusal olarak mı artmalı, yoksa başka bir ilişkisi mi olmalı? Puanların karşılaması gereken birkaç koşul buldum:
Her iki denklemde de N oyuncu sayısıdır ve pᴀ Oyuncu A'nın bitirdiği yerdir (1. için 1, 2. için 2, …, son için N ). Üstel puan fonksiyonunun 1'den büyük herhangi bir değer verebileceğimiz ek bir α parametresi vardır (buna üstel fonksiyonun “tabanı” olarak da değineceğim). Ancak denklemlere fazla takılmayalım - grafiksel olarak çok daha net:
Puanlama işlevlerinin ödülleri farklı oyuncular arasında nasıl paylaştığı konusunda açık bir fark vardır. Doğrusal puan işlevi, en üstte mi yoksa en altta mı bitirdiğinizi umursamıyor - 5. sıradan 4. sıraya yükselmek, 2. sıradan 1. olmak kadar değerlidir. Öte yandan, üstel puan işlevi, en üstte bitiren oyunculara daha fazla ödül verir - 2.'den 1.'ye yükselmek çok değerlidir, 4.'lük ise 5.'den sadece küçük bir miktarda ödüllendirilir.
Peki hangi skor fonksiyonunu seçmeliyiz? Kullanım durumumuza bağlıdır. Bu derecelendirme sistemini poker göz önünde bulundurarak inşa ediyorum, o yüzden oradan başlayalım ve bizi nereye götürdüğünü görelim. Bir poker turnuvasında olduğunuzu hayal edin - 10 oyuncu girer ve ilk 3 kişi para kazanır. Diyelim ki kötü bir şansla başladınız ve oyunun başlarında fişlerinizin azaldığını gördünüz. Aşırı basitleştiriyorum, ancak iki temel seçeneğiniz var:
Bunun puan fonksiyonlarıyla ne ilgisi var? Oyunumuzun optimal stratejisini en yakından yansıtan skor fonksiyonunu seçmeliyiz. Bir poker oyunu için doğrusal puan işlevini seçersek, derecelendirme sistemimiz, en düşük Strateji 1'i seçen oyuncuları ödüllendirir - son sırada yer almaktan kaçınarak, önemli sayıda Elo derecelendirme puanı alırlar. Bunun yerine, tepeye yakın bitirmeye daha fazla vurgu yapan üstel bir puan işlevi kullanmalıyız. Yine, bu tamamen kullanım durumuna bağlıdır. Farklı bir oyun türü için - belki bir yarış etkinliği - bunun yerine doğrusal skor işlevini kullanmayı seçebiliriz.
Sonunda, bir oyundan sonra her oyuncunun Elo derecesini güncellemeye hazırız. Bu adım, standart iki oyunculu Elo sürümüyle neredeyse aynıdır:
Yaptığımız tek ayar, eşleşmedeki oyuncu sayısına göre ölçeklendirmemizdi. Bu şekilde kazanan oyuncu, sadece bir oyuncu yerine N -1 diğer oyuncuyu yendiği için yeterince ödüllendirilir .
Ve bu kadar! Elo'nun ikiden fazla oyunculu oyunlar için çalışan genelleştirilmiş bir versiyonuna sahibiz! Bu derecelendirme sisteminin en sevdiğim özelliği, yalnızca iki oynatıcınız olduğunda standart Elo'ya yakınsaması - formüllere N = 2'yi ekleyin ve nedenini görebilirsiniz. Bu yüzden bunu yepyeni bir derecelendirme sisteminden ziyade Elo'nun genelleştirilmiş bir versiyonu olarak düşünebiliriz.
Artık bir metodolojimiz var. Harika. Aslında onu nasıl kullanabiliriz?
Bir Python paketi oluşturdum! GitHub'daki multielo depomdan yükleyebilirsiniz . README ve demo not defteri, başlamak için ihtiyacınız olan tüm bilgilere sahip olmalıdır.
Paket, öncelikle önceki bölümdeki matematiği ve ayrıca birçok oyuncu için zaman içinde Elo puanlarını izlemek için bazı sınıfları ve işlevleri uygular. Ayrıca, çok oyunculu bir oyunda oyuncular için kazanma olasılıklarını simüle etmek gibi, bu makalede tartışmayacağım birkaç şeyi de içerir. Paketle ilgili sorularınız varsa buradan veya GitHub'dan bana bildirin!
Pekala, sonunda bu şeye gerçek veriler atmanın zamanı geldi. Hüzünlü poker yolculuğuma bakın:
Şu anda her şey olduğu gibi, her geçen oyunda daha da güçlenen son sırada bir boğazım var. Mucizevi bir şekilde, ilk oyunu kazandım (en soldaki küçük yukarı doğru işarete dikkat edin) ama bu yeni başlayanların şansı olmalı. Oradan her şey yokuş aşağı oldu.
Bu grafiği, her oyunun sonunda her oyuncunun yeni Elo derecesini hesaplayarak oluşturdum. Her oyuncu 1000'den (isteğe bağlı bir değer) başlar ve sonuçlarına bağlı olarak yukarı veya aşağı hareket eder. Her oyundan sonra bir oyuncunun reytingindeki değişiklik, nerede bitirdiklerine ve hangi diğer oyuncuların dahil olduğuna bağlıdır.
[Poker hayranları: Unutulmaması gereken bir şey, turnuva tarzı oyunlar oynadığımızdır, bu yüzden kimin birinci, ikinci, üçüncü vb. bitirdiği her zaman açıktır. Bu tür bir derecelendirme sistemi, oyunun sonunda mutlaka net kazananlar ve kaybedenlerin olmadığı nakit oyunlar oynuyor olsaydık bu kadar kolay uygulanamazdı.]
Derecelendirmeleri daha ayrıntılı görmek istiyorsanız, burada oluşturduğum web uygulamasına göz atın: https://poker-elo-dashboard.herokuapp.com
Uygulamada poker oyunlarımızın tam bir geçmişini, ayrıca oyun geçmişini düzenlemek için bazı araçları ve reytingleri nasıl etkileyeceğini görmek için Elo parametrelerini bulacaksınız.
Uygulamayı , yalnızca Python kullanarak panolar ve web uygulamaları oluşturmak için popüler bir çerçeve olan Dash kullanarak oluşturdum. Uygulama, bir Google E-Tablolar elektronik tablosundaki verileri okur ve Elo derecelendirmelerini hesaplamak için multielo paketimi kullanır . Uygulama, küçük web uygulamalarını ücretsiz olarak barındırmanıza izin veren bulut platformu Heroku'da barındırılmaktadır.
Web uygulamasının kaynak kodu GitHub'da da mevcuttur . Bu, oluşturduğum ilk Dash uygulamasıydı ve başlaması oldukça kolaydı. Orada çok sayıda harika Dash öğreticisi var, ancak uygulamamı nasıl oluşturduğumu ayrıntılı olarak açıklamamı isterseniz bir yorum bırakın.
Buraya kadar geldiyseniz, umarım ilginç veya faydalı bir şey bulmuşsunuzdur. Elo derecelendirme sistemi, Python paketi veya web uygulaması hakkında sorularınız veya önerileriniz varsa, lütfen iletişime geçmek için yorum bırakın! Veya poker becerilerimi geliştirmeme yardımcı olacak ipuçlarınız varsa, kulaklarım!
Şu anda en sıcak düğme sorunlarından biri, doğumda erkek olarak atanan kadınların cisgender kadınlara karşı spor yapmasına izin verilip verilmeyeceğidir. Çoğunluğu soldan gelen katılım çağrılarıyla rekabet etmelerine izin verilmemesine karşı suçlamalara öncülük edenlerin şaşırtıcı olmayan bir şekilde muhafazakarlar olması.
Lojistik Regresyon, Lineer Regresyonun ait olduğu aynı grup olan Genelleştirilmiş Lineer Modelin özel bir durumudur. Lojistik Regresyon, çoğunlukla sonucun kendisinden ziyade bir sonucun olasılıklarını modellemek için kullanılmıştır.
Bilinç evrenin doğasında vardır, ancak yalnızca fiziksel formlarımızın bulunduğu her yerde. Bakmakta olduğunuz kapı gerçekten de sizin farkındalığınızda farkında değil, çünkü sizin düzenlemenize sahip değil.
İlk örneğimiz en basiti ama en şaşırtıcısı olabilir. Kendimi çok dikkatli bir kripto kullanıcısı olarak görüyorum, ancak Metamask'ı her açtığımda kontrol ettiğim cüzdanlar arasında farkında olmadan bağlantılar yayınladığım ortaya çıktı.
Palantir, müşterilerimizin kendi verilerine daha iyi bir genel bakış elde etmelerini ve bu sayede daha akıllıca kararlar vermelerini sağlayan yazılımlar geliştiren ve lisanslayan bir yazılım şirketidir. İş modelimiz, müşteri verilerinin toplanmasına veya satışına dayalı değildir.
Kampanya dönemi: 21/01/2022 18:00 (UTC) — 22/01/2022 12:00 PM (UTC) Hey Boğalar! Topluluğumuz için size Atlantis World Alpha Sale'e katılma şansı verecek beyaz liste (“WL”) yuvalarını duyurmaktan heyecan duyuyoruz. Bunu son aşamada güvence altına aldık, bu yüzden hızlı hareket etmeniz gerekecek! Bana daha fazlasını anlat!? Atlantis World, Web3'ü sosyal, oyun ve eğitim ile tek bir hafif sanal dünyada birbirine bağlayarak Web3 sosyal meta veri tabanını inşa ediyor.
Kristen Stewart bir keresinde 'Pamuk Prenses' rol arkadaşı Chris Hemsworth'a sert bir yumruk attı ve bu, oyuncunun geleceğini görmediği bir saldırıydı.
GQ Magazine ile yaptığı bir röportajda BTS'den Jin, BTS ve Coldplay'in şarkısı 'My Universe'nin bir bölümünün 'son bölümü yapmadığını' açıkladı.
Bir röportaj sırasında Kane Brown, Elvis Presley'in "Hound Dog" ve "Blue Christmas" şarkılarının defalarca şarkılarını nasıl etkilediğini tartıştı.
'Çığlık', bazı yeni yönler veren kanlı bir dönüş sağlar, ancak Ghostface'in en yeni öldürme çılgınlığı olması gerektiği kadar derin kesmez.
Her hafta güncellenen mini bulmacamız, en sevdiğimiz HowStuffWorks okumalarımızı zeki ipuçlarıyla birleştiriyor!
Doğru deterjanı seçme konusunda endişelenmenize gerek kalmadan çamaşır yıkamak yeterince kötü. Peki en iyisi hangisi? Yoksa önemli mi?
Kentucky kırsalındaki Fugates ve Combs aileleri, genetik piyangoyu kaybettiler ve her ikisi de, evlenirken tenlerinin mavi görünmesine neden olan nadir bir çekinik özelliği paylaştılar. Bunun nedeni neydi? Ve ailelere ne oldu?
İki babasız erkek civciv, California akbabasını yok olmaktan kurtarmak için bir programda yetiştiriliyor. Böyle 'bakire' doğumlar nasıl mümkün olabilir?
Vanderpump Rules yıldızı Katie Maloney-Schwartz, Perşembe günü Instagram'da yaptığı dürüst ve içten bir gönderiyle kendini sevme yolculuğunda kaydettiği ilerlemeyi anlattı.
Jessica Alba, kendisini ve çocuklarını Dolly ve Lucy adlı iki köpekle sarılıp oynarken gösteren keyifli bir videoyu Instagram hesabından paylaştı.
Geçen hafta sonu bir Porto Riko tatili sırasında nişanlanan Megan Fox ve Makineli Tüfek Kelly'den bir kaynak, "İlk görüşte aşk durumuydu" diyor.
Polise göre Devonne Marsh'ın kimliği belirlenemeyen kız arkadaşını çakmak gazıyla kaplayarak alevleri tutuşturduğu iddia edildi.