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