25. september 2018

Glicko vs Tjukken 2

Da er det dags å trene Tjukken. Jeg har en versjon som jeg har kjørt på løpene i sommer, så den er trent på et OK nivå allerede. Men jeg aner ikke hvordan den vil prestere i den samme testen hvor Glicko klarte 64,3%. Dette første forsøket er veldig spennende.


Tjukken må opp i form. Problemet med Tjukken er at den bygger på informasjonen som man får av strekktidene i orienteringsløpene, altså, alle mellomtidene. Men ikke alle løp har mellomtider, og nå skal den slåss mot Glicko som forutsier resultater i alle løp. Så den må få gjort noe med denne svakheten sin. 



Andre svakheter Tjukken har per nå:

Den overvurderer løp i korte løyper, slik at en som løper mest korte løyper blir overvurdert kontra en som helst løper lange. Effekten er ikke supertydelig, men jeg tror den gjør det.

Den antar at alle løyper skiller like mye, slik at løpere som er 20% bak teten i lette løyper også forventes å være 20% bak i tunge. Den burde justere for at løyper kan skille mer eller mindre enn normalt, uavhengig av kilometertiden til teten. Altså at teten kan ha hatt en mer-enn-vanlig fordel.


Og, igjen, hva gjør Tjukken hvis en god løper blir disket, eller enda vanskeligere, bruker konkurransen til å ta seg en joggetur. Per i dag stryker den alle diskløpene og regner med alle joggeturene.

Aii aiii.

Vi har første kjøring, og den kommer ut med 33,86%


 Full krise, langt under apenivå, og jeg reagerer med dyp skuffelse, er jeg så mye dårligere enn Glickman. Men det må jo være en feil her. Så tjukk i hodet kan ikke Tjukken være.

Ah! Feilen er banal.

Når Glicko rangerer, er en høy ranking bra. Men når Tjukken rangerer løpere, gjetter han kilometertiden deres, så derfor er LAV ranking bra. Jeg brukte samme test som for Glicko, som gjør at Tjukken konsekvent har gjettet det motsatte av det den mener.


Det burde bli 100% - 33,86% = 66,14%

Jeg kjører om igjen og får

Fitness 65,9261711892075

De 0,2% jeg mister er tilfellene der løpstiden til de to løperne er ulik og rankingen deres er lik, der får han jo ikke rett uansett hvilken vei han snur seg.

Men det er forstatt noe som ikke stemmer, for Tjukken har gjort 110000 vurderinger mens Glicko gjorde 86000. Maskinen skulle hoppe over å teste hvis en av løperne ikke har løpt før, men i Glicko-testen formulerte jeg det som standardavvik under 400, (start-usikkerheten), og løpere som ikek har løpt på lenge faller jo tilbake til 400. Så Tjukken har tatt med folk som har vært lenge borte fra sporten, mens Glicko ikke gjorde det. Jeg må teste dem på akkurat de samme 86000 for at det skal bli rettferdig.

Bekymring.

Jeg kjører om igjen, med bare disse, og får

Fitness 67,421090586342713



Med alle sine feil og mangler gjør Tjukken det 3,1 prosentpoeng bedre enn Glicko, i første forsøk. Det er knock out. Det er regelrett mord. Det er ikke noen vits å flikke videre på Glicko. Vi har en vinner.









Glicko vs Tjukken

Jeg vil lage en optimal ranking. En ranking som best mulig forutsier hvem av to konkurrenter som kommer til å prestere best i neste konkurranse. Jeg starter med orienteringsløp for det er det jeg kan best, men når jeg har laget rankingen kan arbeidet overføres til all annen idrett som handler om å komme seg fort fra A til B, være seg langrenn eller triatlon eller skiskyting eller galopp eller hundeveddeløp eller maraton eller sekkeløp eller telemark eller alpint.

Jeg har to konkurrerende algoritmer, veldig forskjellige, og bare en kan overleve. De må møtes i kamp.


Tjukken, som jeg har klekket ut selv. Tjukken baserer seg på å først sette et mål på hvor tøff løypen og konkurransen var, og deretter vurdere løpernes prestasjoner ut fra dette. Dette er iterativt som fy, fordi vurderingen av løypene baserer seg på vurderingen av løperne som baserer seg på vurderingen av løypene som baserer seg på vurderingen av løperne, og så kjører du denne karusellen til tallene ser fine ut. 

Tjukken har stor og tung kode, den er ikke like lett og smidig som sin motstander


... Glicko. Glicko er en versjon av ELO, som brukes i sjakk, utviklet av matematikeren Glickman.  Glicko er mindre kjent men bedre enn ELO,  til forskjell fra ELO vekter den forskjellig på en løper vi vet mye om og en vi vet lite om, og den ser forskjell på en klar seier og en knepen seier. For å bruke Glicko i orienteringsløp anser jeg ethvert løp som en mengde dueller mellom to og to løpere.

