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);
        }
Exemplo n.º 3
0
 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;
            }
        }
Exemplo n.º 6
0
 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);
 }