Bilişim dünyasına kaliteli, özgün ve Türkçe içerikler kazandırmayı hedefleyen bir platform..

friends friends friends

PHP Satranç Oyuncu Elo Puanı Hesaplama

Elo Puanı: Satranç sporcularının oyun gücünü gösteren ve FIDE tarafından hesaplanan uluslar arası puan türüdür. Elo Derecelendirme Sistemi(Elo Rating System), satranç gibi sıfır toplamlı oyunlarda oyuncuların yetenek seviyelerinin hesaplanmasında kullanılmakta. İsmini de yaratıcısı Macar-Amerikan fizikçi Arpad Elo’dan almakta.

PHP Elo Puanı Hesaplama

$kfaktor = 20;


$player_a_elo = 1770;
$player_b_elo = 1843;

// 0 for a lose, 1 for a win, 0.5 for a draw
$player_a_score = 1;
$player_b_score = 0;

list($new_elo_a,$new_elo_b)=elo_hesapla($player_a_elo,$player_b_elo,$player_a_score,$player_b_score,$kfaktor);
echo $new_elo_a;

function elo_hesapla($player_a_elo,$player_b_elo,$player_a_score,$player_b_score,$kfaktor=20){
	$expected_score_a = 1 / (1 + (pow(10, ($player_b_elo - $player_a_elo) / 400)));
	$expected_score_b = 1 / (1 + (pow(10, ($player_a_elo - $player_b_elo) / 400)));

	$new_elo_a = $player_a_elo + ($kfaktor * ($player_a_score - $expected_score_a));
	$new_elo_b = $player_b_elo + ($kfaktor * ($player_b_score - $expected_score_b));
	return array($new_elo_a,$new_elo_b);
}

Python Elo Puanı Hesaplama

Meraklısı için Python kodları aşağıdaki gibidir, ayrıca oyuncuların kazanma olasılıkları da gösterilmiştir: Ayrıca Sigmoid grafiği üzerinden A oyuncusunun kazanma olasılığ ve kaybetme olasılığı(B oyuncusunun kazanma olasılığı) gösterilmiştir.

import numpy as np
import matplotlib.pyplot as plt

kfaktor = 20
player_a_elo = 2853
player_b_elo = 2780
player_a_score = 1
player_b_score = 0

def elo_hesapla(player_a_elo, player_b_elo, player_a_score, player_b_score, kfaktor=20):
    expected_score_a = 1 / (1 + (10 ** ((player_b_elo - player_a_elo) / 400)))
    expected_score_b = 1 / (1 + (10 ** ((player_a_elo - player_b_elo) / 400)))

    new_elo_a = player_a_elo + (kfaktor * (player_a_score - expected_score_a))
    new_elo_b = player_b_elo + (kfaktor * (player_b_score - expected_score_b))
    return new_elo_a, new_elo_b, expected_score_a, expected_score_b

new_elo_a, new_elo_b, expected_score_a, expected_score_b = elo_hesapla(player_a_elo, player_b_elo, player_a_score, player_b_score, kfaktor)
print("A oyuncusu Yeni Elo Puanı : ", new_elo_a)
print("B oyuncusu Yeni Elo Puanı : ", new_elo_b)
print("A oyuncusu Kazanma Olasılığı : %", format(expected_score_a*100, ".2f"))
print("B oyuncusu Kazanma Olasılığı : %", format(expected_score_b*100, ".2f"))


def sigmoid(x):
    return 1 / (1 + np.exp(-x))

#-10 ile +10 arasında 
x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('sigmoid(x)')
plt.title('Sigmoid Function')

# %52 olasılığını temsil eden nokta
target_prob = expected_score_a
index = np.argmin(np.abs(y - target_prob))
plt.plot(x[index], y[index], 'bo', label=f'Player A :{format(expected_score_a*100, ".2f")}%')

# %48 olasılığını temsil eden nokta
target_prob2 = expected_score_b
index = np.argmin(np.abs(y - target_prob2))
plt.plot(x[index], y[index], 'yo', label=f'Player B :{format(expected_score_b*100, ".2f")}%')
plt.legend()#label etiketleri görünsün

plt.show()
#A oyuncusu Yeni Elo Puanı :  2860.9292736294765
#B oyuncusu Yeni Elo Puanı :  2772.0707263705235
#A oyuncusu Kazanma Olasılığı : % 60.35
#B oyuncusu Kazanma Olasılığı : % 39.65
Sigmoid Elo puan oyuncu kazanma olasılığı

Şu sayfadan Elo Puanı ile ilgili çok güzel bir bilgi okuyabilirsiniz.

Bu sayfadan da başka bir yazı okuyabilirsiniz.

PHP Elo Puanı Hesaplama Satranç Oyuncu Puanı ELO rating değeri ELO rating algoritması ELO Puanlama Sistemi elo puanı nasıl hesaplanır Elo Derecelendirme Sistemi Elo Rating System
2 Beğeni
Python PHP
Önceki Yazı

htmlspecialchars Fonksiyonu Kullanımı

28 Mart 2021 tarihinde yayınlandı.
Sonraki Yazı

Sosyal Medya Otomatik Paylaşım Resim

28 Mart 2021 tarihinde yayınlandı.
arrow