Ejemplo n.º 1
0
 public override TSAFuzzySystem TuneUpFuzzySystem(TSAFuzzySystem Approx, ILearnAlgorithmConf conf)
 {
     result = Approx;
     groups = new List <int[]>();
     Init(conf);
     SetPopulation();
     Population = ListTakagiSugenoApproximateTool.SortRules(Population, result);
     NS         = new int[m];
     for (int i = 0; i < m; i++)
     {
         NS[i] = (N - 1) / m;
     }
     cur_iter = 0;
     while (cur_iter < iter)
     {
         groups = GroupStream();
         if (p_one > rand.NextDouble())
         {
             ChooseOneCluster();
         }
         else
         {
             ChooseTwoClusters();
         }
         //
         Population = ListTakagiSugenoApproximateTool.SortRules(Population, result);
         Console.WriteLine(cur_iter + " - Итерация");
         Console.WriteLine("Обуч. выборка = " + result.ErrorLearnSamples(Population[0]));
         Console.WriteLine("Тест. выборка = " + result.ErrorTestSamples(Population[0]));
         cur_iter++;
     }
     Population = ListTakagiSugenoApproximateTool.SortRules(Population, result);
     result.RulesDatabaseSet[0] = Population[0];
     return(result);
 }
Ejemplo n.º 2
0
        public override TSAFuzzySystem TuneUpFuzzySystem(TSAFuzzySystem Classifier, ILearnAlgorithmConf conf)
        {
            Init(conf);
            KnowlegeBaseTSARules temp_c_Rule = new KnowlegeBaseTSARules(Classifier.RulesDatabaseSet[0]);
            TSAFuzzySystem       result      = Classifier;
            string file_string        = @"..\logs_" + result.TestSamplesSet.FileName + ".txt";
            string file_string_to_txt = @"..\result_" + result.TestSamplesSet.FileName + ".txt";

            for (int t = 0; t < population_count; t++)
            {
                monkey[t] = new KnowlegeBaseTSARules(result.RulesDatabaseSet[0]);
                if (t > 3)
                {
                    for (int k = 0; k < result.RulesDatabaseSet[0].TermsSet.Count; k++)
                    {
                        for (int q = 0; q < result.RulesDatabaseSet[0].TermsSet[k].CountParams; q++)
                        {
                            //monkey[t].TermsSet[k].Parametrs[q] = StaticRandom.NextDouble() * (result.RulesDatabaseSet[0].TermsSet[k].Max - result.RulesDatabaseSet[0].TermsSet[k].Min);
                            monkey[t].TermsSet[k].Parametrs[q] = GaussRandom.Random_gaussian(rand, monkey[t].TermsSet[k].Parametrs[q], monkey[t].TermsSet[k].Parametrs[q] * 0.05);
                        }
                    }
                }

                double unlaidtest = result.ErrorLearnSamples(monkey[t]);
                //result.UnlaidProtectionFix(monkey[t]);
                //Console.WriteLine("Unlaid: " + result.ErrorLearnSamples(monkey[0]).ToString());
                if (double.IsNaN(unlaidtest) || double.IsInfinity(unlaidtest))
                {
                    result.UnlaidProtectionFix(monkey[t]);
                }
                // delete
                testvals[t] = result.ErrorLearnSamples(monkey[t]);
                Console.WriteLine("Begin: " + t.ToString() + " " + iter.ToString() + " " + testvals[t].ToString());
            }
            bestsolution       = new KnowlegeBaseTSARules(monkey.SelectBest(result, 1)[0]);
            bestsolutionnumber = result.ErrorLearnSamples(bestsolution);
            deltaLength        = result.RulesDatabaseSet[0].TermsSet.Sum(x => x.Parametrs.Length);
            if (debug)
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(file_string, true))
                {
                    file.WriteLine(DateTime.Today.ToString() + "\t" + result.LearnSamplesSet.FileName);
                    file.WriteLine("Parameters:");
                    file.WriteLine("Population\t" + population_count.ToString());
                    file.WriteLine("Iteration count\t" + iter_amount.ToString());
                    file.WriteLine("Crawl count\t" + crawl_iter.ToString());
                    file.WriteLine("Jump count\t" + jump_iter.ToString());
                    file.WriteLine("Somersault count\t" + somersault_iter.ToString());
                    file.WriteLine("Crawl step\t" + step.ToString());    // crawl step
                    file.WriteLine("Jump step\t" + watch_jump_parameter.ToString());
                    file.WriteLine("Somersault left border\t" + somersault_interval_left.ToString());
                    file.WriteLine("Somersault right border\t" + somersault_interval_right.ToString());
                    file.WriteLine("\t\tMonkeys");
                    file.Write("Iterations\t");
                    for (int t = 0; t < population_count; t++)
                    {
                        file.Write("\t" + t);
                    }
                    file.WriteLine();
                    file.Write("0\tbegin");
                    for (int t = 0; t < population_count; t++)
                    {
                        file.Write("\t" + testvals[t].ToString());
                    }

                    // excel вставки
                    // наибольший в таблице
                    file.WriteLine();
                }
            }


            //iter_amount = somersault_iter * (1 + jump_iter * (1 + crawl_iter));
            iter_amount = (((crawl_iter + jump_iter) * jump_iter) + somersault_iter) * somersault_iter;
            for (int r = 0; r < somersault_iter; r++)
            {
                for (int t = 0; t < jump_iter; t++)
                {
                    for (int e = 0; e < crawl_iter; e++)
                    {
                        iter++;
                        oneClimb(result, deltaLength, step);
                        CheckForBest(result);
                        //Console.WriteLine(iter_amount.ToString() + "/" + iter.ToString

                        // дебаг
                        if (debug)
                        {
                            using (System.IO.StreamWriter file = new System.IO.StreamWriter(file_string, true))
                            {
                                file.Write(iter.ToString() + "\tcrawl");
                                for (int p = 0; p < population_count; p++)
                                {
                                    file.Write("\t" + result.ErrorLearnSamples(monkey[p]).ToString());
                                }
                                file.WriteLine();
                            }
                        }
                    }
                    for (int e = 0; e < jump_iter; e++)
                    {
                        iter++;
                        oneWatchJump(result);
                        //Console.WriteLine(iter_amount.ToString() + "/" + iter.ToString());
                        CheckForBest(result);
                        // дебаг
                        if (debug)
                        {
                            using (System.IO.StreamWriter file = new System.IO.StreamWriter(file_string, true))
                            {
                                file.Write(iter.ToString() + "\tlocaljump");
                                for (int p = 0; p < population_count; p++)
                                {
                                    file.Write("\t" + result.ErrorLearnSamples(monkey[p]).ToString());
                                }
                                file.WriteLine();
                            }
                        }
                    }
                }
                for (int e = 0; e < somersault_iter; e++)
                {
                    iter++;
                    oneGlobalJump(result);
                    CheckForBest(result);
                    // дебаг
                    if (debug)
                    {
                        using (System.IO.StreamWriter file = new System.IO.StreamWriter(file_string, true))
                        {
                            file.Write(iter.ToString() + "\tglobaljump");
                            for (int p = 0; p < population_count; p++)
                            {
                                file.Write("\t" + result.ErrorLearnSamples(monkey[p]).ToString());
                            }
                            file.WriteLine();
                        }
                    }
                    Console.WriteLine(iter_amount.ToString() + "/" + iter.ToString());
                }
            }
            //Console.WriteLine(final_iter.ToString() + "/" + final_counter.ToString());
            //FOR VICTORY!!!
            while ((final_iter < final_counter) && (last == true))
            {
                step *= 0.9;
                watch_jump_parameter      *= 0.9;
                somersault_interval_left  *= 0.9;
                somersault_interval_right *= 0.9;
                for (int r = 0; r < somersault_iter; r++)
                {
                    oneClimb(result, deltaLength, step);
                    CheckForBest(result);
                    iter++;
                }
                for (int t = 0; t < jump_iter; t++)
                {
                    oneWatchJump(result);
                    CheckForBest(result);
                    iter++;
                }
                for (int e = 0; e < crawl_iter; e++)
                {
                    oneGlobalJump(result);
                    CheckForBest(result);
                    iter++;
                }
                Console.WriteLine(iter_amount.ToString() + "/" + iter.ToString());
            }

            /*  for (int t = 0; t < population_count; t++)
             *    if (result.ErrorLearnSamples(monkey[best]) < result.ErrorLearnSamples(monkey[t]))
             *        best = t; */
            CheckForBest(result);
            if (bestsolutionnumber <= result.ErrorLearnSamples(result.RulesDatabaseSet[0]))
            {
                result.RulesDatabaseSet[0] = bestsolution;
            }
            iter = 0;
            if (debug)
            {
                using (System.IO.StreamWriter file = new System.IO.StreamWriter(file_string, true))
                {
                    file.WriteLine("Results\t" + result.ErrorLearnSamples(bestsolution).ToString() + "\t" + result.ErrorTestSamples(bestsolution).ToString());
                }
            }
            if (totxt)
            {
                using (System.IO.StreamWriter file_result = new System.IO.StreamWriter(file_string_to_txt, true))
                {
                    file_result.WriteLine(result.ErrorLearnSamples(bestsolution).ToString() + "\t" + result.ErrorTestSamples(bestsolution).ToString());
                }
            }
            return(result);
        }