La règle de Systèmes d'Évaluation et de “pas exact” correspond à (ej:x < 3000)

StackOverflow https://stackoverflow.com/questions/1471712

  •  16-09-2019
  •  | 
  •  

Question

Je suis en train de concevoir une règle d'évaluation du système qui doivent gérer un fait de base de données et de certaines règles sur la base de données.Nous avons actuellement un version modifiée de RETE qui fonctionne en partie droite avec quelques inconvénients.

Le problème est que les règles ne limite pas aux correspondances exactes, mais elles doivent également prendre en charge l'inégalité (comme en moins) et d'autres types de flous calculs.

Exemples supposons que vous avez cette faits

(Salaire De Jean-58000) (Salaire Sara 78000) L'Employé (Jean) (Patron De La Lep) (Marié John Sara) (Œuvres De John Stackoverflow)

vous pourriez avoir une règle qui dit que:

(Salaire ?w < 60000) /\ (Marié ?w) /\ (Fonctionne ?w Stackoverflow) ==> Quel que soit

Évidemment, le résultat sera le déclenchement de la règle avec une ?w la valeur de "John", mais la façon dont nous le faisons, c'est maintenant par boucle creux de chaque élément dans la base de faits qui correspond au début de la première expression (Salaire X X) et ensuite faire la comparaison et de stocker les résultats dans la base de faits soi-même.Par exemple, après le premier passage, vous aurez l'élément suivant ajoutés à la base de faits:

(Salaire De Jean-58000 < 60000)

et une fois que c'est fait vous effectuez le rejoint sur l'habitude RETE façon.De cette façon, il prend beaucoup d'espace dans la base de faits, spécialement parce que la règle peut se référer à n'importe quel nombre et donc, vous avez ceux qui sont "calculés" des faits, aussi longtemps que la règle est active.

D'autre part, vous pouvez appliquer plusieurs règles à la première expression et vous pouvez continuer à utiliser le standard de l'algorithme de mise en correspondance pour déclencher les règles.

Quelqu'un sait-il de tous les modèles, des références ou des méthodes qui gèrent ce genre de comportement?L'habitude des SAUTS, des FRIANDISES, des RETE algorithmes seulement la poignée (autant que je sache) "exacte" de la correspondance.

Par la voie, c'est le C# .NET.

Était-ce utile?

La solution

CLIPS a pris en charge les éléments conditionnels pour aussi longtemps que je suis au courant de ça - au moins 15 ans.Découvrez l' de base guide de programmation pour les CLIPS et ce CLIPS tutoriel pour des exemples.Vous pouvez regarder (ou modifier) les clips source gratuit.

CLIPS utilise le préfixe de la notation, de sorte que votre exemple conditionnelle pourrait ressembler à:

(defrule fat-boy
    (person-data (name ?name) (weight ?weight))
    (test (> ?weight 100))
=>
    (printout t ?name " weighs " ?weight " kg! " crlf)
)

Autres conseils

Pour autant que je comprends le problème, toutes les règles floues divisent valeur entière ou à virgule flottante varie en un nombre limité de sous-domaines. Par exemple, si un salaire est comparé à 58000, 60000, 78000 valeurs, vous avez 4 gammes:. <58000, 58000-60000, 60000-78000,> 78000

Si tel est le cas, peut-être vous pouvez redéfinir vos variables à des nombres entiers qui sont soit 0,1,2,3, et ainsi convertir vos règles d'inégalité des règles d'égalité.

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