Disse to algoritmene skal slåss på liv og død. Den som vinner blir den nye rankingen, den som taper må dø.

Først må vi trene opp Glicko før kampen. Den gjør det veldig bra som ranking i norsk Scrabble, hvor den er implementert av Taral Seierstad. Jeg har testet den for Wordfeud League of Honour, hvor den gjetter rett i 64% av kampene. Den slo knock.out på ligaens nåværende rankingsystem, som klarer 57%.

Det er disse sterke resultatene som gjør at jeg vil teste den på nye oppgaver. Men det er en vesensforskjell, Glicko er god i sporter hvor to og to møtes. La oss se om den kan herje når mange møtes på samme utfordring.



Hva skal Glicko gjøre med diskvalifiserte løpere. En god løper som er disket vil jo få siste plass, men fortsatt være en god løper.

Som er to problemer:

Hva skal den diskvalifiserte løperen selv få i rankingeffekt for løpet.
Hva skal løperne få for å ha slått den diskvalifiserte.

Jeg innfører to vekter for dette. "Egendisktyngde" og "andresdisktyngde", jeg skal justere dem med genetisk programmering, så vil evolusjonen vise hva som er rett å gjøre.

Dessuten må vi ha en maxkampverdi/minimum kampverdi. Slik at ekstreme resultater fra en enkeltløper, eller en feilregistrering i dataene, ikke får grenseløst stor effekt for rankingen til løperne som møter beistet.




Folk har gjort dette før meg, på formel 1. Hvor det er mye 'ikke fullført', og dermed ganske avgjørende hva man gjør med de dårlige løpene. Jeg heller mot at det riktige er å stryke disk/brutt-løpene, men jeg vil gjerne ha støtte fra AI på den teorien.

Jeg kjører dette gjennom genetisk programmering, metoden finner de beste valgene de stedene jeg er usikker. Jeg tester bare hva Glico forutsier om løpere som er ganske jevngode, for hver løper tester jeg mot de fem nærmeste konkurrentene som er dårligere, og de fen nærmeste konkurrentene som er bedre. De nivåene baserer seg på en ranking for 2018 som jeg ikke skal endre, slik at jeg kan bruke den på begge metodene.

Glicko gjetter i første runde rett i 62,8% av forsøkene. Ikke håpløst, men jeg hadde håpt på mer. Dette er verdiene den finner i de punktene jeg er usikker:

Fitness 62,86  B : 3 T 92 maxkampverdi: 3000 egendisktyngde: 0 andresdisktyngde 25

B og T er koeffisientene i glickoformelen. De er 5 og 90 for scrabble, så T er som forventet mens B overrasker. Null på egendisktyngde betyr at man ikke regner med de løpene hvor man blir disket. Det er som jeg forventet.



Vi må trimme. Finne forbedringsområder.

I blant underpresterer løpere kapitalt. Av og til betyr det at løperen tok løpet som trening. Jeg innfører variabler for det også, underpresteringlimit og egenunderprestering, som sier hvor mye rankingfall vi regner som underprestering, og hvor mye vi demper et sånt løp med.

Man ender jo med en ranking hvor det å gjøre et litt dårlig løp er mer ødeleggende for rankingen enn det å gjøre et veldig dårlig løp. Men vi får se, om det likevel gir en bedre ranking.

Fitness 62,97
B : 3 T 76
maxkampverdi: 2800 egendisktyngde: 75 andresdisktyngde 0
Egenunderprestering: 75 underpresteringlimit: 1

Det ser bedre ut, vi nærmer oss 63%. Dette er etter tjuende generasjon, og jeg holder meg med en befolkning på femti programmer som krysser hverandre. Jeg liker ikke at den har tatt inn disk-løpene i beregningen igjen. Maskinen er veldig tydelig på at B skal være 3. som er spennende, det er 5 som pleier å være standard. Den har ikke fått mulighet til å gå lavere enn 3, nå skal den få det.

Jeg lager en myk avrunding, slik at prestasjoner over max ikke blir bare satt til max, men til en verdi i nærheten av max som avhenger av hvor mye de har gått over grensa. Resultatene som kommer ut ser faktisk svakere ut.


63% er ikke profetisk nivå akkurat, en ape som kaster mynt vil jo klare 50%. Utfordringen er at løperne vi sammenligner er så like, men jeg føler at jeg må sjekke at det ikke er en feil et sted. Jeg endrer slik at alle løpere sammenlignes med alle andre i løpet. Det øker treffraten til 74%. Så det fungerer. Det er bare at testen er brutal fordi løperne som Glicko skal spå er jevngode. 

