Minua on pitkään kismittänyt, etten ole keksinyt minkään näköistä toteutus tapaa seuraavanlaiselle tekoälylle:
Meillä on "ukko1", joka haluaisi päästä paikasta A paikkaan B. Matkalla on kuitenkin ylitse pääsemätön este esim. talo, joka pitäisi kiertää lyhintä mahdollista reittiä pitkin.
Miten tämän lyhimmän reitin määrittäminen siis onnistuu? Osaan kyllä laittaa sen kiertämään esteen, mutta se ei takaa sitä, että se menisi lyhintä mahdollista reittiä pitkin. Eli laittaisin sen kiertämään kaikki esteet joko vasemman kautta tai sitten vaihtoehtoisesti oikean kautta.
En halua mitään sekavaa koodia(tai no kyllä sellanenkin kelpaa, jos ei muuta ole), mutta selvä suomenkielinen selostus, kuinka tällainen toteutetaan, olisi mainio juttu.
Edit: sanavalinta muunnos
Eiköhän se ole niin, että lasket kuinka pitkä matka on oikealta ja kuinka pitkä matka vasemmalta, ja lyhyempää käytetään. Tietysti jos esteitä on enemmän, kasvaa tarkistettavien reittien määrä huomattavasti.
Tee niin että koodi käy ensin pelkillä muuttujilla läpi ja sitten valitsee niistä lyhyimmän reitin. Ja reitit tallennetaan mahdollisesti taulukkoon.
Joo niin kai se menee teoriassa. Tähän se mullakin oikeastaan tökkää. Kun ajatellaan, että näiden pisteiden paikat ovat satunnaisia ja... Hhmmmm... Sain idean, jota täytyy kyllä himean miettiä... Kertokaa vaan, jos suinkin tiedätte/osaatte tämän homman.
Edit: Kappas rndprogy ehti vastata. Tommonen tuli mieleen joo ja toi reitin taulukkoon tallentaminen oli hyvä idea.
Tee ohjelma, joka etsii kaikki mahdolliset reitit (ei välttämättä aivan helppo juttu) ja niistä valitsee lyhyimmän. Ja kielestä riippuen voi tulla aika hidaskin.
Millaista karttarakennetta käytät? Onko se määritelty palasina (kuin erkki) vai jollain muulla tavalla?
Tai sitte sellane että se laskee randomina muutamatuhat reittiä, ja kattoo lyhimmän? Vai onko tämä liian hidas?
Minulla on erääseen QB-peliini tehty AI-koodi, joka osaa kiertää esteitä (kohtuullisen hyvin, mutta jää jumiin tietyn muotoisiin luolankohtiin jos kohde on kaukana) käyttämättä taulukkoa liikkeessä. Jos tahdot, voi laittaa sen sinullepäin.
Topi91 kirjoitti:
Tai sitte sellane että se laskee randomina muutamatuhat reittiä, ja kattoo lyhimmän? Vai onko tämä liian hidas?
Jos kyseessä on QB, niin taitaapi olla. Väsäsin kerran itse tekoälyä, joka perustui eräänlaiseen muistiin, jolloin äly ei palannut enää takaisin umpikujaksi havaitsemaansa paikkaan.
sqwiik kirjoitti:
Minulla on erääseen QB-peliini tehty AI-koodi, joka osaa kiertää esteitä (kohtuullisen hyvin, mutta jää jumiin tietyn muotoisiin luolankohtiin jos kohde on kaukana) käyttämättä taulukkoa liikkeessä. Jos tahdot, voi laittaa sen sinullepäin.
Pistä tuleen vaan. Kielenä ajattelin käyttää C++:aa, mutta voin kääntää sen ihan itekki. Tajuampahan sitten ainakin mitä siinä tehdään.
Edit:
sqwiik kirjoitti:
Millaista karttarakennetta käytät? Onko se määritelty palasina (kuin erkki) vai jollain muulla tavalla?
Palasina kuten erkissä.
Se koodini on tehty kahdeksansuuntaiselle liikkeelle. Toivottavasti ei haittaa. Peräisin vanhasta, toimivasta qworld-roolipelistäni. Taidan laittaa sen tänne koodivinkkeihin, mutta siinä on kaksi haittaa:
1) se on liian suurikokoinen exeksi käännettäväksi, ja
2) se on jaettu useampaan bas-tiedostoon, ja ohjelma hyppii
run-komennolla niiden välillä (datansiirto erillisellä tiedostolla).
Mietin vain, mitä kaikkea siitä revitään irti...
Siinä on kiintästi mukana: Loitsintasysteemi, aseet(kantavat, ampuvat, melee), KAIKKI esineet, luolaston luonti, pääkartalla liikkuminen, vastustajien AI, hiiriohjaus, inventoori (parempi kuin erkissä :P), esineiden käyttö ääniefektien kera. Pääkartta toimii kuten falloutin.
Muokkausaika meni :(
Eli JOS sitä ei hyväksytä 'vinkiksi', niin se on kuitenkin ladattavissa erkki-sivulta :) (nyt jo, qbpeli.zip)
Kaikki ko. zipissä oleva on itse tekemääni (lukuunottamatta bittikartan latauskoodia), ja annan täyden käyttöoikeuden tuohon koodiin kaikille joita kiinnostaa.
Juu kiitoksia. Täytyy tutkia josko siitä saisi jotain irti.
Aihe on jo aika vanha, joten et voi enää vastata siihen.