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")); }
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; }
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); } }
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])); } } }
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)); }
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; } }
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)); }
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; } } }
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; } }
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; } } }