Prírodou inšpirované algoritmyštudijné materiály pre projekt mobilnej triedy umelej inteligencie |
|||||||||||||||||||||
|
Modelovanie času, odpaľovanie pravidiel
Modelovanie časuČasový úsek (time level) je zabudovaný štandardný typ v SDML. Štandarná hodnota časového úseku je eternity, čo je čas, kedy sa vykonajú všetky dopredne reťazené pravidlá (simulácia skončí). Užívateľ si môže definovať akékoľvek množstvo časových úsekov a priradiť k nim agentov. Každý časový úsek má inicializačnú a ukončovaciu bázu pravidiel. Pri aplikovaní časových úsekov sa aplikujú najprv najväčšie časové úseky a postupne sa vykonávajú pravidlá vo vnorených časových úsekoch. Napríklad najprv sa vykoná inicializácia týždňa, potom prvého dňa v týždni, ďalej pokračujú dni v týždni, týždeň sa uzavrie a inicializuje sa nový týždeň atď. Inicializačná báza pravidiel kontajnera sa vykoná pred agentmi ktorých obsahuje, ukončovacie nasledujú v opačnom poradí.
Vykonávanie (odpaľovanie - firing) pravidiel
Najčastejšie sa používa dopredné reťazenie (forward chaining) pravidiel. Dopredne reťazené previdlá sú odpaľované nachádzaním väzieb premenných, pre ktoré sú príčinné výroky pravdivé. Zároveň sa predpokladá, že aj dôsledková časť je pravdivá pre tie isté väzby premenných. Jedno pravidlo môže byť odpálené viackrát s inými väzbami premenných. Pravidlo spolu zo slovníkom väzieb sa nazýva inštancia pravidla. Odpálením jednej inštancie sa príčinná časť iného pravidla môže stať pravdivou. Takto pokračuje dopredné reťazenie, až kým každá inštancia má pravdivé príčinné aj dôsledkové časti. Väzby premenných pre príčinné klauzuly sú hľadané vyhodnocovaním týchto klauzúl. Klauzuly s primitívami sú vyhodnocované vykonaním príslušného kódu v implementačnom jazyku SDML (momentálne Smalltalk), ostatné klauzuly sú vyhodnotené vybraním z databáz. Vyhodnotenie klauzuly zisťuje podmienky, pre ktoré je pravdivá. Klauzula môže byť pravdivá niekoľkokrát, vždy pre iné väzby svojich premenných, až kým sa nevyčerpajú všetky možnosti. Pravidlá majú často zloženú príčinnú časť. Skladá sa z podklauzúl spojených primitívom Keď sú úspešné všetky príčinné klauzuly, pravidlo je vykonané. Po odpálení pravidla, alebo neúspechu podklauzuly, SDML vykoná backtrack a hľadá ďalšie väzby pre doteraz úspešné klauzuly. Vždy keď su všetky príčinné klauzulu úspešné, ich väzby sú aplikované na dôsledkové klauzuly. Tieto sú potom vykonané, čím sa dokončí odpálenie pravidla. Vykonanie klauzuly najčastejšie znamená jej zapísanie do niektorej databázy. Po odpálení pravidla sa neprechádza hneď na ďalšie pravidlo. Zvyčajne je rýchlejšie vykonať backtrack a nájsť ďalšie inštancie pravidla, ako potom začínať hľadanie odznova. Poradie v akom sú inštancie odpaľované je určené čisto len efektívnosťou. Príčinné klauzuly sú vyhodnocované v poradí v akom sú zapísané v pravidle, keďže najefektívnejšie usporiadanie by bolo ťažké zisťovať automaticky. Pretože SDML je deklaratívne, zmena poradia príčinných klauzúl nemôže mať vplyv na výsledky. Niektoré primitíva nemôžu byť vyhodnotené skôr, ako je naviazaných dostatok premennýchm lebo majú nekonečne veľa riešení |
||||||||||||||||||||
Kontakt: Marek Bundzel |