Näppärien kooderien jouluohjelmointikilpailu:

PRISONER'S DILEMMA - Vankipeli

Vaihe 1:n tulokset


Tämä on 17.12.96 päivitetty versio. Päivitys tehtiin, koska kaksi testiohjelmista oli siten rikki, että ne saattoivat palauttaa laittoman arvon ("Tunnista itsesi", "Politiikoi").

Sisällysluettelo


Yleistä

Heti ensimmäiseksi haluan kiittää kaikkia kisaan osallistuineita täyttä tusinaa kovaa kooderia. Samalla pyydän jo nyt anteeksi sitä, että tulen repostelemaan kilpailutöiden algoritmeja rankalla kädellä. Älkää katsoko tätä ilkeydellä tehdyksi. Katsokaa ennemminkin, että tässä on tilaisuus oppia jotain niin ohjelmoinnista, algoritmeista kuin ehkä elävästä elämästäkin. Olen erittäin iloinen jokaisesta saapuneesta kilpailutyöstä ja voin sanoa, että algoritmien testaaminen on ollut ilo. Viimeiseksikin tullut työ on paljon parempi kuin työ, jota ei ole lähetetty!

Jos joku nyt kuitenkin kommenttien takia haluaa nimensä pois kilpailutyöstään, teen sen kyllä. Toivoisin kuitenkin, että jopa alemmas listalle joutuneet tuntisivat edes pientä ylpeyttä siitä, että viitsivät ja uskalsivat ottaa osaa.

Kuten kisasäännöissä luvattiin, on kierroksia mikä tahansa määrä 100:n ja 1000:n välillä. Tämä oli tehty siksi, ettei mikään työ voi tietää, koska kisa loppuu. Valitsin loppukilpailuun 791 kierrosta.

Yhdessä työssä oli oppimismoodi, jonka avulla se ensimmäisen pelikierroksen jälkeen tiesi, montako kierrosta on, mutta koska tekijä itsekin epäili sen sallittavuutta, hän teki ominaisuudesta helposti poiskytkettävän.

Yllättävän monessa työssä oli C++ -sekasotkua ja yhdessä oli selvä ohjelmointivirhe (taulukon rajojen ylitys), joista sain suoria kääntäjävirheitä tai varoituksia (gcc, Amigan SAS/C). Ja kun pitkien epäilysten päätteeksi lisäsin testipenkkiin koodin, joka tutkii kunkin pelaajan vastauksen laillisuuden, huomasin, että kaksi algoritmia tosiaan palauttavat myös muita arvoja kuin sallitut V_LUOTA ja V_HYLKAA.

Koska osassa töistä on mukana satunnaisuutta, vaihtelevat pisteet hieman. Siksi päätin jo etukäteen, että ensimmäinen 17.12. ajamani Vankipeli tuottaa lopulliset tulokset. Tämä tehtiin siksi, etten itse pääsisi tahallisesti tai tahattomasti vaikuttamaan tuloksiin.

Testirutiineista jätin algoritmin "Arvo" kilpailutöiden joukkoon, jotta se antaisi kuvan, miten täysin satunnaisesti käyttäytyvä "ilman algoritmia" toimiva vanki pärjäisi. Algoritmeissa, jotka pärjäävät huonommin kuin "Arvo", kutakuinkin täytyy olla jokin ajatusvirhe.

On myöskin huomattava, että töiden menestys riippuu yksinomaan siitä, mitä vastustajia kisassa on. Jos joitakin töitä jätetään pois tai otetaan lisää, muuttuu myös muiden töiden järjestys.


Sijoitukset

Tulokset olivat seuraavat:
Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 389470
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 270763
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 230951
  4. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 185449
  5. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 179967
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 150052
  7. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 144869
  8. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7 104691
  9. tommi.lundell.ntx.nokia.com              Testi2i              Ti 104071
 10. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE  80188
 11. Henrik Herranen (leopold.cs.tut.fi)      Arvo                 AR  53816
 12. Tero Pulkkinen (terop.modeemi.cs.tut.fi) Teron oppiva viritys TP  48021
 13. Risto Kurki (kafka.cc.tut.fi)            Painotus             Pn  27272

