public ActionResult Upload(HttpPostedFileBase upload)
        {
            string FileFormat = "";

            if (upload != null)
            {
                // получаем имя файла
                string fileName = System.IO.Path.GetFileName(upload.FileName);
                // сохраняем файл в папку Files в проекте
                FuzzyKnowledgeBase FKB = new FuzzyKnowledgeBase();
                FKB.ListOfRule.Clear();
                FKB.ListVar.Clear();
                upload.SaveAs(Server.MapPath("~/Files/" + fileName));
                HttpContext.Response.Cookies["FileName"].Value = fileName;
                FileFormat = FileHelper.CheckFileFormat(fileName);
                if (FileFormat == "txt")
                {
                    return(RedirectToAction("ReadyForms", "Сonclusion", new { FileName = fileName }));
                }
                else if (FileFormat == "xls")
                {
                    ExelReader.ReadFromXLS(upload.FileName);
                    K_means k       = new K_means(ExelReader.ElementsMulti, null, ExelReader.ClusterCount, ExelReader.ElementsMatrix);
                    double  epsilon = 0.05;
                    k.Clustering(ExelReader.ClusterCount, epsilon);
                    k.FindRulesModelTypeMamdani(ExelReader.NameOfLinguisticVariables, ExelReader.ValueIntervalTerm, ExelReader.NameOfTerms, ExelReader.countColumnData, ExelReader.NumbersOfZonesOneLP, ExelReader.counterFoRowDataFromFile, "Трикутна", ExelReader.WeightOfTerms, FKB);
                    k.GausFunction(ExelReader.countColumnData, FKB);
                    FKBHelper.WithRullToVar(FKB);
                    FKBHelper.Save_BNZ(FKB, Server.MapPath("~/Files/BNZauto.txt"));
                    return(RedirectToAction("ReadyForms", "Сonclusion", new { FileName = "BNZauto.txt" }));
                }
            }
            return(RedirectToAction("Index"));
        }
Esempio n. 2
0
        public void GausFunction(int countColumnData, FuzzyKnowledgeBase FKB)
        {
            double SummDenominator = 0;
            double SummNumeral     = 0;
            double sigm            = 0;

            ValueGausFPForEachTerm = new double[ClusterCount, countColumnData - 1]; // [ClusterCount, countColumnData];


            for (int i = 0; i < ClusterCount; i++)
            {
                for (int j = 0; j < countColumnData; j++)  // countColumnData
                {
                    double a = Clusters.ElementAt(i).Centroid.ElementAt(j);
                    for (int k = 0; k < Elements.Count; ++k)
                    {
                        SummDenominator += Math.Pow(MembershipMatrixTemp[k, i], 2);
                        SummNumeral     += Math.Pow(MembershipMatrixTemp[k, i], 2) * Math.Pow(ElementsMatrix[k, j] - Clusters.ElementAt(i).Centroid.ElementAt(j), 2);
                    }
                    sigm = Math.Sqrt(SummNumeral / SummDenominator);
                    ExelReader.SimpsonsMethodFindingIntegrall(a, sigm, i, j, countColumnData, FKB);
                }
            }
            //sigm = FuzzyLogicBase.ListOfRule.Count;
        }
Esempio n. 3
0
        public static Term AccumulationStart(FuzzyKnowledgeBase fkb)
        {
            Term   resultTerm = new Term();
            string nameTerm   = "";
            double maxvalue   = Double.NegativeInfinity;

            for (int i = 0; i < fkb.ListOfRule.Count; i++)
            {
                if (fkb.ListOfRule[i].MinZnach > maxvalue)
                {
                    nameTerm = fkb.ListOfRule[i].Cоnsequens.Name;
                    maxvalue = fkb.ListOfRule[i].MinZnach;
                    //resultTerm.ZnachFp = maxvalue;
                }
            }
            for (int i = 0; i < fkb.ListVar.Last().terms.Count; i++)
            {
                if (fkb.ListVar.Last().terms[i].Name == nameTerm)
                {
                    resultTerm         = fkb.ListVar.Last().terms[i];
                    resultTerm.ZnachFp = maxvalue;
                    break;
                }
            }
            return(resultTerm);
        }
        public static void Save_BNZ(FuzzyKnowledgeBase FKB, string path2)  // path2 где сохраняем файлик с БНЗ
        {
            DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(FuzzyKnowledgeBase));

            using (FileStream fs = new FileStream(path2, FileMode.OpenOrCreate))
            {
                jsonFormatter.WriteObject(fs, FKB);
            }
        }
