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


Fuzzy logika

Fuzzy logika patrí do rodiny neštandardných logík, ktoré pre odvodzovanie využívajú neurčitosti. Ku každému výroku systém najprv určí mieru istoty pomocou funkcie príslušnosti (membership function) - napríklad pre oranžovú farbu dá funkcia príslušnosti, či ide o červenú "skôr áno", a pre modrú "skôr nie". Hodnote "áno" zodpovedá vo fuzzy logike obvykle číslo 1, hodnote "nie" číslo 0. 0,5 potom znamená "neviem". Funkcia príslušnosti pre výrok "jednotka ja nebezpečná" pre Civilization priradí hodnoty jednotlivým jednotkám takto:

"jednotka je nebezpečná" = [(NUCLEAR = 1),(BOMBER = 0.9),(BATTLESHIP = 0.9), ..., (CHARIOT = 0.3),(MILITIA = 0)]

Počítač si tak vezme nepriateľského, alebo svojho panáka a zistí, ako je nebezpečný. Mierou nebezpečnosti je práve číslo z intervalu nula až jedna a tieto čísla sa používajú pre výpočet formou fuzzy logiky. Počítač tak vyhodnotí výroky, či "je ľudský oponent silný", "má veľké rezervy", "hraje agresívne", "práve útočí" - a potom začne usudzovať v systéme fuzzy pravidiel, ktorý vyzerá napríklad takto:

IF[(NOT "je oponent silny") AND "prave utoci" AND "mam velke rezervy"] THEN "preved protiutok"
// pokial nepriatel utoci, je slaby a mas rezervy, vyraz proti nemu a vychutnaj si ho
IF["je oponent silny" AND "prave utoci"] THEN "stiahni sa do zakladne"
// pokila napriatel utoci a je silny, stiahni sa pod ochranu delovych vezi
IF["oponent ohrozuje dolezitu budovu zakladne"] THEN "stiahni sa do zakladne"
//pokilanepriatel striela na dolezitu budovu zakladne, je nutne sa vratit a zastavit ho
IF["jednotka je hrozne poskodena" AND "jednotka je draha" AND (NOT("ciel, na ktory utoci, je kriticky" AND "ciel je vyznamne poskodeny"))] THEN "stiahni sa k oprave"
// pokial je draha jednotka poskodena, vrati sa k oprave, iba ak by nicila nieco pre nepriatela dolezite, a to nieco by nebolo blizko k zniceniu

Počítač prejde celou sieťou fuzzy pravidiel a vyvodí z nich hodnoty záverov - "zaútoč", "bráň saˇ", "expanduj výrobu", "vyrábaj ťažké jednotky", "vyrábaj lietadlá" a podobne. Vyriešia nezhody medzi spolu kontradiktívnymi (protichodnými) závermi - napríklad "zaútoč" a "bráň sa" a zisti, ktorý získal väčšiu váhu - napríklad pokiaľ mu vyjde "zaútoč=0,8" a "bráň sa = 0,3", začne útočiť.

Zaujímavý je prípad, keď mu v oboch prípadoch vyjde zhruba to isté - to znamená, že situácia je nejasná a mal by vyčkávať. Pokiaľ spolu závery neprotirečia, môže ich pochopiteľne realizovať zároveň.

Fuzzy logika je rýchla a jednoduchá; nedajú sa od nej čakať zázraky, ale vytvára variabilné správanie jednotiek, ktoré je vítané hlavne v reltime stratégiách, alebo akčných hrach. Využívajú napríklad Battlecruser 3000 AD, Civilization: Call To Power, Close Combat či SWAT 2.

Hore
Kontakt: Marek Bundzel