private BodyState assignParameter(BodyState initialState, ConceptRequirement requirement, Concept assignedConcept) { if (!requirement.Domain.Contains(assignedConcept)) { return(null); } var parameterScore = _body.ParameterAssignScore(initialState, requirement, assignedConcept); if (parameterScore <= 0) { return(null); } var assignedState = initialState.AssignParameter(requirement, assignedConcept, parameterScore); var context = new BodyContext(requirement.RequestingConcept, _body, assignedState); context.EvaluateActivation(requirement.RequestingConcept.Concept); return(context.CurrentState); }
private IEnumerable <BodyState> setPointer(BodyState inputState, Phrase phrase, Concept concept, double pointingProbability) { if (pointingProbability <= 0) { yield break; } var rankedConcept = new RankedConcept(concept, pointingProbability); var state = inputState.SetPointer(phrase, rankedConcept); var context = new BodyContext(rankedConcept, _body, state); context.EvaluateActivation(concept); yield return(context.CurrentState); var assignmentInitialState = context.CurrentState; //try parameter assignments foreach (var requirement in assignmentInitialState.PendingRequirements) { foreach (var mentionedConcept in assignmentInitialState.RecentMentionedConcepts) { if (mentionedConcept == requirement.RequestingConcept.Concept) { //don't allow self assignments continue; } var newState = assignParameter(assignmentInitialState, requirement, mentionedConcept); if (newState != null) { yield return(newState); } } } }