Java Developers Day. Silniki reguł biznesowych



Podobne dokumenty
Modelowanie procesów biznesowych, przepływu pracy oraz reguł biznesowych na przykładzie Drools i jbpm lub Activiti

Programowanie w CLIPS

Programowanie współbieżne i rozproszone

Tworzenie raportów XML Publisher przy użyciu Data Templates

Automatyczne decyzje kredytowe, siła szybkiego reagowania i optymalizacji kosztów. Roman Tyszkowski ING Bank Śląski S.A. roman.tyszkowski@ingbank.

Analiza i projektowanie aplikacji Java

JBoss: MetaMatrix, Mobicents, Seam, Rools, ESB

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Cele. Definiowanie wyzwalaczy

Informatyzacja przedsiębiorstw WYKŁAD

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Informatyzacja przedsiębiorstw WYKŁAD

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL III TI 4 godziny tygodniowo (4x30 tygodni =120 godzin ),

Generated by Foxit PDF Creator Foxit Software For evaluation only. System Szablonów

Automatyczne generowanie kodu. 4Developers, 26 marca 2010

Data Mining podstawy analizy danych Część druga

Oracle PL/SQL. Paweł Rajba.

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

B jest globalnym pokryciem zbioru {d} wtedy i tylko wtedy, gdy {d} zależy od B i nie istnieje B T takie, że {d} zależy od B ;

Wykład 0 Informacje Podstawowe

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

Algorytmika i pseudoprogramowanie

Analiza i projektowanie oprogramowania. Analiza i projektowanie oprogramowania 1/32

OLAP i hurtownie danych c.d.

Metody Kompilacji Wykład 3

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Język programowania Scala / Grzegorz Balcerek. Wyd. 2. Poznań, cop Spis treści

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Programowanie Obiektowe GUI

COMARCH IT AKADEMIA. Programista VBA w Microsoft Excel (microbootcamp)

Język JAVA podstawy. wykład 2, część 1. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Bloki anonimowe w PL/SQL

Tabela wewnętrzna - definicja

AUREA BPM Oracle. TECNA Sp. z o.o. Strona 1 z 7

Wykład Ćwiczenia Laboratorium Projekt Seminarium

Systemy GIS Tworzenie zapytań w bazach danych

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Informatyzacja przedsiębiorstw WYKŁAD

Wzorce projektowe. dr inż. Marcin Pietroo

Oracle11g: Wprowadzenie do SQL

Ada-95. Dariusz Wawrzyniak

LK1: Wprowadzenie do MS Access Zakładanie bazy danych i tworzenie interfejsu użytkownika

15. Funkcje i procedury składowane PL/SQL

Mapowanie wybranych procesów obsługi klienta w sektorze. Dzień 1.

5-6. Struktura dokumentu html. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

Jeśli chcesz łatwo i szybko opanować podstawy C++, sięgnij po tę książkę.

Programowanie w języku C++ Grażyna Koba

Systemy baz danych w zarządzaniu przedsiębiorstwem. W poszukiwaniu rozwiązania problemu, najbardziej pomocna jest znajomość odpowiedzi

REFERAT PRACY DYPLOMOWEJ

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

PROLOG. Prolog. Programowanie, W.F. Clocksin, C.S. Mellish, HELION Prolog, język sztucznej inteligencji, Eugeniusz Gatnar, Katarzyna Stąpor, Wyd.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek

Języki programowania deklaratywnego

Nie przegrzewaj mózgu wrzuć dane do bazy!

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Import danych z plików Excel. (pracownicy, limity urlopowe i inne)

Programowanie Komponentowe WebAPI

Testowanie aplikacji. Kurs języka Ruby

Języki programowania zasady ich tworzenia

Warstwa integracji. wg. D.Alur, J.Crupi, D. Malks, Core J2EE. Wzorce projektowe.

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Programowanie MorphX Ax

Blaski i cienie wyzwalaczy w relacyjnych bazach danych. Mgr inż. Andrzej Ptasznik

Aplikacje Internetowe, Servlety, JSP i JDBC