Esempio n. 5
0
 public static void StartPhasing(FuzzyKnowledgeBase fkb, string[] parematrlLv)
 {
     for (int i = 0; i < fkb.ListOfRule.Count; i++)                    // по всім правилам
     {
         for (int j = 0; j < fkb.ListOfRule[i].Antecedents.Count; j++) // по всім вхідним лп правила
         {
             fkb.ListOfRule[i].Antecedents[j].EvaluatingFp(Convert.ToDouble(parematrlLv[j]));
         }
     }
 }
Esempio n. 6
0
 public static void PhasingLv(FuzzyKnowledgeBase fkb, string[] parematrlLv)
 {
     StartPhasing(fkb, parematrlLv);
     for (int i = 0; i < fkb.ListVar.Count - 1; i++)
     {
         fkb.ListVar[i].NumericValue = Convert.ToDouble(parematrlLv[i]);
         for (int j = 0; j < fkb.ListVar[i].terms.Count; j++)
         {
             fkb.ListVar[i].terms[j].EvaluatingFp(Convert.ToDouble(parematrlLv[i]));
         }
     }
 }
        public ActionResult Index()
        {
            List <string> NameAllLV = new List <string>();

            using (FileStream fs = new FileStream(System.Environment.GetEnvironmentVariable("PathFkbFiles") + HttpContext.Request.Cookies["FileName"].Value, FileMode.OpenOrCreate))
            {
                DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(FuzzyKnowledgeBase));
                FKB = (FuzzyKnowledgeBase)jsonFormatter.ReadObject(fs);
                string LvConclusions = FKB.ListOfRule[0].Cоnsequens.NameLP;
                ViewData["NameLv"] = LvConclusions;
                for (int i = 0; i < FKB.ListVar.Count; i++)
                {
                    NameAllLV.Add(FKB.ListVar[i].Name);
                }
            }
            return(View(NameAllLV));
        }
Esempio n. 8
0
 public static void AgregationStart(FuzzyKnowledgeBase fkb)
 {
     for (int i = 0; i < fkb.ListOfRule.Count; i++)//по всім правилам
     {
         double minvalue = Double.PositiveInfinity;
         for (int j = 0; j < fkb.ListOfRule[i].Antecedents.Count; j++)//по всім параметрам правила
         {
             if (fkb.ListOfRule[i].Antecedents[j].ZnachFp < minvalue && fkb.ListOfRule[i].Antecedents[j].ZnachFp != 0)
             {
                 minvalue = fkb.ListOfRule[i].Antecedents[j].ZnachFp;
             }
         }
         if (minvalue == Double.PositiveInfinity)
         {
             minvalue = 0;
         }
         fkb.ListOfRule[i].MinZnach = minvalue;
     }
 }
Esempio n. 9
0
        public ActionResult ReadyForms(string FileName)
        {
            HttpContext.Response.Cookies["FileName"].Value = FileName;
            List <LinguisticVariable> ParametrsLp = new List <LinguisticVariable>();

            using (FileStream fs = new FileStream(System.Environment.GetEnvironmentVariable("PathFkbFiles") + FileName, FileMode.OpenOrCreate))
            {
                DataContractJsonSerializer jsonFormatter = new DataContractJsonSerializer(typeof(FuzzyKnowledgeBase));
                FKB = (FuzzyKnowledgeBase)jsonFormatter.ReadObject(fs);
                string LvConclusions = FKB.ListOfRule[0].Cоnsequens.NameLP;
                ViewData["NameLv"] = LvConclusions;
                for (int i = 0; i < FKB.ListVar.Count; i++)
                {
                    if (FKB.ListVar[i].Name != LvConclusions)
                    {
                        ParametrsLp.Add(FKB.ListVar[i]);
                    }
                }
            }
            return(View(ParametrsLp));
        }
