private Tuple <Rule, int> FindUsableRule(RulesBase rBase) { foreach (Rule r in rBase.Rules) { int level = CanApply(r); if (level != -1) { return(Tuple.Create(r, level)); } } return(null); }
public void Solve() { // Se realiza una copia de las reglas existentes // + creación de una base de hechos vacía bool moreRules = true; RulesBase usableRules = new RulesBase(); usableRules.Rules = new List <Rule>(rDB.Rules); fDB.Clear(); // Mientras existan reglas para aplicar while (moreRules) { //Busca una regla para aplicar Tuple <Rule, int> t = FindUsableRule(usableRules); if (t != null) { // Aplica la regla y agrega el nuevo hecho // a la base IFact newFact = t.Item1.Conclusion; newFact.SetLevel(t.Item2 + 1); fDB.AddFact(newFact); // Elimina la regla de las reglas aplicables usableRules.Remove(t.Item1); } else { // Si no hay más reglas posibles: se detiene moreRules = false; } } // Esclibe el resultado ihm.PrintFacts(fDB.Facts); }
public Motor(HumanInterface _ihm) { ihm = _ihm; fDB = new FactBase(); rDB = new RulesBase(); }