Kommentit joka työstä

1. Seuraa kaveria

Pasi Ojala (albert.cs.tut.fi), Kiltti, 100 % (parhaasta tuloksesta)

Hiukan harmikseni täytyy todeta, että ylivoimaisesti yksinkertaisin algoritmi voitti koko kisan. "Seuraa kaveria" on niin yksinkertainen, että laitan koko C-aliohjelman tähän:

static enum VASTE SeuraaKaveria(enum SYOTE edellinen) {
    return (edellinen==S_HYLKAA)?V_HYLKAA:V_LUOTA;
}
Ohjelma todellakin vain palauttaa vastapuolen edellisen siirron, ja aloittaa ensimmäisen kierroksen luottamalla. Tämä algoritmi, joka on alunperin ollut nimeltään "Tit for Tat" (Prof. Anatol Rapoport), voitti myös alkuperäisen ohjelmointikilpailun parikymmentä vuotta sitten. Kukaan muu kilpailijoista ei uskaltanut ajatella riittävän yksinkertaisesti. Näin "Seuraa kaveria" voittaa aika ylivoimaisesti.

Tämän algoritmin yksi mielenkiintoinen piirre on se, ettei se koskaan voita kaksinkamppailua. Se häviää aina niukasti tai pääsee tasapeliin. Paradoksilta tuntuva tilanne korjautuu sillä, että "Seuraa kaveria" saa hyvin helposti korkeita pisteitä - kun taas monilta muilta algoritmeilta menee tarmoa erilaisten huijausten keksimiseen.

Filosofiselta kannalta voimme tulkita voittaja-algoritmin toiminnan näin: kun tapaat uuden vastustajan, aloita optimistisesti luottamalla häneen. Jos luottamuksesi kuitenkin petetään, iske heti takaisin. Mutta jos vastustajasi päättää kokeilla uudelleen sinuun luottamista, älä jää murjottamaan.

Harmillinen puoli tässä työssä on myös se, että se tulee niin läheltä, että taidan tosiaan joutua lunastamaan lupaukseni voittomunkista.

2. Ei tasapeliä ilkiöille

Risto Paasivirta (paasivir.jyu.fi), Kiltti, 70%

Tämä algoritmi on muuten samanlainen kuin "Seuraa kaveria", mutta se vaatii vastustajalta kaksi peräkkäistä luottamista ennen kuin suostuu antamaan anteeksi. Tämä hiuksenhieno ero tuo yllättävän suuren piste-eron, koska moni ilkeä algoritmi ei halua antaa kahta luottoa petoksen jälkeen.

3. Codeformer

Juha Knuutila (juhakn.cs.tut.fi), Ilkeä, 59%

Tämä työ on selvästi parhaiten pärjännyt ilkeistä töistä. "Codeformer" kokeilee kolmannella ja neljännellä kierroksella kepillä jäätä pettämällä ja katsoo, saadaanko sen jälkeen syntymään luottamusta.

Alkuperäisessä 70-luvulla järjestetyssä kilpailussa kiltit ohjelmat pärjäsivät järjestelmällisesti ilkeitä paremmin, ja se näkyy pitäneen pääosin paikkansa myös tässä. "Codeformer" pärjäsi kuitenkin aika hyvin joukossa.

4. Tunnustele

Tero Holstila (h150712.cc.tut.fi), Ilkeä, 48%

Tunnustele on hieman samankaltainen algoritmi kuin "Codeformer", ja korkeimmalle päässyt hylkäämällä aloittava algoritmi. Hylkäämällä aloittamisessa on se vaarallinen puoli, että se sattuu helposti omaan nilkkaan, mikäli vastapuoli on kovin herkkähipiäinen (kuten "Luota luotettavaan").

