// Testing basic funcionality of fuzzy sets private void runFuzzySetTestButton_Click( object sender, EventArgs e ) { ClearDataSeries( ); // create 2 fuzzy sets to represent the Cool and Warm temperatures TrapezoidalFunction function1 = new TrapezoidalFunction( 13, 18, 23, 28 ); FuzzySet fsCool = new FuzzySet( "Cool", function1 ); TrapezoidalFunction function2 = new TrapezoidalFunction( 23, 28, 33, 38 ); FuzzySet fsWarm = new FuzzySet( "Warm", function2 ); // get membership of some points to the cool fuzzy set double[,] coolValues = new double[20, 2]; for ( int i = 10; i < 30; i++ ) { coolValues[i - 10, 0] = i; coolValues[i - 10, 1] = fsCool.GetMembership( i ); } // getting memberships of some points to the warm fuzzy set double[,] warmValues = new double[20, 2]; for ( int i = 20; i < 40; i++ ) { warmValues[i - 20, 0] = i; warmValues[i - 20, 1] = fsWarm.GetMembership( i ); } // plot membership to a chart chart.UpdateDataSeries( "COOL", coolValues ); chart.UpdateDataSeries( "WARM", warmValues ); }
public InferenceSystem SetupInferenceSystem(int width) { var mp = new TrapezoidalFunction(centerPoint - width/2, centerPoint, centerPoint + width/2); var mn = new TrapezoidalFunction(-centerPoint - width/2, -centerPoint, -centerPoint + width/2); var sp = new TrapezoidalFunction(-centerPoint/2 + width/4, (double) centerPoint/2, centerPoint/2 + width/3); var sn = new TrapezoidalFunction(-centerPoint/2 - width/3, (double) -centerPoint/2, centerPoint/2 - width/4); var ze = new TrapezoidalFunction(-(double)centerPoint / 4, 0, (double)centerPoint / 4); var mpSet = new FuzzySet("MP", mp); var mnSet = new FuzzySet("MN", mn); var spSet = new FuzzySet("SP", sp); var snSet = new FuzzySet("SN", sn); var zeSet = new FuzzySet("ZE", ze); var ruleDatabase = new Database(); for (int i = 0; i < windowSize*windowSize - 1; i++) { var variable = new LinguisticVariable(String.Format("IN{0}", i), -255, 255); variable.AddLabel(mpSet); variable.AddLabel(mnSet); ruleDatabase.AddVariable(variable); } var outVariable = new LinguisticVariable("OUT", -centerPoint - width/2, centerPoint + width/2); outVariable.AddLabel(spSet); outVariable.AddLabel(snSet); outVariable.AddLabel(zeSet); ruleDatabase.AddVariable(outVariable); var inferenceSystem = new InferenceSystem(ruleDatabase, new CentroidDefuzzifier(100)); string rule1 = "IF "; string rule2 = "IF "; string rule3 = "IF "; for (int i = 0; i < windowSize*windowSize - 1; i++) { rule1 += String.Format("IN{0} is MP and ", i); rule2 += String.Format("IN{0} is MN and ", i); rule3 += String.Format("IN{0} is not MP and IN{0} is not MN AND ", i); } rule1 = rule1.Remove(rule1.Length - 4, 4); rule2 = rule2.Remove(rule2.Length - 4, 4); rule3 = "IF NOT (" + rule1.Replace("IF", "") + ") AND NOT(" + rule2.Replace("IF", "") + ")"; rule1 += " then OUT is SN"; rule2 += " then OUT is SP"; rule3 += " then OUT is ZE"; inferenceSystem.NewRule("Rule1", rule1); inferenceSystem.NewRule("Rule2", rule2); inferenceSystem.NewRule("Rule3", rule3); return inferenceSystem; }
// Testing basic funcionality of linguistic variables private void runLingVarTestButton_Click( object sender, EventArgs e ) { ClearDataSeries( ); // create a linguistic variable to represent temperature LinguisticVariable lvTemperature = new LinguisticVariable( "Temperature", 0, 80 ); // create the linguistic labels (fuzzy sets) that compose the temperature TrapezoidalFunction function1 = new TrapezoidalFunction( 10, 15, TrapezoidalFunction.EdgeType.Right ); FuzzySet fsCold = new FuzzySet( "Cold", function1 ); TrapezoidalFunction function2 = new TrapezoidalFunction( 10, 15, 20, 25 ); FuzzySet fsCool = new FuzzySet( "Cool", function2 ); TrapezoidalFunction function3 = new TrapezoidalFunction( 20, 25, 30, 35 ); FuzzySet fsWarm = new FuzzySet( "Warm", function3 ); TrapezoidalFunction function4 = new TrapezoidalFunction( 30, 35, TrapezoidalFunction.EdgeType.Left ); FuzzySet fsHot = new FuzzySet( "Hot", function4 ); // adding labels to the variable lvTemperature.AddLabel( fsCold ); lvTemperature.AddLabel( fsCool ); lvTemperature.AddLabel( fsWarm ); lvTemperature.AddLabel( fsHot ); // get membership of some points to the cool fuzzy set double[][,] chartValues = new double[4][,]; for ( int i = 0; i < 4; i++ ) chartValues[i] = new double[160, 2]; // showing the shape of the linguistic variable - the shape of its labels memberships from start to end int j = 0; for ( float x = 0; x < 80; x += 0.5f, j++ ) { double y1 = lvTemperature.GetLabelMembership( "Cold", x ); double y2 = lvTemperature.GetLabelMembership( "Cool", x ); double y3 = lvTemperature.GetLabelMembership( "Warm", x ); double y4 = lvTemperature.GetLabelMembership( "Hot", x ); chartValues[0][j, 0] = x; chartValues[0][j, 1] = y1; chartValues[1][j, 0] = x; chartValues[1][j, 1] = y2; chartValues[2][j, 0] = x; chartValues[2][j, 1] = y3; chartValues[3][j, 0] = x; chartValues[3][j, 1] = y4; } // plot membership to a chart chart.UpdateDataSeries( "COLD", chartValues[0] ); chart.UpdateDataSeries( "COOL", chartValues[1] ); chart.UpdateDataSeries( "WARM", chartValues[2] ); chart.UpdateDataSeries( "HOT", chartValues[3] ); }
public void SetInput2() { this.Power = new LinguisticVariable("Moc_samochodu", 20, 180); TrapezoidalFunction function1 = new TrapezoidalFunction(40, 100, TrapezoidalFunction.EdgeType.Right); FuzzySet set1 = new FuzzySet("mała", function1); TrapezoidalFunction function2 = new TrapezoidalFunction(70, 100, 130); FuzzySet set2 = new FuzzySet("średnia", function2); TrapezoidalFunction function3 = new TrapezoidalFunction(100, 160, TrapezoidalFunction.EdgeType.Left); FuzzySet set3 = new FuzzySet("duża", function3); Power.AddLabel(set1); Power.AddLabel(set2); Power.AddLabel(set3); database.AddVariable(Power); double y1; double y2; double y3; for (float x = 20; x < 180; x += 0.5f) { if (Power.GetLabelMembership("mała", x + 0.5f) + Power.GetLabelMembership("mała", x) > 0) { y1 = Power.GetLabelMembership("mała", x); chart5.Series["Mała"].Points.AddXY(x, y1); } if (Power.GetLabelMembership("średnia", x + 0.5f) + Power.GetLabelMembership("średnia", x) > 0) { y2 = Power.GetLabelMembership("średnia", x); chart5.Series["Średnia"].Points.AddXY(x, y2); } if (Power.GetLabelMembership("duża", x + 0.5f) + Power.GetLabelMembership("duża", x) > 0) { y3 = Power.GetLabelMembership("duża", x); chart5.Series["Duża"].Points.AddXY(x, y3); } } }
public void SetInput1() { this.Temp_opon = new LinguisticVariable("Temperatura", 0, 180); TrapezoidalFunction function1 = new TrapezoidalFunction(30, 90, TrapezoidalFunction.EdgeType.Right); FuzzySet set1 = new FuzzySet("zimne", function1); TrapezoidalFunction function2 = new TrapezoidalFunction(70, 90, 110); FuzzySet set2 = new FuzzySet("średnie", function2); TrapezoidalFunction function3 = new TrapezoidalFunction(90, 150, TrapezoidalFunction.EdgeType.Left); FuzzySet set3 = new FuzzySet("gorące", function3); Temp_opon.AddLabel(set1); Temp_opon.AddLabel(set2); Temp_opon.AddLabel(set3); database.AddVariable(Temp_opon); double y1; double y2; double y3; for (float x = 0; x < 180; x += 0.5f) { if (Temp_opon.GetLabelMembership("zimne", x + 0.5f) + Temp_opon.GetLabelMembership("zimne", x) > 0) { y1 = Temp_opon.GetLabelMembership("zimne", x); chart4.Series["Zimne"].Points.AddXY(x, y1); } if (Temp_opon.GetLabelMembership("średnie", x + 0.5f) + Temp_opon.GetLabelMembership("średnie", x) > 0) { y2 = Temp_opon.GetLabelMembership("średnie", x); chart4.Series["Średnie"].Points.AddXY(x, y2); } if (Temp_opon.GetLabelMembership("gorące", x + 0.5f) + Temp_opon.GetLabelMembership("gorące", x) > 0) { y3 = Temp_opon.GetLabelMembership("gorące", x); chart4.Series["Gorące"].Points.AddXY(x, y3); } } }
private InferenceSystem SetupInferenceSystem(byte minLuma, byte maxLuma, byte meanLuma) { var lumaIn = new LinguisticVariable("LumaIn", minLuma, maxLuma); var lumaOut = new LinguisticVariable("LumaOut", 0, 255); var darkFunction = new TrapezoidalFunction(minLuma, meanLuma, TrapezoidalFunction.EdgeType.Right); var darkSet = new FuzzySet("Dark", darkFunction); var mediumFunction = new TrapezoidalFunction(minLuma, meanLuma, maxLuma); var mediumSet = new FuzzySet("Medium", mediumFunction); var lightFunction = new TrapezoidalFunction(meanLuma, maxLuma, TrapezoidalFunction.EdgeType.Left); var lightSet = new FuzzySet("Light", lightFunction); lumaIn.AddLabel(darkSet); lumaIn.AddLabel(mediumSet); lumaIn.AddLabel(lightSet); var whiteFunction = new SingletonFunction(255); var whiteSet = new FuzzySet("White", whiteFunction); var blackFunction = new SingletonFunction(0); var blackSet = new FuzzySet("Black", blackFunction); var grayFunction = new SingletonFunction(128); var graySet = new FuzzySet("Gray", grayFunction); lumaOut.AddLabel(blackSet); lumaOut.AddLabel(graySet); lumaOut.AddLabel(whiteSet); var database = new Database(); database.AddVariable(lumaIn); database.AddVariable(lumaOut); var inferenceSystem = new InferenceSystem(database, new CogDefuzzifier()); inferenceSystem.NewRule("Rule 1", "IF LumaIn IS Dark THEN LumaOut is Black"); inferenceSystem.NewRule("Rule 2", "IF LumaIn IS Medium THEN LumaOut is Gray"); inferenceSystem.NewRule("Rule 3", "IF LumaIn IS Light THEN LumaOut is White"); return inferenceSystem; }
public void SetOutput() { this.Risk = new LinguisticVariable("Ryzyko", 0, 30); TrapezoidalFunction function1 = new TrapezoidalFunction(5, 10, TrapezoidalFunction.EdgeType.Right); FuzzySet set1 = new FuzzySet("niskie", function1); TrapezoidalFunction function2 = new TrapezoidalFunction(5, 10, 15); FuzzySet set2 = new FuzzySet("średnio_niskie", function2); TrapezoidalFunction function3 = new TrapezoidalFunction(10, 15, 20); FuzzySet set3 = new FuzzySet("średnie", function3); TrapezoidalFunction function4 = new TrapezoidalFunction(15, 20, 25); FuzzySet set4 = new FuzzySet("średnio_wysokie", function4); TrapezoidalFunction function5 = new TrapezoidalFunction(20, 25, TrapezoidalFunction.EdgeType.Left); FuzzySet set5 = new FuzzySet("wysokie", function5); Risk.AddLabel(set1); Risk.AddLabel(set2); Risk.AddLabel(set3); Risk.AddLabel(set4); Risk.AddLabel(set5); database.AddVariable(Risk); double y1; double y2; double y3; double y4; double y5; for (float x = 0; x < 30; x += 0.05f) { if (Risk.GetLabelMembership("niskie", x + 0.05f) + Risk.GetLabelMembership("niskie", x) > 0) { y1 = Risk.GetLabelMembership("niskie", x); chart6.Series["Niskie"].Points.AddXY(x, y1); } if (Risk.GetLabelMembership("średnio_niskie", x + 0.05f) + Risk.GetLabelMembership("średnio_niskie", x) > 0) { y2 = Risk.GetLabelMembership("średnio_niskie", x); chart6.Series["Śr_nisk"].Points.AddXY(x, y2); } if (Risk.GetLabelMembership("średnie", x + 0.05f) + Risk.GetLabelMembership("średnie", x) > 0) { y3 = Risk.GetLabelMembership("średnie", x); chart6.Series["Średnie"].Points.AddXY(x, y3); } if (Risk.GetLabelMembership("średnio_wysokie", x + 0.05f) + Risk.GetLabelMembership("średnio_wysokie", x) > 0) { y4 = Risk.GetLabelMembership("średnio_wysokie", x); chart6.Series["Śr_wys"].Points.AddXY(x, y4); } if (Risk.GetLabelMembership("wysokie", x + 0.05f) + Risk.GetLabelMembership("wysokie", x) > 0) { y5 = Risk.GetLabelMembership("wysokie", x); chart6.Series["Wysokie"].Points.AddXY(x, y5); } } }