NiGHT_RiDER92 čet 9.12.2010 23:13

Pozdrav, imam pitanje, zanima me dali postoji kakav tutorial ili nesto slicno u vezi programiranja AI-ja (recimo za TicTacToe) i kako se uopce AI programira, dali se sastoji od puno if-else uvjeta ili nekako drukcije (ps mozda je glupo pitanje ali nisam bas upoznat s tim)?

Deus ex machina čet 9.12.2010 23:24

Jako ovisi od AI-a do AI-a, u bazi je AI jedan tipicni State Machine, dakle, imas Stanja i Tranzicije koje te vode u nova stanja. Najvise o tome mozes procitati na wikipediji, potrazi State Machine.

Moderni sistemi koriste slican sistem no boduju akcije. Recimo, ako ako player otvori paljbu po NPC-u, NPC AI moze iskalkulirati kolika mu je sansa da pogodi playera, da li ima dovoljno municije u clipu da ubije playera, s kojim oruzjem player puca, koliko je daleko zaklon i slicno... na osnovu tih percepcija, sastavi se lista mogucih akcija koje vode izvan trenutnog stanja u 'bolje' stanje, i onda se normalno uzima akcija s najvise bodova (tj. ako je zaklon blizu, bjezi u zaklon, ako zaklona nema, cucni pa otvori paljbu, ako je clip prazan baci granatu i slicno).

 

Takodjer, da bi AI dobro radio opcenito mu treba dobar senzorij, dakle, dobar pathfinding mesh i dobar field of vision algoritam. Barem za AAA igre, za tic-tac-toe to bas nije bitno, ali ako te interesiraju takvi algoritmi, pregledaj kako se radi AI za sah ili dame, recimo.

Stoja čet 9.12.2010 23:30

Zanimljivo baš sam se znao pitati kako AI funkcionira ali nisam se zamarao da idem malo tražiti po pitanju te tematike...{#}

 

Ali dosta je šakljiv taj AI, jer se lako iz tupavog bota može učiniti godlike bot koji te na kilometar vidi i pogodi jednim metkom uglavu iz prve{#} U stalkeru su recimo takvi znali biti botovi, ali uglavnom po danu, po noći su imali slabu vidljivost(ako nisi ima žarulju na glavi upaljenu) pa bi onda nightvision i prigušivać dušu dali{#}

NiGHT_RiDER92 čet 9.12.2010 23:38

Da ali kak si rekao da postoje neke akcije koje vode prema drugim akcijama pa dali se onda koriste if-else uvjeti

tipa:

 

ako su vrata otvorena

{

zatvori vrata

}

 

inace

 

{

ucini nesto drugo....

}

 

jer malo bi mi cudno bilo da sad ima AI koji se sastoji od hrpe if-elseova...ono..neznam

 

Deus ex machina čet 9.12.2010 23:47
NiGHT_RiDER92 kaže...

Da ali kak si rekao da postoje neke akcije koje vode prema drugim akcijama pa dali se onda koriste if-else uvjeti

tipa:


jer malo bi mi cudno bilo da sad ima AI koji se sastoji od hrpe if-elseova...ono..neznam

 

 

Bitno je shvatiti da je if/else konstrukt programskog jezika, ne i sama arhitektura. Ja sam ti objasnio arhitekturu, koja se moze implementirati u jeziku koji npr. uopce nema if/else konstrukt, primjerice Prolog, gdje umjesto if/elsea mozes napraviti svoj cisti state machine.

Takodjer, u OOP jezicima se dosta jednostavno moze sastaviti state machine koristeci virtualne pozive.

 

Na koncu, sve to eventualno postaju jumpovi i callovi na procesoru. Kako si ti napisao kod u high-levelu, primarno nije bitno, bitno je da je tebi jasan i citljiv. Ako su ti hrpetina if/elsea citljivi, pisi hrpu if/elsea. Ako volis virtualne pozive, pisi virtualne pozive. Ako volis design patterne, iskonstruiraj state machine.

 

Prouci wikipediju na ono sto sam ti rekao, State Machine. To je pocetak.

Luuka čet 9.12.2010 23:48
NiGHT_RiDER92 kaže...

Budem pogledao to, nego zanima me dali znas mozda dali se takve stvari mozda uče na faksu tipa FOI ili tak nesto pa da detaljnije to proucim !?

Znam da se uči na FERu i na PMFu na diplomskom studiju Računarstvo. Evo nekih materijala s PMFa, vjerojatno i ferovci imaju nešto slično

NiGHT_RiDER92 pet 10.12.2010 00:02
Deus ex machina kaže...
NiGHT_RiDER92 kaže...

Da ali kak si rekao da postoje neke akcije koje vode prema drugim akcijama pa dali se onda koriste if-else uvjeti

tipa:


jer malo bi mi cudno bilo da sad ima AI koji se sastoji od hrpe if-elseova...ono..neznam

 

 

Bitno je shvatiti da je if/else konstrukt programskog jezika, ne i sama arhitektura. Ja sam ti objasnio arhitekturu, koja se moze implementirati u jeziku koji npr. uopce nema if/else konstrukt, primjerice Prolog, gdje umjesto if/elsea mozes napraviti svoj cisti state machine.

Takodjer, u OOP jezicima se dosta jednostavno moze sastaviti state machine koristeci virtualne pozive.

 

Na koncu, sve to eventualno postaju jumpovi i callovi na procesoru. Kako si ti napisao kod u high-levelu, primarno nije bitno, bitno je da je tebi jasan i citljiv. Ako su ti hrpetina if/elsea citljivi, pisi hrpu if/elsea. Ako volis virtualne pozive, pisi virtualne pozive. Ako volis design patterne, iskonstruiraj state machine.

 

Prouci wikipediju na ono sto sam ti rekao, State Machine. To je pocetak.

 

Aha sad mi je puno jasnije, hvala

Bukva pet 10.12.2010 00:22
NiGHT_RiDER92 kaže...

Budem pogledao to, nego zanima me dali znas mozda dali se takve stvari mozda uče na faksu tipa FOI ili tak nesto pa da detaljnije to proucim !?

Ima na FOI nekoliko kolegija koji se bave Prologom i logikom općenito. 

 

Na prvom kolegiju sa Prologom (kolegij s druge godine, tek ga sada služam -> znači, jedini kojeg sam slušao s takvom tematikom) ne uči se AI, već se izrađuje jednostavna avantura. Kao student uči i mora otići po kavu da ne zaspi. I onda se šećeš po studenskom domu i ne znam, u kuhinji je mrak pa moraš naći lampu koja je u sobi, ali nema baterije, pa moraš njih tražiti, ne smiješ pojesti pokvareni sendvič i takve stvari...

 

Inače, ako te zanima logičko programiranje, logika, semantika, ontologija i ostalo, onda potraži malo o Prologu, Flora 2, OWL.

 

Samo ovaj da napomenem, ako programiraš u nekome OOP jeziku, kloni se ovih jezika... I više nego topla preporuka...

woodgamesfx pet 10.12.2010 07:45

Napokon jedan zanimljiv topic :)

Znaći FSM je dobar pristup, sama realizacija ovisi od problema do problema. Pathfind isto korisno , ali preskupo, naravno opet ovisno o pristupu, ali u onoj najklasičnijoj realizaciji je preskup, ja preferiram waypoint pristup, puno je jeftiniji i daje lakšu kontrolu možebitnih situacija, u prijevodu lakše menađiranje. 

 

 

Deus ex machina pet 10.12.2010 16:29
woodgamesfx kaže...

Napokon jedan zanimljiv topic :)