5. Luota luotettavaan

Tero Mäyränen (deetsay.jyu.fi), Kiltti, 46%

Tämä, kolmas ja heikoiten pärjännyt kilteistä algoritmeista pääsi silti kokonaiskisassa puolenvälin paremmalle puolelle. Algoritmi on erittäin yksinkertainen: luota niin kauan, kunnes petetään edes kerran. Ja jos luottamus kerran menetetään, sitä ei anneta takaisin vaikka mikä olisi.

Tässäkin työssä koodin määrä verrattuna sijoitukseen on varsin hyvä: algoritmin saisi kirjoitettua kahteen riviin mukaan lukien muistimuuttujan alustus.

6. Tunnista itsesi

Jyke Jokinen (jyke.cs.tut.fi), Ilkeä, 39%

Tunnista itsesi aloittaa pelinsä ennalta määrätyllä 16 siirron sekvenssillä voidakseen pelata itsensä kanssa plussia ja kupatakseen muita. Mutta kun vapaaehtoisesti kupattavaksi suostuvia algoritmeja ei joukossa juuri ole, käy olo äkkiä tukalaksi.

7. Local Optimization

Pasi Fränti (franti.cs.joensuu.fi), Ilkeä, 37%

Tämä ehkä koko joukon hienostunein algoritmi aloittaa pelin muutamalla satunnaisella siirrolla (kuitenkin painottaen vastustajan siirtojen mukaan). Samalla se tilastoi kummankin osapuolen siirtoja ja suorittaa lokaalin optimoinnin kahden seuraavan kierroksen odotustuloksen maksimoimiseksi.

Haluaisin itse joskus oppia oikein kunnolla optimointiteoriaa, mutta tässä nimenomaisessa tapauksessa koneellinen optimointi jäi kauas yhden rivin voittaja-algoritmista. Harmittava takaisku on myös se, että Pasi Fränti lähetti myös pari muuta algoritmia, josta yksi pärjäsi oleellisesti paremmin kuin tämä (katso Kaikki työt vastakkain).

On myös todennäköistä, että jos algoritmi aloittaisi aina luottamalla satunnaisen aloituksen sijasta, sen mahdollisuudet pärjätä olisivat paremmat.

Tuloksena on kuitenkin kohtuullinen seitsemäs sija.

8. vanki no 7

Kimmo Takkunen (Kimmo.Takkunen.helsinki.fi), Ilkeä, 27%

On ikävää, ettei kisan parhaalla nimellä mukaan lähtenyt työ noussut tätä ylemmäs.

"vanki no 7" on melkein erinomainen. Ensimmäiset 97 siirtoa se pelaa kuten "Seuraa kaveria", mutta sitten se alkaa kieroilla. Ikävä kyllä tämän kieroilun seurauksena se vääntää lähes kaikkien kanssa hanat nollille. Ainoina poikkeuksina näkyvät olevan Local Optimization ja Painotus, jotka molemmat ovat niin fiksautuneet keskinäiseen luottamukseen, että niiltä menee kymmeniä, jopa satoja siirtoja ennen kuin älyävät kääntää luottovirtansa kiinni.

9. Testi2i

Tommi Lundell (tommi.lundell.ntx.nokia.com), Ilkeä, 27%

Tämäkin työ aloittaa olemalla kiltti, mutta alkaa pian kokeilla vastustajansa rajoja. Liian usein se kuitenkin venyttelee rajaa liikaa. Kaikkein harmillisin piirre on se, ettei "Testi2i" saa sovittua itsensä kanssa jatkuvaa luottamusta, vaan joka kuudes kierros menee molemmille epäedulliseksi tuplamiinukseksi.

10. Petä

Tommi Ylikulju (tylikul.ratol.fi), Ilkeä, 21%

