2010-01-24 6 views
9

Je travaille sur un moteur d'évaluation de moteur de décision/règle. Par exemple:Quels modèles/modèles fonctionnent le mieux pour développer un moteur de règles/décisions

Entrée: Client et toutes les infractions effectuées par le client

Sortie: Conséquences des infractions

Un cas de l'échantillon serait:

Entrée: Client (Jhonny Chimpo, 999 -00 à 1111), délits (fenêtre Broke, patron giflé, chef d'équipe coups de pied à l'aine)

de sortie: Obtient feuillet rose

Ainsi, le morceau de code que je veux écrire évalue différentes infractions en fonction des règles pour chaque infraction et infraction combinée. Le code actuel est juste un labyrinthe d'instructions if et else. Je suis sûr que de tels problèmes d'affaires sont communs. Quel modèle de conception/d'entreprise est habituellement utilisé pour résoudre un problème comme celui-ci?

Est-ce le modèle de spécification? Je veux que le code soit ouvert pour l'extension, propre et flexible.

+0

Voulez-vous en écrire un? Vous pouvez jeter un oeil à Jess http://www.jessrules.com/ – Joe

Répondre

3

Fondamentalement, les règles métier ressemblent

forall rules: 
    if <condition> then doAction(); 

Que diriez-vous de catégoriser toutes les infractions par gravité en utilisant des scores, peut-être un bonus supplémentaire pour les fréquents "mal-d oers », certaines infractions peuvent être frappées de prescription et tout ce qui est requis.

Puis un brouillon d'un algorithme pourrait être:

  • Somme de toutes les partitions d'un client (pondéré)
  • Comparer à un maximum

Ce serait directement en utilisant l'avant des structures de données au lieu de beaucoup (peut-être profondément imbriqué) si ... alors ... des choses.

+0

le code actuel que nous avons est labyrinthe des boucles if-else – Perpetualcoder

-1

Je pense que vous essayez de développer un système expert. Vous pouvez vérifier le terme, puis vérifier les langages de programmation appropriés comme prologue, etc.

+0

Je n'essaie pas de construire un système expert. – Perpetualcoder

+2

@Perpetualcoder effectivement, ce que vous avez énuméré est précisément un système expert. –

+0

n'est pas un système expert aussi une machine d'apprentissage pour faire un travail spécifique? – Perpetualcoder

1

Je ne suis pas sûr que les réponses ci-dessus aient été si utiles. J'ai écrit des composants similaires avec expression trees. Vous pouvez construire des expressions lambda qui représentent des prédicats, les compiler et les exécuter, toutes dynamiquement, puis déclencher une action en réponse. Cette approche est puissante, flexible et élimine toute l'horreur if/else (ce qui n'est certainement pas le chemin à parcourir).

Cependant, ce dont vous parlez vraiment est la programmation logique. Il existe de nombreuses implémentations de Prolog sur .NET.Prolog est un langage basé sur la logique, utilisé beaucoup pour les applications IA, qui commence à devenir sérieusement puissant une fois que vous avez votre tête autour de son paradigme.

Jetez un oeil à certains d'entre eux ..

+0

c'est quelque chose de vraiment intéressant. Je ne suis pas un fan de moteurs de règles commerciales là-bas non plus – Perpetualcoder

+0

mais ..:) ... Je ne suis pas un fan de Prolog non plus .. je viens de le trouver incroyable :) – Perpetualcoder

+0

vérifier les arbres d'expression. – flesh

0

Je pense que tout algorithme RETE basé Rule Engine fonctionnerait pour ton cas. Vous pouvez essayer les baverots.