This class represents a Fuzzy Inference System.

Namespace:  AForge.Fuzzy
Assembly:  AForge.Fuzzy (in AForge.Fuzzy.dll) Version: 2.2.4.0 (2.2.4.0)

Syntax

C#
public class InferenceSystem

Remarks

A Fuzzy Inference System is a model capable of executing fuzzy computing. It is mainly composed by a Database with the linguistic variables (see LinguisticVariable) and a Rulebase with the fuzzy rules (see Rule) that represent the behavior of the system. The typical operation of a Fuzzy Inference System is:

  • Get the numeric inputs;
  • Use the Database with the linguistic variables (see LinguisticVariable) to obtain linguistic meaning for each numerical input;
  • Verify which rules (see Rule) of the Rulebase are activated by the input;
  • Combine the consequent of the activated rules to obtain a FuzzyOutput;
  • Use some defuzzifier (see IDefuzzifier) to obtain a numerical output.

The following sample usage is a Fuzzy Inference System that controls an auto guided vehicle avoing frontal collisions:

CopyC#
// linguistic labels (fuzzy sets) that compose the distances
FuzzySet fsNear = new FuzzySet( "Near",
    new TrapezoidalFunction( 15, 50, TrapezoidalFunction.EdgeType.Right ) );
FuzzySet fsMedium = new FuzzySet( "Medium",
    new TrapezoidalFunction( 15, 50, 60, 100 ) );
FuzzySet fsFar = new FuzzySet( "Far",
    new TrapezoidalFunction( 60, 100, TrapezoidalFunction.EdgeType.Left ) );

// front distance (input)
LinguisticVariable lvFront = new LinguisticVariable( "FrontalDistance", 0, 120 );
lvFront.AddLabel( fsNear );
lvFront.AddLabel( fsMedium );
lvFront.AddLabel( fsFar );

// linguistic labels (fuzzy sets) that compose the angle
FuzzySet fsZero = new FuzzySet( "Zero",
    new TrapezoidalFunction( -10, 5, 5, 10 ) );
FuzzySet fsLP = new FuzzySet( "LittlePositive",
    new TrapezoidalFunction( 5, 10, 20, 25 ) );
FuzzySet fsP = new FuzzySet( "Positive",
    new TrapezoidalFunction( 20, 25, 35, 40 ) );
FuzzySet fsVP = new FuzzySet( "VeryPositive",
    new TrapezoidalFunction( 35, 40, TrapezoidalFunction.EdgeType.Left ) );

// angle
LinguisticVariable lvAngle = new LinguisticVariable( "Angle", -10, 50 );
lvAngle.AddLabel( fsZero );
lvAngle.AddLabel( fsLP );
lvAngle.AddLabel( fsP );
lvAngle.AddLabel( fsVP );

// the database
Database fuzzyDB = new Database( );
fuzzyDB.AddVariable( lvFront );
fuzzyDB.AddVariable( lvAngle );

// creating the inference system
InferenceSystem IS = new InferenceSystem( fuzzyDB, new CentroidDefuzzifier( 1000 ) );

// going Straight
IS.NewRule( "Rule 1", "IF FrontalDistance IS Far THEN Angle IS Zero" );
// Turning Left
IS.NewRule( "Rule 2", "IF FrontalDistance IS Near THEN Angle IS Positive" );

...
// inference section

// setting inputs
IS.SetInput( "FrontalDistance", 20 );

// getting outputs
try
{
    float newAngle = IS.Evaluate( "Angle" );
}
catch ( Exception )
{
...
}

Inheritance Hierarchy

System..::.Object
  AForge.Fuzzy..::.InferenceSystem

See Also