Olemme tässä jo oppineet, että ilkeät algoritmit tuppaavat pärjäämään huonommin kuin kiltit. Mitä siis voimme odottaakaan algoritmilta, jonka nimikin on "Petä"?

"Petä" aloittaa "Tunnista itsesi":n tavoin tunnistekuviolla, jolla se tunnistaa itsensä. Sen jälkeen se kokeilee hetken olla kiltti, mutta ellei se taistele itseään vastaan se alkaa tarjota pitkää miinusta. Tilanne saattaisi olla pelastettavissa, mikäli se huomaisi toisen iskiessä takaisin taas ruveta olemaan ihmisiksi, mutta näin ei käy.

11. Arvo

Henrik Herranen (leopold.cs.tut.fi), Ilkeä, 14%

Arvo ei hävinnyt. Kaikki tämän alapuolelle joutuneet työt pärjäävät siis jopa täysin satunnaistakin algoritmia huonommin tässä ympäristössä.

12. Teron oppiva viritys

Tero Pulkkinen (terop.modeemi.cs.tut.fi), Ilkeä, 12%

"Teron oppiva viritys" ei oikein uskalla luottaa kehenkään, paitsi itseensä. Se saa kyllä muutaman vastustajan kanssa sovittua keskinäisen tukemisen taktiikasta, mutta ei esimerkiksi kaikkein helpoimman, "Seuraa kaveria", kanssa.

13. Painotus

Risto Kurki (kafka.cc.tut.fi), Ilkeä, 7%

Jonkun pitää aina jäädä viimeiseksi ja tällä kertaa se on ikävä kyllä painotus. En ole sen tarkemmin tutkinut algoritmia, mutta koska siinä oli taulukkorajavirhe, mieleeni tuli, että ehkä siinä on muitakin yksinkertaisia ohjelmointi-/ajatusvirheitä, jotka selittäisivät heikon menestyksen.

Mutta kuten sanoin, on parempi osallistua ja jäädä hännille kuin olla osallistumatta kokonaan.

Pari yleistä kommenttia

Kiltit työt valtasivat sijat 1, 2 ja 6. Tämä pitää varsin hyvin kutinsa alkuperäisen Prisoner's Dilemma -ohjelmointikisan kanssa. Olen kuitenkin hieman pettynyt, ettei kukaan tarjonnut kisaan "Tit for 2 Tats" -työtä, jonka olen itse lisännyt mukaan kaikkien töiden kisaan.

Epävirallinen pudotuskisa

Tässä olen ottanut kaikki kilpailutyöt ja antanut niiden taistella vastakkain. Joka kierroksella on heikoiten pärjännyt työ pudotettu pois (eli tapettu sukupuuttoon) ja loput jatkavat seuraavalla kierroksella.

Peli alkakoon!

Kierros 1

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 389470
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 270763
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 230951
  4. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 185449
  5. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 179967
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 150052
  7. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 144869
  8. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7 104691
  9. tommi.lundell.ntx.nokia.com              Testi2i              Ti 104071
 10. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE  80188
 11. Henrik Herranen (leopold.cs.tut.fi)      Arvo                 AR  53816
 12. Tero Pulkkinen (terop.modeemi.cs.tut.fi) Teron oppiva viritys TP  48021
 13. Risto Kurki (kafka.cc.tut.fi)            Painotus             Pn  27272
"Painotus" tipahtaa armotta pois kisasta.

Kierros 2

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 382610
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 272750
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 231843
  4. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 185089
  5. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 183210
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 148248
  7. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 127423
  8. tommi.lundell.ntx.nokia.com              Testi2i              Ti 108735
  9. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7 107299
 10. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE  82204
 11. Henrik Herranen (leopold.cs.tut.fi)      Arvo                 AR  56028
 12. Tero Pulkkinen (terop.modeemi.cs.tut.fi) Teron oppiva viritys TP  18737
