Exemple #1
0
        public string CreateFuzzyRuleAndReturnResult(FetchRuleDTO rules, double inputValue)
        {
            FuzzySystemResultDTO system = new FuzzySystemResultDTO();

            system     = CreateSystem(rules, inputValue);
            _fsGround  = system.System;
            inputValue = system.InputValue;


            FuzzyVariable fvInput  = _fsGround.InputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName);
            FuzzyVariable fvOutput = _fsGround.OutputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName);

            Dictionary <FuzzyVariable, double> inputValues = new Dictionary <FuzzyVariable, double>();

            inputValues.Add(fvInput, inputValue);

            Dictionary <FuzzyVariable, double> result = _fsGround.Calculate(inputValues);

            _fsGround.DefuzzificationMethod = DefuzzificationMethod.Centroid;

            double outputValue = result[fvOutput];
            string outputType  = ReturnLimitNearbyResults(rules, outputValue);

            return(outputType);
        }
Exemple #2
0
        public bool CreateFuzzyRuleAndCompare(FetchRuleDTO rules, double inputValue1, double inputValue2, int ratio)
        {
            FuzzySystemResultDTO system = new FuzzySystemResultDTO();

            system      = CreateSystem(rules, inputValue1);
            _fsGround   = system.System;
            inputValue1 = system.InputValue;

            FuzzyVariable fvInput1  = _fsGround.InputByName(session.variables.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName);
            FuzzyVariable fvOutput1 = _fsGround.OutputByName(session.variables.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName);

            Dictionary <FuzzyVariable, double> inputValues1 = new Dictionary <FuzzyVariable, double>();

            inputValues1.Add(fvInput1, inputValue1);

            Dictionary <FuzzyVariable, double> result1 = _fsGround.Calculate(inputValues1);

            _fsGround.DefuzzificationMethod = DefuzzificationMethod.Bisector;

            double outputValue1 = result1[fvOutput1];

            _fsGround   = null;
            system      = CreateSystem(rules, inputValue2);
            _fsGround   = system.System;
            inputValue2 = system.InputValue;

            FuzzyVariable fvInput2  = _fsGround.InputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Input).visibleVariableName);
            FuzzyVariable fvOutput2 = _fsGround.OutputByName(rules.VariableList.FirstOrDefault(d => d.variableTypeID == (byte)Enums.VariableType.Output).visibleVariableName);

            Dictionary <FuzzyVariable, double> inputValues2 = new Dictionary <FuzzyVariable, double>();

            inputValues2.Add(fvInput2, inputValue2);

            Dictionary <FuzzyVariable, double> result2 = _fsGround.Calculate(inputValues2);

            _fsGround.DefuzzificationMethod = DefuzzificationMethod.Centroid;

            double outputValue2 = result2[fvOutput2];

            var result = ReturnNearbyResults(outputValue1, outputValue2, ratio);

            return(result);
        }
Exemple #3
0
        private string ReturnLimitNearbyResults(FetchRuleDTO rules, double outputValue)
        {
            string result = "";

            var variableID = rules.VariableList.FirstOrDefault(dl => dl.variableTypeID == (byte)Enums.VariableType.Output).variableID;
            //var OutputList = _variableItemService.Queryable().Where(d => d.variableID == variableID).ToList();
            var OutputList = session.variableItems.Where(d => d.variableID == variableID).ToList();

            for (int i = 0; i < OutputList.Count; i++)
            {
                if (i == OutputList.Count - 1)
                {
                    //if (outputValue >= OutputList[i].MinDeger && outputValue <= OutputList[i].MaxDeger)
                    //{
                    result = OutputList[i].variableItemName;
                    break;
                    //}
                }
                else
                {
                    if (OutputList[i].maxValue > OutputList[i + 1].minValue) //Bir sonraki tanım aralığı ile kesişimi var demektir
                    {
                        if (outputValue <= OutputList[i].maxValue && outputValue >= OutputList[i + 1].minValue)
                        {
                            result = Math.Abs(outputValue - OutputList[i].maxValue) > Math.Abs(outputValue - OutputList[i + 1].minValue) ? OutputList[i].variableItemName : OutputList[i + 1].variableItemName;
                            break;
                        }
                    }
                    else
                    {
                        if (outputValue >= OutputList[i].minValue && outputValue <= OutputList[i].maxValue)
                        {
                            result = OutputList[i].variableItemName;
                            break;
                        }
                    }
                }
            }


            return(result);
        }
