Kako pa vi delate AI

Vsi tehnični vidiki izdelovanja iger - programiranje vseh vrst in oblik, modeliranje, animacija, risanje, dizajn, grafika, glasba in zvok, umetna inteligenca, matematika, fizika itd.

Kako pa vi delate AI

OdgovorNapisal/-a bozjak » Po Jan 13, 2003 7:56 am

Jst osebno z velikim kupom random stevil. Pol pa lepo pogoje postavlam pa random itd. Stvar pa zal postane res zelo dolga.

Kako pa vi??

Lp bozjak
bozjak
poizvedovalec
poizvedovalec
 
Prispevkov: 37
Pridružen: Po Jan 13, 2003 7:52 am

OdgovorNapisal/-a snake » Po Jan 13, 2003 10:11 am

Odvisno za kaj. Bodi mal bolj specifičen, pa morda lahko povem kaj več.
Uporabniški avatar
snake
expert
expert
 
Prispevkov: 782
Pridružen: Pe Jan 10, 2003 8:28 am
Kraj: NULL

OdgovorNapisal/-a impulse9 » Po Jan 13, 2003 11:58 am

Z naključnimi funkcijami in if/case (switch) stavki. Na žalost taka koda ponavadi postane precej dolga, zato jo je pametno nekako organizirati. Važno je, da se v njej znajdeš sam!

Drugače pa primeri:
- Za križce/krožce z več kot devetimi polji narediš en loop, ki teče, dokler ne preveri vseh možnosti. Od jezika in procesorja je odvisno, kako bo potek hiter. Fino je narediti, da računalnik *razmišlja*, da torej zapavziraš program za sekudo ali dve. Doda vzdušje.
- Za 3D streljanke, strategije ipd. je UP težko narediti, ampak najbolje, da vsakemu liku napopaš lastnosti, ki potem odlikujejo njegovo vedenje (npr. Elf.AIlevel = 10; Elf.Movement = 4; ipd.) - potem pa pač samo predvideš vsa možna gibanja in napišeš čimveč kode in upoštevaš vse možnosti. Pri AI-programiranju je nasploh velja pravilo, da več ko napišeš, bolj učinkovita je koda.
...

Upoštevaj tudi, da naj računalniški igralec ne goljufa! To mi gre namreč pri igrah močno na živce, in se tega tudi sam izogibam. Uporabi pa, če druge rešitve ni.
Uporabniški avatar
impulse9
SGD Moderator
SGD Moderator
 
Prispevkov: 397
Pridružen: Pe Jan 10, 2003 10:14 pm

OdgovorNapisal/-a bozjak » Po Jan 13, 2003 2:11 pm

Ja ja sej jst sm ze parkrt delov AI (no dobr 1krat ampak to sm veckrat napisov) pa stvar je postala kr dolga. Sam zanimal me je kako to drugi delajo(te). Drugac jst to programiram v delphi-ju ampak...

Delam pa tko tocno. naprej prever neki pac in glede na to mu nabijem kaksne so moznosti za random stevila. Recimo ce je stevilo manjse od neki pac pol nej izreba eno stevilo od 10. Pol pa ce je manjse od recimo 7/10 pol nardi to drugac pac drugo.

Lp bozjak
bozjak
poizvedovalec
poizvedovalec
 
Prispevkov: 37
Pridružen: Po Jan 13, 2003 7:52 am

OdgovorNapisal/-a P_Nut » Po Jan 13, 2003 9:17 pm

hja bozjak, dvomim da lahko temu rečeš umetna pamet.
Potreben je zelo neobičajen um, da se loti analize očitnega.
Uporabniški avatar
P_Nut
poizvedovalec
poizvedovalec
 
Prispevkov: 61
Pridružen: So Jan 11, 2003 9:16 pm
Kraj: Verdun 18

OdgovorNapisal/-a Tap » Po Jan 13, 2003 10:03 pm

Bozjak, sam imam hude pomisleke glede tega, da lahko kupu if stavkov, povezanih z naključnimi funkcijami, rečeš umetna pamet (oz. AI, kot ji ti praviš). Vse skupaj lahko služi le proženju nekega bolj ali manj naključnega in nepredvidljivega obnašanja posameznih atributov v igri.

Werewolfov namig o lastnostih je vsekakor pravilnejša pot, čeprav je ključ do dobre AI nato prav pametno upoštevanje teh lastnosti in njihovo povezovanje v neko smiselno obnašanje. Se pa nikakor ne strinjam, da več kode pomeni večjo učinkovitost, prej nasprotno. Potrebno je pametno strukturiranje kode in uporaba nekaterih preizkušenih tehnik.

