public void AddRule(IMemFunc[] antc, IMemFunc rezult, ref List <Rule> rulelist) { List <IMemFunc> mems = new List <IMemFunc>(); mems.AddRange(antc); List <IMemFunc> rezults = new List <IMemFunc>(); rezults.Add(rezult); rulelist.Add(new Rule(mems, rezults, new ProductTnorm())); }
private double step1ToAvr(IMemFunc memFunc) { double num = 0.0; double den = 0.0; foreach (double step in memFunc.getElements(n)) { double avrBetvenLandU = (memFunc.lowerMemFunction(step) + memFunc.upperMemFunction(step)) / 2; num = num + step * avrBetvenLandU; den += avrBetvenLandU; } return(num / den); }
private int step2FindE(IMemFunc memFunc, double yQuote) { int yeCount = 1; foreach (double step in memFunc.getElements(n)) { double currentNumber = memFunc.getElements(n)[yeCount]; if (yQuote < step && yQuote < currentNumber) { break; } yeCount++; } return(yeCount); }
internal void calculateFiringInterval(double[] inputs) { int i = 0; List <double> muu = new List <double>(); List <double> mul = new List <double>(); foreach (double number in inputs) { IMemFunc memFunc = antc[i]; muu.Add(memFunc.upperMemFunction(number)); mul.Add(memFunc.lowerMemFunction(number)); i++; } firingInterval.calculateFiringInterval(muu, mul); }
public double getCrorCl(IMemFunc memFunc, bool ifCr = false) { double yQuote = step1ToAvr(memFunc);//Step 1 bool test = true; while (test) { int e = step2FindE(memFunc, yQuote); //Step 2 double yQQ = step3ForClOrCr(memFunc, e, ifCr); //Step 3 if (yQQ == yQuote) { test = false; //Step 4 } else { yQuote = yQQ;//Step 5 and Repeat } } return(yQuote); }
private double step3ForClOrCr(IMemFunc memFunc, int e, bool ifCr = false) { double num = 0.0; double den = 0.0; int z = 1; foreach (double step in memFunc.getElements(n)) { double avrBetvenLandU = (memFunc.lowerMemFunction(step) + memFunc.upperMemFunction(step)) / 2; double deltaBetvenLandU = (memFunc.lowerMemFunction(step) - memFunc.upperMemFunction(step)) / 2; if (ifCr) { int local = e; e = z; z = local; } double numberDipendOnClOrCr = 0; if (z <= e) { numberDipendOnClOrCr = avrBetvenLandU + deltaBetvenLandU; } else { numberDipendOnClOrCr = avrBetvenLandU - deltaBetvenLandU; } num += step * avrBetvenLandU; den += avrBetvenLandU; z++; } return(num / den); }