Algoritmus Rete - Rete algorithm
Algoritmus Rete ( / r já t já / vzácných zemin -tee , / r eɪ t já / RAY -tee , zřídka / r já t / Reet , / r ɛ t eɪ / reh- Tay ) je odpovídající vzor algoritmus pro implementaci systémů založených na pravidlech . Algoritmus byl vyvinut tak, aby efektivně aplikoval mnoho pravidel nebo vzorů na mnoho objektů nebo faktů ve znalostní bázi . Používá se k určení, která z pravidel systému by se měla spouštět na základě jeho úložiště dat, jeho faktů. Algoritmus Rete byl navržen Charlesem L. Forgym z Carnegie Mellon University , nejprve publikován v pracovním dokumentu v roce 1974 a později zpracován v jeho 1979 Ph.D. práce a papír z roku 1982.
Přehled
Naivní implementace z expertního systému by mohla kontrolovat každou pravidlo proti známých skutečností v znalostní bázi , vypalování toto pravidlo, pokud je to nutné, pak přejde k dalšímu pravidlu (a smyčky zpět do prvního pravidla po dokončení). U i středně velkých pravidel a znalostních databází tento naivní přístup funguje příliš pomalu. Algoritmus Rete poskytuje základ pro efektivnější implementaci. Expertní systém založený na Rete buduje síť uzlů , kde každý uzel (kromě kořene) odpovídá vzoru vyskytujícímu se na levé straně (podmínková část) pravidla. Cesta od kořenového uzlu k listovému uzlu definuje úplné pravidlo na levé straně. Každý uzel má paměť faktů, které splňují tento vzorec. Tato struktura je v podstatě generalizovaným triem . Jak se prosazují nebo upravují nová fakta, šíří se po síti, což způsobí anotaci uzlů, když tato skutečnost odpovídá tomuto vzoru. Když skutečnost nebo kombinace faktů způsobí splnění všech vzorců pro dané pravidlo, dosáhne se listového uzlu a spustí se odpovídající pravidlo.
Rete byl poprvé použit jako hlavní motor jazyka produkčního systému OPS5, který byl použit k vybudování raných systémů včetně R1 pro Digital Equipment Corporation. Rete se stal základem pro mnoho populárních pravidel a expertních systémových prostředí, včetně Tibco Business Events, Newgen OmniRules, CLIPS , Jess , Drools , IBM Operational Decision Management , OPSJ, Blaze Advisor, BizTalk Rules Engine , Soar , Clara a Sparkling Logic SMARTS . Slovo „Rete“ je latinsky pro „síť“ nebo „hřeben“. Stejné slovo se v moderní italštině používá k označení sítě . Charles Forgy údajně uvedl, že přijal termín „Rete“ kvůli jeho použití v anatomii k popisu sítě cév a nervových vláken.
Algoritmus Rete je navržen tak, aby obětoval paměť vyšší rychlosti. Ve většině případů je nárůst rychlosti oproti naivním implementacím několik řádů (protože výkon Rete je teoreticky nezávislý na počtu pravidel v systému). Ve velmi velkých expertních systémech má však původní algoritmus Rete tendenci narážet na problémy se spotřebou paměti a serveru. Od té doby byly navrženy další algoritmy, nové i založené na Rete, které vyžadují méně paměti (např. Rete* nebo Collection Oriented Match).
Popis
Algoritmus Rete poskytuje zobecněný logický popis implementace funkce zodpovědné za porovnávání datových řazených kolekcí („faktů“) s produkcemi („ pravidla “) v produkčním systému porovnávání vzorů (kategorie pravidel ). Produkce se skládá z jedné nebo více podmínek a souboru akcí, které lze provést pro každou úplnou sadu skutečností, které odpovídají podmínkám. Atributy faktů pro testování podmínek , včetně specifikátorů/identifikátorů typů faktů. Algoritmus Rete vykazuje následující hlavní charakteristiky:
- Snižuje nebo eliminuje určité typy redundance pomocí sdílení uzlů.
- Při provádění spojení mezi různými typy faktů ukládá částečné shody . To zase umožňuje výrobním systémům vyhnout se úplnému přehodnocování všech skutečností pokaždé, když jsou provedeny změny v pracovní paměti produkčního systému. Místo toho potřebuje produkční systém pouze vyhodnotit změny (delty) pracovní paměti.
- Umožňuje efektivní odebrání paměťových prvků, když jsou fakta stažena z pracovní paměti.
Algoritmus Rete je široce používán k implementaci funkcí shody v motorech pro porovnávání vzorů, které využívají cyklus aktů vyřešení shody k podpoře předávání řetězců a odvozování .
- Poskytuje prostředek pro shodu mnoha a mnoha, což je důležitá funkce, když musí být nalezeno mnoho nebo všechna možná řešení ve vyhledávací síti.
Retes jsou směrované acyklické grafy, které představují sady pravidel vyšší úrovně. Obecně jsou zastoupeny za běhu pomocí sítě objektů v paměti. Tyto sítě porovnávají podmínky (vzorce) pravidel s fakty (relační datové n -tice). Sítě Rete fungují jako typ relačního dotazovacího procesoru, který provádí projekce , výběry a spojení podmíněně na libovolném počtu datových n -tic.
Produkce (pravidla) jsou obvykle zachyceny a definovány analytiky a vývojáři pomocí některého jazyka pravidel vysoké úrovně. Shromažďují se do sad pravidel, které jsou poté přeloženy, často za běhu, do spustitelného Rete.
Když jsou fakta „prosazována“ do pracovní paměti, modul vytvoří pro každou skutečnost prvky pracovní paměti (WME). Fakta jsou n-tice a mohou proto obsahovat libovolný počet datových položek. Každý WME může obsahovat celou n-tici, nebo alternativně každá skutečnost může být reprezentována sadou WME, kde každá WME obsahuje řazenou kolekci pevné délky. V tomto případě jsou n-tice typicky triplety (3-tice).
Každý WME vstupuje do sítě Rete v jednom kořenovém uzlu. Kořenový uzel předá každý WME svým podřízeným uzlům a každý WME pak může být šířen sítí, případně uložen v mezipaměti, dokud nedorazí do koncového uzlu.
Alfa síť
„Levá“ ( alfa ) strana grafu uzlu tvoří diskriminační síť odpovědnou za výběr jednotlivých WME na základě jednoduchých podmíněných testů, které odpovídají atributům WME proti konstantním hodnotám. Uzly v rozlišovací síti mohou také provádět testy, které porovnávají dva nebo více atributů stejného WME. Pokud se WME úspěšně shoduje s podmínkami reprezentovanými jedním uzlem, je předán do dalšího uzlu. Ve většině motorů se bezprostřední podřízené uzly kořenového uzlu používají k testování identifikátoru entity nebo typu faktu každého WME. Proto všechny WME, které představují stejný typ entity, obvykle procházejí danou větví uzlů v diskriminační síti.
V rámci diskriminační sítě každá větev alfa uzlů (také nazývaných 1-vstupní uzly) končí v paměti, nazývané alfa paměť . Tyto paměti ukládají kolekce WME, které odpovídají každé podmínce v každém uzlu v dané větvi uzlu. WME, které ve větvi neodpovídají alespoň jedné podmínce, nejsou v odpovídající alfa paměti materializovány. Větve alfa uzlu se mohou rozvětvit, aby se minimalizovala redundance podmínek.
Beta síť
„Pravá“ ( beta ) strana grafu provádí hlavně spojení mezi různými WME. Je volitelný a je zahrnut pouze v případě potřeby. Skládá se ze 2 vstupních uzlů, kde každý uzel má vstup „vlevo“ a „vpravo“. Každý beta uzel odešle svůj výstup do beta paměti .
V popisech Rete je běžné odkazovat na tokeny předávané v síti beta. V tomto článku však popíšeme šíření dat pomocí seznamů WME, nikoli tokenů, abychom rozpoznali různé možnosti implementace a základní účel a použití tokenů. Vzhledem k tomu, že jakýkoli seznam WME prochází sítí beta, mohou být do něj přidány nové WME a seznam může být uložen do beta pamětí. Seznam WME v paměti beta představuje částečnou shodu pro podmínky v dané produkci.
Seznamy WME, které dosáhnou konce větve beta uzlů, představují úplnou shodu pro jednu produkci a jsou předávány koncovým uzlům. Tyto uzly se někdy nazývají p-uzly , kde „p“ znamená produkci . Každý koncový uzel představuje jednu produkci a každý seznam WME, který dorazí do koncového uzlu, představuje kompletní sadu odpovídajících WME pro podmínky v dané produkci. Pro každý seznam WME, který obdrží, produkční uzel „aktivuje“ novou produkční instanci v „agendě“. Agendy jsou obvykle implementovány jako prioritní fronty .
Beta uzly obvykle provádějí spojení mezi seznamy WME uloženými v beta pamětech a jednotlivými WME uloženými v alfa pamětech. Každý beta uzel je spojen se dvěma vstupními paměťmi. Paměť alfa uchovává WM a provádí „správné“ aktivace v beta uzlu pokaždé, když ukládá novou WME. Paměť beta uchovává seznamy WME a provádí „levé“ aktivace v beta uzlu pokaždé, když ukládá nový seznam WME. Když je spojovací uzel aktivován vpravo, porovnává jeden nebo více atributů nově uloženého WME ze své vstupní alfa paměti s danými atributy konkrétních WME v každém seznamu WME obsaženém ve vstupní beta paměti. Když je spojovací uzel aktivován vlevo, prochází jediným nově uloženým seznamem WME v paměti beta a získává hodnoty konkrétních atributů daných WME. Porovnává tyto hodnoty s hodnotami atributů každého WME v paměti alfa.
Každý beta uzel vydává seznamy WME, které jsou buď uloženy v beta paměti, nebo odeslány přímo do koncového uzlu. Seznamy WME jsou uloženy v beta pamětech, kdykoli motor provede další levé aktivace na následujících beta uzlech.
Logicky je beta uzel v čele větve beta uzlů zvláštním případem, protože nevyžaduje žádný vstup z jakékoli beta paměti výše v síti. Různé motory řeší tento problém různými způsoby. Některé motory používají speciální uzly adaptéru k připojení pamětí alfa k levému vstupu beta uzlů. Jiné motory umožňují beta uzlům přijímat vstup přímo ze dvou alfa pamětí, přičemž jeden považuje za „levý“ vstup a druhý za „pravý“ vstup. V obou případech beta uzly „hlavy“ čerpají vstup ze dvou alfa pamětí.
Aby se odstranilo nadbytečnost uzlů, může být k provedení aktivace na více beta uzlech použita jakákoli jedna alfa nebo beta paměť. Kromě spojení uzlů může beta síť obsahovat další typy uzlů, z nichž některé jsou popsány níže. Pokud Rete neobsahuje žádnou beta síť, alfa uzly přivádějí tokeny, z nichž každý obsahuje jeden WME, přímo do uzlů p. V tomto případě nemusí být potřeba ukládat WME do alfa pamětí.
Řešení konfliktů
Během jakéhokoli cyklu cyklu vyřešení shody vyhledá motor všechny možné shody se skutečnostmi, které jsou aktuálně uplatňovány v pracovní paměti. Jakmile byly nalezeny všechny aktuální shody a byly na agendě aktivovány odpovídající produkční instance, motor určí pořadí, ve kterém mohou být „spuštěny“ produkční instance. Toto se nazývá řešení konfliktů a seznam aktivovaných produkčních instancí se nazývá sada konfliktů . Pořadí může být založeno na prioritě pravidla ( významnosti ), pořadí pravidel, době, kdy byly skutečnosti obsažené v každé instanci potvrzeny do pracovní paměti, složitosti každé produkce nebo některých dalších kritériích. Mnoho motorů umožňuje vývojářům pravidel vybírat mezi různými strategiemi řešení konfliktů nebo řetězit výběr z více strategií.
Řešení konfliktů není definováno jako součást algoritmu Rete, ale je použito vedle algoritmu. Některé specializované produkční systémy neprovádějí řešení konfliktů.
Provedení výroby
Po provedení řešení konfliktu modul nyní „spustí“ první produkční instanci a provede seznam akcí spojených s produkcí. Akce působí na data reprezentovaná seznamem WME produkční instance.
Ve výchozím nastavení bude motor nadále spouštět každou produkční instanci v pořadí, dokud nebudou spuštěny všechny produkční instance. Každá produkční instance bude spuštěna pouze jednou, maximálně během jednoho cyklu vyřešení shody. Tato charakteristika se nazývá refrakce . Sekvence spouštění instance produkce však může být v jakékoli fázi přerušena provedením změn v pracovní paměti. Akce pravidel mohou obsahovat pokyny pro uplatnění nebo stažení WME z pracovní paměti modulu. Pokaždé, když jakákoli jednotlivá produkční instance provede jednu nebo více takových změn, motor okamžitě vstoupí do nového cyklu aktů vyřešení shody. To zahrnuje "aktualizace" WME aktuálně v pracovní paměti. Aktualizace jsou zastoupeny zatažením a opětovným uplatněním WME. Motor převezme párování změněných dat, což může mít za následek změny v seznamu produkčních instancí na pořadu dne. Po provedení akcí pro jakoukoli konkrétní produkční instanci tedy mohly být dříve aktivované instance deaktivovány a odstraněny z agendy a nové instance mohou být aktivovány.
Jako součást nového cyklu shody-řešení-aktu motor provede řešení konfliktu na agendě a poté provede aktuální první instanci. Motor pokračuje ve spouštění produkčních instancí a zadávání nových cyklů vyřešení shody, dokud na pořadu jednání neexistují žádné další produkční instance. V tomto okamžiku se má za to, že modul pravidel dokončil svoji práci a zastaví se.
Některé motory podporují pokročilé refrakční strategie, ve kterých určité produkční instance provedené v předchozím cyklu nejsou znovu provedeny v novém cyklu, přestože mohou stále existovat na pořadu dne.
Je možné, aby motor vstoupil do nekončících smyček, ve kterých agenda nikdy nedosáhne prázdného stavu. Z tohoto důvodu většina motorů podporuje explicitní slovesa „halt“, která lze vyvolat ze seznamů akcí produkce. Mohou také poskytovat automatickou detekci smyčky, ve které se nekonečné smyčky automaticky zastaví po daném počtu iterací. Některé motory podporují model, ve kterém místo zastavení, když je agenda prázdná, motor přejde do stavu čekání, dokud se externě nepotvrdí nová fakta.
Pokud jde o řešení konfliktů, spouštění aktivovaných produkčních instancí není funkcí algoritmu Rete. Je to však hlavní rys motorů, které využívají sítě Rete. Některé z optimalizací nabízených sítěmi Rete jsou užitečné pouze ve scénářích, kde modul provádí několik cyklů vyřešení shody.
Existenciální a univerzální kvantifikace
K provádění výběrů a spojení na jednotlivých n -ticích se nejčastěji používají podmíněné testy. Implementací dalších typů beta uzlů je však možné, aby sítě Rete prováděly kvantifikace . Existenciální kvantifikace zahrnuje testování na existenci alespoň jedné sady odpovídajících WME v pracovní paměti. Univerzální kvantifikace zahrnuje testování, zda celá sada WME v pracovní paměti splňuje danou podmínku. Variace univerzální kvantifikace může testovat, zda daný počet WME, vybraných ze sady WME, splňuje daná kritéria. To může být z hlediska testování buď přesného počtu, nebo minimálního počtu shod.
Kvantifikace není v motorech Rete implementována univerzálně a tam, kde je podporována, existuje několik variací. Varianta existenciální kvantifikace označovaná jako negace je široce podporována a není popsána v klíčových dokumentech. Existenciálně negované podmínky a spojky zahrnují použití specializovaných beta uzlů, které testují neexistenci odpovídajících WME nebo sad WME. Tyto uzly šíří seznamy WME, pouze pokud není nalezena shoda. Přesná implementace negace se liší. V jednom přístupu uzel udržuje jednoduchý počet na každém seznamu WME, který obdrží ze svého levého vstupu. Počet určuje počet shod nalezených s WME přijatými ze správného vstupu. Uzel šíří pouze seznamy WME, jejichž počet je nula. V jiném přístupu uzel udržuje další paměť na každém seznamu WME přijatém z levého vstupu. Tyto paměti jsou formou beta paměti a ukládají seznamy WME pro každý zápas s WME přijatými na správném vstupu. Pokud seznam WME nemá v paměti žádné seznamy WME, je šířen po síti. V tomto přístupu negační uzly obecně aktivují další beta uzly přímo, místo aby ukládaly svůj výstup do další beta paměti. Negativní uzly poskytují formu „ negace jako selhání “.
Když jsou provedeny změny v pracovní paměti, seznam WME, který dříve odpovídal žádným WME, nyní může odpovídat nově uplatněným WME. V tomto případě musí být rozšířený seznam WME a všechny jeho rozšířené kopie staženy z beta pamětí dále v síti. Druhý přístup popsaný výše se často používá k podpoře efektivních mechanismů pro odstranění seznamů WME. Když jsou seznamy WME odstraněny, všechny odpovídající výrobní instance jsou deaktivovány a odstraněny z agendy.
Existenciální kvantifikaci lze provést kombinací dvou negačních beta uzlů. To představuje sémantiku dvojité negace (např. „Pokud NENÍ NENÍ žádný odpovídající WME, pak ...“). Toto je běžný přístup, který používá několik produkčních systémů.
Indexování paměti
Algoritmus Rete nenařizuje žádný konkrétní přístup k indexování pracovní paměti. Většina moderních produkčních systémů však poskytuje mechanismy indexování. V některých případech jsou indexovány pouze beta paměti, zatímco v jiných je indexování použito pro alfa i beta paměti. Dobrá strategie indexování je hlavním faktorem při rozhodování o celkovém výkonu produkčního systému, zejména při provádění sad pravidel, jejichž výsledkem je vysoce kombinatorické párování vzorů (tj. Intenzivní používání uzlů spojení beta), nebo u některých motorů při provádění pravidel sady, které provádějí značný počet stažení WME během několika cyklů vyřešení shody. Paměti jsou často implementovány pomocí kombinací tabulek hash a hodnoty hash se používají k provádění podmíněných spojení na podmnožiny seznamů WME a WME, nikoli na celý obsah pamětí. To zase často výrazně snižuje počet hodnocení prováděných sítí Rete.
Odebrání seznamů WME a WME
Když je WME stažen z pracovní paměti, musí být odstraněn z každé alfa paměti, ve které je uložen. Seznamy WME, které obsahují WME, musí být navíc odstraněny z beta pamětí a aktivované produkční instance pro tyto seznamy WME musí být deaktivovány a odstraněny z agendy. Existuje několik variant implementace, včetně odstranění založeného na stromech a rematchích. K optimalizaci odebrání může být v některých případech použito indexování paměti.
Zpracování podmínek ORED
Při definování produkce v sadu pravidel, je běžné, aby podmínky, které mají být rozděleny pomocí OR pojivové . V mnoha produkčních systémech je to řešeno interpretací jedné produkce obsahující více vzorců ORed jako ekvivalentu více produkcí. Výsledná síť Rete obsahuje sady koncových uzlů, které dohromady představují jednotlivé produkce. Tento přístup zakazuje jakoukoli formu zkratování podmínek ORed. V některých případech to také může vést k aktivaci duplicitních produkčních instancí v agendě, kde stejná sada WME odpovídá více interním produkcím. Některé motory umožňují za účelem řešení tohoto problému de-duplikaci agendy.
Diagram
Následující diagram ukazuje základní topografii Rete a ukazuje asociace mezi různými typy uzlů a pamětí.
- Většina implementací používá uzly typu k provedení první úrovně výběru na prvcích n-tice pracovní paměti. Typové uzly lze považovat za specializované vybrané uzly. Diskriminují různé typy relací n -tic.
- Diagram neilustruje použití specializovaných typů uzlů, jako jsou negované spojovací uzly. Některé motory implementují několik různých specializací uzlů za účelem rozšíření funkcí a maximalizace optimalizace.
- Diagram poskytuje logický pohled na Rete. Implementace se mohou lišit ve fyzických detailech. Zejména diagram ukazuje fiktivní vstupy poskytující pravé aktivace v čele větví beta uzlu. Motory mohou implementovat další přístupy, například adaptéry, které umožňují pamětím alfa provádět správné aktivace přímo.
- Diagram nezobrazuje všechny možnosti sdílení uzlů.
Podrobnější a úplnější popis algoritmu Rete najdete v kapitole 2 produktu Matching Production for Large Learning Systems od Roberta Doorenbose (viz odkaz níže).
Alternativy
Alpha Network
Možnou variantou je zavedení dalších pamětí pro každý mezilehlý uzel v rozlišovací síti. To zvyšuje režii Rete, ale může to mít výhody v situacích, kdy jsou pravidla do Rete dynamicky přidávána nebo z ní odebírána, což usnadňuje dynamickou změnu topologie diskriminační sítě.
Alternativní implementaci popisuje Doorenbos. V tomto případě je diskriminační síť nahrazena sadou pamětí a indexem. Index lze implementovat pomocí tabulky hash . Každá paměť obsahuje WME, které odpovídají jednomu podmíněnému vzoru, a index se používá k odkazování na paměti podle jejich vzoru. Tento přístup je praktický pouze v případě, že WME představují n-tice s pevnou délkou a délka každé n-tice je krátká (např. 3-tice). Tento přístup navíc platí pouze pro podmíněné vzory, které provádějí testy rovnosti proti konstantním hodnotám. Když WME vstoupí do Rete, index se použije k vyhledání sady pamětí, jejichž podmíněný vzor odpovídá atributům WME, a WME se pak přidá přímo do každé z těchto pamětí. Sama o sobě tato implementace neobsahuje žádné 1 vstupní uzly. Aby však bylo možné implementovat testy nerovnosti, může Rete obsahovat další sítě 1-vstupních uzlů, kterými jsou WME předávány před umístěním do paměti. Alternativně mohou být testy nerovnosti prováděny v beta síti popsané níže.
Síť beta
Běžnou variantou je vytváření propojených seznamů tokenů, kde každý token obsahuje jeden WME. V tomto případě jsou seznamy WME pro částečnou shodu reprezentovány propojeným seznamem tokenů. Tento přístup může být lepší, protože eliminuje potřebu kopírovat seznamy WME z jednoho tokenu do druhého. Místo toho musí beta uzel vytvořit pouze nový token pro uložení WME, který si přeje připojit k seznamu částečných shod, a poté propojit nový token s nadřazeným tokenem uloženým ve vstupní beta paměti. Nový token nyní tvoří hlavu seznamu tokenů a je uložen ve výstupní beta paměti.
Beta uzly zpracovávají tokeny. Token je jednotka úložiště v paměti a také jednotka výměny mezi pamětmi a uzly. V mnoha implementacích jsou tokeny zavedeny do alfa pamětí, kde se používají k uchovávání jednotlivých WME. Tyto tokeny jsou poté předány do beta sítě.
Každý beta uzel vykonává svou práci a v důsledku toho může vytvářet nové tokeny pro uložení seznamu WME představujících částečnou shodu. Tyto rozšířené tokeny jsou poté uloženy do beta pamětí a předány dalším beta uzlům. V tomto případě beta uzly obvykle předávají seznamy WME sítí beta zkopírováním stávajících seznamů WME z každého přijatého tokenu do nových tokenů a poté přidáním dalších WME do seznamů v důsledku provedení spojení nebo jiné akce. Nové tokeny jsou pak uloženy ve výstupní paměti.
Různé úvahy
I když to není definováno algoritmem Rete, některé motory poskytují rozšířené funkce pro podporu větší kontroly údržby pravdivosti . Když je například nalezena shoda pro jednu produkci, může to mít za následek uplatnění nových WME, které zase odpovídají podmínkám pro jinou produkci. Pokud následná změna pracovní paměti způsobí, že se první shoda stane neplatnou, může to znamenat, že je neplatná i druhá shoda. Algoritmus Rete nedefinuje žádný mechanismus, který by tyto závislosti logické pravdy definoval a zpracovával automaticky. Některé motory však podporují další funkce, ve kterých lze automaticky udržovat závislosti na pravdě. V tomto případě může stažení jednoho WME vést k automatickému stažení dalších WME za účelem zachování logických tvrzení o pravdě.
Algoritmus Rete nedefinuje žádný přístup k odůvodnění. Odůvodnění odkazuje na mechanismy běžně vyžadované v expertních a rozhodovacích systémech, ve kterých systém nejjednodušeji hlásí všechna vnitřní rozhodnutí použitá k dosažení nějakého konečného závěru. Expertní systém může například odůvodnit závěr, že zvíře je slon, hlášením, že je velké, šedé, má velké uši, chobot a kly. Některé motory poskytují vestavěné systémy zarovnání ve spojení s jejich implementací algoritmu Rete.
Tento článek neposkytuje vyčerpávající popis všech možných variací nebo rozšíření algoritmu Rete. Existují další úvahy a inovace. Motory mohou například poskytovat specializovanou podporu v rámci sítě Rete za účelem použití zpracování pravidel shody vzorů na konkrétní datové typy a zdroje, jako jsou programatické objekty , data XML nebo tabulky relačních dat . Další příklad se týká dalších zařízení pro časová razítka poskytovaných mnoha motory pro každé WME vstupující do sítě Rete, a použití těchto časových razítek ve spojení se strategiemi řešení konfliktů. Motory vykazují značné variace ve způsobu, který umožňují programový přístup k motoru a jeho pracovní paměti, a mohou rozšířit základní model Rete o podporu forem paralelního a distribuovaného zpracování.
Optimalizace a výkon
V akademické literatuře bylo identifikováno a popsáno několik optimalizací pro Rete. Některé z nich se však uplatňují pouze ve velmi konkrétních scénářích, a proto se často používají v modulu obecných pravidel jen málo nebo vůbec. Kromě toho byly formulovány alternativní algoritmy, jako je TREAT, vyvinutý Danielem P. Mirankerem LEAPS, a Design Time Inferencing (DeTI), které mohou poskytnout další vylepšení výkonu.
Algoritmus Rete je vhodný pro scénáře, kde se k výpočtu nových faktů ze stávajících faktů používá forward chaining a „inferencing“ nebo filtrovat a zahodit fakta, aby se dospělo k nějakému závěru. Je také využíván jako přiměřeně účinný mechanismus pro provádění vysoce kombinatorických hodnocení faktů, kde je třeba provést velké množství spojení mezi n -ticemi faktů. Pro jednoduché scénáře mohou být vhodnější jiné přístupy k hodnocení pravidel, jako je použití rozhodovacích stromů nebo implementace sekvenčních motorů, které by měly být považovány za možné alternativy.
Výkon Rete je také do značné míry věcí implementačních voleb (nezávislých na topologii sítě), z nichž jedna (použití hashovacích tabulek) vede k zásadním vylepšením. Většina benchmarků výkonu a srovnání dostupných na webu je nějakým způsobem zkreslená. Abych zmínil jen častou předpojatost a nefér typ srovnání: 1) používání problémů s hračkami, jako jsou příklady Manners a Waltz; takové příklady jsou užitečné pro odhad konkrétních vlastností implementace, ale nemusí odrážet skutečný výkon u složitých aplikací; 2) použití staré implementace; odkazy v následujících dvou částech (Rete II a Rete-NT) například porovnávají některé komerční produkty se zcela zastaralými verzemi CLIPS a tvrdí, že komerční produkty mohou být řádově rychlejší než CLIPS; toto zapomíná, že CLIPS 6.30 (se zavedením hashovacích tabulek jako v Rete II) je řádově rychlejší než verze použitá pro srovnání (CLIPS 6.04).
Varianty
Rete II
V 80. letech vyvinul Charles Forgy nástupce algoritmu Rete s názvem Rete II . Na rozdíl od původního Rete (což je public domain) nebyl tento algoritmus zveřejněn. Rete II deklaruje lepší výkon u složitějších problémů (i řádově) a je oficiálně implementován v CLIPS/R2, implementaci C/++ a v OPSJ, implementaci Javy v roce 1998. Rete II dává řádově 100: 1 zlepšení výkonu u složitějších problémů, jak ukazují benchmarky KnowledgeBased Systems Corporation.
Rete II lze charakterizovat dvěma oblastmi vylepšení; specifické optimalizace týkající se obecného výkonu sítě Rete (včetně použití hašovaných pamětí za účelem zvýšení výkonu u větších souborů dat) a začlenění algoritmu zpětného řetězení přizpůsobeného tak, aby běžel na vrcholu sítě Rete. Samotné zpětné zřetězení může mít za následek nejextrémnější změny v benchmarcích týkajících se Rete vs. Rete II. Rete II je implementován do komerčního produktu Advisor od FICO, dříve nazývaného Fair Isaac
Jess (alespoň verze 5.0 a novější) také přidává komerční algoritmus zpětného řetězení na vrchol sítě Rete, ale nelze říci, že plně implementuje Rete II, částečně kvůli skutečnosti, že není veřejně dostupná žádná úplná specifikace.
Rete-III
V časném 2000s, motor Rete III byl vyvinut Charles Forgy ve spolupráci s inženýry FICO. Algoritmus Rete III, který není Rete-NT, je ochrannou známkou FICO pro Rete II a je implementován jako součást enginu FICO Advisor. Je to v podstatě engine Rete II s API, které umožňuje přístup k enginu Advisor, protože engine Advisor má přístup k dalším produktům FICO.
Rete-NT
V roce 2010 vyvinula společnost Forgy novou generaci algoritmu Rete. V benchmarku InfoWorld byl algoritmus považován za 500krát rychlejší než původní algoritmus Rete a 10krát rychlejší než jeho předchůdce Rete II. Tento algoritmus je nyní licencován společnosti Sparkling Logic, společnosti, ke které se Forgy připojilo jako investor a strategický poradce, jako inferenční modul produktu SMARTS.
ReteOO
Rete podporuje pouze logickou logiku prvního řádu .
Viz také
Reference
- Charles Forgy , „Síťová rutina pro produkční systémy.“ Pracovní dokument, 1974.
- Charles Forgy, „ „ O efektivní implementaci produkčních systémů. “ Ph.D. práce, Carnegie-Mellon University, 1979.
- Charles, Forgy (1982). „Rete: Rychlý algoritmus pro problém shody mnoha vzorů/mnoha objektů“. Umělá inteligence . 19 : 17–37. doi : 10,1016/0004-3702 (82) 90020-0 .
externí odkazy
- Rete Algorithm vysvětlil Bruce Schneier, Dr. Dobb's Journal
- Production Matching for Large Learning Systems - R Doorenbos Podrobný a přístupný popis Rete, také popisuje variantu s názvem Rete/UL, optimalizovanou pro velké systémy (PDF)
- Podle pravidel (krátký úvod z přestřiženého uzlu )