3. De quoi allons nous parler?
⦿ Quand le moteur de règles vous sauve ?
⦿ Et quand il ne vous sauvera pas…
⦿ Comment écrire un moteur?
⦿ Comment écrire des règles?
⦿ Au delà des règles standards?
2012-07-02 Soat: Drools Expert 3
8. Quand s’en servir?
⦿ Le rêve du BA autonome:
⦿ Change oriented Application
⦿ IT pour le socle, BA pour les règles
⦿ Adapté aux gros volumes:
⦿ Algorithme de RETE
⦿ Peu de modifications de faits
⦿ Exemple: AAPT
⦿ Développé par Sungard
⦿ Validation Back office
2012-07-02 Soat: Drools Expert 8
9. Quand ne pas s’en servir?
⦿ Peu de faits peu de règles
⦿ Quand chaque octet compte
⦿ Quand les faits changent
⦿ Quand les règles interagissent les unes avec
les autres (working memory)
⦿ Quand les seuils sont stratégiques
⦿ NE PAS utiliser les DSL
⦿ NE PAS utiliser la version .Net
2012-07-02 Soat: Drools Expert 9
11. Avengers: des gens bien
⦿ Données de référentiel:
⦿ Valider les informations
⦿ Ajouter une erreur fonctionnelle
⦿ Une initiative éthique:
⦿ Prendre la moyenne M des salaires
⦿ Pour chaque personne P
⦿ Si le salaire est inférieur à 0,5M
⦿ Si le salaire est supérieur à 2M
⦿ Ajouter une erreur fonctionnelle
2012-07-02 Soat: Drools Expert 11
13. Première étape: Ecrire le moteur
⦿ KnowledgeBuilder:
⦿ Ajouter les règles
⦿ Vérifier la compilation
⦿ KnowledgeBase:
⦿ Définir les packages à exécuter
⦿ Les sessions:
⦿ Stateless: un seul déclenchement
⦿ Statefull: les faits restent en mémoire
2012-07-02 Soat: Drools Expert 13
14. Deuxième étape: coder les règles
⦿ Import
⦿ Déclarations et global
⦿ LHS:
⦿ Ne pas penser en terme de boucles
⦿ $var : Class( conditions, $var: attribute)
⦿ RHS:
⦿ Java
⦿ Accès à la working memory
⦿ Fonctions
⦿ Utilisation de function
2012-07-02 Soat: Drools Expert 14
15. Sélection des éléments
⦿ Moyens:
⦿ Class (conditions)
⦿ Eval et fonctions externes
⦿ Autres utilisations:
⦿ Calcul de moyenne
⦿ Construction d’ensembles
⦿ Vérifier qu’une règle n’a pas été exécutée
2012-07-02 Soat: Drools Expert 15
16. Interfaces avec les règles
⦿ Utilisation de global:
⦿ Objets déclarés dans la knowledge base
⦿ Récupérables après exécution
⦿ Passer des faits en paramètres:
⦿ Déclarer des structures:
⦿ POJO utilisables
⦿ Manipulables avec FactType
2012-07-02 Soat: Drools Expert 16
17. Utilisation de la working memory
⦿ Mémoire partagée:
⦿ Chaque règle peut l’utiliser
⦿ On utilise un FactHandler, pas un objet
⦿ Arbre de RETE:
⦿ Alpha node. Ex: getName().equals(« Stark »)
⦿ Beta node: a.getName().equals(b.getName())
⦿ Global node: not exists
⦿ Reconstruit à chaque modification de la WM
2012-07-02 Soat: Drools Expert 17
18. From
⦿ From accumulate: le couteau suisse
⦿ Conditions sur une seule classe
⦿ Initialisations
⦿ Boucle for
⦿ Retract
⦿ Result
⦿ Autres from
⦿ From collect, from
2012-07-02 Soat: Drools Expert 18
19. Les pièges à considérer
⦿ Boucler:
⦿ Ajouter un fait en WM
⦿ Risque de boucle au delete
⦿ Coder deux règles (si alors sinon)
⦿ Prendre l’ensemble des faits qui matchent
⦿ Dans le then, séparer les cas
⦿ Attention: des surprises avec l’Agenda
⦿ Utiliser la salience
2012-07-02 Soat: Drools Expert 19
21. Les types de noeuds
⦿ Les nœuds alpha
⦿ Sélection de faits individuels
⦿ Object Type Node: Choisir sa classe
⦿ Hiérarchie de classes par condition
⦿ Les nœuds Beta:
⦿ Nœuds de jointure
⦿ Exemple: Person(name == p.name)
⦿ Memory Node:
⦿ Alpha: référence vers les faits qui matchent
⦿ Beta: référence vers les tuples qui matchent
2012-07-02 Soat: Drools Expert 21
22. RETE: le graphe des noeuds
2012-07-02 Soat: Drools Expert 22
23. Attendez, si vous êtes encore
réveillés, il reste la logique floue
2012-07-02 Soat: Drools Expert 23
25. Utilisation de la logique floue
⦿ Exemple: Validation d’un référentiel BO
⦿ Evolution du forex EUR/USD
⦿ Règle: ramené sur 5j, évolution < 1,0%
⦿ Quelle différence entre 0,99 et 1,01?
⦿ Exemple: stratégie momentum
⦿ Vendre les titres qui ont un faible rendement
depuis longtemps
⦿ Acheter les titres ayant un rendement élevé
depuis peu de temps
2012-07-02 Soat: Drools Expert 25