Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 public Motor(HumanInterface _ihm)
 {
     ihm = _ihm;
     fDB = new FactBase();
     rDB = new RulesBase();
 }