Hver test går over ni sesonger, nesten tusen løyper, maskinen gjør åttisekstusen tips som enten er rett eller feil. Treffer typisk 55000 ganger og bommer 31000.

Jeg endrer testen litt. Jeg har økt betydningen av løpere som løper i en annen løype enn de pleier, men dermed økte jeg også betydningen av en del folk som har deltatt veldig lite, så jeg demper ned disse.



Fitness 62,94  B : 2 T 76 maxkampverdi: 2950 egendisktyngde: 75 andresdisktyngde 0 Egenunderprestering: 75 underpresteringlimit: 1

Effekten er ikke magisk. Jeg liker ingen av disse tallene. B og T kryper lavt, langt under det jeg forventet, og egendisktyngde bør være null etter mitt skjønn. Pluss, den burde kunne treffe med mer enn 63%. Fitness må opp, ellers tror jeg at Tjukken kommer til å banke Glicko.


Den er så glad i underpresterings-demperen at det aner meg at den gjerne vil dempe alt, uansett, at effekten av et enkeltløp svinger rankingen for mye. Den er jo bygd for sjakk, hvor man kanskje spiller 10-12 enkeltoppgjør per turnering, men orienteringsløp kan jo fint inneholde 50 internoppgjør. Jeg innfører en sordin, pluss, jeg lar den teste B=1.

Fitness 64,15239539184269  B : 1 T 68 maxkampverdi: 3600 egendisktyngde: 50 andresdisktyngde 75 Egenunderprestering: 62 underpresteringlimit: 3  sordin: 40

Sordinen velger å redusere effekten av hvert løp ned til 40%, vi beholder mer av løpernes gamle ranking, og skulle du sett, Glicko spretter et helt prosentpoeng opp i kvalitet. 

Vi finpusser, leter nærmere rundt de tallene vi allerede har.

Fitness 64,30040088677534
B : 1 T 78
maxkampverdi: 4900 egendisktyngde: 100 andresdisktyngde 30
Egenunderprestering: 62 underpresteringlimit: 3  sordin: 40

Ser om vi kan tjene noe på å endre startrankingen og -variansen til noen som aldri har deltatt, og c, som er tidsfaktoren på foreldingen av prestasjoner. Jeg lar den jobbe hele natta, hundre generasjoner, uten at evolusjonen kommer opp med noe bedre. Mystisk mange (4) varianter gir samme fitness ned til ørtende desimal, som betyr at alle disse gjetter 55978 rett, og ingen klarer 55979. Men det er jo ikke helt uavhengig av hverandre, disse gjettingene, slik at dette tallet vil bevege seg i kvantesprang, i ordets egentlige betydning, (hopper over verdiene imellom opp til neste nivå).


Fitness 64,30040088677534
B : 1 T 78
maxkampverdi: 4925 egendisktyngde: 100 andresdisktyngde 32
Egenunderprestering: 62 underpresteringlimit: 3  sordin: 40
C: 10 startvarians : 300  startranking: 1500

Vi har hatt en del fremgang, men nå kommer jeg ikke lenger. Glicko holder samme nivå som i WLoH, tre tester der, på tre forskjellige sesonger, ga 64,2%, 64,9% og 64,6%. Det er ikke direkte sammenlignbart, det kommer jo an på hvor jevngode konkurrentene er.

Jeg har brukt dager på å trene Glicko, men jeg håper den får skikkelig juling av Tjukken. En sak er at jeg har laget Tjukken selv, fra scratch, en annen sak er at jeg er sugen på å nå et høyere nivå enn 64,3%. Det blir et spennende oppgjør.

19. september 2018

Den tentative avlivningen av Esquil


Jeg kjørte på en skogsvei, i skumringen, og du kan si, hva er spesielt med det, for det har jo du gjort en del tusen ganger uten at du trenger å informere internettet om det,  men denne kritikken din faller på steingrunn, for det har jeg også, det er ikke det som er greia her, la meg fortelle historien nå da, djeeezz.

Skumring altså, trær og asfalt, og brått ser jeg for mitt indre øye et dyr, mørkt grått, løpe ut fra den høyre siden, rett foran bilen, og dette skjer meg, ikke ofte, men noen få ganger i tiåret, jeg ser ting, som å drømme, bare våken, av og til veldig tydelig men alltid distinkt forskjellig fra å faktisk se ting gjennom øyet, jeg vet at tingene jeg ser ikke er virkelige. Jeg har snakket om det før, da jeg nesten døde, hvordan jeg ‘så’ erfaringsbilder fra livet mitt, liggende i hauger oppå hverandre. Denne gangen var jeg ikke syk i det hele tatt, alt var fint, men jeg ‘så’ tydelig et dyr løpe ut fra høyre side av veien.

