Beispiel #1
0
        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);
        }
Beispiel #2
0
        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");
            }
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        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));
        }
Beispiel #5
0
 internal QuestionEntry(string question, ComposedGraph graph)
 {
     Question       = question;
     ParsedQuestion = UtteranceParser.Parse(question);
     QuestionNodes  = findeQuestionNodes(graph);
 }