internal BodyState AddMultiRequirement(ConceptRequirement requirement) { var newRequirements = new Dictionary <ConceptRequirement, IEnumerable <Concept> >(_multiParameterRequirements); newRequirements.Add(requirement, null); return(new BodyState(Score, _input, _values, _pointings, _parameterRequirements, newRequirements)); }
internal bool RequireMultiParameter(string request, out IEnumerable <Concept> parameter, IEnumerable <Concept> domain = null) { var realDomain = getRealDomain(domain); var requirement = new ConceptRequirement(request, EvaluatedConcept, realDomain); parameter = _currentState.GetMultiParameter(requirement); if (parameter == null) { _currentState = _currentState.AddMultiRequirement(requirement); } return(parameter != null); }
internal BodyState AssignParameter(ConceptRequirement requirement, Concept concept, double score) { if (_parameterRequirements.ContainsKey(requirement) && _parameterRequirements[requirement] != concept) { var newParameterRequirements = new Dictionary <ConceptRequirement, Concept>(_parameterRequirements); newParameterRequirements[requirement] = concept; return(new BodyState(Score, _input, _values, _pointings, newParameterRequirements, _multiParameterRequirements)); } if (_multiParameterRequirements.ContainsKey(requirement) && !_multiParameterRequirements[requirement].Contains(concept)) { var newMultiParameterRequirements = new Dictionary <ConceptRequirement, IEnumerable <Concept> >(_multiParameterRequirements); var parameters = new HashSet <Concept>(_multiParameterRequirements[requirement]); parameters.Add(concept); newMultiParameterRequirements[requirement] = parameters; return(new BodyState(Score + score, _input, _values, _pointings, _parameterRequirements, newMultiParameterRequirements)); } return(this); }
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); }
internal double ParameterAssignScore(BodyState currentState, ConceptRequirement parameter, Concept concept) { return(_model.ParameterAssignScore(currentState, parameter, concept)); }
internal IEnumerable <Concept> GetMultiParameter(ConceptRequirement requirement) { return(_multiParameterRequirements[requirement]); }
internal Concept GetParameter(ConceptRequirement requirement) { _parameterRequirements.TryGetValue(requirement, out var result); return(result); }