Model semistrukturalny

Programowanie. Pascal - język programowania wysokiego poziomu. Klasa 2 Lekcja 9 PASCAL

ZMODYFIKOWANY Szczegółowy opis przedmiotu zamówienia

DSL w środowisku Eclipse. Grzegorz Białek Architekt techniczny, Sygnity S.A.

Visual C# dla zupełnie początkujących / Tony Gaddis. Wydanie IV. Gliwice, copyright Spis treści. Wstęp 11. Uwaga, czytelnicy 19

Języki skryptowe w programie Plans

Wspomaganie pracy w terenie za pomocą technologii BlackBerry MDS. (c) 2008 Grupa SPOT SJ

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

Programowanie obiektowe Object programming. Elektrotechnika II stopień (I stopień / II stopień) Ogólno akademicki (ogólno akademicki / praktyczny)

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Jarosław Żeliński analityk biznesowy, projektant systemów

Moduł mapowania danych

Zakres treści Czas. 2 Określenie charakteru i tematyki strony. Rodzaje witryn. Projekt graficzny witryny. Opracowanie skryptów

ECDL zaawansowany, moduł EXCEL

Pakiety są logicznymi zbiorami obiektów takich jak podprogramy, typy, zmienne, kursory, wyjątki.

Podstawy programowania. Wprowadzenie

Modelowanie i Programowanie Obiektowe

Instrukcja do ćwiczenia P4 Analiza semantyczna i generowanie kodu Język: Ada

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Systemy ekspertowe i ich zastosowania. Katarzyna Karp Marek Grabowski

Projekt i implementacja zintegrowanego środowiska programistycznego dla języka ROsWeL

SUM Edukacja Techniczno Informatyczna Języki i Systemy Programowania. Wykład 3. dr Artur Bartoszewski - WYKŁAD: Języki i Systemy Programowania,

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Program szkolenia VBA (VISUAL BASIC FOR APPLICATIONS) W EXCELU PODSTAWOWY.

Kwerenda. parametryczna, z polem wyliczeniowym, krzyżowa

Wstęp Budowa Serwlety JSP Podsumowanie. Tomcat. Kotwasiński. 1 grudnia 2008

Aplikacje RMI

Przypisywanie bibliotek w architekturze SAS

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

Spis treści 3. Spis treści

Wykład 4. Tablice. Pliki

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Spis treści. Przedmowa

Podstawy i języki programowania

Wprowadzenie do baz danych

Transkrypt:

Java Developers Day Silniki reguł biznesowych Mariusz Kaczor mariusz.kaczor@altkom.pl Łukasz Szandecki lukasz.szandecki@altkom.pl slide 1 Agenda Mamy problem.. Programowanie deklaratywne Drools przykład implementacji JSR-94 Algorytm RETE Tablica Decyzyjna Domain Specific Language Query Language slide 2 1

Co by było gdyby... Zlecenie Firma XYZ zamówiła program do sprzedaży produktu/usługi X różnego rodzaju klientom W ofercie znajuje się 'n' różnego rodzaju produktów, a w niedalekiej przyszłości planowane jest poszerzenie oferty W zależności od klienta mogą mu przysługiwać różne zniżki i promocje Promocje będą również zmienne w zależności od rodzaju sprzedawanego produktu/usługi slide 3 Co by było gdyby... W firmie programistycznej Po 'n' miesiącach pracy zbliża się koniec projektu... Aplikacja jest już prawie gotowa... Zespół wymęczony wyczekuje wypoczynku... W tym samym czasie u klienta Utwórzmy nowy rodzaj klienta biznesowego Stwórzmy promocje 50% w dół dla stałych klientów itd... Zastosujmy silniki reguł Ponownie w firmie Tworzymy oddzielny obiekt klienta biznesowego Modyfikujmy logikę aplikacji itd.. slide 4 2

