예제 #1
0
        public IEnumerable <OutputParameterSolution> Solve(IDictionary <Parameter, double> inputValues)
        {
            if (InputParameters.Except(inputValues.Keys).Any())
            {
                throw new ArgumentException("Input values do not represent all the task's input parameters.");
            }

            var inputMembershipValues = InputParameters
                                        .SelectMany(param => param.CalculateMembershipValuesFor(inputValues[param])) // obtains a sequence of KV-pairs instead of dictionaries
                                        .ToDictionary(pair => pair.Key, pair => pair.Value);                         // merges all the pairs in one dictionaty; throws exception on matching keys (which should never happen)

            var outputMembershipValues = Rules
                                         .GroupBy(rule => rule.Class)
                                         .ToDictionary(group => group.Key,
                                                       group => group.Select(rule => rule.Expression.Evaluate(inputMembershipValues)).Max()); // joins the rules of the same target class via max (fuzzy disjunction)

            return(OutputParameters.Select(param => new OutputParameterSolution(param, outputMembershipValues)));
        }
예제 #2
0
        public override string ToString()
        {
            if (OutputParameters == null && OutputValues == null)
            {
                return(string.Empty);
            }

            if (OutputParameters == null)
            {
                return(ObjectToStringConverter.ConvertCollectionToString(OutputValues));
            }

            if (OutputValues == null)
            {
                return(ObjectToStringConverter.ConvertCollectionToString(OutputParameters.Select(p => p.Name)));
            }

            return(ObjectToStringConverter.ConvertSomeToString(OutputParameters.Select(p => p.Name).ToArray(), OutputValues));
        }