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 })); }
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)); }
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); }
internal KnowledgeConstraint(KnowledgePath path) { Path = path.Edges; }
internal void Push(NodeReference pushStart, KnowledgePath path) { var layer = GetPathLayer(pushStart, path.Edges); _accumulator.UnionWith(layer); }
internal static void Print(KnowledgePath path) { PrintLine(path.ToString(), NodeColor); }
internal ExtendAction(KnowledgePath path) { _path = path; SemanticOrigin = new SemanticPart("", new[] { path }); }
public ConstraintAction(SemanticPart constraint, KnowledgePath path) { this.SemanticOrigin = constraint; this.Path = path; }