public void FlaecheTest()
        {
            TriangleMembershipFunction f = new TriangleMembershipFunction(new Coordinate(0, 0), new Coordinate(0.5, 1), new Coordinate(1, 0));
            Assert.AreEqual(0.5, f.FlaecheBerechnen(), 0.0001);

            f = new TriangleMembershipFunction(new Coordinate(1, 0), new Coordinate(2, 1), new Coordinate(3, 0));
            double result = f.FlaecheBerechnen();
            Assert.AreEqual(2, result, 0.0001);
        }
Esempio n. 2
0
        public void TriangleFunction_Triangle08_ShouldBeDifferentThan0Or1()
        {
            IMembershipFunction triangleMembershipFunction = new TriangleMembershipFunction(0, 8, 4);
            double expected     = 0.5;
            double valueToCount = 2;
            double result       = triangleMembershipFunction.GetMembershipFunctionValue(valueToCount);

            Assert.AreEqual(expected, result);
        }
Esempio n. 3
0
        public void TriangleFunction_Triangle36_ShouldBe0LeftOnEdge()
        {
            IMembershipFunction triangleMembershipFunction = new TriangleMembershipFunction(3, 6, 4);
            double expected     = 0;
            double valueToCount = 3;
            double result       = triangleMembershipFunction.GetMembershipFunctionValue(valueToCount);

            Assert.AreEqual(expected, result);
        }
Esempio n. 4
0
        public void TriangleFunction_Triangle44_ShouldBe1()
        {
            IMembershipFunction triangleMembershipFunction = new TriangleMembershipFunction(4, 4, 4);
            double expected     = 1;
            double valueToCount = 4;
            double result       = triangleMembershipFunction.GetMembershipFunctionValue(valueToCount);

            Assert.AreEqual(expected, result);
        }
Esempio n. 5
0
        public void TriangleFunction_Triangle08_ShouldBeZeroRight()
        {
            IMembershipFunction triangleMembershipFunction = new TriangleMembershipFunction(0, 8, 4);
            double expected     = 0;
            double valueToCount = 9;
            double result       = triangleMembershipFunction.GetMembershipFunctionValue(valueToCount);

            Assert.AreEqual(expected, result);
        }
        public void SchwerpunktTest()
        {
            TriangleMembershipFunction f = new TriangleMembershipFunction(new Coordinate(0, 0), new Coordinate(0.5, 1), new Coordinate(1, 0));
            Stopwatch sw = new Stopwatch();
            sw.Start();
            Assert.AreEqual(0.5, f.SchwerpunktBerechnen(), 0.0001);
            sw.Stop();

            f = new TriangleMembershipFunction(new Coordinate(1, 0), new Coordinate(2, 1), new Coordinate(3, 0));
            double result = f.SchwerpunktBerechnen();
            Assert.AreEqual(2, result, 0.0001);
        }
        public void CompositeMax_Success()
        {
            //Arrange
            var triMF1             = new TriangleMembershipFunction("t1", 0, 10, 20);
            var triMF2             = new TriangleMembershipFunction("t2", 10, 20, 30);
            var membershipFunction = new CompositeMembershipFunction("test", triMF1, triMF2, 15.0);

            //Act
            var result = membershipFunction.Max();

            //Assert
            Assert.That(result, Is.EqualTo(30));
        }
        public void CompositeFuzzify_Success(double inputValue, double expectedResult)
        {
            //Arrange
            var triMF1             = new TriangleMembershipFunction("t1", 0, 10, 20);
            var triMF2             = new TriangleMembershipFunction("t2", 10, 20, 30);
            var membershipFunction = new CompositeMembershipFunction("test", triMF1, triMF2, 15.0);

            //Act
            var result = membershipFunction.Fuzzify(inputValue);

            //Assert
            Assert.That(Math.Round(result, 3), Is.EqualTo(expectedResult));
        }
Esempio n. 9
0
        public LinguisticVariable(LinguisticVariableParameters par)
        {
            name = par.Name;
            x    = par.range;
            H    = par.Labels.ToArray();
            G    = new IMembershipFunction[par.memberShipFunction.Count];

            for (int i = 0; i < par.memberShipFunction.Count; i++)
            {
                var mFunction = par.memberShipFunction[i];
                mFunction = mFunction.Remove(mFunction.Length - 1, 1);
                var mFunctionArray = mFunction.Split('(');

                var args = new List <string>();
                foreach (var v in mFunctionArray[1].Split(','))
                {
                    args.Add(v);
                }
                switch (mFunctionArray[0])
                {
                case "triangle":
                    var triangle1 = double.Parse(args[0]);
                    var triangle2 = double.Parse(args[1]);
                    var triangle3 = double.Parse(args[2]);
                    G[i] = new TriangleMembershipFunction(triangle1, triangle2, triangle3);
                    break;

                case "trapezoid":
                    var trapezoid1 = double.Parse(args[0]);
                    var trapezoid2 = double.Parse(args[1]);
                    var trapezoid3 = double.Parse(args[2]);
                    var trapezoid4 = double.Parse(args[3]);
                    G[i] = new TrapezoidMembershipFunction(trapezoid1, trapezoid2, trapezoid3, trapezoid4);
                    break;

                case "classic":
                    var classic1 = args[0];
                    var classic2 = double.Parse(args[1]);
                    G[i] = new ClassicMembershipFunction(classic1, classic2);
                    break;

                case "gauss":
                    var gauss1 = double.Parse(args[0]);
                    var gauss2 = double.Parse(args[1]);
                    G[i] = new GaussMembershipFunction(gauss1, gauss2);
                    break;
                }
            }
        }