Esempio n. 10
0
        public void FindRulesModelTypeMamdani(List <string> NamesOfTermsDataFromFile, double[,] ValueIntervalTerm, List <string> NameOfTerms, int countColumnData, int NumbersOfZonesOneLP, int counterFoRowDataFromFile, string typeFP, List <int> WeightOfTerms, FuzzyKnowledgeBase FKB)
        {
            NameOfTermsByWords = new string[counterFoRowDataFromFile, countColumnData];
            NameOfTermsByWordsWhithoutRepeat = new string[counterFoRowDataFromFile, countColumnData];

            for (int i = 0; i < ClusterCount; i++)
            {
                List <Term> term    = new List <Term>();
                Rule        OneRule = new Rule(ID, null, term, 0);

                for (int j = 0; j < countColumnData - 1; j++)
                {
                    Term t = new Term(ID, null, null);
                    t.NameLP = NamesOfTermsDataFromFile.ElementAt(j);  // write LP
                    if (typeFP == Trianle)
                    {
                        t.ProverkTruk = true;
                    }
                    else if (typeFP == Gaussian)
                    {
                        t.ProverGaus = true;
                    }
                    else if (typeFP == Trapeze)
                    {
                        t.ProverkTrap = true;
                    }
                    for (int k = 0; k < NumbersOfZonesOneLP; k++)
                    {
                        if (k + 1 >= NumbersOfZonesOneLP)
                        {
                            t.Name         = NameOfTerms.ElementAt(NumbersOfZonesOneLP - 1); // write term;
                            t.WeightOfTerm = WeightOfTerms.ElementAt(NumbersOfZonesOneLP - 1);
                            OneRule.Antecedents.Add(t);
                            NameOfTermsByWords[k, j] = NameOfTerms.ElementAt(NumbersOfZonesOneLP - 1);
                            break;
                        }
                        else if (ValueIntervalTerm[j, k] <= Clusters.ElementAt(i).Centroid.ElementAt(j) && ValueIntervalTerm[j, k + 1] >= Clusters.ElementAt(i).Centroid.ElementAt(j))
                        {
                            t.Name         = NameOfTerms.ElementAt(k); // write term;
                            t.WeightOfTerm = WeightOfTerms.ElementAt(k);
                            OneRule.Antecedents.Add(t);
                            NameOfTermsByWords[k, j] = NameOfTerms.ElementAt(k);
                            break;
                        }
                    }
                }

                Term term_conseq = new Term(ID, null, null);
                term_conseq.NameLP = NamesOfTermsDataFromFile.ElementAt(countColumnData - 1);

                for (int p = 0; p < countColumnData; p++)
                {
                    double a = Clusters.ElementAt(i).Centroid.ElementAt(countColumnData - 1);
                    if (p + 2 > NumbersOfZonesOneLP)
                    {
                        term_conseq.Name         = NameOfTerms.ElementAt(p - 1);
                        term_conseq.WeightOfTerm = WeightOfTerms.ElementAt(p - 1);
                        NameOfTermsByWords[p, countColumnData - 1] = NameOfTerms.ElementAt(p - 1);
                        break;
                    }
                    else if (p + 1 == countColumnData)
                    {
                        term_conseq.Name         = NameOfTerms.ElementAt(p);
                        term_conseq.WeightOfTerm = WeightOfTerms.ElementAt(p);
                        NameOfTermsByWords[p, countColumnData - 1] = NameOfTerms.ElementAt(p);
                        break;
                    }
                    else if ((ValueIntervalTerm[countColumnData - 1, p] <= Clusters.ElementAt(i).Centroid.ElementAt(countColumnData - 1) && ValueIntervalTerm[countColumnData - 1, p + 1] >= Clusters.ElementAt(i).Centroid.ElementAt(countColumnData - 1)) && p + 1 == NumbersOfZonesOneLP)
                    {
                        term_conseq.Name         = NameOfTerms.ElementAt(p + 1);
                        term_conseq.WeightOfTerm = WeightOfTerms.ElementAt(p + 1);
                        NameOfTermsByWords[p, countColumnData - 1] = NameOfTerms.ElementAt(p + 1);
                        break;
                    }
                    else if (ValueIntervalTerm[countColumnData - 1, p] <= Clusters.ElementAt(i).Centroid.ElementAt(countColumnData - 1) && ValueIntervalTerm[countColumnData - 1, p + 1] >= Clusters.ElementAt(i).Centroid.ElementAt(countColumnData - 1))
                    {
                        term_conseq.Name         = NameOfTerms.ElementAt(p);
                        term_conseq.WeightOfTerm = WeightOfTerms.ElementAt(p);
                        NameOfTermsByWords[p, countColumnData - 1] = NameOfTerms.ElementAt(p);
                        break;
                    }
                }
                OneRule.Cоnsequens = term_conseq;
                FKB.ListOfRule.Add(OneRule);
            }

            for (int index = 0; index < countColumnData; index++)
            {
                NameOfTermsByWordsWhithoutRepeat[0, index] = NameOfTermsByWords[0, index];
                int CounterWithoutRepeatInArray = 1, Checker = 0, IndexInArray = 1;

                for (int j = 0; j < counterFoRowDataFromFile; j++)
                {
                    for (int k = 0; k < CounterWithoutRepeatInArray; k++)
                    {
                        if (NameOfTermsByWordsWhithoutRepeat[k, index] == NameOfTermsByWords[j, index])
                        {
                            Checker++;
                            break;
                        }
                    }
                    if (Checker == 0)
                    {
                        NameOfTermsByWordsWhithoutRepeat[IndexInArray, index] = NameOfTermsByWords[j, index];
                        IndexInArray++;
                        CounterWithoutRepeatInArray++;
                    }
                    Checker = 0;
                }
            }
        }
