예제 #1
0
        private ActionBlock extendAdvice(NodeReference correctAnswer)
        {
            KnowledgePath shortestPath = null;
            var           bestLength   = int.MaxValue;

            foreach (var node in Pool.ActiveNodes)
            {
                var path = Graph.GetPaths(node, correctAnswer, 20, 100).FirstOrDefault();
                if (path == null)
                {
                    continue;
                }

                if (path.Length < bestLength)
                {
                    shortestPath = path;
                    bestLength   = path.Length;
                }
            }

            IPoolAction action;

            if (shortestPath == null)
            {
                //we doesn't have enough evidence in DB
                action = new InsertAction(correctAnswer);
            }
            else
            {
                action = new ExtendAction(shortestPath);
            }

            return(new ActionBlock(Pool.Graph, new[] { action }));
        }
예제 #2
0
        private PoolRuleBase extendWith(KnowledgePath path)
        {
            var extendingEdges = path.ReverseOrderedInverseEdges;
            var edges          = extendingEdges.Concat(_edges).ToArray();
            var extendingNode  = path.Node(path.Length);

            return(new ConstraintPoolRule(extendingNode, edges));
        }
예제 #3
0
        private static double getDistance(KnowledgePath path)
        {
            if (path == null)
            {
                return(double.PositiveInfinity);
            }

            var distance = 0.0;

            for (var i = 0; i < path.Length; ++i)
            {
                var edge = path.GetEdge(i);
                if (edge.Name == ComposedGraph.IsRelation || edge.Name == "P31")
                {
                    distance += 0.1;
                }
                else
                {
                    distance += 1;
                }
            }

            return(distance);
        }
예제 #4
0
 internal KnowledgeConstraint(KnowledgePath path)
 {
     Path = path.Edges;
 }
예제 #5
0
        internal void Push(NodeReference pushStart, KnowledgePath path)
        {
            var layer = GetPathLayer(pushStart, path.Edges);

            _accumulator.UnionWith(layer);
        }
예제 #6
0
 internal static void Print(KnowledgePath path)
 {
     PrintLine(path.ToString(), NodeColor);
 }
예제 #7
0
        internal ExtendAction(KnowledgePath path)
        {
            _path = path;

            SemanticOrigin = new SemanticPart("", new[] { path });
        }
예제 #8
0
 public ConstraintAction(SemanticPart constraint, KnowledgePath path)
 {
     this.SemanticOrigin = constraint;
     this.Path           = path;
 }