Esempio n. 10
0
        /// <summary>
        /// Handles the Click event of the ButtonAddTerm control.
        /// </summary>
        /// <param name="sender">The source of the event.</param>
        /// <param name="e">The <see cref="EventArgs"/> instance containing the event data.</param>
        private void ButtonAddTerm_Click(object sender, EventArgs e)
        {
            var term = new TermModel(this.textBoxTermName.Text.ToString());

            if (this.comboBoxVariableForm.SelectedItem == null || string.IsNullOrEmpty(term.Name))
            {
                return;
            }

            IMembershipFunction function = null;

            if (this.comboBoxVariableForm.SelectedItem.Equals("Triangle"))
            {
                // TODO: Make validation for entered values.
                function = new TriangleMembershipFunction
                {
                    Left   = Int32.Parse(this.textBoxTriangleLeft.Text),
                    Middle = Int32.Parse(this.textBoxTriangleMiddle.Text),
                    Right  = Int32.Parse(this.textBoxTriangleRight.Text)
                };
            }
            else if (this.comboBoxVariableForm.SelectedItem.Equals("Gauss"))
            {
                // TODO: Make validation
                function = new GaussMembershipFunction
                {
                    B = Int32.Parse(this.textBoxGaussB.Text),
                    C = Int32.Parse(this.textBoxGaussC.Text)
                };
            }
            term.Function = function;

            /// Checks if term was edited or created new one.
            if (this.newFuzzyVariable.Terms.Any(t => t.Name.Equals(this.textBoxTermName.Text.ToString())))
            {
                int termIndex = this.newFuzzyVariable.Terms.FindIndex(t => t.Name.Equals(this.textBoxTermName.Text));
                this.newFuzzyVariable.Terms[termIndex] = term;
            }
            else
            {
                this.newFuzzyVariable.Terms.Add(term);
            }

            this.ClearTermField();

            this.UpdateListBox();
            this.UpdateChart(term);
        }
Esempio n. 11
0
        [TestCase(0, 10, 20, true, false, 0, 10, 30, false, 15, .5)]       // v1 IS f1 OR v2 NOT f2
        public void RuleEvaluation_Double_Success(Double a1, Double b1, Double c1, Boolean IsOp1,
                                                  Boolean And,
                                                  Double a2, Double b2, Double c2, Boolean IsOp2,
                                                  Double v, Double expectedResult)
        {
            //Arrange
            var conditions = new List <FuzzyRuleCondition>();

            var variable1 = new LinguisticVariable("v1");

            variable1.InputValue = v;
            var operatr1  = new FuzzyRuleToken("is", IsOp1 ? FuzzyRuleTokenType.Is : FuzzyRuleTokenType.Not);
            var function1 = new TriangleMembershipFunction("f1", a1, b1, c1);
            var con1      = new FuzzyRuleCondition(variable1, operatr1, function1);

            conditions.Add(con1);

            var variable2 = new LinguisticVariable("v2");

            variable2.InputValue = v;
            var operatr2  = new FuzzyRuleToken("is", IsOp2 ? FuzzyRuleTokenType.Is : FuzzyRuleTokenType.Not);
            var function2 = new TriangleMembershipFunction("f2", a2, b2, c2);
            var con2      = new FuzzyRuleCondition(variable2, operatr2, function2);

            conditions.Add(con2);

            var conjToken = new FuzzyRuleToken("and", And ? FuzzyRuleTokenType.And : FuzzyRuleTokenType.Or);
            var conj      = new FuzzyRuleConditionConjunction()
            {
                FirstCondition = con1, SecondCondition = con2, Conjunction = conjToken
            };

            con2.Conjunction = conj;


            //Act
            var srv    = new FuzzyRuleEvaluator();
            var result = srv.Evaluate(conditions);

            //Assert
            Assert.That(result, Is.EqualTo(expectedResult));
        }
        public void GetYTest()
        {
            TriangleMembershipFunction f = new TriangleMembershipFunction(new Coordinate(0, 0), new Coordinate(0.5, 1), new Coordinate(1, 0));

            Assert.AreEqual(0, f.GetY(0));
            Assert.AreEqual(1, f.GetY(0.5));
            Assert.AreEqual(0, f.GetY(1));
            Assert.AreEqual(0.5, f.GetY(0.25));
            Assert.AreEqual(0.5, f.GetY(0.75));
            Assert.AreEqual(0, f.GetY(2));
            Assert.AreEqual(0, f.GetY(-2));

            f = new TriangleMembershipFunction(new Coordinate(1, 0), new Coordinate(2, 1), new Coordinate(3, 0));

            Assert.AreEqual(0, f.GetY(0));
            Assert.AreEqual(0, f.GetY(1));
            Assert.AreEqual(1, f.GetY(2));
            Assert.AreEqual(0, f.GetY(3));
            Assert.AreEqual(0.5, f.GetY(1.5));
            Assert.AreEqual(0.5, f.GetY(2.5));
            Assert.AreEqual(0, f.GetY(-2));
        }
