Kirjautuminen

Haku

Tehtävät

Keskustelu: Yleinen keskustelu: Oppivasta tekoälystä

User137 [20.12.2007 18:22:09]

#

Huomasin tämän koodivinkin...
https://www.ohjelmointiputka.net/koodivinkit/25025-qb-oppiva-tekoäly
...kauan sitten ja nyt viimein päätin soveltaa itse.

Ideana strategiapeli tyyliin starcraft, kuitenkin toistaiseksi erittäin paljon yksinkertaistettuna. Kuvataan koko peli 4 vaihtoehdolla ja vuoropohjaisena:
- Build Attacker
- Send All (yksiköiltä kestää n. 5 vuoroa saavuttaa joko vastustajan yksikkö tai päätukikohta. Kaikki yksiköt taistelee keskenään ennen kuin jatkavat tukikohtaan)
- Upgrade Attack power
- Upgrade Armor

Testiohjelmassa ei ole edes yhtään satunnaisuutta ja kirjoitettu tarkasti koodivinkkiä noudattaen, silti jostain syystä ei oikeaa tekoälyä synny vaan joka kerta tuottaa erilaisen "oikean algoritmin" (n. 10000 peliä muutamassa sekunnissa käyttäen n. 400 max vuoroa). Olen kikkaillut vaikka miten tuon kanssa jo... onko ongelma vaan liian monimuotoinen ettei siihen löydy parasta kaavaa?

Sellaistakin olen koittanut että "Build attacker" luo ja lähettää yksikön ja muut 3 vaihtoehtoa eivät tee mitään, jolloin tehokkaimman kaavan pitäisi ehdottomasti olla pitkä rimpsu tätä "Build attacker", muttei ohjelma sitä löydä.

Tuolla vielä koodi: http://pastebin.com/m131ae5b9

Antti Laaksonen [20.12.2007 19:04:53]

#

Kuinka suuri joukko mahdollisia pelitilanteita on? Voisitko vähän selventää pelin kulkua, kun en tunne StarCraftia?

Tosiaan ongelmaksi voi tulla se, että pelitilanteita on liian monta eikä pelin alkuvaiheessa esiintyvien valintojen vaikutuksesta saa selkeää kuvaa. Mutta osaan luultavasti pohtia asiaa paremmin, jos ensin ymmärrän, mitä pelissä tapahtuu. :)

L2-K2 [20.12.2007 20:54:05]

#

Taitaa tuossa muodostua liian monta erilaista tilaa.

En ainakaan löydä koodistasi laatikoita, todennäköisyys kullekkin valinnalle näyttäisi aina olevan 25%.

User137 [20.12.2007 22:21:30]

#

Ohjelmasta: AIHistory on taulukko jossa on nämä lukumäärät 1-100 jokaisesta 4 vaihtoehdosta max 400 vuoron ajalle. Alkaen kaikki 20 ja voitolla lisäten yhden voittaneeseen jaksoon ja vähentäen yhdellä muita. Tasapeli (joka on kenties mahdoton, voi tapahtua vain jos aika loppuu kesken ja molemmilla sama määrä tappoja ja tukikohdan kestoa) ei vaikuta mihinkään.

Mahdollisia pelitilanteita on hyvin paljon, mutta lopputulos on suhteellisen selvä; toisella pelaajalla on joko enemmän tappoja, tai päätukikohta on kärsinyt enemmän vaurioita. Tukikohdan vahingoittaminen tai tuhoaminen on voiton kannalta ratkaisevampi tekijä.

Laitan kuvakaappauksen kun pääsen kotia jonkun tunnin päästä mutta ulkoasusta saa vinkkiä tuosta Timerin piirtokoodista. (2 tukikohtakuvaa vasemmalla ja oikealla joista molemmista virtaa yksiköitä koneen antamien ohjeiden mukaan, yksiköitä on kentällä useita yhtäaikaa ja voivat taistella joko keskellä kenttää tai "jyrsien" tukikohtaa itseään)

Sellaista koitin aiemmin että toinen tekoäly valitsee aina vaihtoehdon 0, eli luo yksikön jolloin sille tuli niitä jatkuvana virtana ja voitto oli aina sille varma. Jos oppivaan listaan ei lisää tämän nollia virtaavan muistia, ei vastustaja koskaan opi tätä voittamaan.

Toisin sanoen, ehkä tähän ongelmaan pitäisi vaan käyttää ihan toisenlaista ratkaisumallia, kuten kokeilemalla miljoonalla eri järjestyksellä ja tallettamalla niistä suoriutuvimman... Mutta kai tämäkin algoritmi johonkin käy?

User137 [21.12.2007 00:36:42]

#

Kuvakaappaus: (lisätty myös alkunäkymä AIHistory:stä)
http://i2.tinypic.com/6utsynt.png

Antti Laaksonen [21.12.2007 19:51:31]

#

Koodivinkissä olevan tekoälyn idea on, että jokaiselle mahdolliselle pelitilanteelle on oma hattu. Sitten tekoäly pystyy hatusta selvittämään, mitä sen pitäisi tehdä missäkin tilanteessa.

Jos koko pelitilanteen asemesta kiinnitetään huomiota vain vuoronumeroon, tekoälyn toimivuus riippuu siitä, kuinka hyvin vuoronumero kuvastaa pelitilannetta. Eli jos vuorolla 253 valittiin vaihtoehto 3 ja peli päättyi voittoon, oliko vaihtoehto 3 siksi hyvä, että se valittiin juuri vuorolla 253, vai siksi hyvä, että vuorolla 253 oli siihen valintaan sopiva pelitilanne? Jälkimmäisessä tapauksessa väärä johtopäätös olisi, että vuorolla 253 kannattaa yleisesti valita vaihtoehto 3.

Vastaus

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

Tietoa sivustosta