Example #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);
        }
Example #2
0
        public bool FuzzyGenerateRulesAndGetResultFLLComparison(GetRuleDTO rules, double inputValue1, double inputValue2, int rate)
        {
            FuzzySystemResultDTO system = new FuzzySystemResultDTO();

            system      = GenerateSystem(rules, inputValue1);
            _fsSoil     = system.System;
            inputValue1 = system.InputValue;

            FuzzyVariable fvInput1  = _fsSoil.InputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Input).DegiskenGorunenAdi);
            FuzzyVariable fvOutput1 = _fsSoil.OutputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Output).DegiskenGorunenAdi);

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

            inputValues1.Add(fvInput1, inputValue1);

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

            _fsSoil.DefuzzificationMethod = DefuzzificationMethod.Bisector;

            double outputValue1 = result1[fvOutput1];

            _fsSoil     = null;
            system      = GenerateSystem(rules, inputValue2);
            _fsSoil     = system.System;
            inputValue2 = system.InputValue;

            FuzzyVariable fvInput2  = _fsSoil.InputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Input).DegiskenGorunenAdi);
            FuzzyVariable fvOutput2 = _fsSoil.OutputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Output).DegiskenGorunenAdi);

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

            inputValues2.Add(fvInput2, inputValue2);

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

            _fsSoil.DefuzzificationMethod = DefuzzificationMethod.Centroid;

            double outputValue2 = result2[fvOutput2];

            var result = GetResultForProximity(outputValue1, outputValue2, rate);

            return(result);
        }
Example #3
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);
        }
Example #4
0
        private FuzzySystemResultDTO GenerateSystem(GetRuleDTO rules, double inputValue)
        {
            FuzzySystemResultDTO result = new FuzzySystemResultDTO();
            MamdaniFuzzySystem   fsSoil = new MamdaniFuzzySystem();

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

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

                        fvOutput.Terms.Add(new FuzzyTerm(variableItems[i].DegiskenItemGorunenAdi, new TriangularMembershipFunction(variableItems[i].MinDeger, (variableItems[i].MinDeger + variableItems[i].MaxDeger) / 2, maxValue)));
                    }
                    fsSoil.Output.Add(fvOutput);
                }
            }

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

            result.System     = fsSoil;
            result.InputValue = inputValue;
            return(result);
        }
Example #5
0
        public string FuzzyGenerateRulesAndGetResultFLL(GetRuleDTO rules, double inputValue)
        {
            //var ozdirenc = GorunenAdDuzenle(kuralKume.OzdirencList);
            //var toprak = GorunenAdDuzenle(kuralKume.ToprakList);
            FuzzySystemResultDTO system = new FuzzySystemResultDTO();

            system     = GenerateSystem(rules, inputValue);
            _fsSoil    = system.System;
            inputValue = system.InputValue;


            FuzzyVariable fvInput  = _fsSoil.InputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Input).DegiskenGorunenAdi);
            FuzzyVariable fvOutput = _fsSoil.OutputByName(rules.VariableList.FirstOrDefault(d => d.DegiskenTipID == (byte)Enums.VariableType.Output).DegiskenGorunenAdi);

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

            inputValues.Add(fvInput, inputValue);

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

            _fsSoil.DefuzzificationMethod = DefuzzificationMethod.Centroid;

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

            return(outputType);

            #region FuzzyIslemleri
            //#region Inputs
            //FuzzyVariable fvOzdirenc = new FuzzyVariable("Ozdirenc", 0.0, 1000.0);
            //foreach (var item in ozdirenc)
            //{
            //    fvOzdirenc.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger)));
            //}
            //fsToprak.Input.Add(fvOzdirenc);

            //FuzzyVariable fvMukavemet = new FuzzyVariable("Mukavemet", 0.0, 1000.0);
            //foreach (var item in _commonManager.Mukavemet)
            //{
            //    fvMukavemet.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger)));
            //}
            //fsToprak.Input.Add(fvMukavemet);

            //FuzzyVariable fvDoygunluk = new FuzzyVariable("Doygunluk", 0.0, 10.0);
            //foreach (var item in _commonManager.Doygunluk)
            //{
            //    fvDoygunluk.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger)));
            //}
            //fsToprak.Input.Add(fvDoygunluk);
            //#endregion

            //#region Output
            //FuzzyVariable fvToprak = new FuzzyVariable("Toprak", 0.0, 1000.0);
            //foreach (var item in toprak)
            //{
            //    fvToprak.Terms.Add(new FuzzyTerm(item.Adi, new TriangularMembershipFunction(item.MinDeger, (item.MinDeger + item.MaxDeger) / 2, item.MaxDeger)));
            //}
            //fsToprak.Output.Add(fvToprak);
            //#endregion
            //List<string> kurallar = new List<string>();

            //foreach (var KuralListItem in kuralKume.KuralList)
            //{
            //    string ruleText = KuralOlustur(KuralListItem) + " then (Toprak is " + KuralListItem.Sonuc + ")";
            //    kurallar.Add(ruleText);
            //}
            #endregion
        }
Example #6
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);
        }