private int CanApply(Rule r) { int maxLevel = -1; foreach (IFact f in r.Premises) { IFact foundFact = fDB.Search(f.Name); if (foundFact == null) { if (f.Question != null) { foundFact = FactFactory.Fact(f, this); fDB.AddFact(foundFact); maxLevel = Math.Max(maxLevel, 0); } else { return(-1); } } if (!foundFact.Value.Equals(f.Value)) { return(-1); } else { maxLevel = Math.Max(maxLevel, foundFact.Level); } } return(maxLevel); }
public void AddRule(string ruleStr) { // Séparation nom : règle String[] splitName = ruleStr.Split(new String[] { " : " }, StringSplitOptions.RemoveEmptyEntries); if (splitName.Length == 2) { String name = splitName[0]; // Séparation premisses THEN conclusion String[] splitPremConcl = splitName[1].Split(new String[] { "IF ", ", ", " THEN " }, StringSplitOptions.RemoveEmptyEntries); if (splitPremConcl.Length == 2) { // Lecture des premisses List <IFact> premises = new List <IFact>(); String[] premisesStr = splitPremConcl[0].Split(new String[] { " AND " }, StringSplitOptions.RemoveEmptyEntries); foreach (String prem in premisesStr) { IFact premise = FactFactory.Fact(prem); premises.Add(premise); } // Lecture de la conclusion String conclusionStr = splitPremConcl[1].Trim(); IFact conclusion = FactFactory.Fact(conclusionStr); // Création de la règle et ajout rDB.AddRule(new Rule(name, premises, conclusion)); } } }
private int CanApply(Rule r) { int maxlevel = -1; // On vérifie si chaque prémises est vraie foreach (IFact f in r.Premises) { IFact foundFact = fDB.Search(f.Name()); if (foundFact == null) { // Ce fait n'existe pas dans la base actuellement if (f.Question() != null) { // On le demande à l'utilisateur // et on l'ajoute en base foundFact = FactFactory.Fact(f, this); maxlevel = Math.Max(maxlevel, 0); } else { // On sait que la régle ne s'applique pas return(-1); } } // On a un fait en base, on vérfie sa valeur if (!foundFact.Value().Equals(f.Value())) { // Elle ne correspond pas return(-1); } else { // Elle correspond maxlevel = Math.Max(maxlevel, foundFact.Level()); } } return(maxlevel); }
public void AddRule(string ruleStr) { string[] splitName = ruleStr.Split(new string[] { " : " }, StringSplitOptions.RemoveEmptyEntries); if (splitName.Length == 2) { string name = splitName[0]; string[] splitPremConcl = splitName[1].Split(new string[] { "IF", " THEN " }, StringSplitOptions.RemoveEmptyEntries); if (splitPremConcl.Length == 2) { List <IFact> premises = new List <IFact>(); string[] premisesStr = splitPremConcl[0].Split(new string[] { " AND " }, StringSplitOptions.RemoveEmptyEntries); foreach (string prem in premisesStr) { IFact premise = FactFactory.Fact(prem); premises.Add(premise); } string conclStr = splitPremConcl[1].Trim(); IFact conclusion = FactFactory.Fact(conclStr); rDB.Add(new Rule(name, premises, conclusion)); } } }