/// <summary>
/// Executes the fuzzy inference, obtaining the <see cref="FuzzyOutput"/> of the system for the required
/// <see cref="LinguisticVariable"/>.
/// </summary>
///
/// <param name="variableName">Name of the <see cref="LinguisticVariable"/> to evaluate.</param>
///
/// <returns>A <see cref="FuzzyOutput"/> containing the fuzzy output of the system for the
/// <see cref="LinguisticVariable"/> specified in <paramref name="variableName"/>.</returns>
///
/// <exception cref="KeyNotFoundException">The variable indicated was not found in the database.</exception>
///
public FuzzyOutput ExecuteInference(string variableName)
{
// gets the variable
LinguisticVariable lingVar = database.GetVariable(variableName);
// object to store the fuzzy output
FuzzyOutput fuzzyOutput = new FuzzyOutput(lingVar);
// select only rules with the variable as output
Rule[] rules = rulebase.GetRules( );
foreach (Rule r in rules)
{
if (r.Output.Variable.Name == variableName)
{
string labelName = r.Output.Label.Name;
float firingStrength = r.EvaluateFiringStrength( );
if (firingStrength > 0)
{
fuzzyOutput.AddOutput(labelName, firingStrength);
}
}
}
// returns the fuzzy output obtained
return(fuzzyOutput);
}