Končni avtomati so v tem kontekstu skoraj nepogrešljivi, saj predstavljajo najenostavnejšo pot do preklapljanja med več različnimi načini obnašanja. Vsako stanje v tem avtomatu na podlagi vhodnih atributov določi naslednjo akcijo, ustrezne vrednosti atributov pa skrbijo tudi za prehajanje med stanji. S pametno izbiro atributov, stanj in obnašanj v njih se lahko na ta precej enostaven način doseže tudi zelo zanimiva obnašanja.

Sam sem se s podobnimi in tudi bolj kompliciranimi tehnikami že precej ukvarjal. Trenutno sem sicer zaseden z drugimi projekti, a gotovo se bom vrnil tudi še k temu. Predstavitev še najbolj posrečenega projekta najdete na http://www2.arnes.si/~gkrjes12/rtnavigation.html, na http://www2.arnes.si/~gkrjes12/tacticalai.html pa si lahko več preberete o mnogo ambicioznejšem podvigu, ki pa ni dosegel povsem željenih rezultatov in je v nasprotju s prejšnjim daleč od praktične uporabnosti. Oba omenjena programa sicer nista igri v pravem pomenu besede, vendar pa so vse metode uporabljene prav z igrami v mislih.

Naj bo zaenkrat to dovolj. Če bo interes, pa lahko kdaj v prihodnosti pripravim tudi kakšen članek na to temo.
Uporabniški avatar
Tap
novinec
novinec
 
Prispevkov: 7
Pridružen: So Jan 11, 2003 5:14 pm

OdgovorNapisal/-a impulse9 » Po Jan 13, 2003 10:25 pm

Tap: več kode ko je, manj možnosti za morebitne napake obstaja, obenem pa predvidiš več možnosti. Če boš napisal tri vrstice IF stavkov po mojem ne bo tako učinkovito kot tristranski roman z lepo in struktuirano kodo. Tisto sem mislil v takem smislu.
Uporabniški avatar
impulse9
SGD Moderator
SGD Moderator
 
Prispevkov: 397
Pridružen: Pe Jan 10, 2003 10:14 pm

OdgovorNapisal/-a Tap » To Jan 14, 2003 2:06 pm

Seveda se strinjam, da s tremi vrsticami IF stavkov ne moreš povedati toliko kot s tremi stranemi. Še vedno pa zagovarjam idejo, da naprednejše tehnike lahko odpravijo potrebo po nepregledni kopici IF stavkov, pa če so ti še tako lepo strukturirani. Število IF stavkov bo namreč s kompleksnostjo problema raslo eksponentno in vzdrževanje bo prej ali slej postalo prava muka.

Pri dovolj kompleksni nalogi bo tako sprehajanje po grafu stanj (za igre z diskretnimi koraki) ali uporaba končnega avtomata (za obnašanja v realnem času) gotovo smiselnejše, čeprav se bo sprva zdelo več dela. Na koncu boš namesto velikega števila IF stavkov imel ločeno daljšo splošno kodo za osnovno izvedbo izbrane tehnike in krajšo inicializacijo za prilagoditev te tehnike za tvojo konkretno uporabo. Vzdrževanje in spreminjanje AI se bo tako s še nekaj dodatnimi orodji iz mukotrpnega dela spremenilo v bolj zanimiv in manj nadležen izziv.

Mimogrede: bi se ti tudi pisanja AI za reševanje problema Hanojskih stolpov ali problema osmih kraljic lotil z nepreglednim kupom IF stavkov?
Uporabniški avatar
Tap
novinec
novinec
 
Prispevkov: 7
Pridružen: So Jan 11, 2003 5:14 pm

OdgovorNapisal/-a P_Nut » To Jan 14, 2003 2:25 pm

šah greš pisat z if stavki :D

sej se že lepo vidi da z if-i ne moreš daleč pridt. Primer : slavni TicTacToe ( tri v vrsto ), to je lahek primer potrebiješ nekaj if stavkov in konec. kot je rekel Tap, problem bo rasel eksponentno, če boš se spravil delat 4x4 al pa 5x5.
Potreben je zelo neobičajen um, da se loti analize očitnega.
Uporabniški avatar
P_Nut
poizvedovalec
poizvedovalec
 
Prispevkov: 61
Pridružen: So Jan 11, 2003 9:16 pm
Kraj: Verdun 18

OdgovorNapisal/-a BAADC0DE » Če Jan 16, 2003 8:50 pm

Moj AI ima z utezmi uravnovesene principe delovanja :

principi akcij (prehod iz manj aktivnega stanja v bolj aktivno stanje)
principi umiritve (prehod iz bolj aktivnega stanja v manj aktivno stanje)

Utezi in mnozico principov lahko obravnavamo kot abelovo grupo, kjer obstajaja operacija zdruzevanja (a | b), ta operacija pa rekurzivno zdruzi utezi, operacije in grupe suznje :>

