public static FuzzySet2D MaxMultCompose(FuzzySet2D R, FuzzySet2D S) { List <double> zList = new List <double>(); zList.AddRange(R.getUniqueX2()); zList.AddRange(S.getUniqueX1()); List <double> xList = new List <double>(); xList.AddRange(R.getUniqueX1()); List <double> yList = new List <double>(); yList.AddRange(S.getUniqueX2()); FuzzySet2D res = new FuzzySet2D(); foreach (double x in xList) { foreach (double y in yList) { double sup = 0; foreach (double z in zList) { double tmp = R.Mu(x, z) * S.Mu(z, y); if (tmp > sup) { sup = tmp; } } res.AddDot(x, y, sup); } } return(res); }
public static FuzzySet2D MinMaxCompose(FuzzySet2D R, FuzzySet2D S) { List <double> zList = new List <double>(); zList.AddRange(R.getUniqueX2()); zList.AddRange(S.getUniqueX1()); List <double> xList = new List <double>(); xList.AddRange(R.getUniqueX1()); List <double> yList = new List <double>(); yList.AddRange(S.getUniqueX2()); FuzzySet2D res = new FuzzySet2D(); foreach (double x in xList) { foreach (double y in yList) { double inf = 1; foreach (double z in zList) { double tmp = Math.Max(R.Mu(x, z), S.Mu(z, y)); if (tmp < inf) { inf = tmp; } } res.AddDot(x, y, inf); } } return(res); }
public static FuzzySet2D operator |(FuzzySet2D f1, FuzzySet2D f2) { if (!f1.discrete || !f2.discrete) { return(null); } FuzzySet2D res = new FuzzySet2D(); foreach (KeyValuePair <PairD, double> pair in f1.dots) { res.AddDot(pair.Key.X1, pair.Key.X2, Math.Max(f2.Mu(pair.Key.X1, pair.Key.X2), pair.Value)); } foreach (KeyValuePair <PairD, double> pair in f2.dots) { res.AddDot(pair.Key.X1, pair.Key.X2, Math.Max(f1.Mu(pair.Key.X1, pair.Key.X2), pair.Value)); } return(res); }
public static FuzzySet2D operator *(FuzzySet1D f1, FuzzySet1D f2) { if (!f1.discrete || !f2.discrete) { return(null); } FuzzySet2D res = new FuzzySet2D(); foreach (KeyValuePair <double, double> p1 in f1.dots) { foreach (KeyValuePair <double, double> p2 in f2.dots) { res.AddDot(p1.Key, p2.Key, Math.Min(p1.Value, p2.Value)); } } return(res); }