"Teron oppiva viritys" joutuu väistymään kisasta. Ja kuten sanottua, kilpailu vaikuttaa keskinäiseen järjestykseen: "Testi2i" nousee "vanki no 7":n ohi.

Kierros 3

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 384184
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 270437
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 230277
  4. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 183800
  5. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 180424
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 150300
  7. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 124623
  8. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7 106538
  9. tommi.lundell.ntx.nokia.com              Testi2i              Ti 104185
 10. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE  79999
 11. Henrik Herranen (leopold.cs.tut.fi)      Arvo                 AR  46155
"Arvo" ei jäänyt kisan viimeiseki, mutta joutuu nyt väistämään parempiensa tieltä.

Kierros 4

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 356490
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 237747
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 191271
  4. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 143356
  5. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 143049
  6. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 112360
  7. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ  89691
  8. tommi.lundell.ntx.nokia.com              Testi2i              Ti  88132
  9. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7  67088
 10. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE  42250

Kierros 5

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 357167
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 236953
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 192155
  4. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 149287
  5. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 145484
  6. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 143558
  7. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 111572
  8. tommi.lundell.ntx.nokia.com              Testi2i              Ti 101013
  9. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7  68803
Yhtään algoritmia ei tunnu haitanneen "Petä":n menetys. Se ei tosin juurikaan auta "vanki no 7":ää. "Luota luotettavaan" alkaa menettää asemiaan.

Kierros 6

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 352742
  2. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 187591
  3. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 187128
  4. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 141381
  5. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 138949
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 109426
  7. tommi.lundell.ntx.nokia.com              Testi2i              Ti  72937
  8. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO  53988
"Local Optimization":ilta menee pasmat dramaattisesti sekaisin sen pudotessa turvallisen oloiselta 4. sijalta pudotuspaikalle. "Codeformer" kirii asemiaan.

Kierros 7

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 306136
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 186834
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 186194
  4. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 138294
  5. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 137554
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ  74120
  7. tommi.lundell.ntx.nokia.com              Testi2i              Ti  71378
"Testi2i" joutuu pitkän kitumisen jälkeen terärattaalle, ja kiltti mutta armoton "Luota luotettavaan" nousee sijalle 4 käytyään välillä jopa 6. sijalla. "Codeformer" putoaa takaisin 3. sijalle.

Kierros 8

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 268774
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 188000
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 187090
  4. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 139442
  5. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 138530
  6. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ  74954
"Tunnista itsesi" on nyt armottomassa pudotusvuorossa. On mielenkiintoista panna merkille, että kaikki kolme kilpailun kilttiä työtä on vielä kisassa mukana, ja vielä sijoilla 1, 2 ja 4.

Kierros 9

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 237096
  2. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 188736
  3. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 187902
  4. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 140120
  5. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 139218
Pudottuaan viidennelle sijalle edellisellä kierroksella "Tunnustele" ei mahda kohtalolleen mitään. 10 ilkeästä algoritmista on tämän jälkeen enää yksi jäljellä. "Codeformer" hönkii edelleenkin aivan 2. sijan kannoilla.

Kierros 10

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 189778
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 189738
  3. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 141312
  4. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 140544
Kolme kilttiä algoritmia pelaavat jo niin hyvin yksiin, että ne tipauttavat porukalla viimeisenkin ilkeän algoritmin mäkeen. Nopeimmat arvaavat jo seuraavan kierroksen tuloksen.

Kierros 11

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 142380
  1. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 142380
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 142380
Kun kaikki algoritmit ovat kilttejä, taputtelevat ne vain kilvan toistensa selkiä eikä eroa enää synny. Kilpailu on päättynyt kilttien algoritmien kolmoisvoittoon.

Kaikki algoritmit vastakkain

