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); }
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]); }
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."); } } }