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)); }
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; } } }
[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)); }
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); }
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); }