public NodesSubstitution(NodesEnumeration originalNodes, Dictionary <NodeReference, NodeReference> substitutions) { OriginalNodes = originalNodes; var orderedSubstitutions = new List <NodeReference>(NodeCount); foreach (var node in OriginalNodes) { orderedSubstitutions.Add(substitutions[node]); } SubstitutedNodes = new NodesEnumeration(orderedSubstitutions); }
internal void UpdatePush(IEnumerable <PushAction> pushActions) { _actions.RemoveAll(action => action is PushAction); _actions.AddRange(pushActions); var previousCount = RequiredSubstitutions.Count; RequiredSubstitutions = findRequiredSubstitutions(_actions); if (previousCount != RequiredSubstitutions.Count) { throw new NotSupportedException("Invalid update"); } }
internal ActionBlock(ComposedGraph graph, IEnumerable <IPoolAction> actions) { var semantics = actions.FirstOrDefault(); if (semantics != null && semantics.SemanticOrigin != null) { OriginalSentence = Dialog.UtteranceParser.Parse(semantics.SemanticOrigin.Utterance).OriginalSentence; } OutputFilter = new KnowledgeClassifier <bool>(graph); _actions.AddRange(actions); RequiredSubstitutions = findRequiredSubstitutions(actions); }
internal static NodesSubstitution GetSubstitutions(IEnumerable <NodeReference> availableNodes, NodesEnumeration originalNodes, ComposedGraph graph) { var substitutions = new Dictionary <NodeReference, NodeReference>(); var missingSubstitutionsSet = new HashSet <NodeReference>(originalNodes); var availableNodesSet = new HashSet <NodeReference>(availableNodes); while (missingSubstitutionsSet.Count > 0) { NodeReference bestSubstitution = null; NodeReference substitutionValue = null; double bestDistance = double.MaxValue; foreach (var substitution in missingSubstitutionsSet) { var nearest = GetNearest(substitution, availableNodesSet, graph); var distance = getDistance(substitution, nearest, graph); if (distance < bestDistance) { bestDistance = distance; bestSubstitution = substitution; substitutionValue = nearest; } } if (substitutionValue == null) { //there are no other substitutions break; } missingSubstitutionsSet.Remove(bestSubstitution); availableNodesSet.Remove(substitutionValue); substitutions.Add(bestSubstitution, substitutionValue); } return(new NodesSubstitution(originalNodes, substitutions)); }
internal QuestionEntry(string question, ComposedGraph graph) { Question = question; ParsedQuestion = UtteranceParser.Parse(question); QuestionNodes = findeQuestionNodes(graph); }