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 * [1 1 1 1]' / (2*length(D)) 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