Tässä kisassa on laitettu kaikki kilpailutyöt, kakkostyöt ja testiohjelmat vastakkain.
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 866904
  2. Robert Axelrod (old)                     Tit for 2 Tats       T2 812420
  3. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 747055
  4. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 742157
  5. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 668003
  6. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki 2     th 605044
  7. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 579038
  8. Pasi Ojala (albert.cs.tut.fi)            Safe Try             ST 548900
  9. Henrik Herranen (leopold.cs.tut.fi)      Arvo adaptiivisesti  AA 544851
 10. Risto Paasivirta (paasivir.jyu.fi)       Ohari                Oh 527765
 11. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 508436
 12. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 480334
 13. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 474038
 14. tommi.lundell.ntx.nokia.com              Testi2i              Ti 439146
 15. Pasi Fränti (franti.cs.joensuu.fi)       Play even            EV 412736
 16. Henrik Herranen (leopold.cs.tut.fi)      Vuorottele           VU 388996
 17. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7 364556
 18. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 342333
 19. Henrik Herranen (leopold.cs.tut.fi)      Arvo                 AR 335810
 20. Henrik Herranen (leopold.cs.tut.fi)      Arvo kiltisti        AK 321143
 21. Pasi Fränti (franti.cs.joensuu.fi)       Politics             PO 277741
 22. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE 273223
 23. Henrik Herranen (leopold.cs.tut.fi)      Arvo ilkeästi        AI 242171
 24. Henrik Herranen (leopold.cs.tut.fi)      Luota aina           LA 220020
 25. Tero Pulkkinen (terop.modeemi.cs.tut.fi) Teron oppiva viritys TP 215722
 26. Henrik Herranen (leopold.cs.tut.fi)      Hylkää aina          HA 214224
 27. Risto Kurki (kafka.cc.tut.fi)            Painotus             Pn 210858
Kaikkein parhaiten asemiaan parantaa Pasi Fränti, joka siirtyy sijalta 5/12 sijalle 5/27. Käyn tässä läpi vielä muutaman uuden algoritmin ja kommentoin niiden toimintaa:

2. Tit for 2 Tats

Robert Axelrod, Kiltti

On sääli, ettei kukaan huomannut lähettää tätä työtä kisaan. "Tit for 2 Tats" on muuten kuten "Seuraa kaveria" (eli "Tit for Tat"), mutta se vaatii vastustajaltaan kaksi peräkkäistä pettämistä ennen kuin se alkaa pettää. Se on siis tavallaan vastakohta "Ei tasapeliä ilkiöille" -algoritmille.

3. Tutki ja hutki

Henrik Herranen (leopold.cs.tut.fi), Ilkeä

Algoritmi käyttää 8 vuoroparia vastustajan tarkkailuun. Jos vastustaja näiden aikana tuntuu luottavan aina, hylkää aina alkukierrosten jälkeen. Muuten käyttäytyy kuten "Seuraa kaveria". Tutki ja hutki on selvästi parhaiten pärjäävä ilkeä hylkäämällä aloittava algoritmi.

9. Arvo adaptiivisesti

Henrik Herranen (leopold.cs.tut.fi), Ilkeä

Olen vilpittömästi järkyttynyt, miten hyvin lähes puhtaaseen satunnaisuuteen perustuva algoritmi toimii: alussa asetetaan pelattujen pelien määrä yhdeksi ja merkataan se luotetuksi. Tämän jälkeen palautetaan tulos, jonka hylkäystodennökäisyys on vastustajan hylkäysprosentti siihen asti (tuo edellä mainitun vääristymän alentamana tosin).

24. Luota aina

Henrik Herranen (leopold.cs.tut.fi), Ilkeä

Liian moni algoritmi on optimoitu kuppaamaan tätä algoritmia, joten menestys jää heikoksi. Huomattavaa on kuitenkin se, että tämä maailman sinisilmäisin algoritmi ei kuitenkaan häviä peliä, ja voittaa maailman ilkeimmän algoritmin, "Hylkää aina":n.

26. Hylkää aina

