Ejemplo n.º 1
0
    public void Solve()
    {
        // On fait une copie des règle existantes
        // + création d'une base de faits vierge
        bool      moreRules   = true;
        RulesBase usableRules = new RulesBase();

        usableRules.Rules = new List <Rule>(rDB.Rules);
        fDB.Clear();

        // Tant qu'il existe des règles à appliquer
        while (moreRules)
        {
            // Cherche une règle à appeler
            Tuple <Rule, int> t = FindUsableRule(usableRules);

            if (t != null)
            {
                // Applique la règle et ajoute le nouveau fait
                // à la base
                IFact newFact = t.Item1.Conclusion;
                newFact.SetLevel(t.Item2 + 1);
                fDB.AddFact(newFact);

                // Enlève la règle des règles applicables
                usableRules.Remove(t.Item1);
            }
            else
            {
                // PLus de règles possible : on s'arrête
                moreRules = false;
            }
        }

        // Ecriture du résultat
        ihm.PrintFacts(fDB.Facts);
    }
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);
        }