public void TrapezoidMax_Success(double x0, double x1, double x2, double x3, double expectedResult)
        {
            //Arrange
            var membershipFunction = new TrapezoidMembershipFunction("test", x0, x1, x2, x3);

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

            //Assert
            Assert.That(result, Is.EqualTo(expectedResult));
        }
示例#2
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;
                }
            }
        }
示例#3
0
        [TestCase(0, 0, 10, 20, false, 5, 0)]         // v NOT f
        public void RuleEvaluation_Single_Success(Double a, Double b, Double c, Double d, Boolean IsOp, Double v, Double expectedResult)
        {
            //Arrange
            var conditions = new List <FuzzyRuleCondition>();

            var variable = new LinguisticVariable("v");

            variable.InputValue = v;
            var operatr  = new FuzzyRuleToken("is", IsOp ? FuzzyRuleTokenType.Is : FuzzyRuleTokenType.Not);
            var function = new TrapezoidMembershipFunction("f", a, b, c, d);

            conditions.Add(new FuzzyRuleCondition(variable, operatr, function));

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

            //Assert
            Assert.That(result, Is.EqualTo(expectedResult));
        }
示例#4
0
        private Double TrapezoidCentroid(TrapezoidMembershipFunction f)
        {
            var top = f.C - f.B;
            var bot = f.D - f.A;

            var tm = f.B + (top / 2.0);             //top midpoint
            var bm = f.A + (bot / 2.0);             //bottom midpoint

            if (tm == bm)
            {
                return(tm);
            }

            //y value for the centroid
            var y = ((2.0 * top) + bot) / (top + bot);

            y = y / 3.0;

            var mRecip = (tm - bm);             // mRecip =  (1 / m)
            var b      = (bm / mRecip);

            return((y + b) * mRecip);
        }
示例#5
0
 private Double TrapezoidArea(TrapezoidMembershipFunction f, Double centroid)
 {
     return(((f.C - f.B) + (f.D - f.A)) * f.PremiseModifier);
 }
        public void CoG_Defuzzify_Trapezoid()
        {
            var memFunc = new TrapezoidMembershipFunction("mf", 0, 10, 20, 30);

            CoG_Defuzzify(memFunc, 15);
        }