2012-07-02 Soat: Drools Expert 1
2012-07-02 Soat: Drools Expert 2
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
IA: symboliste VS connexioniste
⦿Symboliste:
⦿ Raisonnement logique
⦿ Apogée: systèmes expert
⦿ Nuance: la logique floue
⦿Connexioniste:
⦿ Emergence
⦿ Réseaux de neurones
2012-07-02 Soat: Drools Expert 4
JBoss Drools
⦿Drools Expert: le moteur
⦿Drools Guvnor: le BRMS
⦿Drools jBPM: ordonnancer les packages
⦿Drools Fusion: gestion des événements
⦿Drools Planner: planifier (NP Complet donc heuristique)
2012-07-02 Soat: Drools Expert 5
JBoss Drools
2012-07-02 Soat: Drools Expert 6
JBoss Drools
2012-07-02 Soat: Drools Expert 7
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
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
Présentation de l’application
2012-07-02 Soat: Drools Expert 10
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
Première étape: Ecrire le moteur
2012-07-02 Soat: Drools Expert 12
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
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
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
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
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
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
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
A suivre… L’arbre de Rete
2012-07-02 Soat: Drools Expert 20
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
RETE: le graphe des noeuds
2012-07-02 Soat: Drools Expert 22
Attendez, si vous êtes encore réveillés, il reste la logique floue
2012-07-02 Soat: Drools Expert 23
D’autres façons de penser
2012-07-02 Soat: Drools expert 24
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
Les contrôleurs flous
2012-07-02 Soat: Drools Expert 26
⦿ Source: Franck Dernoncourt (developpez.com)
Fuzzification: la partie difficile
⦿Trouver les fonctions de fuzzyfication idoines
⦿Solutions:
⦿ Ranking, modèles
⦿ Apprentissage (réseaux de neurones)
⦿Exemple:
2012-07-02 Soat: Drools Expert 27
Raisonner en logique floue
2012-07-02Soat: Drools Expert. Source: Franck
Dernoncourt, developpez.com28
Merci
2012-07-02 Soat: Drools Expert 29