Henrik Herranen (leopold.cs.tut.fi), Ilkeä

Liian moni algoritmi huomaa tämän metkut heti alkuunsa eikä anna tälle pistettäkään.


Kaikkien algoritmien pudotuskisa

Kun nyt kerran innostuin, niin järjestänpä tässä vielä kaikkien algoritmien pudotuskisan. Välituloksia en tosin ala tulostella ennen kuin sitten, kun vasta kymmenen kisailijaa on jäljellä, ettei tämä dokumentti kasva aivan älyttömäksi. Sijat 27..20 valtasivat:
 27. Risto Kurki (kafka.cc.tut.fi)            Painotus             Pn 210858
 26. Tero Pulkkinen (terop.modeemi.cs.tut.fi) Teron oppiva viritys TP 211135
 25. Henrik Herranen (leopold.cs.tut.fi)      Hylkää aina          HA 210707
 24. Pasi Fränti (franti.cs.joensuu.fi)       Politics             PO 245137
 23. Henrik Herranen (leopold.cs.tut.fi)      Arvo ilkeästi        AI 255167
 22. Tommi Ylikulju (tylikul.ratol.fi)        Petä                 PE 268481
 21. Henrik Herranen (leopold.cs.tut.fi)      Luota aina           LA 304700
Oli erittäin jännittävää huomata, kuinka "Luota aina" pysytteli koko ajan toiseksi tai kolmanneksi viimeisenä. Mutta joka kerta, kun sen alapuolella ollut ja sitä hyväksikäyttänyt ilkeä algoritmi poistettiin, "Luota aina":n pistemäärä kasvaa. Lopuksi kuitenkin tämä kilteistä kiltein algoritmi putoaa pelistä pois.

Jatkamme sijoilla 16..20:

 20. Jyke Jokinen (jyke.cs.tut.fi)            Tunnista itsesi      JJ 247737
 19. Henrik Herranen (leopold.cs.tut.fi)      Vuorottele           VU 244780
 18. Kimmo.Takkunen.helsinki.fi               vanki no 7           V7 235761
 17. Henrik Herranen (leopold.cs.tut.fi)      Arvo                 AR 244608
 16. Pasi Fränti (franti.cs.joensuu.fi)       Play even            EV 278003
Kiltit algoritmit johtavat tilannetta. Kolme ensimmäistä sijaa ovat jo pitkään olleet "Seuraa kaveria", "Tit for 2 Tats" ja "Ei tasap. ilkiöille". "Luota luotettavaan" tosin on vaarallisen lähellä pudotusrajaa, mutta "Follow trend" on toistaiseksi turvassa.

Jaetaan sijat 11..15:

 15. Henrik Herranen (leopold.cs.tut.fi)      Arvo kiltisti        AK 254655
 14. tommi.lundell.ntx.nokia.com              Testi2i              Ti 221713
 13. Tero Holstila (h150712.cc.tut.fi)        Tunnustele           TU 237334
 12. Pasi Fränti (franti.cs.joensuu.fi)       Local Optimization   LO 214813
 11. Tero Mäyränen (deetsay.jyu.fi)           Luota luotettavaan   LL 279238

"Luota luotettavaan" joutui lopultakin antamaan periksi paremmilleen. Huomattavaa on, että virallisten kilpailutöiden pudotuskisassa jaetulle ensimmäiselle sijalle vaikeuksien kautta noussut algoritmi jää tässä kilpailuilmapiirissä tylysti sijalle 11.

Kymmenen parhaan joukossa on viisi kilttiä algoritmia: 1. "Ei tasap. ilkiöille", 2. "Seuraa kaveria", 3. "Tit for 2 Tats", 4. "Follow trend" ja 8. "Arvo adaptiivisesti".

"Tit for 2 Tats" on pudonnut toiselta sijaltaan kolmanneksi.

Ja sitten on vuorossa TOP-10.

