Relacja między silnikami reguł biznesowych a językami programowania ograniczeń

20

Jeśli przyjrzymy się (być może starszym) instrukcjom Drools lub innym silnikom reguł, jednym z przykładów ich wartości dodanej jest rozwiązywanie zagadek, takich jak łamigłówka Miss Manners (instrukcja Drools). Teraz takie łamigłówki są naturalnie formułowane i rozwiązywane przy użyciu Prologu lub nowszych języków programowania ograniczeń, i zastanawia się, dlaczego ktokolwiek miałby używać Drools w tym celu. Wartością dodaną, jaką Prolog i CPL w tym przypadku dają, jest ich zdolność do naturalnego formułowania układanki jako zbioru logicznych predykatów i automatycznego przeszukiwania przestrzeni rozwiązań (przy czym CPL jest pod tym względem bardziej wydajny). Ale jaka jest wartość dodana produktu, takiego jak Drools (mam na myśli oprócz dzwonków i gwizdów pobrania na przykład pliku Excela i przetłumaczenia go na zestaw reguł)?

Mówiąc dokładniej, Prolog implementuje wyszukiwanie wstecz, CLP implementuje wyszukiwanie wstecz z propagacją ograniczeń, a zatem zamiast przeszukiwać, że tak powiem, cały kartezjański iloczyn przestrzeni dla poszczególnych zmiennych, przycinają duże części tej przestrzeni produktu. To sprawia, że ​​są skuteczne i użyteczne. Zarówno Prolog, jak i CLP są szeroko omawiane w literaturze.

Z drugiej strony, chociaż jasne jest, że algorytm Rete buforuje zestaw reguł w postaci niektórych struktur danych, co (o ile rozumiem) sprawia, że ​​bardziej efektywna jest ocena wyników, jeśli niektóre dane wejściowe uległy zmianie, i dając środki na efektywną aktualizację tej struktury danych pod kątem przyrostowych zmian, trudno (dla mnie) zrozumieć podstawową ideę, a tym bardziej jej skuteczność (w porównaniu do tego, co? do Prologa? do CLP)? Niestety trudno znaleźć dobre referencje, które widzą algorytm Rete w tym szerszym kontekście.

Dokumentacja Drools niestety nie jest bardzo pouczająca w tym zakresie. Najbardziej udało mi się znaleźć „Algorytm Rete, algorytm Leaps i jego potomkowie, tacy jak Retro Drools (i Leaps), zapewniają bardzo skuteczne sposoby dopasowywania wzorców reguł do danych obiektu domeny. Są one szczególnie wydajne, gdy masz zestawy danych, które nie zmieniaj całkowicie (ponieważ silnik reguł zapamiętuje poprzednie mecze). Algorytmy te są sprawdzone w bitwie ". Bardzo wydajny - w porównaniu do czego? Sprawdzony w bitwie - czy można wskazać na aplikacje z prawdziwego świata?

Byłbym wdzięczny, gdyby można rzucić nieco więcej światła na ten temat lub podać ważne odniesienie.

John Donn
źródło
1
To pytanie jest nieco ogólne i tak naprawdę „nie należy” tutaj
3
Cóż, obawiam się, że w przypadku cstheory.stackexchange.com jest on zbyt „zorientowany na przemysł”. Co naprawdę mnie interesuje, jaka jest podstawowa kwestia w silnikach reguł biznesowych i dlaczego ich używanie jest bardziej korzystne niż używanie Prologa lub CLP. Jeśli masz propozycję lepszego miejsca na opublikowanie, chętnie go usłyszę.

Odpowiedzi:

7

Myślę, że argumentem przemawiającym za wieloma komercyjnymi systemami reguł biznesowych korzystającymi z silników łączenia w przód (np. Drools) vs łańcucha wstecznego (Prolog) jest to, że wielu „programistów Joe” jest przyzwyczajonych do obsługi logiki IF / THEN / ELSE - i to czyni całość dużo łatwiej sprzedawać masom. Nie sądzę, żeby zalety techniczne miały z tym coś wspólnego.

Publikuję to jako wiki społeczności, ponieważ jest to moja dość kolorowa opinia, a nie prawdziwa odpowiedź.

NealB
źródło
4

