Luokitusten säätäminen korottamalla kerhonsa pelaajia ei ole aivan yksinkertaista. Kun pelaajamäärä on vähänkään suurempi, ongelmia tuottaa se, että sillä, jolla korotusvastuu on, ei ole riittävää omakohtaista tietoa kaikkien korotustarpeessa olevien pelaajien nykyisestä pelitaidosta.
Markku Jantunen ja minä kävimme sekä täällä wikissä että offlinenä hieman keskustelua asian tiimoilta. Markku esitti, että pelaajien välisten keskinäisten tasoituskivien määrän taulukoimalla voidaan ainakin suuntaa-antavasti arvioida korotustarpeessa olevia pelaajia ja korotusten suuruutta. Itse olin aikaisemmin käyttänyt samankaltaista menetelmää Oulun Goonpellaajien alkuaikoina, kohtalaisin tuloksin. Esitän seuraavassa hieman viritetyn version algoritmista luokitusten arvioimiseen siitä, minkä kukin pelaaja luulee olevan oikea tasoitus suhteessa muihin.
Alla olevat esimerkit on kirjoitettu myös matlab (octave) -koodina, joka toivottavasti auttaa insinöörejäkin ymmärtämään, mitä tarkoitan.
Jokaiselta pelaajalta kysytään, mikä hänen mielestään on sopiva tasoitus kunkin muun pelaajan kanssa, ja tulokset laitetaan neliömatriisiin siten, että jokaisella rivillä on pelaajan näkemys tasoituskivista sen sarakkeen kohdalla, jonka kanssa samannumeroinen rivi vastaa k.o. pelaajan mielipiteitä. Mikäli arvausta ei ole saatavissa, laitetaan arvoksi pelaajien luokitusero. Valkoisen antama tasoitus on negatiivinen luku, mustan vastaanottama positiivinen.
Alla matriisiin H on kirjoitettu neljän täysin fiktiivisen pelaajan näkemykset siitä, mikä on tasaväkisen pelin aikaansaava tasoituskivien määrä keskinäisissä peleissään. Huomataan, että pelaajat 1 ja 2 pelaavat keskenään tasa-avauksella ja pelaajat 3 ja 4 ovat ensiksimainittuja joitakin kiviä heikompia.
>> H = [ 0 0 -8 -5; 0 0 -8 -4; 8 7 0 2; 5 5 -2 0] H = 0 0 -8 -5 0 0 -8 -4 8 7 0 2 5 5 -2 0
Tarkoituksena on seuraavaksi laskea kunkin pelaajan antama tai saama keskimääräinen tasoitus. Tämän laskemiseksi matriisista H vähennetään sen transpoosi, jonka jälkeen rivit lasketaan yhteen ja tulos jaetaan pelaajien määrällä kertaa kaksi. (Koska vähennettäessä transpoosi luvut kaksinkertaistuvat.)
>> D = H - H' D = 0 0 -16 -10 0 0 -15 -9 16 15 0 4 10 9 -4 0 >> h_rel = D * ones(length(D),1) / (2*length(D)) ( ones(length(D),1) = [1 1 ... 1 1]' ) h_rel = -3.2500 -3.0000 4.3750 1.8750
Nyt vektorissa h_rel on jokaisen pelaajan antama keskimääräinen tasoitus. Miten tämä liittyy pelaajien luokituksiin? Kun lasketaan pelaajien keskimääräinen luokitus, on keskimääräinen tasoituskivien määrä suoraan suhteessa tähän. Kirjoitetaan pelaajien nimelliset luokitukset vektoriin r ja lisätään sen keskiarvo vektoriin h_rel.
>> r = [2 3 11 8]' r = 2 3 11 8 >> r_est = h_rel + mean(r) r_est = 2.7500 3.0000 10.3750 7.8750
Nyt vektorissa r_est on estimaatti kunkin pelaajan luokituksesta. Vektori r_est on minimietäisyydellä nimellisistä luokituksista. Mikäli nimelliset ja arvioidut luokitukset poikkeavat toisistaan, on syytä harkita korotuksia. Korotusmääriä voi kokeilla muuttamalla nimellisten luokitusten arvoja vektorissa r ja esim. laskemalla keskimääräisen neliövirheen.
>> r_mse = sum((r_est - r).^2 ) / length(r_est) r_mse = 0.2422
Edellisestä menetelmästä täytyy huomata, että se perustuu kahteen oletukseen:
- Pelaajien luokitusero ja käytetty tasoituskivien määrä ovat toisiansa vastaavia, mikäli luokitukset ovat oikein.
- Pelaajat osaavat arvioida oikean tasoituskivien määrän suurinpiirtein oikein
--Paavo Pietarila 12-01-03
Tietenkin tämä herättää kysymyksen siitä miten arvioida tasoituskivien määrä uudelle pelaajalle. Tasoituskivien tarkoituksena on luoda tilanne, jossa voittotodennäkyisyys p=0.5 kun pelataan oikeilla tasoituksilla. KGS:n, ELO-järjestelmän ja GOR-järjestelmän pohjana on oletus, jonka mukaan pelaajan X voittotodennäkyisyys voidaan arvioida seuraavalla kaavalla:
p=1/(1+A^((rank(Y)-rank(X)+tasoitus)*K))
jossa A ja K ovat eri konstantteja. ELO-järjestelmässä A=10 ja K=1/400, kun taas kgs-järjestelmässä A=e ja K~1, luokituksesta riippuen. ELO- ja GOR-järjestelmissä luokitukset vaihtelevat välillä 100-3000, kun taas KGS-järjestelmä pyrkii käyttämään luokituksia, jotka vastaavat kyu ja dan-arvoja.
Pelaajan luokitus arvioidaan täten tilastollisesti pitämällä lukua pelatuista peleistä sekä valitsemalla se luokitus, jonka avulla yhteenkerrottu todennäköisyys tuloksille on mahdollisimman pieni.
Käyttäkäämme esimerkkiä.
Yllämainittuun go-kerhoon, jossa pelaajilla on luokitukset 3k, 3k, 8k ja 10k liittyy uusi pelaaja jonka nimellinen vahvuus on tuntematon.
Hän ottaa 3k-pelaajalta 9 kiveä ja häviää kaksi peliä. 10k-pelaajaa vastaan hän pelaa ilman komia ja voittaa yhden pelin, häviten toisen. 8k-pelaajaa vastaan hän pelaa yhden pelin kahden kiven tasoituksella ja voittaa pelin.
Mikä on todennäköisin luokitus?
Annetaan muuttujan x kuvata pelaajan luokitusta.
Todennäköisyys kahdelle tappiolle 3k-pelaajaa vastaan on (1-(1/(1+e^(12-x))))^2. Todennäköisyys yhdelle voitolle 8k-pelaajaa vastaan on (1/(1+e^(10-x))). Todennäköisyys yhdelle voitolle 10k-pelaajaa vastaan on (1/(1+e^(11-x)). Todennäköisyys yhdelle tappiolle 10k-pelaajaa vastaan on 1-(1/(1+e^(11-x)).
Kertomalla nämä toisillaan saadan funktio, jonka maximiarvo sijaitsee todennäköisimmän luokituksen kohdalla. Tässä tapauksessa maximiarvo saadaan luokitukselle 11k.
Tätä menetelmää voidaan käyttää myös silloin, kun kaksi pelaajaa pelaavat useampia pelejä toisiaan vastaan eri tasoituksille.
--Markus Koivisto 13-04-2005