2
0
mirror of https://github.com/esiur/esiur-dotnet.git synced 2025-05-06 19:42:58 +00:00
esiur-dotnet/Esiur.Analysis/Fuzzy/MamdaniDefuzzifier.cs
2022-10-30 18:43:45 +03:00

41 lines
1.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Esiur.Analysis.Fuzzy
{
public enum MamdaniDefuzzifierMethod
{
CenterOfGravity,
FirstMaxima,
LastMaxima,
MeanOfMaxima,
}
public class MamdaniDefuzzifier
{
public static double Evaluate(INumericalSet<double>[] sets, MamdaniDefuzzifierMethod method, double from, double to, double step)
{
var union = sets.FuzzyUnion();
var output = union.ToDiscrete(from, to, step);
if (method == MamdaniDefuzzifierMethod.CenterOfGravity)
return output.Centroid(from, to);
else if (method == MamdaniDefuzzifierMethod.FirstMaxima)
return output.Maximas.First().Key;
else if (method == MamdaniDefuzzifierMethod.LastMaxima)
return output.Maximas.Last().Key;
else if (method == MamdaniDefuzzifierMethod.MeanOfMaxima)
{
var max = output.Maximas;
return max.First().Key + ((max.Last().Key - max.First().Key) / 2);
}
else
throw new Exception("Unknown method");
}
}
}