Exemplo n.º 1
0
        static void Main(string[] args)
        {
            Engine e = new Engine();

            RuleInferenceEngine rie = e.GetInferenceEngine();

            rie.ClearFacts();

            List <Clause> unproved_conditions = new List <Clause>();

            Clause conclusion = null;

            while (conclusion == null)
            {
                conclusion = rie.Infer("Advice", unproved_conditions);

                if (conclusion == null)
                {
                    if (unproved_conditions.Count == 0)
                    {
                        break;
                    }

                    Clause question = unproved_conditions[0];

                    unproved_conditions.Clear();

                    String value;

                    if (question.Variable == "What was your prior education?")
                    {
                        Console.WriteLine(question.Variable);

                        value = Console.ReadLine().ToLower();
                        value = e.prior_educations.Any(pe => pe.Contains(value)).ToString().ToLower();
                    }
                    else
                    {
                        Console.WriteLine(question.Variable);

                        value = Console.ReadLine();
                    }

                    rie.AddFact(new IsClause(question.Variable, value));
                }
            }

            Console.WriteLine("");
            Console.WriteLine("Conclusion: " + conclusion);
            Console.ReadKey();
        }
Exemplo n.º 2
0
        public RuleInferenceEngine GetInferenceEngine()
        {
            RuleInferenceEngine rie = new RuleInferenceEngine();

            Rule rule = new Rule("1");

            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "positive"));
            rie.AddRule(rule);

            rule = new Rule("2");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "positive"));
            rie.AddRule(rule);

            rule = new Rule("3");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "positive"));
            rie.AddRule(rule);

            rule = new Rule("4");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "positive"));
            rie.AddRule(rule);

            rule = new Rule("5");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "doubt"));
            rie.AddRule(rule);

            rule = new Rule("6");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "doubt"));
            rie.AddRule(rule);

            rule = new Rule("7");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "negative"));
            rie.AddRule(rule);

            rule = new Rule("8");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "negative"));
            rie.AddRule(rule);

            rule = new Rule("9");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "negative"));
            rie.AddRule(rule);

            rule = new Rule("9");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "negative"));
            rie.AddRule(rule);

            rule = new Rule("10");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "negative"));
            rie.AddRule(rule);

            rule = new Rule("11");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "positive"));
            rie.AddRule(rule);

            rule = new Rule("12");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "doubt"));
            rie.AddRule(rule);

            rule = new Rule("13");
            rule.AddAntecedent(new IsClause("What was your prior education?", "true"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "doubt"));
            rie.AddRule(rule);

            rule = new Rule("14");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new LEClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "doubt"));
            rie.AddRule(rule);

            rule = new Rule("15");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "yes"));
            rule.AddAntecedent(new GreaterClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "doubt"));
            rie.AddRule(rule);

            rule = new Rule("16");
            rule.AddAntecedent(new IsClause("What was your prior education?", "false"));
            rule.AddAntecedent(new IsClause("Where you present during the intake?", "no"));
            rule.AddAntecedent(new LEClause("Number of refusals?", "1"));
            rule.AddAntecedent(new GreaterClause("What is your average score?", "16"));
            rule.setConsequent(new IsClause("Advice", "negative"));
            rie.AddRule(rule);

            return(rie);
        }