Jeg roet ned bilen, eller, unnlot å øke farten, man blir jo minnet på at noe kan skje, selv om dette bare er tegneseriehodet mitt på tomgang.

Cirka ti sekunder senere løp et dyr ut fra høyre veikant. Mørkt, gråaktig, noe lysere bak på stjerten, ikke til å skille fra dyret jeg 'så' inni hodet. Men nå altså i virkeligheten, og dyret passerte foran bilen min, men i god avstand foran. Dyret pilte inn i skogen på den andre siden. Ikke vet jeg hva det var, det hadde størrelse og fart som en hund, men det oppførte seg som et villdyr, så, mest syntes jeg det lignet en en ulv, men mer sannsynlig var det et lite dyr i hjorteslekten farget grått av skumringen.

Uansett, veldig likt det jeg ‘så’ inni hodet.

Og jeg tenker, WTF er dette, er jeg synsk nå, var det noe som forsøkte å advare meg, reddet denne åpenbaringen livet til dyret, men nei, det gjorde jo ikke det, det var bare noen sekunder mellom visjonen og den faktiske hendelsen, og dyret var så langt foran støtfangeren at jeg måtte ha gasset dugelig på om det skulle blitt en krasj. Jeg kunne påberopt englevakt og alskens, men jeg er ikke i tvil om at dyret ville ha overlevd den kvelden uansett hva jeg så inne i hodet mitt.

Likevel. Man blir jo en del satt ut. Jeg har aldri før sett en ting noen sekunder før den skjer. Men jeg så det jeg så, skal jeg ljuge om det for å virke normal, nei, for vi lever i tolerante tider, broder, ihvertfall later vi som om vi er tolerante, og når prinsessen din kan starte engleskole kan da vel jeg ha lov å se et løpende dyr inni hodet et sekund? Uansett. Jeg gjorde det, og merksnodig var det.

Jeg ble shaky, kjørte videre, men hadde fått en del å prosessere, og det gikk ikke veldig radig unna. Jeg kom fra Svartskog og nærmet meg bebyggelsen ved Kolbotn, nordover langs Gamle Mossevei, vest for Gjersjøen, der veien skifter navn til Ljansbrukveien. Før man kommer til bebyggelsen gjør veien en slags dobbel sving, som en kamelrygg med to pukler, og da jeg kom ut på denne strekningen, i den første svingen, så jeg to par billykter i den andre svingen. Åpenbart en forbikjøring på gang, men den hadde akkurat startet, lysene på den raske bilen var bak lysene på den langsommere. Bilene var ikke langt unna, og det selvfølgelige nå var at han som hadde startet på forbikjøring skulle hogge inn bremsene, for det var over førerkort dristig å gjøre det uten biler til stede. Nå som jeg hadde entret scenen var det galskap.

Men han bakket ikke, han var batshit crazy, kjørte på, og jeg kjente et streif av den samme følelsen som man får av komikk, for det er så uventet og uvirkelig, at han fortsetter å gi gass i mitt kjørefelt, front mot front rett mot meg, jeg har sett forutsigbar adferd i så mange år og så skjer noe helt annet, usedvanlig festlig du, om det ikke var for at jeg var i akutt livsfare, jeg hogg inn bremsene og vrengte bilen av veien og ut på veiskulderen, grøfta og skogen var tett på, jeg hadde nada spillerom, og jeg hadde gjort det jeg hadde å gjøre, bremsen var helt inn, og jeg ventet på dommen, front mot front eller ikke, og jeg rakk å kjenne på at jeg kunne dø her og nå, og jeg var overrasket, rammen var så ordinær, skogen, veien, det var ikke sånn jeg så for meg slutten.

Den tredje involverte billisten stod også på bremsene, og takk for det. Gærningen smatt inn mellom støtfangerne våre, ikke mange metrene foran min, og fortsatte villmannsferden.

Det er det soleklart mest hasardiøse jeg har sett i det kvarte århundret jeg har hatt førerkort. Det var virkelig ikke en dristig forbikjøring, det var langt forbi det, langt forbi hasardiøst, langt og godt og bastant inn i suicidalt. Et menneske som ønsker å leve kjører ikke sånn.

Ljansbrukveien. Den fortsetter, blir til riksvei 155, skifter navn til Ljabruveien, hvor det tar av en vei til Bjørndal, vi er kommet en drøy kilometer unna nå, i retningen jeg kjørte, og i dette krysset, bare noen uker senere, skjedde en frontkollisjon. En døde. En ble kritisk skadd.

Visjonen fikk meg til å roe ned. Da jeg kom inn på denne strekningen hadde jeg lavere fart enn jeg ellers ville hatt. 

Hadde jeg kjørt som jeg vanligvis pleier, ville jeg dødd.



 .