public void Test_OneStrategy_MultiTraceStep_Author() { var expr1 = new Term(Expression.Add, new List <object> { 1, 1, 1 }); var expr2 = new Term(Expression.Add, new List <object> { 2, 1 }); var ts1 = new TraceStep(expr1, expr2, null, "meta-rule todo", "rule todo"); var ts1Expr = new TraceStepExpr(ts1); var ts2 = new TraceStep(expr2, 2, null, "meta-rule todo", "rule todo"); var ts2Expr = new TraceStepExpr(ts2); var lst = new List <TraceStepExpr>() { ts1Expr, ts2Expr }; var tuple = new Tuple <object, object>("strategy2", lst); var lstStrategy = new List <Tuple <object, object> >(); lstStrategy.Add(tuple); var graph = new BehaviorGraph(); graph.Insert(lstStrategy); Assert.True(graph.Nodes.Count == 2); var node0 = graph.Nodes[0]; Assert.Null(node0.SubGraph); var node1 = graph.Nodes[1]; Assert.NotNull(node1.SubGraph); Assert.True(node1.SubGraph.Nodes.Count == 3); ///////////////////////////////////////////// // User Input, //2 steps trace var expr3 = new Term(Expression.Add, new List <object> { 1, 2 }); var ts3 = new TraceStep(expr1, expr3, null, "meta-rule todo", "rule todo"); var ts3Expr = new TraceStepExpr(ts3); var ts4 = new TraceStep(expr3, 2, null, "meta-rule todo", "rule todo"); var ts4Expr = new TraceStepExpr(ts4); var lst2 = new List <TraceStepExpr>() { ts3Expr, ts4Expr }; var tuple2 = new Tuple <object, object>("strategy1", lst2); var lstStrategy2 = new List <Tuple <object, object> >(); lstStrategy2.Add(tuple2); //Under the same strategy graph.Update(lstStrategy2); Assert.True(graph.Nodes.Count == 3); Assert.True(node1.SubGraph.Nodes.Count == 3); }
/* * Line A contains the point (2,3) and is perpendicular to the line B x-2y+1=0, what is the slope (use notation m) of line A? what is the general form of line A? */ public static BehaviorGraph Problem56() { const string input1 = "(2,3)"; const string input2 = "x-2y+1=0"; const string constraint0 = "m1="; const string input3 = "m1*m=-1"; const string query1 = "lineG"; const string query2 = "m="; Reasoner.Instance.Load(input1); Reasoner.Instance.Load(input2); Reasoner.Instance.Load(constraint0); Reasoner.Instance.Load(input3); ///////////////////////////////////////////////////////////////// var queryExpr1 = Reasoner.Instance.Load(query2) as AGQueryExpr; Assert.NotNull(queryExpr1); Assert.True(queryExpr1.RenderKnowledge == null); queryExpr1.RetrieveRenderKnowledge(); Assert.True(queryExpr1.RenderKnowledge != null); Assert.True(queryExpr1.RenderKnowledge.Count == 2); var answerExpr1 = queryExpr1.RenderKnowledge[1] as AGPropertyExpr; Assert.NotNull(answerExpr1); Assert.True(answerExpr1.Goal.Rhs.Equals(-2)); Assert.Null(answerExpr1.AutoTrace); answerExpr1.IsSelected = true; answerExpr1.GenerateSolvingTrace(); Assert.NotNull(answerExpr1.AutoTrace); ////////////////////////////////////////////////////////////////// var queryExpr2 = Reasoner.Instance.Load(query1) as AGQueryExpr; Assert.NotNull(queryExpr2); Assert.True(queryExpr2.RenderKnowledge == null); queryExpr2.RetrieveRenderKnowledge(); Assert.True(queryExpr2.RenderKnowledge != null); Assert.True(queryExpr2.RenderKnowledge.Count == 2); var answerExpr2 = queryExpr2.RenderKnowledge[1] as AGShapeExpr; Assert.NotNull(answerExpr2); Assert.True(answerExpr2.ShapeSymbol.ToString().Equals("2x+y-7=0")); Assert.Null(answerExpr2.AutoTrace); answerExpr2.IsSelected = true; answerExpr2.GenerateSolvingTrace(); Assert.NotNull(answerExpr2.AutoTrace); Assert.True(answerExpr1.AutoTrace.Count == 5); Assert.True(answerExpr2.AutoTrace.Count == 6); var graph = new BehaviorGraph(); graph.Insert(answerExpr1.AutoTrace); var answerNode = graph.SearchInnerLoopNode(answerExpr1.Goal); Assert.NotNull(answerNode); graph.SolvingCache.Add(answerNode, false); graph.Update(answerExpr2.AutoTrace); var answerNode1 = graph.SearchInnerLoopNode(answerExpr2.ShapeSymbol); Assert.NotNull(answerNode1); graph.SolvingCache.Add(answerNode1, false); return graph; }
/* * A line passes through points (-1,2) and (1,y), * the slope of this line is 2. What is the value of y? * What is the y-intercept of the line? * (Use notation m to represent line slope and k as y-intercept) */ public static BehaviorGraph Problem55() { const string input1 = "(-1,2)"; const string input2 = "(1,y)"; const string input3 = "m=2"; const string query0 = "y"; const string query = "k"; Reasoner.Instance.Load(input1); Reasoner.Instance.Load(input2); Reasoner.Instance.Load(input3); var agQueryExpr0 = Reasoner.Instance.Load(query0) as AGQueryExpr; Assert.NotNull(agQueryExpr0); Assert.True(agQueryExpr0.RenderKnowledge == null); agQueryExpr0.RetrieveRenderKnowledge(); Assert.True(agQueryExpr0.RenderKnowledge != null); Assert.True(agQueryExpr0.RenderKnowledge.Count == 3); var answerExpr0 = agQueryExpr0.RenderKnowledge[2] as AGPropertyExpr; Assert.NotNull(answerExpr0); Assert.True(answerExpr0.Goal.ToString().Equals("y=6")); Assert.Null(answerExpr0.AutoTrace); answerExpr0.IsSelected = true; answerExpr0.GenerateSolvingTrace(); Assert.NotNull(answerExpr0.AutoTrace); var agQueryExpr = Reasoner.Instance.Load(query) as AGQueryExpr; Assert.NotNull(agQueryExpr); Assert.True(agQueryExpr.RenderKnowledge == null); agQueryExpr.RetrieveRenderKnowledge(); Assert.True(agQueryExpr.RenderKnowledge != null); Assert.True(agQueryExpr.RenderKnowledge.Count == 1); var answerExpr1 = agQueryExpr.RenderKnowledge[0] as AGPropertyExpr; Assert.NotNull(answerExpr1); Assert.Null(answerExpr1.AutoTrace); answerExpr1.IsSelected = true; answerExpr1.GenerateSolvingTrace(); Assert.NotNull(answerExpr1.AutoTrace); var graph = new BehaviorGraph(); graph.Insert(answerExpr0.AutoTrace); var answerNode0 = graph.SearchInnerLoopNode(answerExpr0); Assert.NotNull(answerNode0); graph.SolvingCache.Add(answerNode0, false); graph.Update(answerExpr1.AutoTrace); var answerNode1 = graph.SearchInnerLoopNode(answerExpr1); Assert.NotNull(answerNode1); graph.SolvingCache.Add(answerNode1, false); return graph; }
/* * * Given an equation 2+3y+2x-y+2x+5=4, graph this equation's corresponding shape? If it is a line, what is the slope of this line? (Use notation m to represent line slope) * */ public static BehaviorGraph Problem54() { const string input1 = "2+3y+2x-y+2x+5=4"; const string query1 = "graph="; Reasoner.Instance.Load(input1); var obj = Reasoner.Instance.Load(query1); var obj1 = Reasoner.Instance.Load(query1); var queryExpr1 = obj1 as AGQueryExpr; Assert.NotNull(queryExpr1); //Hidden Selected Render Knowledge queryExpr1.RetrieveRenderKnowledge(); Assert.True(queryExpr1.RenderKnowledge.Count == 1); var answerExpr1 = queryExpr1.RenderKnowledge[0] as AGShapeExpr; Assert.NotNull(answerExpr1); Assert.Null(answerExpr1.AutoTrace); answerExpr1.IsSelected = true; answerExpr1.GenerateSolvingTrace(); Assert.NotNull(answerExpr1.AutoTrace); const string input2 = "m="; var obj2 = Reasoner.Instance.Load(input2); Assert.NotNull(obj2); var agQueryExpr2 = obj2 as AGQueryExpr; Assert.NotNull(agQueryExpr2); agQueryExpr2.RetrieveRenderKnowledge(); Assert.True(agQueryExpr2.RenderKnowledge.Count == 1); var answerExpr2 = agQueryExpr2.RenderKnowledge[0] as AGPropertyExpr; Assert.True(answerExpr2 != null); //Query answer answerExpr2.IsSelected = true; answerExpr2.GenerateSolvingTrace(); Assert.True(answerExpr2.AutoTrace != null); //Reasoner.Instance.Reset(); var graph = new BehaviorGraph(); graph.Insert(answerExpr1.AutoTrace); var answerNode1 = graph.SearchInnerLoopNode(answerExpr1); Assert.NotNull(answerNode1); graph.SolvingCache.Add(answerNode1, false); graph.Update(answerExpr2.AutoTrace); var answerNode2 = graph.SearchInnerLoopNode(answerExpr2); Assert.NotNull(answerNode2); graph.SolvingCache.Add(answerNode2, false); return graph; }
/* * There exists two points A(2,4) and B(5,v), the distance between A and B is 5. * What is the value of v? */ public static BehaviorGraph Problem2() { const string input1 = "A(2,4)"; const string input2 = "B(5,v)"; const string input3 = "d=5"; const string query = "v="; Reasoner.Instance.Load(input1); Reasoner.Instance.Load(input2); Reasoner.Instance.Load(input3); var obj = Reasoner.Instance.Load(query); Assert.NotNull(obj); var agQueryExpr = obj as AGQueryExpr; Assert.NotNull(agQueryExpr); Assert.True(agQueryExpr.RenderKnowledge == null); agQueryExpr.RetrieveRenderKnowledge(); Assert.True(agQueryExpr.RenderKnowledge != null); Assert.True(agQueryExpr.RenderKnowledge.Count == 2); var answerExpr = agQueryExpr.RenderKnowledge[1] as AGPropertyExpr; Assert.NotNull(answerExpr); Assert.True(answerExpr.Goal.Rhs.Equals(8)); Assert.Null(answerExpr.AutoTrace); answerExpr.IsSelected = true; answerExpr.GenerateSolvingTrace(); Assert.NotNull(answerExpr.AutoTrace); var answerExpr1 = agQueryExpr.RenderKnowledge[0] as AGPropertyExpr; Assert.NotNull(answerExpr1); Assert.True(answerExpr1.Goal.Rhs.Equals(0)); Assert.Null(answerExpr1.AutoTrace); answerExpr1.IsSelected = true; answerExpr1.GenerateSolvingTrace(); Assert.NotNull(answerExpr1.AutoTrace); //Reasoner.Instance.Reset(); var graph = new BehaviorGraph(); graph.Insert(answerExpr.AutoTrace); var answerNode = graph.SearchInnerLoopNode(answerExpr.Goal); Assert.NotNull(answerNode); graph.SolvingCache.Add(answerNode, false); // Assert.True(graph.Nodes.Count == 3); graph.Update(answerExpr1.AutoTrace); var answerNode1 = graph.SearchInnerLoopNode(answerExpr1.Goal); Assert.NotNull(answerNode1); graph.SolvingCache.Add(answerNode1, false); return graph; }
/* * There is a line, the slope of it is 5, the y-intercept of it is 1. What is the slope intercept form of this line? What is the general form of this line? (Use notation m to represent line slope and k to represent y-intercept) * */ public static BehaviorGraph Problem53() { const string input1 = "m=5"; const string input2 = "k=1"; Reasoner.Instance.Load(input1); Reasoner.Instance.Load(input2); //Question 1: const string query1 = "lineS="; var obj1 = Reasoner.Instance.Load(query1); Assert.NotNull(obj1); var agQueryExpr1 = obj1 as AGQueryExpr; Assert.NotNull(agQueryExpr1); Assert.True(agQueryExpr1.RenderKnowledge == null); agQueryExpr1.RetrieveRenderKnowledge(); Assert.True(agQueryExpr1.RenderKnowledge != null); Assert.True(agQueryExpr1.RenderKnowledge.Count == 1); var answerExpr1 = agQueryExpr1.RenderKnowledge[0] as AGShapeExpr; Assert.NotNull(answerExpr1); Assert.Null(answerExpr1.AutoTrace); answerExpr1.IsSelected = true; answerExpr1.GenerateSolvingTrace(); Assert.NotNull(answerExpr1.AutoTrace); ////////////////////////////////////////////////////////// //Question 2: const string query2 = "lineG="; var obj = Reasoner.Instance.Load(query2); Assert.NotNull(obj); var agQueryExpr2 = obj as AGQueryExpr; Assert.NotNull(agQueryExpr2); Assert.True(agQueryExpr2.RenderKnowledge == null); agQueryExpr2.RetrieveRenderKnowledge(); Assert.True(agQueryExpr2.RenderKnowledge != null); Assert.True(agQueryExpr2.RenderKnowledge.Count == 1); var answerExpr2 = agQueryExpr2.RenderKnowledge[0] as AGShapeExpr; Assert.NotNull(answerExpr2); Assert.Null(answerExpr2.AutoTrace); answerExpr2.IsSelected = true; answerExpr2.GenerateSolvingTrace(); Assert.NotNull(answerExpr2.AutoTrace); //Reasoner.Instance.Reset(); var graph = new BehaviorGraph(); graph.Insert(answerExpr1.AutoTrace); var answerNode1 = graph.SearchInnerLoopNode(answerExpr1); Assert.NotNull(answerNode1); graph.SolvingCache.Add(answerNode1, false); //Assert.True(graph.Nodes.Count == 3); graph.Update(answerExpr2.AutoTrace); var answerNode2 = graph.SearchInnerLoopNode(answerExpr2); Assert.NotNull(answerNode2); graph.SolvingCache.Add(answerNode2, false); return graph; }
public void Test_OneStrategy_OneTraceStep_Author() { //1+1->2 var expr1 = new Term(Expression.Add, new List<object> { 1, 1 }); var ts = new TraceStep(expr1, 2, "null", "meta-rule todo", "rule todo"); var tsExpr = new TraceStepExpr(ts); var lst = new List<TraceStepExpr>() { tsExpr }; var tuple = new Tuple<object, object>("strategy1", lst); var lstStrategy = new List<Tuple<object, object>>(); lstStrategy.Add(tuple); var graph = new BehaviorGraph(); graph.Insert(lstStrategy); Assert.True(graph.Nodes.Count == 2); var node0 = graph.Nodes[0]; Assert.Null(node0.SubGraph); var node1 = graph.Nodes[1]; Assert.NotNull(node1.SubGraph); Assert.True(node1.SubGraph.Nodes.Count == 2); ///////////////////////////////////////////// //4-1->2 var expr2 = new Term(Expression.Add, new List<object> { 4, 1 }); // User Input, //wrong step var ts1 = new TraceStep(expr2, 2); var ts1Expr = new TraceStepExpr(ts1); var tsLst = new List<TraceStepExpr>() { ts1Expr }; var tuple2 = new Tuple<object, object>("strategy1", tsLst); var lst44 = new List<Tuple<object, object>>() { tuple2 }; bool matchResult = graph.Match(lst44); Assert.True(matchResult); graph.Update(lst44); Assert.True(graph.Nodes.Count == 2); Assert.True(node1.SubGraph.Nodes.Count == 3); ///////////////////////////////////////////// //test search var initNode = graph.RetrieveInitInnerNode(); Assert.NotNull(initNode); var innerState = initNode.State as InnerLoopBehaviorState; Assert.NotNull(innerState); Assert.True(innerState.UserKnowledge.ToString().Equals("1+1")); Assert.True(initNode.InEdges.Count == 0); Assert.True(initNode.OutEdges.Count == 1); int count = graph.PathFinding(initNode); Assert.True(count == 1); var nextObj = graph.SearchNextInnerLoopNode(initNode); var tuple22 = nextObj as Tuple<object, object>; Assert.NotNull(tuple22); var nextNode = tuple22.Item2 as BehaviorGraphNode; Assert.NotNull(nextNode); count = graph.PathFinding(nextNode); Assert.True(count == 0); }
public void Test_OneStrategy_MultiTraceStep_Author() { var expr1 = new Term(Expression.Add, new List<object> { 1, 1, 1 }); var expr2 = new Term(Expression.Add, new List<object> { 2, 1 }); var ts1 = new TraceStep(expr1, expr2, null, "meta-rule todo", "rule todo"); var ts1Expr = new TraceStepExpr(ts1); var ts2 = new TraceStep(expr2, 2, null, "meta-rule todo", "rule todo"); var ts2Expr = new TraceStepExpr(ts2); var lst = new List<TraceStepExpr>() { ts1Expr, ts2Expr }; var tuple = new Tuple<object, object>("strategy2", lst); var lstStrategy = new List<Tuple<object, object>>(); lstStrategy.Add(tuple); var graph = new BehaviorGraph(); graph.Insert(lstStrategy); Assert.True(graph.Nodes.Count == 2); var node0 = graph.Nodes[0]; Assert.Null(node0.SubGraph); var node1 = graph.Nodes[1]; Assert.NotNull(node1.SubGraph); Assert.True(node1.SubGraph.Nodes.Count == 3); ///////////////////////////////////////////// // User Input, //2 steps trace var expr3 = new Term(Expression.Add, new List<object> { 1, 2 }); var ts3 = new TraceStep(expr1, expr3, null, "meta-rule todo", "rule todo"); var ts3Expr = new TraceStepExpr(ts3); var ts4 = new TraceStep(expr3, 2, null, "meta-rule todo", "rule todo"); var ts4Expr = new TraceStepExpr(ts4); var lst2 = new List<TraceStepExpr>() { ts3Expr, ts4Expr }; var tuple2 = new Tuple<object, object>("strategy1", lst2); var lstStrategy2 = new List<Tuple<object, object>>(); lstStrategy2.Add(tuple2); //Under the same strategy graph.Update(lstStrategy2); Assert.True(graph.Nodes.Count == 3); Assert.True(node1.SubGraph.Nodes.Count == 3); }
public void Test_OneStrategy_OneTraceStep_Author() { //1+1->2 var expr1 = new Term(Expression.Add, new List <object> { 1, 1 }); var ts = new TraceStep(expr1, 2, "null", "meta-rule todo", "rule todo"); var tsExpr = new TraceStepExpr(ts); var lst = new List <TraceStepExpr>() { tsExpr }; var tuple = new Tuple <object, object>("strategy1", lst); var lstStrategy = new List <Tuple <object, object> >(); lstStrategy.Add(tuple); var graph = new BehaviorGraph(); graph.Insert(lstStrategy); Assert.True(graph.Nodes.Count == 2); var node0 = graph.Nodes[0]; Assert.Null(node0.SubGraph); var node1 = graph.Nodes[1]; Assert.NotNull(node1.SubGraph); Assert.True(node1.SubGraph.Nodes.Count == 2); ///////////////////////////////////////////// //4-1->2 var expr2 = new Term(Expression.Add, new List <object> { 4, 1 }); // User Input, //wrong step var ts1 = new TraceStep(expr2, 2); var ts1Expr = new TraceStepExpr(ts1); var tsLst = new List <TraceStepExpr>() { ts1Expr }; var tuple2 = new Tuple <object, object>("strategy1", tsLst); var lst44 = new List <Tuple <object, object> >() { tuple2 }; bool matchResult = graph.Match(lst44); Assert.True(matchResult); graph.Update(lst44); Assert.True(graph.Nodes.Count == 2); Assert.True(node1.SubGraph.Nodes.Count == 3); ///////////////////////////////////////////// //test search var initNode = graph.RetrieveInitInnerNode(); Assert.NotNull(initNode); var innerState = initNode.State as InnerLoopBehaviorState; Assert.NotNull(innerState); Assert.True(innerState.UserKnowledge.ToString().Equals("1+1")); Assert.True(initNode.InEdges.Count == 0); Assert.True(initNode.OutEdges.Count == 1); int count = graph.PathFinding(initNode); Assert.True(count == 1); var nextObj = graph.SearchNextInnerLoopNode(initNode); var tuple22 = nextObj as Tuple <object, object>; Assert.NotNull(tuple22); var nextNode = tuple22.Item2 as BehaviorGraphNode; Assert.NotNull(nextNode); count = graph.PathFinding(nextNode); Assert.True(count == 0); }