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); }
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."); } } }
public void SetUp() { _expertOpinion = new ExpertOpinion(); }
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); }