Programowanie deklaratywne prolog Deklarujemy fakty: 'It is sunny'. 'It is summer'. 'It is hot' :- 'It is summer', 'It is sunny'. 'It is cold' :- 'It is winter', 'It is snowing'. Potem pytamy:?- 'It is hot'. Yes slide 5 Programowanie deklaratywne prolog cd. Deklarujemy fakty: max(a,b,b) :- A < B. max(a,b,a). Pytamy:?- max(3,4,m). M = 4; slide 6 3

Do czego przydają się silniki reguł? Gdzie stosować silniki reguł problem jest zbyt delikatny dla tradycyjnego programowania problem nie jest w pełni zrozumiały logika w systemie zmienia się często analiza biznesowa systemy eksperckie Gdzie sprawdzają się lepiej inne języki nie są odpowiednie do sterowania przepływem w małej mierza sprawdzają się przy zarządzaniu procesami slide 7 Specyfikacja JSR-94 silniki reguł wymagania dla silników reguł ograniczenia i limity stawiane przy kompilacji mechanizm dostępu do reguł z poziomu programu interfejs do komunikacji z silnikiem reguł slide 8 nie specyfikuje samego http://www.altkom.pl, języka tel. +48 reguł (22) 860 6060 4

Implementacje Drools JBoss ILog Rules JLisa JTP Mandarax OFBiz Rule Engine OpenLexicon TyRuBa... slide 9 Czym jest i jak wygląda Drools? Reguła w Drools jest to dwuczęściowa struktura, w której wyróżniamy część Lewostronną (LHS) i Prawostronną (RHS) Reguły w Drools mogą posiadać dodatkowe atrybuty Podstawowa składnia: rule <name> <attribute> <value> when <LHS> then <RHS> end slide 10 5

Drools Element LHS Left Hand Side, składa się z elementów warunkowych Kiedy fakty są umieszczane w pamięci roboczej, następuje próba dopasowania ich do wyrażeń elementów LHS W przypadku dopasowania faktu do wyrażenia LHS wykonywane są operacje zapisane w RHS Nie można wywoływać reguł Reguły uruchamiają się automatycznie w przypadku zmian pamięci roboczej slide 11 Drools przykład /*dla każdego klienta 50% zniżki*/ rule 50% w dol end when k : Klient() then System.out.println( Super promocja - zniżka 50% ); k.setdiscount(0.5); slide 12 6

Drools przykład /* klientów biznesowych traktujemy inaczej */ rule Klient biznesowy end when k : Klient(biznesowy==true) then System.out.println( Klient biznesowy ); k.setvat(0); k.setdiscount(0.75); slide 13 DEMO Przykład zapisu i programu wykorzystującego silnik reguł slide 14 7

Algorytm RETE Opracowany przez Dr. Charlesa Forgy w roku 1978-79 Algorytm wykorzystywany przez Drools w celu dopasowania obiektów do odpowiednich reguł Można go podzielić na dwie części: kompilacja reguł Drzewo RETE dla algorytmu wyliczania liczb Fibonacciego slide 15 wykonanie reguł Algorytm można przedstawić w postaci drzewa Algorytm RETE W algorytmie RETE wyróżniamy cztery podstawowe typy węzłów: root, 1-input, 2-input i terminal Szczegółowe typy węzłów to: root ObjectTypeNode AlphaNode LeftInputAdapterNode EvalNode JoinNode, NotNode (BetaNodes) TerminalNode slide 16 8

Algorytm RETE ObjectTypeNode root LeftInputNodeAdapter AlphaNode EvalNode JoinNode slide 17 Terminal NotNod e DEMO Generacja drzewa RETE w programie Eclipse slide 18 9

Kolejna zagwostka... W firmie programistycznej Program już oddany... Drools sprawuje się znakomicie... Teraz jedynie udzielamy supportu i wprowadzamy drobne poprawki... W tym samym czasie u klienta Skoro mamy już wsparcie to może by je wykorzystać... Wprowadźmy promocje z okazji kalendarzowego lata... Zmieńmy całkowicie definicje stałego klienta... itd... Ponownie w firmie Od trzech tygodni wprowadzamy jedynie modyfikacje do reguł... Przecież specjalista od marketingu z firmy XYZ znacznie lepiej zna swoje promocje... slide 19 Tablica decyzyjna Dokładna lecz wciąż zwięzłą forma reprezentaowania logiki warunkowej. Inny sposób wyrażania warunków logicznych Zapis reguł w arkuszach Wspierane formaty to: Excel i CSV W Drools na podstawie tabel generowane są zbiory reguł Nie polecane gdy: mało reguł reguły można opisać za pomocą zbioru wzorców slide 20 10

