Пример #1
0
        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()));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        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);
        }