Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Pelaajan paremmuuden määrittäminen

E1ss [28.09.2017 16:39:22]

#

Tarvitsen jonkun kaavan minkä mukaan pisteytän pelaajat paremmuusjärjestykseen. Eli aina kun pelaaja voittaa toisen pelaajan hän saa pisteitä. Jos voitetulla pelaajalla on enemmän pisteitä kuin itsellä ei pisteitä saa niin paljon kuin toisella on vähemmän. Eli periaatteessa sama juttu kuin Elo luku. Luin kuitenkin suomen kiellisen wikipedia sivun elosta mutta siellä taisi olla virhe koska sain kaavasta siten että pelaaja jolla on enemmän pisteitä saa enemmän pisteitä kuin pelaaja jolla on vähemmän. Onko kaava siis muuten oikea mutta käännän vain Ra:n ja Rb:n toisin päin? Yritin lukea englanninkielliseltä wikipedia sivulta mutta siellä puhuttiin vain turnauksista.

Grez [28.09.2017 16:42:24]

#

E1ss kirjoitti:

Jos voitetulla pelaajalla on enemmän pisteitä kuin itsellä ei pisteitä saa niin paljon kuin toisella on vähemmän. Eli periaatteessa sama juttu kuin Elo luku.

Eiks ton pitäis mennä päinvastoin?

Mut siis anyways, sehän vois toimia vaikka niin että voittaja saa 100 pistettä ja jos häviäjä on voittajaa parempi niin erotuksesta 20% päälle.

Eli kaava olis seuraava:
hp = häviäjän pisteet
vp = voittajan pisteet
Pisteet voitosta = 100 + (hp>vp) ? 0 : (hp-vp)/5

TapaniS [28.09.2017 17:02:28]

#

Laitat ensin pelaajille odotustuloksen, joka on jotakin välillä 0,2 ... 0,8. Jos pelaajat ovat yhtä hyviä, odotustulos on 0,5. Jos toinen pelaaja on parempi, hänen odotustulos on suurempi kuin 0,5. Mitä isompi tasoero on, sitä suurempi odotustulos.

Kun peli päättyy, tulosta verrataan odotustulokseen. Jos pelaaja voittaa, saadaan kerroin k=(1-OT). Jos pelaaja häviää, kerroin k=(-1*OT). Tasapelin sattuessa kerroin k=(0,5-OT)

Pelaajan uusi vahvuus, V = V + (k * SP), jossa SP on muutoksen nopeus, tyypillisesti SP = V / 50. Voi olla jokin toinenkin kaava riippuen halutusta muutosnopeudesta.

E1ss [28.09.2017 18:29:49]

#

Kiitos vastauksistanne. Käytän varmaan jompaa kumpaa niistä sen sijaan että rupeaisin miettimään tuota elo juttua.

Metabolix [28.09.2017 20:50:51]

#

Erilaisia kaavoja voi keksiä vaikka kuinka paljon. Se ei ole kovin vaikeaa. Ensin pitää kuitenkin miettiä, millaiset tulokset kaavasta pitäisi saada. Se voi olla vaikeaa.

Vinkkejä suunnitteluun: Paljonko ajattelet olevan ”hyvän pelaajan” pisteet? Jos pelaaja A aloittaa pistemäärästä 0 ja haluaa päästä johonkin pistemäärään X, montako ottelua pitää pelata, jos pelaa aina 0-tasoista, aina oman tasoista tai aina X-tasoista vastaan? Keksi vielä muutama (mahdollisimman erilainen) esimerkki pelaajien pistemääristä ennen ottelua ja sen jälkeen.

Näiden tietojen perusteella voisi sitten kehitellä kaavan.

E1ss kirjoitti:

Luin kuitenkin suomen kiellisen wikipedia sivun elosta mutta siellä taisi olla virhe koska sain kaavasta siten että pelaaja jolla on enemmän pisteitä saa enemmän pisteitä kuin pelaaja jolla on vähemmän.

Olet varmaan ymmärtänyt jotain väärin. Kaava ei kerro, paljonko joku ”saa pisteitä”, vaan Elo-luvun perusteella lasketaan tuloksen odotusarvo (voiton todennäköisyys). Paremman pelaajan voiton todennäköisyys on tietenkin suurempi. Elo-luvun korjaus (eli varmaan se, mitä haluat antaa pelaajalle pisteiksi) lasketaan kaavalla (Lopputulos – Odotustulos) * Kerroin kummallekin pelaajalle erikseen.

Esimerkki:

A_Elo = 1111
B_Elo = 2222
kerroin = 16

A_odotus = 1 / (1 + 10 ** ((B_Elo - A_Elo) / 400)) # missä ** on potenssilasku
# A_tulos = 1 jos A voittaa, tai 0,5, jos tasapeli, tai 0, jos A häviää
A_tulos = 1
A_muutos = (A_tulos - A_odotus) * kerroin

# B-pelaajan muutos voidaan laskea näin:
B_odotus = 1 - A_odotus
B_tulos = 1 - A_tulos
B_muutos = -A_muutos

# Selitys, miten B_muutos ratkeaa:
# B_muutos = (B_tulos - B_odotus) * kerroin
# B_muutos = ((1 - A_tulos) - (1 - A_odotus)) * kerroin
# B_muutos = (1 - A_tulos - 1 + A_odotus)) * kerroin
# B_muutos = (- A_tulos + A_odotus) * kerroin
# B_muutos = -(A_tulos - A_odotus) * kerroin
# B_muutos = -A_muutos

print("A: Elo %f, tulos %f, muutos %f" % (A_Elo, A_tulos, A_muutos))
print("B: Elo %f, tulos %f, muutos %f" % (B_Elo, B_tulos, B_muutos))

Jos et halua viedä häviäjältä pisteitä, voit tietenkin vain palkita voittajaa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta