Prírodou inšpirované algoritmy

študijné materiály pre projekt mobilnej triedy umelej inteligencie

Späť ku kurzom triedy
Obsah
Adaptívne algoritmy
Neadaptívne algoritmy
Optimalizačné metódy a grafové algoritmy
Expertné systémy
Fuzzy logika
Konečné automaty
Skupinové správanie



Ostatné kapitoly
Freemanove K modely
Umelé imunitné systémy
Biomimicry - Biomimetics
Umelé chémie
Chemické vlny
DNK počítače
Artificial Music
Memetika
Artificial Life Games
Artificial Art
Väzenská dilema


Tutoriály
 Celulárne automaty
 Morfogenéza
 Simulátory
 Evolučné algoritmy
 Chaos
 Roboty
 Rôzne


Neadaptívne algoritmy

Sekvenčný program - predprogramované monštrá majú kusy kódu, ktorý sa spúšťa inštrukcia za inštrukciou, s tým presne určuje poradie rozhodovacích podmienok. Je to najjednoduchší spôsob programovania chovania a vykonávanie kódu je veľmi rýchle, ale výsledné správanie monštier je veľmi stereotypné a jednoduché. Keď si ešte spomeniete, ako za vami chodili opičky v DOOMe - iba vo veľkom dave - kým sme im brokovnicou nepovedali: "Ľahni !!!".

V rade nových hier je možné meniť vlastnosti umelej inteligencie, pretože nie je natvrdo uložená v kóde, ale popísaná špeciálnym jazykom v samostatnom súbore. Jednoduchým programovacím jazykom pre AI sa bežne hovorí skripty a tvorbe skriptov - hoc ide o plnohodnotné programovanie - sa hovorí scripting.

Ako vyzerá časť skriptu pre bojovníka z hry Bladur's Gate:

IF
// Pokial nie je nablizku nepriatel blizsie ako o 3
!Range(NearestEnemyOf(Myself),3)
// A je blizsie nez 8
Range(NearestEnemyOf(Myself),8)
THEN
// 1/3 casu
RESPONSE #40
// Vyber si moju najlepsiu zbran na blizko
EquipMostDamaging Melee()
// a zautoc na najblizsieho nepriatela a kazdych 60 tikov skontroluj, ci je stale najblizsie zo vsetkych nepriatelov
AttackReevalutate(NearestEnemyOf(Myself),60)
// 2/3 casu
RESPONsE #80
// Vyber si zbran na dialku
EquipRanged()
// a zautoc na najblizsieho nepriatela a kazdych 30 tikov skontroluj, ci je stale najblizsie
AttackReevalutate(NearestEnemyOf(Myself),30)
END
(Autor: Sean Carley)

Program s náhodnými faktormi. Je pomerne jednoduchý, ale dostatočne efektívny spôsob, ako vniesť do davu nepriateľov variabilné správanie.Dodáva sekvenčnému programu pre každé monštrum aj náhodné rozhodnutie - akési hodenie kockou, či bude vykonané rozhodnutie, alebo nie. Príšery potom nepobehujú ako sprievod robotníkov na Prvého mája, ale niektorá utečie, iná zaútočí a podobne. Nie je to príliš náročné na implementáciu a je to pomerne rýchle.

Problém je v tom, že monštrá sa správajú skôr chaoticky než zmysluplne a aj napriek náhodnosti v ich chovaní sa dajú znateľne pozorovať stereotypy.

Vkladanie náhodných faktorov je skôr doplnková technika než samostatný spôsob programovania umelej inteligencie. Často sa objavuje v spolupráci s Fuzzy logikou, kde fuzzy výsledok vyhodnocovania situácie funguje zároveň ako pravdepodobnosť, že sa spustí určité správanie. Pokiaľ napríklad fuzzy logika povie, že je dobré "zaútočiť=0,8" a "brániť sa=0,4", klasický algoritmus sa rozhodne vždy pre útok. Pokiaľ je ale rozhodovanie pravdepodobnostné, program si vypočíta, že pomer "zaútočiť" ku "brániť" zodpovedá 2:1 pre útok. Takéto správanie i keď nie je racionálne - vyzerá pomerne źivo.

Problém je ale v tom, že človek uvažuje aj o faktoroch, ktoré žiadny algoritmus bez schopnosti plánovať nemá - napríklad, pokiaľ už sú vyťažené suroviny na mape a nie je už možné vyrábať nákladné jednotky, človek nebude nikdy riskovať nákladné jednotky a nepôjde s nimi do útoku s rizikom 1:1, zatiaľ čo počítač - na základe pravdepodobnosti - do nich pôjde priemerne v každom druhom prípade. V tom je ľudská šikovnosť - vyzerá to ako čakanie na chybu počítača, ale nie je to chyba, je to pravdepodobnosť. A tá - na rozdiel od chyby - po dostatočne dlhom čakaní nastane.

Hore
Kontakt: Marek Bundzel