IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Wildfly/JBoss Java Discussion :

[Drools] Changer de règles "en cours de route"


Sujet :

Wildfly/JBoss Java

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Drools] Changer de règles "en cours de route"
    Bonjour,

    j'expérimente un peu en ce moment Drools. Je ne suis pas très fier de ce que j'ai fait pour l'instant, mais le sujet m'intéresse.
    J'ai écrit (en fait, modifié des règles existantes) pour réagir en fonction du déplacement d'un utilisateur, pour lui suggérer des endroits où se rendre.

    Localement, ça fonctionne assez bien. Par localement, j'entends que l'utilisateur est déjà dans une "zone" où des points d'intérêt sont susceptibles de lui faire changer son trajet.

    J'aurais aimé étendre le système, en ayant plusieurs zones. L'utilisateur aurait donc autant de jeu de règles que de zones traversées.
    J'ai bien changé de kession en unmarshallant une ksession de la zone quand l'utilisateur s'en approche, mais il doit y avoir plus élégant.

    J'imagine que je n'ai pas été très clair...
    Si quelqu'un comprend quelque chose à mon charabia, j'apporterai des précisions avec plaisir.

    Merci.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    Par défaut
    Citation Envoyé par tchakapoum Voir le message
    Si quelqu'un comprend quelque chose à mon charabia, j'apporterai des précisions avec plaisir.

    Merci.

    Comme d'autres l'ont dit avant moi, JE VOUS AI COMPRIS!

    En fait, ton knowledge builder, son boulot, c'est de compiler les règles. Toutes les règles. Ta knowledge base, tu peux y mettre les packages que tu veux, depuis le knowledge builder. Son travail, c'est de déclencher des règles sur des faits.

    Je ne sais pas si c'est pertinent pour ton problème, mais dans l'idée, tu peux créer une knowledge base par zone. En fonction de celle où tu es, tu utilises la bonne knowledge base.

    Maintenant, pourquoi ne pas commencer ta règle par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    rule "test zone"
    when
      User (zone == "nom de la zone de l'utilisateur")
      ...
      reste de la règle
      ...
    then 
      action
    end
    les raisonnables ont duré, les passionné-e-s ont vécu

  3. #3
    Nouveau membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Points : 27
    Points
    27
    Par défaut
    Salut,
    Je ne suis pas sûr d'avoir saisi le détail de ce que tu veux faire, en particulier je me pose une question :
    Est-ce que tu veux changer toutes les règles lors d'un changement de zone ou seulement un sous ensemble?
    Car si c'est toutes les règles, pourquoi ne pas détruire le première ksession et en recréer une autre? (cf. réponse de rmaker).

    Dans le cas ou des faits/évennèments d'une zone A impacteraitent ceux d'une zone B, cela ne marcherait pas, et il faudrait effectivement écrire un filtre dans tes règles (cf. réponse de rmaker).

    Bref, il me semble qu'il est important de préciser dans quel cas tu te trouves. Faire des "Cas d'Usage" , car cela impactera l'écriture des règles.

  4. #4
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci pour vos réponses.
    En fait, je ne souhaite pas changer toutes les règles au passage dans une zone, mais en ajouter, qui seront désactivées à la sortie de la zone.
    En gros, je souhaiterais changer une partie des règles à chaque changement de zone.
    Les événements ou faits d'une zone A n'impactent pas une zone B, mais peuvent impacter les règles plus générales.

    Je n'ai pas fait de cas d'usages depuis le siècle dernier mais je vais essayer de transcrire ça dans un exemple ancré dans le réel.

    On peut imaginer qu'un utilisateur aille de Lille à Paris à vélo avec un parcours libre, mais contenant des "checkpoints". Une espèce de "rallye" en somme.

    Il est muni d'un dispositif (smartphone ou autre) qui collecte son positionnement, le guide vers le prochain checkpoint, sans oublier le but final qui est Paris.
    Les règles globales l'aident à aller vers Paris et les différents checkpoints, tout en l'alertant sur la distance restant à parcourir, et en informant les responsables de son avancée.

    A chaque entrée dans une zone, j'aimerais ajouter des règles qui permettront de lui suggérer d'aller voir un point d'intérêt, d'aller se restaurer, ou même d'aller "dépanner" un autre participant qui ne se déplace plus depuis un moment. Ces règles, ou au moins les faits, seraient spécifiques à chaque zone.

    J'espère avoir été un peu plus clair.
    Merci encore.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    Par défaut
    Citation Envoyé par tchakapoum Voir le message
    Merci pour vos réponses.
    En fait, je ne souhaite pas changer toutes les règles au passage dans une zone, mais en ajouter, qui seront désactivées à la sortie de la zone.
    Je réagis juste là dessus pour te dire d'être pragmatique. Le test sur la zone dans ta règle n'est pas cher à mettre en place et c'est la solution la plus simple. Ce sera drools et pas toi qui gèrera la sortie de zone. En le mettant en première condition, le RETE va commencer par ce noeud et donc, va être plus efficace.

    Ensuite, quand tu connaitras mieux drools, tu auras une idée plus efficace... Mais en l'état, c'est dommage d'être ralenti pour çà. En tous cas, j'aime beaucoup ton projet
    les raisonnables ont duré, les passionné-e-s ont vécu

  6. #6
    Nouveau membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Points : 27
    Points
    27
    Par défaut
    Ok, je vois mieux ce que tu veux faire

    En gros, j'imagine que tu as des régles génériques (qui s'exécutent indépendamment de la zone) et des règles spécifiques à chaque zone.

    Je dirais que le plus simple c'est de faire comme rmaker te l'a suggéré : mettre des filtres dans tes règles.

    Peut être te poses-tu le problème du passage à l'échelle (ou "scalabilité" pour les franglish) : si tu as 1000 zones, ça te ferait 1000 règles ou plus j'imagine. Là, je ne sais trop quoi te suggérer, car il me semble que Drools ne permet pas de décharger dynamiquement des règles. Ce qui est logique, vu les problèmes que ça pourrait poser pour garder la cohérence de l'automate du moteur de règles.

    Cela dit, d'après ce que vend Drools, il me semble qu'avec 1000 règles, le moteur tient bien la charge. Donc tout dépend du nombre de zone que tu penses devoir gérer.

    EDIT : grillé par rmaker, mais je plussoie

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci à tous, je vais essayer d'avancer là dessus.

  8. #8
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    Par défaut
    Citation Envoyé par W.dev Voir le message
    il me semble que Drools ne permet pas de décharger dynamiquement des règles.
    En fait, si. La méthode removeKnowledgePackage(String packageName) de KnowledgeBase. C'est tout l'intérêt de cette classe: ajouter ou supprimer dynamiquement des règles via les packages. Maintenant, évidemment, tu prends un méchant coup de bambou à la reconstruction de l'arbre de RETE...
    les raisonnables ont duré, les passionné-e-s ont vécu

  9. #9
    Nouveau membre du Club
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2010
    Messages : 8
    Points : 27
    Points
    27
    Par défaut
    Citation Envoyé par rmaker Voir le message
    En fait, si. La méthode removeKnowledgePackage(String packageName) de KnowledgeBase. C'est tout l'intérêt de cette classe: ajouter ou supprimer dynamiquement des règles via les packages. Maintenant, évidemment, tu prends un méchant coup de bambou à la reconstruction de l'arbre de RETE...
    Pas mal comme fonctionnalité, je ne connaissais pas. A utiliser avec prudence j'imagine du coup (ou en sachant ce que l'on fait, si ça a un sens ).

    Merci pour le complément d'information.

  10. #10
    Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci de votre aide, j'ai réussi à faire à peu près ce que je voulais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Jboss Rules - Drools] Création de règles
    Par Guillaume.D dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 05/10/2010, 12h54
  2. [Drools] Déclenchement des règles
    Par ego dans le forum Wildfly/JBoss
    Réponses: 0
    Dernier message: 17/11/2009, 23h48
  3. [Drools] rejoue des règles
    Par ichpa dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 28/07/2009, 12h40
  4. Changer le heap space en cours d'exécution
    Par luckyvae dans le forum Général Java
    Réponses: 3
    Dernier message: 05/12/2007, 15h07
  5. [t-sql] changer de BD en cours de route
    Par olivc dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/06/2005, 12h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo