Saya ingin menggunakan Elo untuk melacak peringkat pemain di antara pertandingan pada pertandingan tertentu, namun permainan tersebut dapat dimainkan hingga empat pemain dalam satu pertandingan. Saya telah melihat permainan seperti Carcassonne menggunakan Elo dengan lebih dari dua pemain bermain, tetapi saya tidak terbiasa dengan Elo melampaui pertandingan 1-1.
Dari artikel wikipedia , persamaan dua pemain yang ingin saya sampaikan adalah:
E a = 1 / (1 + 10 (R b - R a ) / 400 )
E b = 1 / (1 + 10 (R a - R b ) / 400 )
R x baru = R x lama + 32 * (W - E x ), di mana W = 1 jika X menang dan W = 0 jika X kalah.
Bagaimana perhitungan untuk E x dan perubahan W diberikan lebih dari dua pemain?
algorithm
multiplayer
ranking
untuk melakukannya
sumber
sumber
Jawaban:
Seperti yang disarankan oleh tautan teratas dalam pencarian Google saya (tautan busuk dihapus, situs masih tersedia di WayBackMachine di http://web.archive.org/web/20130308190719/http://elo.divergentinformatics.com/ ), Anda dapat menghitung perubahan individu dalam peringkat Elo pemain (nilai R Anda), dan kemudian jumlahkan untuk memberikan perubahan total untuk diterapkan pada peringkat masing-masing pemain.
yaitu Jika Anda memiliki 4 pemain (A, B, C, D), hitung perubahan ke peringkat A (R-sub-a-sub-baru) dari skor mereka terhadap B, C, dan D, lalu sesuaikan peringkat A dengan total nilai-R yang dihitung.
sumber
Saya menemukan sebuah makalah dengan kode sumber PHP dari metode yang mirip dengan jawaban fnord di sini: http://elo-norsak.rhcloud.com/3.php Saya membuat implementasi php untuk keperluan umum di sini: https://github.com/ FigBug / Multiplayer-ELO Saya menggunakannya dengan grup permainan papan saya, dan sejauh ini tampaknya berfungsi dengan baik.
Perhitungan Ex dan W akan tetap sama. Alih-alih menggunakan K dari 32, gunakan K dari 32 / (# pemain - 1). Kemudian, lihat setiap permutasi 2 pemain dan hitung (32 / (# pemain - 1) * (W - Mantan)). Kemudian RxNew sama dengan RxOld + Jumlah semua nilai yang baru saja Anda hitung.
sumber
eloChange += round($K * ($S - $EA));
tetapi melakukan pembulatan hanya setelah semua perhitungan saat pengaturaneloPost