Esempio n. 13
0
        public static SentenceTuple getSentenceElementsFromFile()
        {
            SentenceTuple       sentenceTuple = new SentenceTuple();
            List <Summarizator> summarizators = new List <Summarizator>();
            List <Qualifier>    qualifiers    = new List <Qualifier>();
            List <Quantifier>   quantifiers   = new List <Quantifier>();
            string workingDirectory           = Environment.CurrentDirectory;
            string filepath = Directory.GetParent(workingDirectory).Parent.Parent.FullName + "\\SummarizatorOrQualifier.csv";

            using (TextFieldParser csvParser = new TextFieldParser(filepath))
            {
                csvParser.CommentTokens = new[] { "#" };
                csvParser.SetDelimiters(";");
                csvParser.HasFieldsEnclosedInQuotes = false;
                csvParser.ReadLine();
                var parsingMode            = ElementType.Summarizator;
                var currentLogicalOperator = OperationType.And;
                Quantifier.QuantifierType quantifierType = Quantifier.QuantifierType.Relative;

                while (!csvParser.EndOfData)
                {
                    IMembershipFunction membershipFunction;
                    string[]            singleRow = csvParser.ReadFields();
                    if ((singleRow ?? throw new InvalidOperationException()).Contains(""))
                    {
                        continue;
                    }
                    if (singleRow[0].Contains("summarizators"))
                    {
                        parsingMode            = ElementType.Summarizator;
                        currentLogicalOperator = (singleRow[1] == OperationType.And.ToString().ToLowerInvariant()) ? OperationType.And : OperationType.Or;
                        continue;
                    }
                    else if (singleRow[0] == "qualifiers")
                    {
                        parsingMode = ElementType.Qualifier;
                        continue;
                    }
                    else if (singleRow[0] == "quantifiers")
                    {
                        parsingMode    = ElementType.Quantifier;
                        quantifierType = singleRow[1] == Quantifier.QuantifierType.Relative.ToString().ToLowerInvariant() ? Quantifier.QuantifierType.Relative : Quantifier.QuantifierType.Absolute;
                        continue;
                    }
                    string   description        = singleRow[0];
                    string   attributeName      = singleRow[1];
                    string   functionType       = singleRow[2];
                    string[] functionParametres = singleRow[3].Split(',');
                    int      minValue           = int.Parse(singleRow[4]);
                    int      maxValue           = int.Parse(singleRow[5]);
                    if (functionType == "trian")
                    {
                        membershipFunction = new TriangleMembershipFunction(double.Parse(functionParametres[0], CultureInfo.InvariantCulture), double.Parse(functionParametres[1], CultureInfo.InvariantCulture), double.Parse(functionParametres[2], CultureInfo.InvariantCulture));
                    }
                    else
                    {
                        membershipFunction = new TrapezoidalMembershipFunction(double.Parse(functionParametres[0], CultureInfo.InvariantCulture), double.Parse(functionParametres[1], CultureInfo.InvariantCulture), double.Parse(functionParametres[2], CultureInfo.InvariantCulture), double.Parse(functionParametres[3], CultureInfo.InvariantCulture));
                    }
                    switch (parsingMode)
                    {
                    case ElementType.Summarizator:
                        summarizators.Add(new Summarizator(
                                              description,
                                              attributeName,
                                              membershipFunction,
                                              minValue,
                                              maxValue));
                        break;

                    case ElementType.Qualifier:
                        qualifiers.Add(new Qualifier(
                                           description,
                                           attributeName,
                                           membershipFunction,
                                           minValue,
                                           maxValue));
                        break;

                    case ElementType.Quantifier:
                        quantifiers.Add(new Quantifier(
                                            description,
                                            membershipFunction,
                                            quantifierType,
                                            minValue,
                                            maxValue));
                        break;
                    }
                }
                return(new SentenceTuple(qualifiers, quantifiers, summarizators, currentLogicalOperator));
            }
        }
        public void CoG_Defuzzify_Triangle()
        {
            var memFunc = new TriangleMembershipFunction("mf", 30, 50, 70);

            CoG_Defuzzify(memFunc, 50);
        }