Question

J'essaie de construire un système basé sur des règles pour interpréter les données. Cependant, j'ai du mal à choisir un moyen de construire la logique de stockage et d'interprétation des règles.

Actuellement, il existe une structure de base de données assez complexe, mais qui traitera de tous les aspects du stockage des données de règles. L'idée est que le système pourra imiter la manière dont MS Outlook permet à un utilisateur d'ajouter des règles.

Mes problèmes sont les suivants:

  1. Quel modèle devrais-je utiliser pour stocker ces règles à l'intérieur d'objets?
  2. Devrais-je utiliser eval () ou une orientation d'objet appropriée pour exécuter les règles?

Un exemple de règle pourrait être:

  

Le chien doit avoir un collier dans la zone Park

.

Où chaque élément (chien, élément essentiel, collier, zone, parc) est un élément logique à interpréter.

Tous les conseils généraux aux questions ci-dessus sont très appréciés!

Était-ce utile?

La solution

Je n'ai jamais implémenté un système comme celui que vous décrivez dans un "monde réel". contexte, mais j’ai beaucoup joué avec eux comme projets de loisir. Mon approche préférée consiste à utiliser un langage logique tel que Prolog pour faire des assertions et les vérifier. Vous auriez des assertions sur l'emplacement du parc, sur ce que signifie avoir quelque chose, sur ce qu'est un chien, puis vous établissez une règle à peu près identique à votre exemple entre parenthèses au bas de votre message. Je suis désolé que mon Prolog soit trop rouillé pour vous donner un exemple utile ... Je joue depuis trop longtemps avec les langages d'inférence développés localement.

Il existe des interprètes Prolog disponibles pour l'intégration dans la plupart des langues, bien que je ne sois pas sûr de PHP5. Vous pouvez créer ensemble quelque chose de simple qui inférence à chaîne sur les structures de données de règles de votre propre création assez rapidement, si vous ne trouvez pas d’interprète Prolog. Vous pourriez être intéressé par ces notes sur l'inférence automatisée.

Autres conseils

Cette réponse est probablement trop triviale pour vous, mais je viens de penser à la façon de résoudre un problème de ce type dans mon projet actuel, qui est une application Zend Framework. J'ai pensé aux filtres et aux chaînes de validation utilisés par ZF. Je suppose que vous avez un nombre fini d'objets d'entrée possibles, un nombre fini de conditions / contraintes et un nombre fini d'actions. Dans ce cas, vous devez d'abord instancier un objet et l'exécuter sur une chaîne de conditions (validateurs), si toutes les conditions sont remplies, vous exécutez l'objet sur actionChain. Ici, je devrais probablement mettre en place un système de priorité d’action, car certaines actions doivent être réalisées avant d’autres. Par exemple, "envoyer une notification" puis "supprimer" l'objet en question. Donc, dans ZF, je construirais un validateur personnalisé pour chaque condition / contrainte. Je ne crois pas que le système Outlook soit très intelligent, ce qui signifie que les validateurs ne sont pas très génériques.

Dans la base de données, il pourrait y avoir un tableau pour les règles réelles, un pour les conditions et un pour les actions. Ensuite, il pourrait y avoir deux tables plusieurs à plusieurs liant la règle à toutes les conditions et actions requises.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top