Difference between revisions of "Fuzzy logic/cs"

From Simulace.info
Jump to: navigation, search
m (Ahoj vs. Dobrý deň)
(Ahoj vs. Dobrý deň)
Line 26: Line 26:
 
Ľudia by sa podľa veku mohli deliť na viacero kategórií. Pre jednoduchosť si ich rozdelíme iba do dvoch kategórií - starí a mladí. Podľa etikety slušného správania starí ľudia mladím zväčša tikajú a mladí naopak starím vykajú. Existujú samozrejme aj výnimky, napríklad vnúčata dnes bežne svojím starím rodičom tikajú. Alebo si niekedy medzi sebou vykajú aj dvaja mladí ľudia keď napríklad vybavujú nejakú formálnu záležitosť. Ľudia dodržujúci zásady slušného správania by sa teda mali správať podľa nejakého vzoru etického správania, čo je príkladom fuzzy rozhodovania a priradenia '''(prekonvertovania)''' množín možných vstupov '''(stretnutí)''' s rozličnými vlastnosťtami '''(starý vs. mladý, stretnutie v krčme vs. stretnutie v banke, blízka vs. cudzia osoba, ...)''' na množinu možných výstupov '''(dobrý deň, ahoj, nazdar, ...)'''.  
 
Ľudia by sa podľa veku mohli deliť na viacero kategórií. Pre jednoduchosť si ich rozdelíme iba do dvoch kategórií - starí a mladí. Podľa etikety slušného správania starí ľudia mladím zväčša tikajú a mladí naopak starím vykajú. Existujú samozrejme aj výnimky, napríklad vnúčata dnes bežne svojím starím rodičom tikajú. Alebo si niekedy medzi sebou vykajú aj dvaja mladí ľudia keď napríklad vybavujú nejakú formálnu záležitosť. Ľudia dodržujúci zásady slušného správania by sa teda mali správať podľa nejakého vzoru etického správania, čo je príkladom fuzzy rozhodovania a priradenia '''(prekonvertovania)''' množín možných vstupov '''(stretnutí)''' s rozličnými vlastnosťtami '''(starý vs. mladý, stretnutie v krčme vs. stretnutie v banke, blízka vs. cudzia osoba, ...)''' na množinu možných výstupov '''(dobrý deň, ahoj, nazdar, ...)'''.  
  
Pre jednoduchosť si fuzzy logiku vysvetlíme iba na základe jednej najdôležitejšej vlastnosti - veku (tá sa samozrejme môže meniť na základe určenia priorít, to ale komplikuje vysvetlovanie a táto komplikácia je vysvetlená v [http://www.simulace.info/index.php/Fuzzy_logic/cs#Fuzzy_rule-based_syst.C3.A9my kapitole nižšie]). Neberieme teda do úvahy žiadne iné vlastnosti agentov, ktoré by mohli zmeniť ich správanie.
+
Pre jednoduchosť si fuzzy logiku vysvetlíme iba na základe jednej vlastnosti - veku (tá sa samozrejme môže meniť na základe určenia priorít, to ale komplikuje vysvetlovanie a táto komplikácia je vysvetlená v [http://www.simulace.info/index.php/Fuzzy_logic/cs#Fuzzy_rule-based_syst.C3.A9my kapitole nižšie]). Neberieme teda do úvahy žiadne iné vlastnosti agentov, ktoré by mohli zmeniť ich správanie.
  
 
[[File:fuzzyAgesAndGreetings.png|350px|center]]
 
[[File:fuzzyAgesAndGreetings.png|350px|center]]
Line 32: Line 32:
 
Samozrejme, výsledná matica pozdravov nie je finálna, no ak by fuzzy logika obsahovala iba jedinnú premennú '''vek''' a 3 ľudí vo veku 10, 40 a 60 rokov, mohla by vyzerať nejak podobne. Dôležitý je predovšetkým výpočet faktoru veku, ktorý je v tomto prípade počítaný ako podiel '''vek/X''', kde X = 100 (tieto hodnoty môžeme vidieť na obrázku vyššie a je iba na nás, čo dosadíme za X).
 
Samozrejme, výsledná matica pozdravov nie je finálna, no ak by fuzzy logika obsahovala iba jedinnú premennú '''vek''' a 3 ľudí vo veku 10, 40 a 60 rokov, mohla by vyzerať nejak podobne. Dôležitý je predovšetkým výpočet faktoru veku, ktorý je v tomto prípade počítaný ako podiel '''vek/X''', kde X = 100 (tieto hodnoty môžeme vidieť na obrázku vyššie a je iba na nás, čo dosadíme za X).
  
Ak by sme teda zaradzovali daných ľudí len do 2 kategórií na '''Starí''' a '''Mladí''' na základe knoštanty <i>limit</i>, ktorá by v tomto prípade bola nastavená na 0.5, dostali by sme maticu '''3x3''' možných   , s množinou pozdravov '''{"Dobrý deň", "Ahoj"}''' a to podmienku veku, kde by sa
+
Čo teda vieme z modelu vyčítať:
 +
* 2 kategórie: '''Starí''' a '''Mladí''' s hraničným bodom delenia 50 (limit)
 +
* prirodzená úcta k starším :D (10 ročný chlapec bude starším ujom vykať)
 +
* množinu vstupov ľudí '''{10,40,50}''' obsahujúcich vlastnosť veku
 +
* množinou pozdravov '''{"Dobrý deň", "Ahoj"}'''
 +
 
 +
Ak by sme teda zaradzovali daných ľudí len do 2 kategórií na základe jedného pravidla, ktoré by spočívalo v porovnávaní faktoru veku s konštantou <i>limit</i>, dostali by sme maticu '''3x2''' možných  pozdravov. Nie je teda vôbec doležité, ako nastavíme konštantu <i>limit</i>, pri jej zmene sa iba zmenia určené pozdravy, nie však počet prvkov matice a teda všetky možné kombinácie stretnutí majú vždy jasne danú reakciu z oboch strán.
 +
 
 +
Pri stretnutí dvoch rovesníkov som trochu načŕtol možné rozšírenie úlohy, keď som neurčil, či bude pozdrav '''Ahoj" alebo "Dobrý deň". Samozrejme, ak platia pravidlá vyššie (pri dvoch malých chlapcoch som si ale dovolil spraviť výnimku, málokedy vidíme zdraviť sa ich pozdravom "Dobrý deň"), pri stretuntí dvoch '''40''' by mal byť pozdrav "Ahoj" (keďže obaja spĺňajú podmienku "mladosti") a dvoch '''60''' ročných pánov v klobúku "Dobrý deň".
 +
 
 +
Výnimka však potvrdzuje pravidlo a v prípade 10 ročného kráľa by sme aj 60 ročného starca videli pozdraviť ho pozdravom "Dobrý deň"(ak tam samozrejme nie sú ďalšie pravidlá, ktorú môžu túto logiku upravovať, ako napríklad príbuzenský vzťah a podobne). Možnosť voľby z dvoch pozdravov pri '''40''' a '''60''' ročných mužoch teda malo načŕtnuť pointu fuzzy logiky a možnosti jej rozšírenia, aj keď táto možnosť výberu sa vyskytne až po zaradení ďalších pravidiel.
 +
 
 +
2 úlohy na záver (odpovede sa nachádzajú až za titulkami :)):
 +
1. Aké by mohli byť ďalšie vlasnosti, ktoré by menili faktor veku?
 +
2. Ako by vyzeral pozdrav pri stretnutí 60 ročného starca (zmena faktoru veku z príkladu vyššie), ak do modelu pridáme nasledujúce vlasnosti :
 +
    2.a) hodnosť kráľa znásobuje súčasný váhu 100 krát?
 +
    2.b) hodnosť kňaza znásobuje súčasný váhu 20 krát?
 +
    2.c) o koľko rokov kňaz začne oslovovať kráľa "Dobrý deň"?
  
 
= Fuzzy logika v agentovo-orientovaných počítačových hrách <ref name="book"> Li, Yifan & Musilek, Petr & Wyard-Scott, L. (2004).<i>Fuzzy logic in agent-based game design.</i> 734 - 739 Vol.2. 10.1109/NAFIPS.2004.1337393. Dostupné z : https://www.researchgate.net/publication/4092875_Fuzzy_logic_in_agent-based_game_design</ref>=
 
= Fuzzy logika v agentovo-orientovaných počítačových hrách <ref name="book"> Li, Yifan & Musilek, Petr & Wyard-Scott, L. (2004).<i>Fuzzy logic in agent-based game design.</i> 734 - 739 Vol.2. 10.1109/NAFIPS.2004.1337393. Dostupné z : https://www.researchgate.net/publication/4092875_Fuzzy_logic_in_agent-based_game_design</ref>=

Revision as of 21:02, 12 June 2019


Úvod

L.A. Zadeh

Fuzzy Logika vznikla v kontexte teórie Fuzzy množín, ktorú prvý krát predstavil L. A. Zadeh v roku 1965. Fuzzy množina priradí stupeň členstva (reálne číslo z intervalu [0,1]) elementom vesmíru, pričom fuzzy logika vzniká až priradením stupňov pravdy k týmto vesmírnym elementom. Vzťahuje sa na rodinu viachodnotových logík, takže je určená na modelovanie logických úvah s neurčitými alebo nepresnými údajmi. Stanovuje, že hodnota pravdy (v tomto prípade pravdivostný stupeň) logicky zloženého návrhu (napr. "Peter je bohatý a Ivan je vysoký.") je určená pravdivosťou jeho komponentov, inak povedané, nepočíta iba s 2 možnými hodnotami pravdy. [1].

Pri použití Fuzzy logiky na štandardnej škále oboru hodnôt [0,1] potom :

  • "úplná nepravda" je reprezentovaná hraničnou hodnotou 0
  • "úplná pravda" je reprezentovaná hraničnou hodnotou 1
  • "čiastočná pravda" je reprezentovaná všetkými ostatnými hodnotami (nazývané aj stredné stupne pravdy)

Viac o agentoch sa môžete dočítať v kapitole na to určenej. Pre nás bude užitočná najmä podkapitola o Deliberatívnych agentoch, v ktorej sa píše aj o teórií BDI, ktorá tvorí sofistikovaný prístup k architektúre agenta a skladá sa z troch základných pojmov :

  • Beliefs(domnienky)
  • Desires(túžby)
  • Intentions(zámery)

Na základe týchto 3 faktorov, a teda domnienok, túžob a prianí agent uvažuje o svete a teda o svojom rozhodovaní, ktorému je tento učební text venovaný.

Fuzzy logika z každodenného života

Pre lepšie pochopenie fuzzy logiky si uvedieme 3 príklady z bežného života, pri ktorých fuzzy logiku využívame automaticky bez toho, aby sme si vôbec uvedomovali, že sa nejaké také rozhodovanie v mozgu deje.

Ahoj vs. Dobrý deň

Ľudia by sa podľa veku mohli deliť na viacero kategórií. Pre jednoduchosť si ich rozdelíme iba do dvoch kategórií - starí a mladí. Podľa etikety slušného správania starí ľudia mladím zväčša tikajú a mladí naopak starím vykajú. Existujú samozrejme aj výnimky, napríklad vnúčata dnes bežne svojím starím rodičom tikajú. Alebo si niekedy medzi sebou vykajú aj dvaja mladí ľudia keď napríklad vybavujú nejakú formálnu záležitosť. Ľudia dodržujúci zásady slušného správania by sa teda mali správať podľa nejakého vzoru etického správania, čo je príkladom fuzzy rozhodovania a priradenia (prekonvertovania) množín možných vstupov (stretnutí) s rozličnými vlastnosťtami (starý vs. mladý, stretnutie v krčme vs. stretnutie v banke, blízka vs. cudzia osoba, ...) na množinu možných výstupov (dobrý deň, ahoj, nazdar, ...).

Pre jednoduchosť si fuzzy logiku vysvetlíme iba na základe jednej vlastnosti - veku (tá sa samozrejme môže meniť na základe určenia priorít, to ale komplikuje vysvetlovanie a táto komplikácia je vysvetlená v kapitole nižšie). Neberieme teda do úvahy žiadne iné vlastnosti agentov, ktoré by mohli zmeniť ich správanie.

FuzzyAgesAndGreetings.png

Samozrejme, výsledná matica pozdravov nie je finálna, no ak by fuzzy logika obsahovala iba jedinnú premennú vek a 3 ľudí vo veku 10, 40 a 60 rokov, mohla by vyzerať nejak podobne. Dôležitý je predovšetkým výpočet faktoru veku, ktorý je v tomto prípade počítaný ako podiel vek/X, kde X = 100 (tieto hodnoty môžeme vidieť na obrázku vyššie a je iba na nás, čo dosadíme za X).

Čo teda vieme z modelu vyčítať:

  • 2 kategórie: Starí a Mladí s hraničným bodom delenia 50 (limit)
  • prirodzená úcta k starším :D (10 ročný chlapec bude starším ujom vykať)
  • množinu vstupov ľudí {10,40,50} obsahujúcich vlastnosť veku
  • množinou pozdravov {"Dobrý deň", "Ahoj"}

Ak by sme teda zaradzovali daných ľudí len do 2 kategórií na základe jedného pravidla, ktoré by spočívalo v porovnávaní faktoru veku s konštantou limit, dostali by sme maticu 3x2 možných pozdravov. Nie je teda vôbec doležité, ako nastavíme konštantu limit, pri jej zmene sa iba zmenia určené pozdravy, nie však počet prvkov matice a teda všetky možné kombinácie stretnutí majú vždy jasne danú reakciu z oboch strán.

Pri stretnutí dvoch rovesníkov som trochu načŕtol možné rozšírenie úlohy, keď som neurčil, či bude pozdrav Ahoj" alebo "Dobrý deň". Samozrejme, ak platia pravidlá vyššie (pri dvoch malých chlapcoch som si ale dovolil spraviť výnimku, málokedy vidíme zdraviť sa ich pozdravom "Dobrý deň"), pri stretuntí dvoch 40 by mal byť pozdrav "Ahoj" (keďže obaja spĺňajú podmienku "mladosti") a dvoch 60 ročných pánov v klobúku "Dobrý deň".

Výnimka však potvrdzuje pravidlo a v prípade 10 ročného kráľa by sme aj 60 ročného starca videli pozdraviť ho pozdravom "Dobrý deň"(ak tam samozrejme nie sú ďalšie pravidlá, ktorú môžu túto logiku upravovať, ako napríklad príbuzenský vzťah a podobne). Možnosť voľby z dvoch pozdravov pri 40 a 60 ročných mužoch teda malo načŕtnuť pointu fuzzy logiky a možnosti jej rozšírenia, aj keď táto možnosť výberu sa vyskytne až po zaradení ďalších pravidiel.

2 úlohy na záver (odpovede sa nachádzajú až za titulkami :)): 1. Aké by mohli byť ďalšie vlasnosti, ktoré by menili faktor veku? 2. Ako by vyzeral pozdrav pri stretnutí 60 ročného starca (zmena faktoru veku z príkladu vyššie), ak do modelu pridáme nasledujúce vlasnosti :

   2.a) hodnosť kráľa znásobuje súčasný váhu 100 krát?
   2.b) hodnosť kňaza znásobuje súčasný váhu 20 krát?
   2.c) o koľko rokov kňaz začne oslovovať kráľa "Dobrý deň"?

Fuzzy logika v agentovo-orientovaných počítačových hrách [2]

Umelá inteligencia v počítačových hrách sa vďaka rastúcim požiadavkám hráčov musí neustále zlepšovať. Inteligentní agenti môžu spolu s fuzzy logikou vylepšiť najdôležitejší prvok hier - interakciu. Agenti ponúkajú lepšie možnosti flexibilnej interakcie v rámci architektúry herného dizajnu, pričom fuzzy logika umožňuje lepšie kontrolovať správanie pre vytvorenie najrôznejších foriem umelých inteligencií.

Porovnanie s inými technikami

Vo svete hier neznamená fuzzy kontrola iba ďalšiu metódu pre správanie agentov. Kontrolovanie agentov pomocou fuzzy logiky je zárukou generovania "správneho" správania. Toto prirodzené správanie agentov potom pomáha zvyšovať vnímanú zložitosť a dôveryhodnosť virtuálneho prostredia. V porovnaní s niektorými inými technikami návrhu inteligentných systémov sú systémy založené na fuzzy pravidlách jednoduché na návrh aj implementáciu. Klasické rule-based systémy pritom často nedokážu dosiahnuť prirodzenosť, akú ponúkajú fuzzy systémy, pričom tie spotrebujú omnoho nižšie výpočtové náklady.

Fuzzy rule-based systémy

Systémy založené na fuzzy pravidlách sa vo všeobecnosti skladajú z 4 komponentov:

  • fuzzifier konvertuje sparsované vstupy z klienta do fuzzy množín
  • základňa pravidiel (rule-base) uchováva všetky vzťahy medzi vstupmi a očakávanými výstupmi v kolekcií IF-THEN pravidiel
  • uvažujúca jednotka použije vstupy a aplikuje na nich konkrétne pravidlá
  • defuzzifier prekonvertuje výsledok rozhodovania a sparsované výstupy pošle späť na klienta

V prípade viacerých vstupov sú fuzzy pravidlá väčšinou prepojené logickým spojením (konektorom) AND, pričom rule-base musí pokrývať každú možnú kombináciu všetkých výrazov z definičného oboru vstupnej premennej. Táto požiadavka úplnosti ale vedie k tzv. rule explosion problém-u, kde pre systém s n vstupmi, ktorý má každý m možných stavov potrebujeme celkovo m^n pravidiel! Toto pravidlo výbuchu predstavuje vážny problém a komplikuje implementovanie fuzzy kontrolovania vďaka vysokým nárokom na CPU zdroje. Combs navrhol URC (Union Rule Configuration) na zmiernenie tohto problému, kedy sa zložitosť výpočtu zníži na m*n pravidiel.

Fuzzy logika v herných agentoch

Zhrnutie

Zdroje

  1. Cintula, Petr, Fermüller, Christian G. and Noguera, Carles, "Fuzzy Logic", The Stanford Encyclopedia of Philosophy (Fall 2017 Edition), Edward N. Zalta (ed.), Dostupné z : https://plato.stanford.edu/archives/fall2017/entries/logic-fuzzy/
  2. Li, Yifan & Musilek, Petr & Wyard-Scott, L. (2004).Fuzzy logic in agent-based game design. 734 - 739 Vol.2. 10.1109/NAFIPS.2004.1337393. Dostupné z : https://www.researchgate.net/publication/4092875_Fuzzy_logic_in_agent-based_game_design