Znaći FSM je dobar pristup, sama realizacija ovisi od problema do problema. Pathfind isto korisno , ali preskupo, naravno opet ovisno o pristupu, ali u onoj najklasičnijoj realizaciji je preskup, ja preferiram waypoint pristup, puno je jeftiniji i daje lakšu kontrolu možebitnih situacija, u prijevodu lakše menađiranje. 

Kako mislis, waypoint pristup? Pojasni, please.

 

Pathfinding nije tako tezak zapravo, u principu je to obican djikstrin breadth-first search plus heuristika. Najveci problem koji sam ja imao je generiranje svih clanova u grafu, pa onda optimizacija - gustiji raspored tamo gdje je kolizija kompliciranija, npr.

No odustao sam od toga, i generirao mesh, tako da pathfinding zapravo radi samo ono sto mu je posao - trazi put. Nakon sto nadjes lanac mesheva kroz koji trebas proci, koristim line-of-sight tehnike za 'uljepsavanje' patha.

 

Radi u poprilicno nice threadu, a brz je ko puska - za mapu od cca 600 mesheva pronadje path s jednog na drugi kraj mape za cca 20-50ak ms :-)

woodgamesfx pet 10.12.2010 20:04

Sorry iz svoje domene korištenja u praksi mi se waypoint system pokazao najbolji, trenutno radim na jednom projektu gdje sam si zadao niz wayponinta te agente koji ne trebaju ništa pametnije raditi nego ić od waypointa do waypointa, cjelu aritmeiku obavljam kroz listu pointa , koji istu izgeneriram kroz petlju na početku main loop-a. Pathfind mi se činio pre težak, mislim previše operacija za obaviti s obzirom na sam željeni rezultat.

 

Deus ex machina pet 10.12.2010 22:02
woodgamesfx kaže...

