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

Şu sayfadan Elo Puanı ile ilgili çok güzel bir bilgi okuyabilirsiniz.
Bu sayfadan da başka bir yazı okuyabilirsiniz.