Ostatnio ślinka dodaje łańcuchy wstecz, płynnie w języku drl. Teraz zyskujesz zalety obu słów.

Nie ma jeszcze wszystkich cech prologu, na przykład nie ma „cięcia”. Ale wyniki jego drzewa unifikacji i pochodnych będą działały zgodnie z oczekiwaniami prologów, tj. Pełnym wsparciem dla zamykania przechodniego. Funkcje będą nadal rosły, takie jak obsługa tablic, cięcia, unifikacji wyrażeń.

Możesz użyć reguł „zapytań” do przodu „reaktywnych” lub „zapytań do tyłu” lub użyć ich razem; gdzie reguła reaktywna może połączyć się z wynikami zapytania.

Dodaliśmy jedną rzecz: nasze zapytania mogą zostać w pełni zmaterializowane jako reaktywny widok. Możesz więc wywołać zapytanie o zamknięcie tranzytowe, a ono pozostanie otwarte w sposób reaktywny i zareaguje na zmianę w podstawowych danych - bez konieczności ponownego odpytywania zapytania.

Zobacz sekcje Nowe i ważne, kiedy dodano „łączenie wstecz”: http://blog.athico.com/2012/05/drools-540final-released.html

Więc myślę, że twoje pytanie byłoby lepiej sformułowane, dlaczego miałbyś chcieć użyć czegokolwiek innego, skoro masz Hybrid Reasoning System jak Drools? http://blog.athico.com/2012/05/drools-54-artificial-intelligence.html

Mark Proctor
źródło
3

Zgadzam się z tobą, że Prolog ma większą moc niż Drools. Myślę jednak, że Drools jest atrakcyjny dla klienta korporacyjnego ze względu na fantazyjne narzędzia i integrację Drools z innymi popularnymi aplikacjami dla przedsiębiorstw. Myślę, że te reguły są następnie utrwalane w bazie danych, gdzie wiele silników Drools może z nich korzystać natychmiast.

Zmiana reguł w czasie wykonywania jest dość dynamicznym sposobem korzystania z silnika Drools i jest obsługiwana. Wierzę, że Prolog mógłby mieć podobny system, ale to nie istnieje AFAIK. Gdzie poszłyby te reguły lub edytowane reguły? potwierdzone w db programu? Po ponownym uruchomieniu reguły te zostaną utracone. Czy utrzymalibyśmy je we wspólnej bazie danych, a następnie w razie potrzeby włączylibyśmy do programu? Prolog może być użyteczny, ale Drools jest już dobrze zintegrowany ze stosem aplikacji korporacyjnych, więc po co szaleć (z wyjątkiem zabawy)?


„Zgadzam się z Tobą, że Prolog ma większą moc niż Drools. Ale myślę, że Drools jest atrakcyjny dla klienta korporacyjnego ze względu na fantazyjne narzędzia i integrację Drools z innymi popularnymi aplikacjami dla przedsiębiorstw”

Zgodnie z moim komentarzem powyżej, Drools implementuje teraz drzewa pochodnych oparte na celu w taki sam sposób, jak Prolog. Dalsze Droole mogą zrobić coś z tym drzewem deaktywacji, czego większość innych systemów Prologu nie może. Drools mogą zmaterializować drzewo pochodnych w widoku i otrzymywać reaktywne aktualizacje, gdy zmieniają się podstawowe warunki grouond.

DaveEdelstein
źródło
2
@ MarkProctor, ogólnie rzecz biorąc, rzeczy, które są zastrzeżeniami w przeciwieństwie do poprawek, powinny być generalnie dokonywane poprzez komentowanie i (potencjalnie) głosowanie w dół, w przeciwieństwie do edytowania treści odpowiedzi innej osoby.
Charles Duffy,
2

Drools zaczęło od oparcia się na CLIPS . CLIPS był starszym „ systemem produkcyjnym ” i, podobnie jak wszystkie systemy produkcyjne, jest systemem łączenia w przód. Wiele badań na temat Rete „pogrążyło się”, ponieważ pomysłodawca zaczął pracować dla firm, w których algorytmy były własnością intelektualną. Wersja 3 Rete jest własnością ludzi, którzy tworzą wyniki FICO , więc tak, jest to „sprawdzone w walce”.

Tangurena
źródło