Sorry iz svoje domene korištenja u praksi mi se waypoint system pokazao najbolji, trenutno radim na jednom projektu gdje sam si zadao niz wayponinta te agente koji ne trebaju ništa pametnije raditi nego ić od waypointa do waypointa, cjelu aritmeiku obavljam kroz listu pointa , koji istu izgeneriram kroz petlju na početku main loop-a. Pathfind mi se činio pre težak, mislim previše operacija za obaviti s obzirom na sam željeni rezultat.

 

Nisam mislio nista lose, samo me interesiralo kako radi taj waypoint sistem jer nisam nikad cuo za to.

 

NiGHT_RiDER92 kaže...

Ima tko kakve dobre primjere (baš kod)?

Amit.

http://theory.stanford.edu/~amitp/GameProgramming/

kitolovac pet 10.12.2010 22:38

Mene zanima dali je moguće biti dobar programer (i baviti se AI-jem ili nečim sličnim) a da nisu poslovne aplikacije sa slabim znanjem matematike (imam dvojke) sad sam 3.razred gimnazije , kako opce naucit logički razmišljat?

 

APazinjan pet 10.12.2010 22:39
kitolovac kaže...

Mene zanima dali je moguće biti dobar programer (i baviti se AI-jem ili nečim sličnim) a da nisu poslovne aplikacije sa slabim znanjem matematike (imam dvojke) sad sam 3.razred gimnazije , kako opce naucit logički razmišljat?

 

Prva lekcija iz logike : Ako želiš da te drugi na forumu shvate ozbiljno, nećeš si odabrati za username 'kitolovac'.

 

Lekcija završena ;)

kitolovac pet 10.12.2010 22:43

Kakve veze ima nadimak sa pitanjem!?

Ja pitam ozbiljno, a druga je stvar sto se tebi ne sviđa nadimak (ili ne shvacas zajebanciju), uglavnom i dalje stoji da je pitanje ozbiljno, neznam zasto opce zapocinjes svadu

Deus ex machina pet 10.12.2010 22:43
kitolovac kaže...

Mene zanima dali je moguće biti dobar programer (i baviti se AI-jem ili nečim sličnim) a da nisu poslovne aplikacije sa slabim znanjem matematike (imam dvojke) sad sam 3.razred gimnazije , kako opce naucit logički razmišljat?

Kratki odgovor, ne. No nikad nije kasno nauciti ono sto nisi naucio sada ;-) 

 

Kako nauciti logicki razmisljati? Sad si otvorio pandorinu kutiju.

Ispravno pitanje bi bilo : "Kako uopce nauciti?"

 

Svi uce na razlicite nacine. Ja moram vidjeti prakticnu primjenu, i moram razumjeti stvar u srzi do korijena. Ne mogu uciti tako da mi netko prica, moram citati i to tekst koji mogu preskakati lijevo desno kako mi pase.

 

Pocni programirati, pa ces vidjeti i sam kako brzo dodjes do matematike. Najobicniji pathfinding trazi poznavanje matematickih koncepta kao sto su set, graf, queue, funkcija, etc...

 

 

Btw kolega se ne svadja nego zafrkava. Prihvati, vrati, i idi dalje.

APazinjan pet 10.12.2010 22:45
kitolovac kaže...

Kakve veze ima nadimak sa pitanjem!?

Ja pitam ozbiljno, a druga je stvar sto se tebi ne sviđa nadimak (ili ne shvacas zajebanciju), uglavnom i dalje stoji da je pitanje ozbiljno, neznam zasto opce zapocinjes svadu

Ma mala šala lol :)

 

Nema svađe u ove božićne dane...

kitolovac pet 10.12.2010 22:45
Deus ex machina kaže...
kitolovac kaže...

Mene zanima dali je moguće biti dobar programer (i baviti se AI-jem ili nečim sličnim) a da nisu poslovne aplikacije sa slabim znanjem matematike (imam dvojke) sad sam 3.razred gimnazije , kako opce naucit logički razmišljat?


 

Btw kolega se ne svadja nego zafrkava. Prihvati, vrati, i idi dalje.

Ok, nema problema

Black Deus Typhon pet 10.12.2010 22:48

Kitolovac: normalno da možeš biti dobar programer. Tvoje ocjene nisu bitne. Vrijedi samo jedno pravilo: dobiješ onoliko koliko uložiš truda.

A u programiranju treba dosta truda makar bio odlikaš. (Uostalom, odlikaši su odlikaši upravo zbog toga jer se trude; nitko nije rođen sa znanjem).

Hard work pobjeđuje IQ uvijek.

 

 

kitolovac pet 10.12.2010 22:51

Da, znam da nitko nije roden sa znanjem, ali ono, za izradu bilo čega složenijega uvijek treba matematika a meni baš i nejde i nekad mi se čini da sam osuđen na propast i da bez znanja matematike neču uspjeti u životu