Tabele decyzyjne Tabela wymaga nagłówka i narzuca określone zasady Jeden wiersz w tabeli jedna reguła Kolumny warunki jakie obiekt ma spełnić lub akcje jakie należy podjąć Kolejność reguł nie ma znaczenia Arkusz może zawierać kilka tabel Na podstawie całej tabeli generowany jest jeden pakiet reguł slide 21 RuleSet - słowo kluczowe informujące o nazwie pakietu jaki ma być użyty w wygenerowanym pliku reguł RuleTable - słowo kluczowe informujące o początku tabeli decyzyjnej (pierwszy wiersz i pierwsza kolumna) CONDITION, ACTION informacje o typie danych w komórkach (LHS lub RHS) Opcjonalny element informujący o typie obiektu. Jeśli nie jest podawany należy zostawić pusty wiersz W przypadku podania typu obiektu w poprzednim wierszu, dane w komórce określają pola składowe które będą porównywane Wartości które będą porównywane slide 22 11

DEMO Tabela decyzyjna w działaniu slide 23 Łatwe podawanie reguł, czyli DSL Domain Specific Languages Zapis DSL tworzenie własnego języka zapisu reguł i mapowanie tak zapisanych reguł na standardowy zapis DSL warstwa pośrednia pomiędzy twórcami reguł, a silnikiem reguł Zapis reguł z wykorzystaniem DSL pozwala na utrzymanie reguł przez personel nie techniczny Nie ma wpływu na kształt reguł Tekst DSL jest tłumaczony na etapie kompilacji w język zrozumiały dla silnika reguł slide 24 12

Język DSL Reguły DSL są zapisywane w zwykłych plikach tekstowych Na początku reguły występuje [when] lub [then], które określają typ reguły (LHS lub RHS) Przykład: [when] There is a Person with name of {name} =Person(name= {name} ) [then] Log {message} =System.out.println( {message} ); Może utrudniać proces debugowania dla osób początkujących slide 25 Język DSL przykład Plik DSL: [when]there is a Person with=person() [when]-age is less then {age}=age<{age} [when]-name is {name}=name=={name} [when]-lives in {country}=country=={country} Wykorzystanie w pliku reguł: There is a Person with -age is less then 20 -lives in 'Poland' There is a Person with -name is 'Jan' slide 26 13

Język DSL przykład Pliki DSL mogą również mapować wyrażenia warunkowe, przez co jeszcze bardziej ułatwiają zapisywanie reguł. Zapis reguły There is a Person name Jan who lives in Poland And There is a Person name Maria which is 27 years old Or Person has an Account slide 27 DEMO Przykład zapisu i programu wykorzystującego silnik reguł, wykorzystującego DSL slide 28 14

Query Query zapytania składające się tylko ze struktury LHS Nie posiadają bloków when oraz then Służą do odpytania pamięci roboczej w poszukiwaniu obiektów spełniających podane kryteria Wykorzystywane są w kodzie programu i zwracają obiekty spełniające parametry zapytania slide 29 Query - przykład W pliku reguł: query car over the age of 10 car : Car ( age > 10 ) end W kodzie programu: QueryResult result = workingmemory.getqueryresult( car over the age of 10 ) for (Iterator iter = result.iterator; iter.hasnext();)... slide 30 15

DEMO Query w działaniu slide 31 Pytania slide 32 16

Dziękujemy za uwagę. Mariusz Kaczor mariusz.kaczor@altkom.pl Łukasz Szandecki lukasz.szandecki@altkom. pl slide 33 17