示例#1
0
        public ExpertOpinion GetResult(string profileName)
        {
            var initialData   = _initialDataProvider.GetInitialData();
            var knowledgeBase = _knowledgeManager.GetKnowledgeBase(profileName);

            var opinion = new ExpertOpinion();

            if (!initialData.IsPresent)
            {
                opinion.AddErrorMessage("Initial data is not consistent. Check logs for more information.");
            }
            if (!knowledgeBase.IsPresent)
            {
                opinion.AddErrorMessage("Knowledge base is not consistent. Check logs for more information.");
            }

            ValidateInitialDataAgainstKnowledgeBase(initialData, knowledgeBase, opinion);
            if (!opinion.IsSuccess)
            {
                return(opinion);
            }

            _inferenceEngine.InitializeEngine();
            FillInferenceEngineRules(knowledgeBase.Value);
            var activatedNodes   = GetInitialNodes(knowledgeBase.Value, initialData.Value);
            var inferenceResults = _inferenceEngine.GetInferenceResults(activatedNodes);

            opinion.AddResults(DeFuzzifyResults(inferenceResults, knowledgeBase.Value.LinguisticVariables));
            return(opinion);
        }
示例#2
0
 private void ValidateInitialDataAgainstKnowledgeBase(
     Optional <List <InitialData> > initialData,
     Optional <KnowledgeBase> knowledgeBase,
     ExpertOpinion opinion)
 {
     foreach (var data in initialData.Value)
     {
         var matchingVariable = knowledgeBase.Value.LinguisticVariables.SingleOrDefault(lv => lv.Value.VariableName == data.Name);
         if (matchingVariable.Value == null)
         {
             opinion.AddErrorMessage($"Initial data {data.Name} is not present in linguistic variables base.");
         }
     }
 }
示例#3
0
 public void SetUp()
 {
     _expertOpinion = new ExpertOpinion();
 }
示例#4
0
        public string LogInferenceResult(Dictionary <int, ImplicationRule> implicationRules, ExpertOpinion expertOpinion, string userName)
        {
            var destinationPath = AppDomain.CurrentDomain.BaseDirectory + $@"\Results\{userName}\InferenceLog-{DateTime.Now:yyyy-MM-dd_HH-mm-ss-fff}.txt";

            Directory.CreateDirectory(Path.GetDirectoryName(destinationPath));

            var rules = implicationRules.Select(rule => $"Implication rule {rule.Key} : {rule.Value}").ToList();

            _fileOperations.AppendLinesToFile(destinationPath, rules);

            if (expertOpinion.IsSuccess)
            {
                var results = expertOpinion.Result.Select(result => $"Node {result.NodeName} ({result.DefuzzifiedValue}) was enabled with confidence factor {result.ConfidenceFactor}").ToList();
                _fileOperations.AppendLinesToFile(destinationPath, results);
            }
            else
            {
                _fileOperations.AppendLinesToFile(destinationPath, expertOpinion.ErrorMessages);
            }

            return(destinationPath);
        }