static void Main(string[] args) { IStorageService service = new PrMInMemoryStService(); IKnowledgeBase knBase = new ProductionModelReteNetwork(service); //IProductionSolver solver = new DirectProductionSolver(knBase); //breadth first //IProductionSolver solver = new DepthFirstDirectProductionSolver(knBase); //depth first; IProductionSolver solver = new SimplicityFirstDirectSolver(knBase); //simplicity first; LogicalExpressionHelper eh = new LogicalExpressionHelper(); IParser parser = new PrModelParser(eh); IExpertSystem expert = new ExpertSystemBase(knBase, solver, parser); string rules = Properties.Resources.TravelBase; Console.WriteLine("Parsing rules..."); expert.AddRules(rules); Console.WriteLine("Done!"); string query = "если 'выбор направления-Европа', 'выбор страны-Испания', 'приоритет отеля-центр города', 'приоритет города-экскурсии', 'количество звезд-4' то 'отель=?'"; //string query = "если 'желание-купить', 'денег-достаточно', 'расстояние-равно', " + // "'цены лучше-РИО' то 'пойти в РИО=?', 'пойти в Рубин=?'"; Console.WriteLine("Submitting query: {0}", query); Console.Write("Result:"); ResultingFactSet result = (ResultingFactSet)expert.GetResult(query); foreach (var item in result) { if (item.Value != null) { Console.WriteLine(item); } } Console.ReadKey(); }
public void TestParsingQuery() { string query = "если 'погода - ветренно', 'дождь - да' то 'взять зонт=?', 'одеться теплее=?'"; IParser parser = new PrModelParser(new LogicalExpressionHelper()); ILogicalQuery q = parser.ParseQuery(query); Assert.IsTrue(q.GetQueriedItems().Count() == 2); Assert.IsTrue(q.GetPreQueryActions().Count() == 2); Assert.IsTrue(q.GetPreQueryActions().All((a) => { return(a is AddFactAction); })); Assert.IsTrue(q.GetQueriedItems().All((a) => { return(a is ProductionFact); })); }
public void TestParsingQueryWithProperty() { string query = "если 'погода - ветренно', 'дождь - да' то 'взять зонт=?обязательно', 'одеться теплее=?обязательно'"; Assert.IsTrue(ProductionQueryGrammar.Query.ExactMatch(query)); IParser parser = new PrModelParser(new LogicalExpressionHelper()); ILogicalQuery q = parser.ParseQuery(query); Assert.IsTrue(q.GetQueriedItems().Count() == 2); Assert.IsTrue(q.GetPreQueryActions().Count() == 2); Assert.IsTrue(q.GetPreQueryActions().All((a) => { return(a is AddFactAction); })); Assert.IsTrue(q.GetQueriedItems().All((a) => { return(a is ProductionFact); })); Assert.IsTrue(q.GetQueriedItems().All(a => { return(a.Value == "обязательно"); })); }
public void TestParsingRules() { string rules = "на случай дождя : если 'холодно - да' и 'влажность-высокая' то 'будет дождь - да', 'взять зонт - да'"; IParser parser = new PrModelParser(new LogicalExpressionHelper()); ILogicalStatement st = parser.ParseRule(rules); Assert.IsTrue(st is ProductionRule); //правило построено правильно (см. предыдущий тест) rules = rules + ";" + rules + ";" + rules + ";" + rules + ";"; IEnumerable <ILogicalStatement> statements = parser.ParseRules(rules); //правила построены правильно (т.к. отдельные правила строятся правильно) //проверим количество правил Assert.IsTrue(statements.Count() == 4); }
public void TestReteCreation() { //это прсото тест на создание //корректность создания и работы проверяется в тесте решателя IParser parser = new PrModelParser(new LogicalExpressionHelper()); IStorageService service = new PrMInMemoryStService(); ProductionModelReteNetwork rete = new ProductionModelReteNetwork(service); foreach (var statement in parser.ParseRules(Properties.Resources.sampleBase)) { rete.AddStatement(statement); } }
public void TestDirectReteNetworkSolver() { IKnowledgeBase knBase = new ProductionModelReteNetwork(new PrMInMemoryStService()); ILogicalSolver solver = new DirectProductionSolver(knBase); LogicalExpressionHelper eh = new LogicalExpressionHelper(); IParser parser = new PrModelParser(eh); expert = new ExpertSystemBase(knBase, solver, parser); string rules = Properties.Resources.knowledgeBase; expert.AddRules(rules); string query = "если 'валютный курс доллара - падает' то 'уровень цен на бирже=?'"; ILogicalResult result = expert.GetResult(query); Assert.IsTrue(result is ResultingFactSet); Assert.IsTrue(result.ToString() == "'уровень цен на бирже - падает'"); }
public void TestDbParsing() { IParser parser = new PrModelParser(new LogicalExpressionHelper()); parser.ParseRule("Если 'страна-канада' и 'приоритет города-городской отдых' то 'город-oттава'"); }