Algoritma Facemash (bag. 2)

Oke kawan-kawan pembaca, melanjutkan dari bagian pertama, sekarang udah pada tau kan gimana Elo Rating System itu? Kalo yang masih belum tau, baca di postingan sebelumnya di bagian 1. Nah sekarang gimana cara menggunakan Elo Rating itu? Ini sedikit ilustrasinya,

Misal si pemain A yang punya poin 1900 tanding lawan pemain B yang poinnya baru 1700. Tentunya dugaan awal kita adalah si A lebih jago karena punya poin lebih tinggi. Nah, dugaan awal itulah yang nantinya menjadi harapan/ekspektasi dari si A terhadap si B. Nilai ekspektasi itu dihitung berdasarkan rumus sebelumnya dengan Ra = 1900 dan Rb = 1700, didapat:

Qa = 56234.132
Qb = 17782.794
maka,
Ea = Qa/(Qa + Qb) = 0.76
Eb = 1-Ea = 0.24

Untuk nilai faktor-K, asumsikan kita menggunakan aturan USCF. Karena poin si A maunpun B di bawah 2100, faktor K yang digunakan adalah K = 32, sehingga:

Ra’ = 1900 + K(Sa – Ea)
Ra’ = 1900 + 32(Sa – 0.76)

Nilai Ra’ adalah nilai poin yang baru setelah melakukan permainan. Nilai Sa bergantung dari pemain A, apakah menang, kalah atau seri. Sekarang kita tinjau kedalam tiga kasus, kasus pertama seandainya si A menang dan si B kalah, kasus kedua seandainya si A kalah dan si B menang, kasus ketiga seandainya si A dan si B seri.

Kasus pertama: Si A menang dan Si B kalah (Sa = 1 dan Sb = 0)

Ra’ = 1900 + 32(1-0.76)
Ra’ = 1907.68

Rb’ = 1700 + 32(0-0.24)
Rb’ = 1692.32

yang kemudian nilai Ra’ menjadi nilai poin Ra dan Rb’ menjadi nilai poin Rb. Terlihat pemain A mencuri poin milik pemain B sebesar 7.68 karena pemain A telah memenangkan permainan.

Kasus kedua: Si A kalah dan Si B menang (Sa = 0 dan Sb = 1)

Ra’ = 1900 + 32(0-0.76)
Ra’ = 1875.68

Rb’ = 1700 + 32(1-0.24)
Rb’ = 1724.32

Terlihat pemain B mencuri poin yang lebih besar jika memenangkan pertandingan melawan pemain A yaitu 24.32 karena faktor dugaan awal atau ekpektasi A lebih dijagokan untuk menang dan ternyata pemain A kalah.

Kasus ketiga: Si A dan Si B seri (Sa = Sb = 0.5)

Ra’ = 1900 + 32(0.5-0.76)
Ra’ = 1891.68

Rb’ = 1700 + 32(0.5-0.24)
Rb’ = 1708.32

Terlihat pemain B tetap berhasil mencuri poin dari Pemain A walaupun hasil permainan berakhir seri. Hal ini dikarenakan perbandingan poin yang relatif jauh antara pemain A dan pemain B.

Algoritma sudah, lalu gimana cara nulisnya ke bahasa pemrograman? Ok saya akan kasih contoh penulisannya dalam bahasa pemrograman PHP. Penulisannya akan saya jadikan sebagai fungsi, jadi akan lebih mudah digunakan di program. Saya menggunakan versi USCF seperti contoh ilustrasi diatas. Here we are:

// Elo rating system engine based on USCF K-Factor
// Created by Ganjar Santoso

function Ekspektasi($Ra, $Rb) {
 $Qa = exp(($Ra/400)*log(10));
 $Qb = exp(($Rb/400)*log(10));
 $Eksp = $Qa/($Qa+$Qb);
 return $Eksp;
}

function EloRating($Ra, $Sa, $Ea) {
 if($Ra > 2400) {
  $elorate = $Ra + 16*($Sa - $Ea);
 }else if(($Ra = 2100)) {
  $elorate = $Ra + 24*($Sa - $Ea);
 }else{
  $elorate = $Ra + 32*($Sa - $Ea);
 }
 return $elorate;
}

Gimana cara menampilkannya di PHP, gampang aja. Kita ambil contoh kasus yang pertama dari ilustrasi yang udah dijelasin, yaitu pemain A menang dan pemain B kalah. Misal fungsi-fungsi diatas disave dengan nama file “elofunction.php”.

include("elofunction.php");

// Menghitung ekspektasi Ea dan Eb
$Ea = Ekspektasi(1900, 1700);
$Eb = 1-$Ea;

// Menghitung Elo Poin
$EloPoinA = EloRating(1900, 1, $Ea);
$EloPoinB = EloRating(1700, 0, $Eb);

// Menampilkan Elo Poin
echo "Poin pemain A : ".$EloPoinA."</br>";
echo "Poin pemain B : ".$EloPoinB;

Hasilnya kira-kira akan seperti ini:

Poin pemain A : 1907.68
Poin pemain B : 1692.32

Oke, algoritma dan code udah, yang belum apa? yang belum adalah silahkan dicoba! Apalagi ditambah database MySQL, jadilah Facemash beneran (bukan tiruan lagi! haha). Mungkin ini untuk yang hobi aja kali ya.

Overall, segitu dulu aja. Selamat mencoba kawan-kawan! Kalo ada waktu, rencananya mau buat bagian 3 untuk membahas codenya menggunakan MySQL, jadi fokus ngebahas websitenya secara keseluruhan, bukan teori-teori lagi yang cuma bikin pusing, haha.

PS: diperbolehkan mengcopy-paste tulisan ini, namun hargai penulis dengan menyertakan sumbernya: http://hotswaps.blogspot.com, https://hotswaps.wordpress.com.

Wass.

Referensi:
http://en.wikipedia.org/wiki/Elo_rating_system
http://www.glicko.net/
Paper “Elo-rating as a tool in the sequential estimation of dominance strengths” oleh PAUL C. H. ALBERS & HAN DE VRIES, Utrecht University
Paper “Rating The Chess Rating System” oleh Mark E. Glickman & Albyn C. Jones, Boston University

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s