Sija 10

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 473980
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 473780
  3. Robert Axelrod (old)                     Tit for 2 Tats       T2 473424
  4. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 425632
  5. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 398477
  6. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki 2     th 349522
  7. Risto Paasivirta (paasivir.jyu.fi)       Ohari                Oh 321245
  8. Pasi Ojala (albert.cs.tut.fi)            Safe Try             ST 308457
  9. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 284891
 10. Henrik Herranen (leopold.cs.tut.fi)      Arvo adaptiivisesti  AA 280232
"Arvo adaptiivisesti" menetti kaikkien muiden kilttien algoritmien kanssa erinomaisen yhteistyökumppanin, kun äärimmäisen epäluuloinen "Luota luotettavaan" karsiutui viime kierroksella.

Sija 9

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 426520
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 426320
  3. Robert Axelrod (old)                     Tit for 2 Tats       T2 425964
  4. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 375986
  5. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 353019
  6. Risto Paasivirta (paasivir.jyu.fi)       Ohari                Oh 330340
  7. Pasi Ojala (albert.cs.tut.fi)            Safe Try             ST 305520
  8. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 281049
  9. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki 2     th 279344
"Tutki ja hutki 2" menettää täydet kolme sijaa ja putoaa kokonaan pois.

Sija 8

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 379308
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 379148
  3. Robert Axelrod (old)                     Tit for 2 Tats       T2 378810
  4. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 330294
  5. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 329029
  6. Risto Paasivirta (paasivir.jyu.fi)       Ohari                Oh 283148
  7. Pasi Ojala (albert.cs.tut.fi)            Safe Try             ST 282706
  8. Juha Knuutila (juhakn.cs.tut.fi)         Codeformer           CF 282343
"Codeformer":in taru loppuu tällä kertaa neljä sijaa alempaan sijoitukseen kuin varsinaisten kilpailutöiden pudotuskisassa.

Sija 7

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 331910
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 331790
  3. Robert Axelrod (old)                     Tit for 2 Tats       T2 331532
  4. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 330452
  5. Risto Paasivirta (paasivir.jyu.fi)       Ohari                Oh 259769
  6. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 258793
  7. Pasi Ojala (albert.cs.tut.fi)            Safe Try             ST 235304
Tämän jälkeen on enää kaksi ilkeää algoritmia taistelemassa voitosta. Vaikeutta lisää se, että kilteillä on kolmoisjohto.

Sija 6

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 284512
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 284432
  3. Robert Axelrod (old)                     Tit for 2 Tats       T2 284192
  4. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 283045
  5. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 260308
  6. Risto Paasivirta (paasivir.jyu.fi)       Ohari                Oh 260293
"Ohari" häviää hiuksen hienosti "Follow trend":ille. Tiukkaa tekee myös kärkisijoilla.

Sija 5

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 237052
  2. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 237012
  3. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 237005
  4. Robert Axelrod (old)                     Tit for 2 Tats       T2 236994
  5. Henrik Herranen (leopold.cs.tut.fi)      Tutki ja hutki       TH 235913
"Tutki ja hutki" menettää hiukan yllättäen asemiaan pudotuspaikkaan saakka. Ja näin päädytään taas tilanteeseen, jossa jäljellä on enää kilttejä algoritmeja.

Sijat 1..4

Sija Tekijä                                   Pelin nimi           Lyh Tulos
  1. Pasi Ojala (albert.cs.tut.fi)            Seuraa kaveria       SK 189840
  1. Robert Axelrod (old)                     Tit for 2 Tats       T2 189840
  1. Pasi Fränti (franti.cs.joensuu.fi)       Follow trend         FT 189840
  1. Risto Paasivirta (paasivir.jyu.fi)       Ei tasap. ilkiöille  ET 189840
Ja näin siinä taas käy: kiltit algoritmit saavat jäädä taputtelemaan toisiansa selkään.