Esempio n. 11
0
        public static void WithRullToVar(FuzzyKnowledgeBase FKB)
        {
            ostanovkaLP = 0;
            for (int rule = ostanovkaLP; rule < FKB.ListOfRule.Count; rule++)
            {
                for (int anc = 0; anc < FKB.ListOfRule[rule].Antecedents.Count; anc++)
                {
                    List <Term> spusokTermans = new List <Term>();
                    for (int termforlist = ostanovkaLP; termforlist < FKB.ListOfRule.Count; termforlist++)
                    {
                        bool provlistterms = true;
                        Term tm            = new Term(new Guid(), FKB.ListOfRule[termforlist].Antecedents[anc].Name, FKB.ListOfRule[termforlist].Antecedents[anc].NameLP);
                        if (spusokTermans.Count == 0)
                        {
                            tm.a            = FKB.ListOfRule[termforlist].Antecedents[anc].a;
                            tm.b            = FKB.ListOfRule[termforlist].Antecedents[anc].b;
                            tm.c            = FKB.ListOfRule[termforlist].Antecedents[anc].c;
                            tm.d            = FKB.ListOfRule[termforlist].Antecedents[anc].d;
                            tm.ProverkTruk  = FKB.ListOfRule[termforlist].Antecedents[anc].ProverkTruk;
                            tm.WeightOfTerm = FKB.ListOfRule[termforlist].Antecedents[anc].WeightOfTerm;
                            spusokTermans.Add(tm);
                        }
                        else
                        {
                            for (int t = 0; t < spusokTermans.Count; t++)
                            {
                                if (spusokTermans[t].Name == tm.Name)
                                {
                                    provlistterms = false;
                                    break;
                                }
                            }
                            if (provlistterms == true)
                            {
                                tm.a            = FKB.ListOfRule[termforlist].Antecedents[anc].a;
                                tm.b            = FKB.ListOfRule[termforlist].Antecedents[anc].b;
                                tm.c            = FKB.ListOfRule[termforlist].Antecedents[anc].c;
                                tm.d            = FKB.ListOfRule[termforlist].Antecedents[anc].d;
                                tm.ProverkTruk  = FKB.ListOfRule[termforlist].Antecedents[anc].ProverkTruk;
                                tm.WeightOfTerm = FKB.ListOfRule[termforlist].Antecedents[anc].WeightOfTerm;
                                spusokTermans.Add(tm);
                            }
                        }
                    }
                    LinguisticVariable lpans = new LinguisticVariable(new Guid(), FKB.ListOfRule[rule].Antecedents[anc].NameLP, spusokTermans, 0, 1);
                    if (FKB.ListVar.Count == 0)
                    {
                        FKB.ListVar.Add(lpans);
                    }
                    else
                    {
                        bool provirkaLP = true;
                        for (int n = 0; n < FKB.ListVar.Count; n++)
                        {
                            if (FKB.ListVar[n].Name == lpans.Name)
                            {
                                for (int termlpj = 0; termlpj < lpans.terms.Count; termlpj++)
                                {
                                    bool provtermlp = true;
                                    for (int termlpi = 0; termlpi < FKB.ListVar[n].terms.Count; termlpi++)
                                    {
                                        if (FKB.ListVar[n].terms[termlpi].Name == lpans.terms[termlpj].Name)
                                        {
                                            provtermlp = false;
                                        }
                                    }
                                    if (provtermlp == true)
                                    {
                                        FKB.ListVar[n].terms.Add(lpans.terms[termlpj]);
                                    }
                                }
                                provirkaLP = false;
                                break;
                            }
                        }
                        if (provirkaLP == true)
                        {
                            FKB.ListVar.Add(lpans);
                        }
                    }
                }

                List <Term> spusokTerm = new List <Term>();
                for (int termforlist = ostanovkaLP; termforlist < FKB.ListOfRule.Count; termforlist++, ostanovkaLP++)
                {
                    bool provlistterms = true;
                    Term tm            = new Term(new Guid(), FKB.ListOfRule[termforlist].Cоnsequens.Name, FKB.ListOfRule[termforlist].Cоnsequens.NameLP);
                    if (spusokTerm.Count == 0)
                    {
                        tm.a            = FKB.ListOfRule[termforlist].Cоnsequens.a;
                        tm.b            = FKB.ListOfRule[termforlist].Cоnsequens.b;
                        tm.c            = FKB.ListOfRule[termforlist].Cоnsequens.c;
                        tm.d            = FKB.ListOfRule[termforlist].Cоnsequens.d;
                        tm.ProverkTruk  = FKB.ListOfRule[termforlist].Cоnsequens.ProverkTruk;
                        tm.WeightOfTerm = FKB.ListOfRule[termforlist].Cоnsequens.WeightOfTerm;
                        spusokTerm.Add(tm);
                    }
                    else
                    {
                        for (int t = 0; t < spusokTerm.Count; t++)
                        {
                            if (spusokTerm[t].Name == tm.Name)
                            {
                                provlistterms = false;
                                break;
                            }
                        }
                        if (provlistterms == true)
                        {
                            tm.a            = FKB.ListOfRule[termforlist].Cоnsequens.a;
                            tm.b            = FKB.ListOfRule[termforlist].Cоnsequens.b;
                            tm.c            = FKB.ListOfRule[termforlist].Cоnsequens.c;
                            tm.d            = FKB.ListOfRule[termforlist].Cоnsequens.d;
                            tm.ProverkTruk  = FKB.ListOfRule[termforlist].Cоnsequens.ProverkTruk;
                            tm.WeightOfTerm = FKB.ListOfRule[termforlist].Cоnsequens.WeightOfTerm;
                            spusokTerm.Add(tm);
                        }
                    }
                }
                LinguisticVariable lp = new LinguisticVariable(new Guid(), FKB.ListOfRule[rule].Cоnsequens.NameLP, spusokTerm, 0, 1);
                if (FKB.ListVar.Count == 0)
                {
                    FKB.ListVar.Add(lp);
                }
                else
                {
                    bool provlp = true;
                    for (int n = 0; n < FKB.ListVar.Count; n++)
                    {
                        if (FKB.ListVar[n].Name == lp.Name)
                        {
                            for (int termlpj = 0; termlpj < lp.terms.Count; termlpj++)
                            {
                                bool provtermlp = true;
                                for (int termlpi = 0; termlpi < FKB.ListVar[n].terms.Count; termlpi++)
                                {
                                    if (FKB.ListVar[n].terms[termlpi].Name == lp.terms[termlpj].Name)
                                    {
                                        provtermlp = false;
                                    }
                                }
                                if (provtermlp == true)
                                {
                                    FKB.ListVar[n].terms.Add(lp.terms[termlpj]);
                                }
                            }
                            provlp = false;
                            break;
                        }
                    }
                    if (provlp == true)
                    {
                        FKB.ListVar.Add(lp);
                    }
                }
                break;
            }
        }