woodgamesfx pet 10.12.2010 23:17
Deus ex machina kaže...
woodgamesfx kaže...

Sorry iz svoje domene korištenja u praksi mi se waypoint system pokazao najbolji, trenutno radim na jednom projektu gdje sam si zadao niz wayponinta te agente koji ne trebaju ništa pametnije raditi nego ić od waypointa do waypointa, cjelu aritmeiku obavljam kroz listu pointa , koji istu izgeneriram kroz petlju na početku main loop-a. Pathfind mi se činio pre težak, mislim previše operacija za obaviti s obzirom na sam željeni rezultat.

 

Nisam mislio nista lose, samo me interesiralo kako radi taj waypoint sistem jer nisam nikad cuo za to.

 

NiGHT_RiDER92 kaže...

Ima tko kakve dobre primjere (baš kod)?

Amit.

http://theory.stanford.edu/~amitp/GameProgramming/

 

 

Ma ne sorry sam mislio što nisam opisao način gdje koristim ( moja greška na početku ), ne u negativnom smislu sorry :)

Ma tay WayPoint system je u stvari ništa više doli u biti path, samo debelo pojednostavljeno, kažem za sada na čem radim, zadovoljava potrebe :)

 

 

 

 

Black Deus Typhon pet 10.12.2010 23:39

Kitolovac: pa poduzmi nešt u vezi toga. Uostalom, za programiranje ti i ne treba kojekakva sveučilišna matematika. Sve ono kaj učiš u srednjoj će ti više-manje biti dovoljno pa i za programiranje igara i za sve ovo kaj se spominjalo do sad na forumu ovdje. Uz pretpostavku da fakat jako dobro prođeš svu materiju koja se uči u općoj gimnaziji npr. Moj savjet je da ako te programiranje zanima da si uzmeš dobrog instruktora matematike. Bilo nekog iz razreda, bilo nekog za pare izvana.

kitolovac pet 10.12.2010 23:44

Ma stvar je u tome da ja jednostavno dosta stvari i neznam iz matematike jer me nije prije nest zanimala puno a sad sam primjetio da će mi trebat ako želim programirati i sad je to problem naučiti, ja uz nečiju pomoć znam riješiti zadatak ali ćim dobijem malo drukčiji zadatak se zbunim i jednostavno neznam ni kako bi započeo, ono osjecam se glupo radi toga, sa ostalim stvarima nemam problema sa logičkim zaključivanjem osim sa matematikom -.-'', nekužim kako neki likovi mogu to tako lako naučiti i znati dok ostali muku muče

Black Deus Typhon pet 10.12.2010 23:49

Vježbaj sve varijante zadataka. Vježbanje je dosta bitno za matematiku. Ljudi misle (myself included još uvijek) da nad svime treba solo mozgati da bi se rješavalo, a zapravo velika većina tehnika rješavanja zadataka se savladava učestalim ponavljanjem. Ponavljaj, vježbaj i ponavljaj dok ne odletiš na strop. Velim, neki dobar i strpljiv instruktor bi ti dobro došao, pogovo besplatan.

woodgamesfx sub 11.12.2010 00:08

Linearna algebra prostora, manje više sve što ti treba u vezi matematike, e sad tu dolazi fizika ( gibanje ), zatim programiranje. Ako ozbiljno namjeravaš krenuti onda se primi C++-a ili ako si malo ljeniji onda C#, skini DirectX SDK ili XNA ( isto ako si ljeniji ) i počni od prvog primjera , e sad kada to naučiš, počinješ shvačat, onda se upitaj što dalje, tek tada počinje rad.

 

Sada da se vratim na temu , umjetna inteligenicija je jako širok pojam i od pradavnih vremena ( čitaj tamo 50-te godine 20-tog stoljeća ) bilo je više pristupa tome od zagovornika strojne inteligencije do zagovornika pisane inteligencije, kako je vrjeme prolazilo ljudi su napustili prvi koncept i uhvatili se drugog, rezulatati toga kasnije bili jezik LISP. Sve u svem AI u nekom strogo ekonomsko - poslovnom obliku se je vezao uz ekspertne sustave, te si i danas veže, sa uglavnom katastrofičnim rezultatima ( bilo je primjera bankrota i gubitaka velikih novčanih sredstava tamo 80-tih kada se je grupa "pametnih" odlučila na donošenje odluka temeljenih na rezultatu ekspertnog sustava ).

Današnji dosezi ( poznati za javnost ) su u mjeri da klasterirana računala uspjevaju simulirati inteligenciju živih bića, dosadašnji dostignut rezultat je bio IQ miša.

Sve u svem ako te strogo zanima AI, onda se posveti proučavanju neuronskih mreža, izradi neku svoju simple mrežu i treniraj ju, izvora za ućenje na netu imaš pregršt.