public ConstrainActions (ConclusionClass _conclusionClass, ViewModel _viewModel, GatheredBases _bases) { _conclusionClass = conclusionClass; viewModel = _viewModel; bases = _bases; }
private int CheckCondition(string condition, int i) { var conc = ConclusionClass.CheckIfStringIsFact(condition, _bases.FactBase.FactList); //TODO:trzeba sprawdzic metodę która sprawdza czy string jest faktem if (conc) { i++; } else { var value = ConclusionClass.FindConditionsOrReturnNull (condition, _bases.RuleBase.RulesList); if (value == null) { if (IsModel(condition) == false) { _viewModel.AskingForwardRuleValueMethod(condition); i++; } else { if ((bool)_modelActions.ProcessModel(condition)) //todo: może byc jakiś problem { i++; } //todo:jeszcze trzeba będzie przelecieć przez } } } return(i); }
public ModelActions (ConclusionClass _conclusionClass, ViewModel _viewModel, GatheredBases _bases, IElementsNamesLanguageConfig config) { conclusionClass = _conclusionClass; viewModel = _viewModel; bases = _bases; _config = config; }
public ForwardChaining(GatheredBases bases, ConclusionClass conclusion, ViewModel viewModel, ConstrainActions constrainActions) { _bases = bases; _conclusion = conclusion; _viewModel = viewModel; _constrainActions = constrainActions; _modelActions = new ModelActions(_conclusion, _viewModel, bases, viewModel._elementsNamesLanguageConfig); }
public void Forward() { _bases.FactBase.FactList = new List <Fact>(); _bases.FactBase.ReadFacts(_viewModel.CurrentRuleBasePath); //todo: powinno zaladować fakty try { foreach (var constrain in _bases.ConstrainBase.ConstrainList) { _constrainActions.AskForConstrainValue(constrain); } allConcrete = false; while (allConcrete == false) { ReportConclusionResult(); foreach (var rule in _bases.RuleBase.RulesList) { // _conclusion.FindHelpfulAssets(rule); bool isFact = ConclusionClass.CheckIfStringIsFact(rule.Conclusion, _bases.FactBase.FactList); if (isFact == false) { int i = 0; foreach (var condition in rule.Conditions) { i = CheckCondition(condition, i); } if (i == rule.Conditions.Count) { InputResult(rule); break; } } } if (AskedConditions() == _bases.FactBase.FactList.Count) { allConcrete = true; } } MessageBox.Show("Koniec wnioskowania wprzód na \n konsoli znajdują się jego rezultaty"); } catch (ApplicationException ex) { MessageBox.Show("Wnioskowanie przerwane"); _viewModel.ExceptionValue = false; } }
private bool CheckStartCondition(string startCondition) { if (startCondition != _config.NoConditionInModel) { bool value = ConclusionClass.CheckIfStringIsFact(startCondition, bases.ModelsBase.ModelFactList); if (value) { return(true); } var rules = ConclusionClass.FindRulesWithParticularConclusion(startCondition, bases.RuleBase.RulesList); var models = FindModels(startCondition); //todo:trzeba sprawdzic jeszcze modele relacyjne if (rules.Count == 0) { if (!models.Any()) { return(viewModel.AskingStartConditionValue(startCondition)); } } if (!rules.Any()) { foreach (var rule in rules) { bool startConditionValue = conclusionClass.BackwardConclude(rule); if (startConditionValue) { return(true); } } } if (!models.Any()) { bool startConditionValue = (bool)ProcessModel(startCondition); if (startConditionValue) { return(true); } } return(false); } return(true); }