Exemple #4
0
        public FetchRuleDTO FetchRule(long ruleID, SessionDTO sessionData)
        {
            session = sessionData;
            FetchRuleDTO        fetchRule        = new FetchRuleDTO();
            List <VariableItem> variableItemList = new List <VariableItem>();
            //      var rule = _ruleService.Queryable().FirstOrDefault(k => k.ruleID == ruleID && k.isActive == true);
            var rule         = session.rule;
            var ruleListText = rule.ruleListTexts.ToList();
            var variables    = rule.variables.ToList();

            foreach (var item in variables)
            {
                //var variableItems = _variableItemService.Queryable().Where(d => d.variableID == item.variableID).ToList();
                var variableItems = session.variableItems.Where(d => d.variableID == item.variableID).ToList();
                variableItemList.AddRange(variableItems);
            }

            fetchRule.FuzzyRule        = rule;
            fetchRule.RuleListText     = ruleListText;
            fetchRule.VariableList     = variables;
            fetchRule.VariableItemList = variableItemList;

            return(fetchRule);
        }
Exemple #5
0
        private FuzzySystemResultDTO CreateSystem(FetchRuleDTO rules, double inputValue)
        {
            FuzzySystemResultDTO result   = new FuzzySystemResultDTO();
            MamdaniFuzzySystem   fsGround = new MamdaniFuzzySystem();

            rules.VariableList     = session.variables;
            rules.RuleListText     = session.rules;
            rules.VariableItemList = session.variableItems;

            foreach (var variable in rules.VariableList)
            {
                if (variable.variableTypeID == (byte)Enums.VariableType.Input)
                {
                    FuzzyVariable fvInput       = new FuzzyVariable(variable.visibleVariableName, 0.0, 1000.0);
                    var           variableItems = rules.VariableItemList.Where(k => k.variableID == variable.variableID).ToList();
                    for (int i = 0; i < variableItems.Count; i++)
                    {
                        if (inputValue == variableItems[i].minValue)
                        {
                            inputValue++;
                        }
                        double maxValue;
                        if (i != variableItems.Count - 1)
                        {
                            if (variableItems[i].maxValue == variableItems[i + 1].minValue)
                            {
                                maxValue = variableItems[i].maxValue - 1;
                            }
                            else
                            {
                                maxValue = variableItems[i].maxValue;
                            }
                        }
                        else
                        {
                            maxValue = variableItems[i].maxValue;
                        }

                        fvInput.Terms.Add(new FuzzyTerm(variableItems[i].variableItemVisibleName, new TriangularMembershipFunction(variableItems[i].minValue, (variableItems[i].minValue + variableItems[i].maxValue) / 2, maxValue)));
                    }
                    fsGround.Input.Add(fvInput);
                }
                else
                {
                    FuzzyVariable fvOutput      = new FuzzyVariable(variable.visibleVariableName, 0.0, 1000.0);
                    var           variableItems = rules.VariableItemList.Where(k => k.variableID == variable.variableID).ToList();
                    for (int i = 0; i < variableItems.Count; i++)
                    {
                        double maxValue;
                        if (i != variableItems.Count - 1)
                        {
                            if (variableItems[i].maxValue == variableItems[i + 1].minValue)
                            {
                                maxValue = variableItems[i].maxValue - 1;
                            }
                            else
                            {
                                maxValue = variableItems[i].maxValue;
                            }
                        }
                        else
                        {
                            maxValue = variableItems[i].maxValue;
                        }

                        fvOutput.Terms.Add(new FuzzyTerm(variableItems[i].variableItemVisibleName, new TriangularMembershipFunction(variableItems[i].minValue, (variableItems[i].minValue + variableItems[i].maxValue) / 2, maxValue)));
                    }
                    fsGround.Output.Add(fvOutput);
                }
            }

            foreach (var ruleText in rules.RuleListText)
            {
                MamdaniFuzzyRule rule = fsGround.ParseRule(ruleText.ruleText);
                fsGround.Rules.Add(rule);
            }

            result.System     = fsGround;
            result.InputValue = inputValue;
            return(result);
        }