akcija = Group_Sum[i=1..k](Ai|Asubi*Wi)*Wg
(Wi so utezi na princip, Wg je globalna utez)
akcija = Group_Sum(akcija x (prev_akcija|Rpa) * Wp)*Wgx
(kjer je x produkt akcij ki interpolira glede na cas, Rpa je je vmesna stopnja med akcijo in katero izmed pricakovanih reakcij (vzamemo povprecno reakcij, uravnotezeno glede na svoje izkusnje in ocenjene izkusnje reaktorja), Wp je shranjena utez (utezi se racunajo posebej) prejsnje akcije, Wgx pa globalna utez (podobno kot reakcijski cas).

Ne morit za izvorno kodo ker je ne boste dobili (alias komercialni projekt). Sem samo odgovoril na zatsavljeno vprasanje...
Uporabniški avatar
BAADC0DE
wannabe
wannabe
 
Prispevkov: 81
Pridružen: So Jan 11, 2003 5:17 pm

OdgovorNapisal/-a hugoboss » Pe Jan 17, 2003 9:09 am

In kje dobis predhodno dovolj uravnotezene prarametre za utezi oz. kako jih dolocis glede na okolje -- saj kar si napisal pove samo nacin izbiranja akcije iz ze predefiniranih vrednosti (ce prav razumem).
Ter, kaj v tvojem primeru sploh pomeni umiritev oz. akcija? Torej, kako se odrazi navzven?
hugo2me@hotmail.com

Linux & Quake & Final Fantasy RULZ!
School SUX!
Uporabniški avatar
hugoboss
poznavalec
poznavalec
 
Prispevkov: 189
Pridružen: So Jan 11, 2003 9:57 pm

OdgovorNapisal/-a BAADC0DE » Pe Jan 17, 2003 2:15 pm

Vhodni parametri so dosti velika baza podatkov z genericnimi reakcijami na okolico in njenimi akcijami ter evaluacijo reakcije - to je dobro, to drugo pa ni. Akcija tukaj pomeni, da je glavni nevron za neko akcijo presel v vzbujeno stanje (mogoce skupaj z svojimi podloznimi nevroni) in da sedaj po mrezi propagira (jo) reakcijo. Glede na utezi se izracuna koncna (finalna akcija). Ce je ta akcija tako zanemarljivo malo zazeljena (koncne utezi zo majhne), izberemo eno iz "umirjenih" akcij. Ce je akcij prevec, izberemo nakljucno med tistimi z vecjimi utezmi. To je to.
Uporabniški avatar
BAADC0DE
wannabe
wannabe
 
Prispevkov: 81
Pridružen: So Jan 11, 2003 5:17 pm

OdgovorNapisal/-a DeadKid » Po Jan 20, 2003 7:54 pm

Kako sem deal jazst AI - uff
Najprej sem naredil reakcijske sklope. Reakcijski sklopi glede na stanje analizatoraj sekvence in random izbirnika sklopov izvede reakcijo na primer :
Robot vidi žogo. Izračun mu kaže da ima 2 m pred sabo žogo. Tri metre od žoge naprej pa je drugi robot // po tem ko analizator sekvence izračuna da je on bližji žogi izvede izbiro dolođenih rekacijskih sklopov le enega izmed teh pa izvede random izbirnilk. Tako se Iznebiš premnogih števil in tvegaš dabo izbirnik sklopov izbral nek sklop ki je povsem neprimeren ali pa bi lahko izbral nekega drugega. Sicer je visoko število kode zaradi predpripravljenih reakcijskih sklopov |scripte| ki nam omogočajo intelegentne rešitve. Sedaj je odvisno kako bero sklopov imamo na voljo ter kako so spisani |večje kot je število sklopov zmanjša se verjetnost pravega odziva |se pravi veš verjetnosti da nekaj zaj. kar pa je čisto človeško||
#include <iostream>

int main()
{
std::cout << "Hello, SGD!\n";
}
Slika
Uporabniški avatar
DeadKid
poizvedovalec
poizvedovalec
 
Prispevkov: 68
Pridružen: Pe Jan 17, 2003 3:00 pm
Kraj: Vrhnika

OdgovorNapisal/-a Celebi » To Jan 21, 2003 4:14 pm

Moja AI je pa napisana na linearen način.Naprimer dodam funkcijo notri so števila tega se drži.Random uporablam sam pr kakem žrebu kdo bo prvi igral(npr if (a > 100) prvi(krizec);).Sam k me to zlo omeji.Zdej pa probavam pisat na druge načine.
It is me, I walk, I live.
Celebi
poizvedovalec
poizvedovalec
 
Prispevkov: 50
Pridružen: Pe Jan 10, 2003 1:13 pm
Kraj: Brežice


Vrni se na Izdelovanje iger

Kdo je na strani

Po forumu brska: 0 registriranih uporabnikov in 0 gostov

cron