Esempio n. 12
0
        public static void SimpsonsMethodFindingIntegrall(double aGaus, double sigmGaus, int ClusterCount, int countColumnDataNow, int countColumnData, FuzzyKnowledgeBase FKB) //интегрирует любые данные (для точек фп)
        {
            double a = 0, b = 1, eps = 0.0001, result = 0;                                                                                                                      //Нижний и верхний пределы интегрирования (a, b), погрешность (eps).
            double I = eps + 1, I1 = 0;                                                                                                                                         //I-предыдущее вычисленное значение интеграла, I1-новое, с большим N.

            //Запись новой точки (  a  )
            for (int i = 0; i < 4; i++)
            {
                a = 0; b = 1; eps = 0.0001; //Нижний и верхний пределы интегрирования (a, b), погрешность (eps).
                I = eps + 1; I1 = 0;        //I-предыдущее вычисленное значение интеграла, I1-новое, с большим N.
                for (int N = 2; (N <= 4) || (Math.Abs(I1 - I) > eps); N *= 2)
                {
                    double h, sum2 = 0, sum4 = 0, sum = 0;
                    h = (b - a) / (2 * N);//Шаг интегрирования.
                    for (int ind = 1; ind <= 2 * N - 1; ind += 2)
                    {
                        sum4 += Y(a + h * ind, i, aGaus, sigmGaus);                                  //Значения с нечётными индексами, которые нужно умножить на 4.
                        sum2 += Y(a + h * (ind + 1), i, aGaus, sigmGaus);                            //Значения с чётными индексами, которые нужно умножить на 2.
                    }
                    sum = Y(a, i, aGaus, sigmGaus) + 4 * sum4 + 2 * sum2 - Y(b, i, aGaus, sigmGaus); //Отнимаем значение f(b) так как ранее прибавили его дважды.
                    I   = I1;
                    I1  = (h / 3) * sum;
                }
                if (i < 1)
                {
                    result = 3 * I1;
                }
                else if (i == 1)
                {
                    result += 3 * I1;
                }
                else if (i > 1 && i <= 3)
                {
                    result -= I1;
                }
            }
            if (countColumnDataNow + 1 == countColumnData)
            {
                FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.a = result;
            }
            else
            {
                FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].a = result;
            }

            /*//Запись новой точки (  b  )
             * result = 0;
             * for (int i = 0; i < 4; i++)
             * {
             *  a = 0; b = 1; eps = 0.0001; //Нижний и верхний пределы интегрирования (a, b), погрешность (eps).
             *  I = eps + 1; I1 = 0;//I-предыдущее вычисленное значение интеграла, I1-новое, с большим N.
             *  for (int N = 2; (N <= 4) || (Math.Abs(I1 - I) > eps); N *= 2)
             *  {
             *      double h, sum2 = 0, sum4 = 0, sum = 0;
             *      h = (b - a) / (2 * N);//Шаг интегрирования.
             *      for (int ind = 1; ind <= 2 * N - 1; ind += 2)
             *      {
             *          sum4 += Y(a + h * ind, i, i, aGaus, sigmGaus);//Значения с нечётными индексами, которые нужно умножить на 4.
             *          sum2 += Y(a + h * (ind + 1), i, i, aGaus, sigmGaus);//Значения с чётными индексами, которые нужно умножить на 2.
             *      }
             *      sum = Y(a, i, i, aGaus, sigmGaus) + 4 * sum4 + 2 * sum2 - Y(b, i, i, aGaus, sigmGaus);//Отнимаем значение f(b) так как ранее прибавили его дважды.
             *      I = I1;
             *      I1 = (h / 3) * sum;
             *  }
             *  if (i == 0)
             *      result = (7 / 2) * I1;
             *  else if (i == 1)
             *      result += (1 / 2) * I1;
             *  else if (i == 2)
             *      result -= (9 / 2) * I1;
             *  else if (i == 3)
             *      result -= (3 / 2) * I1;
             * }
             * if (countColumnDataNow + 1 == countColumnData) //часть для точки b
             *  FKB.ListOfRule[FKB.ListOfRule.Count() - WebApplication1.FKB.Program.ClusterCount + ClusterCount].Cоnsequens.a = result;
             * else
             *  FKB.ListOfRule[FKB.ListOfRule.Count() - WebApplication1.FKB.Program.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].a = result;*/

            //Запись новой точки (  c  )
            result = 0;
            for (int i = 0; i < 4; i++)
            {
                a = 0; b = 1; eps = 0.0001; //Нижний и верхний пределы интегрирования (a, b), погрешность (eps).
                I = eps + 1; I1 = 0;        //I-предыдущее вычисленное значение интеграла, I1-новое, с большим N.
                for (int N = 2; (N <= 4) || (Math.Abs(I1 - I) > eps); N *= 2)
                {
                    double h, sum2 = 0, sum4 = 0, sum = 0;
                    h = (b - a) / (2 * N);//Шаг интегрирования.
                    for (int ind = 1; ind <= 2 * N - 1; ind += 2)
                    {
                        sum4 += Y(a + h * ind, i, i, i, aGaus, sigmGaus);                                        //Значения с нечётными индексами, которые нужно умножить на 4.
                        sum2 += Y(a + h * (ind + 1), i, i, i, aGaus, sigmGaus);                                  //Значения с чётными индексами, которые нужно умножить на 2.
                    }
                    sum = Y(a, i, i, i, aGaus, sigmGaus) + 4 * sum4 + 2 * sum2 - Y(b, i, i, i, aGaus, sigmGaus); //Отнимаем значение f(b) так как ранее прибавили его дважды.
                    I   = I1;
                    I1  = (h / 3) * sum;
                }
                if (i == 0)
                {
                    result = (1 / 2) * I1;
                }
                else if (i == 1)
                {
                    result += (7 / 2) * I1;
                }
                else if (i == 2)
                {
                    result -= (3 / 2) * I1;
                }
                else if (i == 3)
                {
                    result -= (9 / 2) * I1;
                }
            }
            if (countColumnDataNow + 1 == countColumnData) //часть для точки b
            {
                FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.c = result;
            }
            else
            {
                FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].c = result;
            }

            double tempTerm = 0;

            if (countColumnDataNow + 1 == countColumnData) //часть для точки b
            {
                FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.b = (FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.a + FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.c) / 2;
            }
            else
            {
                FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].b = (FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].a + FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].c) / 2;
            }

            if (countColumnDataNow + 1 == countColumnData)
            {
                if (FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.a > FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.c)
                {
                    tempTerm = FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.c;
                    FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.c = FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.a;
                    FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Cоnsequens.a = tempTerm;
                }
            }
            else
            {
                if (FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].a > FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].c)
                {
                    tempTerm = FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].c;
                    FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].c = FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].a;
                    FKB.ListOfRule[FKB.ListOfRule.Count() - ExelReader.ClusterCount + ClusterCount].Antecedents[countColumnDataNow].a = tempTerm;
                }
            }
        }