Beispiel #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);
        }
Beispiel #2
0
        public void AddErrorMessage_AddsMessageToErrorMessagesList()
        {
            // Arrange
            string errorMessage = "Oh no";

            // Act
            _expertOpinion.AddErrorMessage(errorMessage);

            // Assert
            Assert.IsFalse(_expertOpinion.IsSuccess);
            Assert.AreEqual(1, _expertOpinion.ErrorMessages.Count);
            Assert.AreEqual(errorMessage, _expertOpinion.ErrorMessages[0]);
        }
Beispiel #3
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.");
         }
     }
 }