Produkčný systém patrí medzi znalostné systémy, teda medzi systémy, ktoré so svojimi údajmi narábajú ako so znalosťami. Znalosti vyjadrujú nielen informácie o nejakom objekte, ale aj súvislosti medzi objektami, vlastnosti zvolených problémov a spôsoby hľadania ich riešenia. Znalostný systém je teda v najjednoduchšom prípade dvojica – program, ktorý dokáže všeobecne manipulovať so znalosťami a báza znalostí, ktorá opisuje problém a vzťahy, ktoré tam platia. Znalosti majú definovanú nejakú štruktúru a spôsob narábania s touto štruktúrou – to sa nazýva formalizmus reprezentácie znalostí. Program vie pracovať s týmto formalizmom, ale nesmie byť závislý od toho, aké konkrétne znalosti spracováva, inak by to už nebol systém, kde riešenie úlohy je dané použitými údajmi.
Produkčný systém na základe odvodzovacieho pravidla modus ponens
(pravidlo odlúčenia) odvodzuje zo známych faktov a produkčných pravidiel
nové fakty. Ak systém nemá dostatok vstupných údajov, môže klásť používateľovi otázky.
Produkčný systém ako program nepozná konkrétne
pravidlá ani fakty! Pozná
len formalizmus, v tomto prípade štruktúru pravidiel a faktov a spôsob ich spracovania.
Pozná akcie (pridaj, vymaž, ...), ktoré sa môžu vykonávať, lebo tie patria do opisu
formalizmu.
Táto úloha sa v tomto tvare nemôže riešiť v jazyku PROLOG, pretože PROLOG už má vstavaný mechanizmus na odvodzovanie znalostí a výsledný program by neriešil úlohu, len vhodne načítal znalosti. V prípade riešenia úlohy v jazyku PROLOG je zadanie rozšírené o pravidlá M z N, dynamickú prioritu a niekoľko ďalších špeciálnych podmienok na porovnávanie. Pravidlo M z N je splnené, ak je splnených aspoň M elementárnych podmienok z jeho celkového počtu N. Priorita určuje, ktoré pravidlo bude vykonané, ak ich je splnených viac a závisí od statickej – vopred definovanej priority a dynamickej časti, ktorá v našom prípade uvádza pomer počtu splnených podmienok ku všetkým podmienkam. Príklad báz poznatkov, nad ktorými by takýto systém mal dať korektnú odpoveď, je tu.
K funkčnému programu je potrebné pripojiť aj dokumentáciu s opisom konkrétneho riešenia (reprezentácia znalostí, algoritmus, špecifické vlastnosti) a zhodnotením činnosti vytvoreného systému. Systém musí správne pracovať aspoň nad jednoduchou bázou znalostí (ekvivalentnou s prvou uvedenou), bázu znalostí si musí systém vedieť načítať zo súboru. Je vhodné si vytvoriť aj vlastné bázy znalostí a odovzdať spolu so zdrojovým kódom.
Produkčný systém je rozšírený o vyhodnotenie pravej strany pomocou eval. Pravidlá pre faktoriál odmazávajú zbytočné fakty a preto výpočet faktoriálu 100 trvá kratšie ako zistenie 16-tich nových rodinných vzťahov.
Druhé rozšírenie predstavujú otázky na používateľa. Sú použité v báze znalostí Fiaty2. Komunikácia je jednoduchá – používateľ musí vždy napísať správnu odpoveď, inak inferencia nemá ako pokračovať. Všimnite si, že vhodné odpovede sú aspoň zakompované do otázky.
Fakty sa na začiatku riešenia nachádzajú v báze faktov, a sú reprezentované napríklad zoznamom (nejaká sekvencia)
(toto je fakt)
Produkčné pravidlá sú uložené v báze pravidiel. Jednoduchý produkčný systém nesmie modifikovať pravidlá počas svojej činnosti.
Pravidlo má tri časti:
Podmienka je konjunkciou elementárnych podmienok, to znamená, že podmienka pravidla je splnená, ak sú splnené všetky elementárne podmienky a nenastal konflikt v žiadnej premennej.
(?co je fakt)alebo je to špeciálna podmienka
(<> ?a ?b)ktorá sa rozpozná na základe tvaru.
Vzor v akciách môže voliteľne obsahovať aj funkciu eval na vyhodnotenie matematického výrazu.
Príklady:
BRAT: AK (?R je rodic ?X)(?R je rodic ?Y)(muz ?Y)(<> ?X ?Y) POTOM (PRIDAJ ?Y je brat ?X)(SPRAVA Viem ze ?X ma brata, vola sa ?Y) EXPORT17: AK (na sklade ?X)(poziadavka ?N na ?X) POTOM (PRIDAJ vydane ?X na ziadost ?N)(VYMAZ na sklade ?X)(VYMAZ poziadavka ?N na ?X)
Krok 2:
Krok 3.
Krok 4.
Krok 5.
Krok 6.
Zhrnutie častých otázok alebo opis správania sa produkčného systému trochu inak.
Jednoduchá báza znalostí Na splnenie zadania stačí, aby systém pracoval korektne s touto bázou znalostí. |
FAKTY: (Peter je rodic Jano) (Peter je rodic Vlado) (manzelia Peter Eva) (Vlado je rodic Maria) (Vlado je rodic Viera) (muz Peter) (muz Jano) (muz Vlado) (zena Maria) (zena Viera) (zena Eva) PRAVIDLÁ: DruhyRodic1: AK ((?X je rodic ?Y)(manzelia ?X ?Z)) POTOM ((pridaj ?Z je rodic ?Y)) DruhyRodic2: AK ((?X je rodic ?Y)(manzelia ?Z ?X)) POTOM ((pridaj ?Z je rodic ?Y)) Otec: AK ((?X je rodic ?Y)(muz ?X)) POTOM ((pridaj ?X je otec ?Y)) Matka: AK ((?X je rodic ?Y)(zena ?X)) POTOM ((pridaj ?X je matka ?Y)) Surodenci: AK ((?X je rodic ?Y)(?X je rodic ?Z)(<> ?Y ?Z)) POTOM ((pridaj ?Y a ?Z su surodenci)) Brat: AK ((?Y a ?Z su surodenci)(muz ?Y)) POTOM ((pridaj ?Y je brat ?Z)) Stryko: AK ((?Y je brat ?Z)(?Z je rodic ?X)) POTOM ((pridaj ?Y je stryko ?X)(sprava ?X ma stryka)) Test mazania: AK ((?Y je stryko ?X)(zena ?X)) POTOM ((vymaz zena ?X)) |
Báza znalostí s otázkami na používateľa. V príklade je označená ako Fiaty2. Je možné ju aj transformovať na jednoduchú bázu znalostí. Tam je tiež vidno, že jednoduchá báza znalostí (Fiaty) si vyžaduje poznať všetky fakty vopred. | |
Akcia otázka v tomto príklade má dve časti. Prvá časť obsahuje text otázky (až po dvojbodku) a možné odpovede. Druhá časť obsahuje vzor, kde namiesto výkričníka sa pripojí odpoveď a taký fakt sa vloží do pracovnej pamäti.
FAKTY: (start) PRAVIDLÁ: p1: AK ((start)) POTOM ((otazka (Aky typ karoserie sa vam paci: sedan hatchback)(karoseria !)) (vymaz start)) p2: AK ((karoseria sedan)) POTOM ((otazka (Pozadujete pocet dveri: 4 5)(sedan !))) p3: AK ((sedan 5)) POTOM ((pridaj vybrany Fiat Croma) (sprava Fiat Croma)) p4: AK ((sedan 4)) POTOM ((otazka (Ktora naprava by mala byt pohanana: predna zadna)(naprava !)))) p5: AK ((naprava predna)) POTOM ((pridaj vybrany Fiat Tempra) (sprava Fiat Tempra)) p6: AK ((naprava zadna))) POTOM ((pridaj vybrany Fiat Mirafiorri) (sprava Fiat Mirafiorri))) p7: AK ((karoseria hatchback)) POTOM ((otazka (Pozadujete pocet dveri: 3 5)(hatchback !))) p8: AK ((hatchback 3)) POTOM ((otazka (Otvorena predna maska: ano nie mriezka)(3 maska !))) p9: AK ((3 maska ano)) POTOM ((pridaj vybrany Fiat Tipo3) (sprava Fiat Tipo3)) p10: AK ((3 maska nie)) POTOM ((pridaj vybrany Fiat Punto3) (sprava Fiat Punto3)) p11: AK ((3 maska mriezka)) POTOM ((pridaj vybrany Fiat Panda3) (sprava Fiat Panda3)) p12: AK ((hatchback 5)) POTOM ((otazka (Otvorena predna maska: ano nie mriezka)(5 maska !))) p13: AK ((5 maska ano)) POTOM ((pridaj vybrany Fiat Tipo5) (sprava Fiat Tipo5)) p14: AK ((5 maska nie)) POTOM ((pridaj vybrany Fiat Punto5) (sprava Fiat Punto5)) p15: AK ((5 maska mriezka)) POTOM ((otazka (Aky tvar svetiel sa vam paci: okruhle integrovane)(! svetla))) p16: AK ((integrovane svetla)) POTOM ((pridaj vybrany Fiat Uno5) (sprava Fiat Uno5)) p17: AK ((okruhle svetla)) POTOM ((pridaj vybrany Fiat Ritmo5) (sprava Fiat Ritmo5)) |
Báza znalostí, využívajúca funkciu eval. Eval po naviazaní premenných vyhodnotí svoj argument ako matematický výraz a namiesto seba vráti jeho hodnotu. | |
V jednoduchšom tvare
FAKTY: (faktorial 5) PRAVIDLÁ: F1: AK ((faktorial 0)) POTOM ((vymaz faktorial 0) (pridaj faktorial 0 je 1) (sprava Faktorial 0 je 1)) F2: AK ((faktorial ?x)(<> ?x 0)) POTOM ((vymaz faktorial ?x) (pridaj medzivypocet ?x (eval (1- ?x)) ?x)) F3: AK ((medzivypocet ?x 0 ?y)) POTOM ((vymaz medzivypocet ?x 0 ?y) (pridaj faktorial ?x je ?y) (sprava Faktorial ?x je ?y)) F4: AK ((medzivypocet ?x ?y ?z)) POTOM ((vymaz medzivypocet ?x ?y ?z) (pridaj medzivypocet ?x (eval (1- ?y)) (eval (* ?y ?z)) )) |
S otázkou
FAKTY: (start) PRAVIDLÁ: F1: AK ((faktorial 0)) POTOM ((vymaz faktorial 0) (pridaj faktorial 0 je 1) (sprava Faktorial 0 je 1)) F2: AK ((faktorial ?x)(<> ?x 0)) POTOM ((vymaz faktorial ?x) (pridaj medzivypocet ?x (eval (1- ?x)) ?x)) F3: AK ((medzivypocet ?x 0 ?y)) POTOM ((vymaz medzivypocet ?x 0 ?y) (pridaj faktorial ?x je ?y) (sprava Faktorial ?x je ?y)) F4: AK ((medzivypocet ?x ?y ?z)) POTOM ((vymaz medzivypocet ?x ?y ?z) (pridaj medzivypocet ?x (eval (1- ?y)) (eval (* ?y ?z)) )) F5: AK ((start)) POTOM ((otazka (Pocitame faktorial z: cele-cislo) (faktorial !))) |