Exemplo n.º 3
0
        static public RuleInferenceEngine getInferenceEngine()
        {
            RuleInferenceEngine rie = new RuleInferenceEngine();

            Rule rule = new Rule("Bicycle");

            rule.AddAntecedent(new IsClause("type", "cycle"));
            rule.AddAntecedent(new IsClause("есть мотор", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "велосипед"));
            rie.AddRule(rule);

            rule = new Rule("Motorcycle");
            rule.AddAntecedent(new IsClause("type", "cycle"));
            rule.AddAntecedent(new IsClause("колес", "2"));
            rule.AddAntecedent(new IsClause("есть мотор", "Да"));
            rule.setConsequent(new IsClause("vehicle", "мотоцикл"));
            rie.AddRule(rule);

            rule = new Rule("Tricycle");
            rule.AddAntecedent(new IsClause("type", "cycle"));
            rule.AddAntecedent(new IsClause("колес", "3"));
            rule.AddAntecedent(new IsClause("есть мотор", "Да"));
            rule.setConsequent(new IsClause("vehicle", "трицикл"));
            rie.AddRule(rule);

            rule = new Rule("ATV");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new LessClause("дверей", "2"));
            rule.AddAntecedent(new IsClause("колес", "4"));
            rule.setConsequent(new IsClause("vehicle", "ATV"));
            rie.AddRule(rule);

            rule = new Rule("Minivan");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new GreaterClause("посадочных мест", "5"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.AddAntecedent(new IsClause("размер", "Маленький"));
            rule.setConsequent(new IsClause("vehicle", "минивен"));
            rie.AddRule(rule);

            rule = new Rule("MPV");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new GreaterClause("посадочных мест", "5"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Да"));
            rule.AddAntecedent(new IsClause("размер", "Маленький"));
            rule.setConsequent(new IsClause("vehicle", "MPV"));
            rie.AddRule(rule);

            rule = new Rule("Van-passanger");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new GreaterClause("посадочных мест", "7"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "фургон"));
            rie.AddRule(rule);

            rule = new Rule("Van-MPV");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new GreaterClause("посадочных мест", "7"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Да"));
            rule.setConsequent(new IsClause("vehicle", "MPV"));
            rie.AddRule(rule);

            rule = new Rule("Targa");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("есть крыша", "Нет"));
            rule.AddAntecedent(new IsClause("жесткая крыша", "Нет"));
            rule.AddAntecedent(new IsClause("дверей", "2"));
            rule.setConsequent(new IsClause("vehicle", "тарга"));
            rie.AddRule(rule);

            rule = new Rule("Roadster");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("есть крыша", "Нет"));
            rule.AddAntecedent(new IsClause("жесткая крыша", "Да"));
            rule.AddAntecedent(new IsClause("дверей", "2"));
            rule.setConsequent(new IsClause("vehicle", "родстер"));
            rie.AddRule(rule);

            rule = new Rule("Coupe");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("есть крыша", "Да"));
            rule.AddAntecedent(new IsClause("дверей", "2"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "купе"));
            rie.AddRule(rule);

            rule = new Rule("Pickup-2");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("есть крыша", "Да"));
            rule.AddAntecedent(new IsClause("дверей", "2"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Да"));
            rule.setConsequent(new IsClause("vehicle", "пикап"));
            rie.AddRule(rule);

            rule = new Rule("Cabrio-Convertibles");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("есть крыша", "Нет"));
            rule.AddAntecedent(new GEClause("дверей", "3"));
            rule.setConsequent(new IsClause("vehicle", "кабриолет"));
            rie.AddRule(rule);

            rule = new Rule("Limo");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "4"));
            rule.AddAntecedent(new IsClause("размер", "Большой"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "лимузин"));
            rie.AddRule(rule);

            rule = new Rule("Pickup-4");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "4"));
            rule.AddAntecedent(new IsClause("размер", "Большой"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Да"));
            rule.setConsequent(new IsClause("vehicle", "пикап"));
            rie.AddRule(rule);

            rule = new Rule("Sedan");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "4"));
            rule.AddAntecedent(new IsClause("задняя часть крыши спускается плавно", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "седан"));
            rie.AddRule(rule);

            rule = new Rule("Fastback");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "4"));
            rule.AddAntecedent(new IsClause("задняя часть крыши спускается плавно", "Да"));
            rule.setConsequent(new IsClause("vehicle", "фастбэк"));
            rie.AddRule(rule);

            rule = new Rule("Wagon-3");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "3"));
            rule.AddAntecedent(new IsClause("размер", "Средний"));
            rule.setConsequent(new IsClause("vehicle", "унверсал"));
            rie.AddRule(rule);

            rule = new Rule("Wagon-5");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "5"));
            rule.AddAntecedent(new IsClause("размер", "Средний"));
            rule.setConsequent(new IsClause("vehicle", "унверсал"));
            rie.AddRule(rule);

            rule = new Rule("CUV-3");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "3"));
            rule.AddAntecedent(new IsClause("размер", "Большой"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.AddAntecedent(new IsClause("высокий дорожный просвет", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "кроссовер"));
            rie.AddRule(rule);

            rule = new Rule("CUV-5");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "5"));
            rule.AddAntecedent(new IsClause("размер", "Большой"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.AddAntecedent(new IsClause("высокий дорожный просвет", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "кроссовер"));
            rie.AddRule(rule);

            rule = new Rule("SUV-3");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "3"));
            rule.AddAntecedent(new IsClause("размер", "Большой"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.AddAntecedent(new IsClause("высокий дорожный просвет", "Да"));
            rule.setConsequent(new IsClause("vehicle", "джип"));
            rie.AddRule(rule);

            rule = new Rule("SUV-5");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "5"));
            rule.AddAntecedent(new IsClause("размер", "Большой"));
            rule.AddAntecedent(new IsClause("специальное место для груза", "Нет"));
            rule.AddAntecedent(new IsClause("высокий дорожный просвет", "Да"));
            rule.setConsequent(new IsClause("vehicle", "джип"));
            rie.AddRule(rule);

            rule = new Rule("Hatchback-3");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "3"));
            rule.AddAntecedent(new IsClause("размер", "Маленький"));
            rule.AddAntecedent(new IsClause("задняя часть крыши спускается плавно", "Да"));
            rule.setConsequent(new IsClause("vehicle", "хэтчбек"));
            rie.AddRule(rule);

            rule = new Rule("Hatchback-5");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "5"));
            rule.AddAntecedent(new IsClause("размер", "Маленький"));
            rule.AddAntecedent(new IsClause("задняя часть крыши спускается плавно", "Да"));
            rule.setConsequent(new IsClause("vehicle", "хэтчбек"));
            rie.AddRule(rule);

            rule = new Rule("Liftback-3");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "3"));
            rule.AddAntecedent(new IsClause("размер", "Маленький"));
            rule.AddAntecedent(new IsClause("задняя часть крыши спускается плавно", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "лифтбек"));
            rie.AddRule(rule);

            rule = new Rule("Liftback-5");
            rule.AddAntecedent(new IsClause("type", "automobile"));
            rule.AddAntecedent(new IsClause("дверей", "5"));
            rule.AddAntecedent(new IsClause("размер", "Маленький"));
            rule.AddAntecedent(new IsClause("задняя часть крыши спускается плавно", "Нет"));
            rule.setConsequent(new IsClause("vehicle", "лифтбек"));
            rie.AddRule(rule);

            rule = new Rule("Cycle");
            rule.AddAntecedent(new LessClause("колес", "4"));
            rule.setConsequent(new IsClause("type", "cycle"));
            rie.AddRule(rule);

            rule = new Rule("Automobile");
            rule.AddAntecedent(new IsClause("колес", "4"));
            rule.AddAntecedent(new IsClause("есть мотор", "Да"));
            rule.setConsequent(new IsClause("type", "automobile"));
            rie.AddRule(rule);

            return(rie);
        }