Mikä on paras tapa käydä läpi tunnelmavalaistukset?
Vastauksia: 18
Paras: 1023
Suosittelisin välttämään JavaScriptin sotkemista HTML:n sekaan. Tee sen sijaan nappulat viitteellisiksi ja lisää event muilla (Nettisivut ja -ohjelmointi) lisää...
Koodivinkit: QBasic: Sekalaiset: Oppiva tekoäly
Kirjoittaja: Antti Laaksonen (06.05.2007)
| Harva tietokoneohjelma pystyy oppimaan itsenäisesti asioita. Hidas ohjelma ei muutu nopeaksi, vaikka se saisi kuinka paljon "harjoitusta" (ohjelmaa suoritettaisiin lukuisia kertoja peräkkäin). Yleensä on myös kysymys siitä, osaako ohjelma jonkin asian kokonaan vai ei ollenkaan. Jos ohjelmalta kysyy Suomen itsenäisyyspäivää, vastaus voi olla "6.12." tai "en tiedä", mutta tuskin "taisi olla siinä joulukuun alussa". Tietokoneen ja ihmisen tapa oppia vaikuttaa siis hyvin erilaiselta.
Joskus kuitenkin on mahdollista laatia melko helposti ohjelma, joka oppii pikku hiljaa asioita sen suorituksen aikana. Tässä on esimerkkinä yksinkertainen tikkupeli, jossa kaksi pelaajaa nostavat kasasta vuorotellen tikkuja. Joka vuorolla tikkuja saa nostaa yhden, kaksi tai kolme. Pelin häviää se, joka joutuu nostamaan viimeisen tikun. Tähän peliin on olemassa hyvin yksinkertainen voittostrategia, mutta yritetään nyt tehdä oppiva tekoäly, joka ei aluksi tiedä pelistä mitään, mutta kehittyy ajan myötä taitavaksi pelaajaksi. Oppiminen tapahtuu seuraavasti: Tekoälyn käytössä on joukko hattuja, joissa on palloja. Jokaiselle jäljellä olevien tikkujen määrälle on oma hattu, ja jokaisessa pallossa taas lukee, kuinka monta tikkua tekoälyn tulee nostaa. Vuorollaan tekoäly nostaa hatusta yhden pallon umpimähkään, poistaa tikkuja sen ilmoittaman määrän ja panee pallon syrjään. Aluksi hatuissa on jokaista palloa yhtä monta, mutta pelin lopputuloksen (voitto tai häviö) selvittyä tekoäly käy läpi hatut uudestaan. Jos peli päättyi voittoon, tekoäly palauttaa pallon hattuun ja lisää sinne vielä toisen samanlaisen pallon. Mutta jos peli päättyi häviöön, tekoäly ei pane hattuun mitään takaisin. Siis jokaisen hatun pallojen määrä joko kasvaa tai vähentyy yhdellä. Tämä oppimistapa tunnetaan yleisemmin nimellä "boxes", ja sitä on tutkittu jo 1960-luvun lopulla (Chambers ja Michie). Alun perin pelinä oli tosin ristinolla ja hattujen ja pallojen asemesta käytettiin tulitikkulaatikoita ja lasihelmiä, mutta ajatus oli sama. Tässä ohjelmassa kaksi oppivaa tekoälyä pelaavat toisiaan vastaan. Tikkujen määrä arvotaan aluksi väliltä 20 - 40. Pelin aikana sekä voittaja että häviäjä oppivat jotain, ja tekoälyt voivat kirjata tulokset yhteiseen muistiin. Hatuissa olevien pallojen määrää on rajoitettu niin, että jokaista palloa täytyy olla vähintään 1 ja korkeintaan 100. Näin tekoäly ei pelaa täysin kaavamaisesti, vaan aina on tilaa sattumalle. Oppimisen jälkeen tekoälyn taitoja voi kokeilla muunlaisia pelaajia vastaan (satunnainen valinta, paras valinta, käyttäjän valinta). Lisäksi voi tutkia graafisesti kaikkien hattujen sisältöä. Seuraavissa kuvissa näkyvät hattujen sisällöt tekoälyn kehityksen aikana: Aloitustilanne: http://www.ohjelmointiputka.net/kuvat/tikut1.png 100 pelin jälkeen: http://www.ohjelmointiputka.net/kuvat/tikut2.png 500 pelin jälkeen: http://www.ohjelmointiputka.net/kuvat/tikut3.png 1000 pelin jälkeen: http://www.ohjelmointiputka.net/kuvat/tikut4.png 5000 pelin jälkeen: http://www.ohjelmointiputka.net/kuvat/tikut5.png Tästä havaitaan, että useimpiin tilanteisiin on olemassa selkeä paras valinta, mutta joskus mitään kunnollista valintaa ei ole. Tarkemmin hyvin pelaava tekoäly pyrkii ajamaan vastustajan sellaiseen tilanteeseen, että tikkujen määrän jakojäännös 4:llä on 1. Jos tekoäly onnistuu tässä kerran ja jatkaa samaa menettelyä pelin loppuun asti, se voittaa pelin varmasti. Eli jos molemmat pelaajat tietävät asian, pelin voittajan ratkaisee suoraan alussa olevien tikkujen määrä. |
Listaukset
|
| gamehouse [06.05.2007 17:12:10] | Lainaa | Muokkaa |
| wau! En kokeillut, mutta vaikuttaa hienolta. | ||
| Kray [07.05.2007 14:49:19] | Lainaa | Muokkaa |
| Samat sanat, en tosin osaa basicia. | ||
| msdos464 [08.05.2007 01:02:08] | Lainaa | Muokkaa |
| Aika huimia koodeja se Antti tänne latelee :O | ||
| Metabolix [08.05.2007 19:36:00] | Lainaa | Muokkaa |
| Ikävän lähekkäiset värit valitsit diagrammeihin, mutta ei se itse vinkkiä pahenna. Mielenkiintoista! | ||
| Laakkonen [09.05.2007 21:06:48] | Lainaa | Muokkaa |
| Vau, melkoinen osaaja! | ||
| BlueByte [13.05.2007 22:43:28] | Lainaa | Muokkaa |
| basicin syntaksi aiheuttaa aivovammoja, muuten aivan mielenkiintoinen | ||
| gamehouse [24.05.2007 14:49:22] | Lainaa | Muokkaa |
| Nyt testasin, kun oli aikaa ja toimi todella hienosti, paitsi jostain syystä Subien lopussa oli 2 END SUBia! Sama funktioissa. | ||
| matpit [21.12.2007 23:13:33] | Lainaa | Muokkaa |
| gamehouse kirjoitti: Nyt testasin, kun oli aikaa ja toimi todella hienosti, paitsi jostain syystä Subien lopussa oli 2 END SUBia! Sama funktioissa. Taitaa toinen silmä harittaa pahasti. | ||
| vehkis91 [25.11.2008 22:28:07] | Lainaa | Muokkaa |
| Tämän kun saisi c:lle niin olisi todella mukavaa, tietenkin pienellä tutkimisella saisi itsekkin tämän koodattua. :D | ||
| sammakkomies [06.12.2009 05:58:58] | Lainaa | Muokkaa |
| vähän näpeltää ja saa esm ohjelman johon voi syöttää "omaa luonnetta" ja sitten se puhuu kuin ihminen jonka luonne on siihen syötetty | ||
ylläpito Antti Laaksonen, ulkoasu Otto Seiskari