Tavla24'te ELO puanı nasıl hesaplanır?
Tavla24, 1.3.1 sürümünden beri tavla ELO puanını nasıl hesaplıyor: formülün tamamı, K faktörü, çift küpü, nelerin değiştiği ve gerçek kod.
Tavla24’teki dereceli reytingin bir ELO puanıdır. Herkes 1500 ile başlar. Her dereceli oyundan sonra kazanan puan alır, kaybeden puan kaybeder. Ne kadar olacağı üç şeye bağlıdır: aranızdaki reyting farkı, çift küpünün ne kadar yükseldiği ve 1.3.1 sürümünden beri son 7 günde kaç dereceli oyun oynadığın. Sana denk bir rakibi yenersen +16 alırsın. Senden çok daha güçlü birini yenersen daha fazla, çok daha zayıf birini yenersen daha az alırsın. Mars ve katmerli mars reytingini hiç değiştirmez.
Kısa hali bu. Aşağıda hesabın 1.3.1 sürümünden (Ekim 2026) beri işleyen halinin tamamını, seçtiğimiz sayıları, bunları neden iki kez değiştirdiğimizi ve gerçek kodu bulacaksın. Bize güvenmeni istemektense matematiği göstermeyi tercih ediyoruz.
Hangi oyunlar ELO’ya sayılır?
- Dereceli oyunlar: evet. ELO’n yalnızca burada değişir.
- Boosted oyunlar: hayır. Boosted oyunlar (1.3.0 sürümünden önceki adıyla Casual), Boosted sıralaması için puan ve Sparks kazandırır ama ELO’na asla dokunmazlar.
- Turnuvalar: turnuvadaki oyunlar ELO’nu değiştirmez. Bunun yerine herkese açık turnuvalar podyuma sabit ELO ödülleri verir, örneğin +50, +25 ve +15. Ayrıntılar turnuva yazımızda.
1. adım: Kazanma ihtimalin neydi?
Bir galibiyetin ne kadar değerli olduğunu söylemeden önce, ne kadar olası olduğunu tahmin ederiz. Buna beklenen skor denir, 0 ile 1 arasında bir sayıdır:
beklenen = 1 / (1 + 10^((rakibin reytingi − senin reytingin) / 1200))
Rakibinle aynı reytinge sahipsen beklenen skor 0,5’tir: yazı tura. Rakibinin ne kadar üstündeysen, 1’e o kadar yaklaşır.
| Reyting farkı | Favorinin beklenen kazanma oranı |
|---|---|
| 0 | %50,0 |
| 50 | %52,4 |
| 100 | %54,8 |
| 150 | %57,1 |
| 200 | %59,5 |
| 300 | %64,0 |
| 400 | %68,3 |
| 500 | %72,3 |
2. adım: Sonuç tahmini ne kadar aştı?
Sonra olanı, beklenenle karşılaştırırız:
değişim = K × (sonuç − beklenen)
sonuç galibiyette 1, mağlubiyette 0’dır. K, K faktörüdür: tek bir oyunun yaratabileceği en büyük değişim (küp hariç, aşağıya bak). Çoğu oyuncu için K 32’dir. Sonucu tam sayıya yuvarlarız.
İki oyuncu da 1500: beklenen skor 0,5. Kazanan 32 × (1 − 0,5) = +16 alır, kaybeden −16.
K 32 ve küp 1’deyken farklı reyting farklarında durum şöyle:
| Reyting farkı | Favori kazanırsa | Sürpriz olursa |
|---|---|---|
| 0 | +16 / −16 | +16 / −16 |
| 100 | +14 / −14 | +18 / −18 |
| 200 | +13 / −13 | +19 / −19 |
| 300 | +12 / −12 | +20 / −20 |
| 400 | +10 / −10 | +22 / −22 |
Mantık basit: sürpriz bir galibiyet, beklenen bir galibiyetten daha değerlidir. Rakibinden 200 puan yukarıdaysan, sadece yerinde kalmak için ona karşı oyunların yaklaşık %60’ını kazanman gerekir. Daha sık kazanırsan yükselirsin. Daha seyrek kazanırsan, oyunların çoğunu kazansan bile düşersin.
3. adım: Bu hafta ne kadar oynadın?
Bu adım 1.3.1 sürümüyle geldi. Her dereceli oyun puanlanmadan önce sunucu, iki oyuncunun da son 7 günde kaç dereceli oyun oynadığını sayar:
- 50’den az oyun: K 32’dir.
- 50 veya daha fazla oyun: K 16’dır. Yukarı ya da aşağı her değişim yarı yarıya küçülür.
| Reyting farkı | K = 32 (favori kazanırsa / kaybederse) | K = 16 (favori kazanırsa / kaybederse) |
|---|---|---|
| 0 | +16 / −16 | +8 / −8 |
| 150 | +14 / −18 | +7 / −9 |
| 300 | +12 / −20 | +6 / −10 |
Neden? Bir haftadaki reyting dalgalanmasının büyüklüğü, kabaca K ile oynanan oyun sayısının çarpımı kadardır. Bazı oyuncular haftada 300 dereceli oyun oynuyor. K = 32 iken, bu kadar oyunda beklenen kazanma oranının sadece 2 ya da 3 yüzde puanı altında kalmak, ki bu tamamen normal şans sınırları içindedir, onlara tek bir haftada 200 puan civarında kaybettiriyordu. Bu oyuncular için K’yı yarıya indirmek, yoğun bir haftayı normal bir hafta kadar oynak tutar. Daha az oynayanlar tam K ile devam eder ve eskisi kadar hızlı yükselir.
Üç ayrıntı:
- Her oyuncunun kendi K’sı var. Sayım kazanan ve kaybeden için ayrı ayrı yapılır.
- İki değişim artık her zaman birbirinin aynası değil. Bu hafta 60 dereceli oyun oynadıysan ve seninle aynı reytingdeki rakibin 10 oyun oynadıysa, galibiyet sana +8 kazandırır, o ise −16 kaybeder. O kazanırsa +16 alır, sen −8 kaybedersin. İki oyuncunun K’sı aynıysa kazanan yine tam olarak kaybedenin kaybettiği kadar alır.
- Pencere seninle birlikte ilerler. Her zaman puanlanan oyundan önceki 7 gündür ve o oyunun kendisi sayılmaz. Oyun sayın 50’nin altına düştüğünde yeniden K = 32’ye dönersin.
Neden 400’e değil 1200’e bölüyoruz
Satrançta ELO formülü 400’e böler. Biz de oradan başladık. Bunu 1.2.0 sürümünde 800’e, 1.3.1 sürümünde 1200’e çıkardık.
Bu sayı, sistemin güçlü oyuncunun kazanacağından ne kadar emin olduğunu belirler. Bölen 400 iken, 200 puan önde olan bir favorinin oyunların %76’sını kazanması beklenir. Satrançta bu makul. Tek bir tavla oyunu içinse fazlasıyla iddialı, çünkü zarlar zayıf oyuncuya her oyunda gerçek şans verir. Çok daha iyi bir oyuncu bile şanssızlık yüzünden pek çok tek oyunu kaybeder.
Sonuç, iyi oyuncuları cezalandıran bir reytingdi. Bölen 400 iken, rakibinden 300 puan yukarıdaki bir oyuncu galibiyette +5 alıyor, mağlubiyette 27 kaybediyordu. Yerinde kalmak için bu oyunların %85’ini kazanması gerekiyordu, bu da tavlada neredeyse imkânsız.
1.2.0’da 800’e geçtik, bu da eğimi yarıya indirdi. İşe yaradı ama yetmedi. Birkaç haftalık dereceli oyundan sonra eğriyi gerçek sonuçlarla karşılaştırdık. En güçlü oyuncularımız oyunlarının %57-58’ini kazanıyordu, eğri ise onlardan yaklaşık %60 bekliyordu. Yani oyunlarının çoğunu kazanırken hâlâ reyting kaybediyorlardı ve sıralama sıkışık kalıyordu: aktif oyuncuların yarısı birbirine yaklaşık 60 puan mesafedeydi.
1200 ile eğri, zarların gerçekte izin verdiği kadarına uyuyor:
| 300 puan önde olan favori | 1.2.0 öncesi (÷400) | 1.2.0 ile 1.3.0 arası (÷800) | 1.3.1’den itibaren (÷1200) |
|---|---|---|---|
| Beklenen kazanma oranı | %84,9 | %70,3 | %64,0 |
| Galibiyet puanı | +5 | +9 | +12 |
| Mağlubiyet puanı | −27 | −23 | −20 |
Karşılaştırma için: en eski tavla sunucusu FIBS daha da ileri gider ve tek puanlık maçlarda 2000 kullanır. Bizim 32’lik K faktörümüzle bu, sıralamayı 3000 puanın üzerine yayardı. Bu yüzden 1200’de durduk.
Geçmiş oyunları yeniden hesaplamadık. Yeni formül, değişiklikten sonra oynanan dereceli oyunlara uygulanıyor. Reytingin olduğu gibi devam etti.
Çift küpü: daha yüksek bahis, ama sınırlı
Daha yüksek küple oynanan bir oyun biraz daha fazla sayılmalı, ama tek bir şanslı oyun reytingini baştan yazmamalı. Bu yüzden küp, ELO değişimini 1,0 ile 2,0 arasında bir katsayıyla çarpar. Her katlama, maksimuma giden yolun altıda birini ekler:
katsayı = 1 + log2(küp) / 6
| Küp | Katsayı | İki oyuncu da 1500, K = 32 | İki oyuncu da 1500, K = 16 |
|---|---|---|---|
| 1 | 1,00 | ±16 | ±8 |
| 2 | 1,17 | ±19 | ±9 |
| 4 | 1,33 | ±21 | ±11 |
| 8 | 1,50 | ±24 | ±12 |
| 16 | 1,67 | ±27 | ±13 |
| 32 | 1,83 | ±29 | ±15 |
| 64 | 2,00 | ±32 | ±16 |
Küp 64’te, yani en üstte bile değişim normalin en fazla iki katıdır. 1.0.5 sürümünden önce küp puanları doğrudan çarpıyordu ve yüksek küplü tek bir oyun reytingi hak ettiğinden çok daha fazla oynatabiliyordu. Küp hâlâ önemli, böylece kabul etme ya da pas geçme kararları anlamını korur. Ama kimi yendiğin ve kazanıp kazanmadığın çok daha önemli.
Mars ve katmerli mars neden sayılmaz?
Mars 2, katmerli mars 3 puan değerindedir ve Tavla24’te sonuç ekranında sana hâlâ daha fazla puan kazandırır. Ama reytingin bunlarla ilgilenmez. ELO tek bir şeyi ölçer: belli bir seviyedeki oyuncuları ne sıklıkla yendiğini. Mars daha büyük bir galibiyettir, ama yine de tek bir galibiyettir. Tavla24’ün ilk sürümleri mars için ekstra ELO veriyordu ve bu, istikrarlı oyundan çok riskli ve şanslı oyunları ödüllendiriyordu. 1.0.5’ten beri yalnızca galibiyet, rakibin reytingi ve küp sayılıyor.
Oyundan çekilme, bağlantı kopması ve hamle süresi
Erken biten bir dereceli oyun yine de sayılır. Oyundan çekilirsen, çıkarsan, bağlantın çok uzun süre koparsa ya da 3 hamlede süreyi aşarsan oyun, o an tahtadaki küp değeriyle normal bir mağlubiyet olarak puanlanır. Uygulama, çekilmeden önce seni uyarır. Bu kural adalet için var: aksi halde kaybedilen bir oyundan çıkmak, reytingi korumanın bedava bir yolu olurdu.
Gerçek kod
Oyun sunucumuzun her dereceli oyundan sonra çalıştırdığı kod bu (Go):
const K = 32 // maximum change per game, before the cube
const HeavyVolumeK = 16 // K for players with a heavy ranked week
const HeavyVolumeGames = 50 // ranked games in the window that switch K
const HeavyVolumeWindow = 7 * 24 * time.Hour
const Divisor = 1200 // chess uses 400; dice make single games less predictable
const Starting = 1500
func KFor(recentRankedGames int) int {
if recentRankedGames >= HeavyVolumeGames {
return HeavyVolumeK
}
return K
}
func CalculateChangeWithK(winnerELO, loserELO, winnerK, loserK int, coefficient float64) Change {
expectedWinner := expectedScore(winnerELO, loserELO)
expectedLoser := 1 - expectedWinner
return Change{
Winner: int(math.Round(float64(winnerK) * (1 - expectedWinner) * coefficient)),
Loser: int(math.Round(float64(loserK) * (0 - expectedLoser) * coefficient)),
}
}
func expectedScore(playerELO, opponentELO int) float64 {
return 1.0 / (1.0 + math.Pow(10, float64(opponentELO-playerELO)/Divisor))
}
coefficient, yukarıdaki tablodaki küp çarpanıdır. winnerK ve loserK, her oyuncunun son 7 gündeki dereceli oyun sayısıyla KFor’dan gelir.
Kodun neyi almadığına dikkat et: galibiyet serisi yok, ülke yok, satın almalar yok, gizli bir “dengeleme” yok. Tek girdiler iki reyting, küp ve her oyuncunun bu hafta kaç dereceli oyun oynadığı. Zarlarımızdaki ilkenin aynısı: formülde yoksa seni etkilemez.
ELO hakkında sık sorulan sorular
Tavla24’te kaç ELO ile başlarım?
Tüm yeni oyuncular 1500 ile başlar.
Bir galibiyet için kaç ELO puanı alırım?
Aynı reytingdeki bir rakibe karşı, küp 1’de +16. Rakibinin reytingi seninkinden yüksekse daha fazla, düşükse daha az. Daha yüksek bir çift küpü değişimi artırır, küp 64’te en fazla iki katına kadar. Son 7 günde 50 veya daha fazla dereceli oyun oynadıysan bütün değişimlerin yarıya iner.
Neden rakibimin kaybettiğinden daha az puan kazandım?
Çünkü ikinizden biri son 7 günde 50 veya daha fazla dereceli oyun oynadı. O oyuncunun reytingi, galibiyette de mağlubiyette de oyun başına yarı yarıya daha az değişir. Diğer oyuncunun değişimi bundan etkilenmez.
Mars ve katmerli mars daha fazla ELO kazandırır mı?
Hayır. Sonuç ekranında daha fazla puan kazandırırlar, ama ELO’n yalnızca galibiyete, rakibin reytingine ve küp değerine bağlıdır.
Boosted oyunlar ELO’mu etkiler mi?
Hayır. ELO’nu yalnızca dereceli oyunlar değiştirir. Boosted oyunlar, Boosted sıralaması için puan ve Sparks kazandırır.
Oyundan çekilirsem ya da bağlantım koparsa ELO’ma ne olur?
Erken biten bir dereceli oyun, o anki küp değeriyle normal bir mağlubiyet olarak puanlanır.
1.3.1 sürümünde ELO formülünde ne değişti?
İki şey. Formüldeki bölen 800’den 1200’e çıktı; böylece favorilerden daha seyrek kazanmaları bekleniyor ve mağlubiyette daha az puan kaybediyorlar. Ayrıca son 7 günde 50 veya daha fazla dereceli oyun oynayanlar artık 32 yerine 16’lık K faktörü kullanıyor.
Reytinginle ilgili bir soru mu var, ya da onu daha adil yapacak bir fikrin mi? Bize support@table-online.ro adresinden yaz.
Bir dereceli oyun oyna ve matematiği sına →
Uygulamayı mı tercih edersin? Tavla24’ü App Store veya Google Play üzerinden indir.
Oynamaya hazır mısın?
Şimdi Oyna