예제 #1
0
        public override a_Fuzzy_System Generate(Fuzzy_system.Approx_Singletone.a_Fuzzy_System Approximate, Abstract_generator_conf config)
        {
            a_Fuzzy_System result = Approximate;

            if (result.Count_Rulles_Databases == 0)
            {
                result.Init_Rules_everyone_with_everyone(config);
            }

            count_shrink = ((Term_shrink_and_rotate_conf)config).Число_параметров_для_уменьшения_термов;
            size_shrink  = ((Term_shrink_and_rotate_conf)config).Значение_уменьшения_термов;
            type_func    = ((Term_shrink_and_rotate_conf)config).Функция_принадлежности;
            count_slices = ((Term_shrink_and_rotate_conf)config).Количество_термов_для_каждого_признака;



            List <int> Varians_of_run_system = new List <int>();

            for (int i = 0; i < Approximate.Count_Vars; i++)
            {
                int count_terms_for_var = Approximate.Rulles_Database_Set[0].Terms_Set.FindAll(x => x.Number_of_Input_Var == i).Count;
                if (i < count_shrink)
                {
                    Varians_of_run_system.Add(count_terms_for_var - size_shrink);
                }
                else
                {
                    Varians_of_run_system.Add(count_terms_for_var);
                }
            }

            Varians_of_run_system.Sort();
            Type_Term_Func_Enum type_of_term = Approximate.Rulles_Database_Set[0].Terms_Set[0].Term_Func_Type;

            Generate_all_variant_in_pool(Varians_of_run_system);

            for (int i = 0; i < Pull_of_systems.Count; i++)
            {
                Approximate.Rulles_Database_Set.Clear();

                Approximate.Init_Rules_everyone_with_everyone(type_of_term, Pull_of_systems[i].ToArray());
                Systems_ready_to_test.Add(Approximate.Rulles_Database_Set[0]);
                errors_of_systems.Add(result.approx_Learn_Samples(0));
            }

            int best_index = errors_of_systems.IndexOf(errors_of_systems.Min());

            result.Rulles_Database_Set.Clear();
            result.Rulles_Database_Set.Add(Systems_ready_to_test[best_index]);
            Console.WriteLine(Pull_of_systems.Count());



            GC.Collect();
//            result.unlaid_protection_fix();
            return(result);
        }
예제 #2
0
        public override a_Fuzzy_System TuneUpFuzzySystem(Fuzzy_system.Approx_Singletone.a_Fuzzy_System Approximate, Abstract_learn_algorithm_conf config)
        {
            a_Fuzzy_System result = Approximate;

            if (result.Count_Rulles_Databases == 0)
            {
                throw new System.FormatException("Что то не то с входными данными");
            }
            Optimize_Term_shrink_and_rotate_conf Config = config as Optimize_Term_shrink_and_rotate_conf;

            count_shrink = Config.Число_параметров_для_уменьшения_термов;
            size_shrink  = Config.Значение_уменьшения_термов;



            List <int> Varians_of_run_system = new List <int>();

            for (int i = 0; i < Approximate.Count_Vars; i++)
            {
                int count_terms_for_var = Approximate.Rulles_Database_Set[0].Terms_Set.FindAll(x => x.Number_of_Input_Var == i).Count;
                if (i < count_shrink)
                {
                    Varians_of_run_system.Add(count_terms_for_var - size_shrink);
                }
                else
                {
                    Varians_of_run_system.Add(count_terms_for_var);
                }
            }

            Varians_of_run_system.Sort();
            Type_Term_Func_Enum type_of_term = Approximate.Rulles_Database_Set[0].Terms_Set[0].Term_Func_Type;

            Generate_all_variant_in_pool(Varians_of_run_system);

            for (int i = 0; i < Pull_of_systems.Count; i++)
            {
                Approximate.Rulles_Database_Set.Clear();

                Approximate.Init_Rules_everyone_with_everyone(type_of_term, Pull_of_systems[i].ToArray());
                Systems_ready_to_test.Add(Approximate.Rulles_Database_Set[0]);
                errors_of_systems.Add(result.approx_Learn_Samples(0));
            }

            int best_index = errors_of_systems.IndexOf(errors_of_systems.Min());

            result.Rulles_Database_Set.Clear();
            result.Rulles_Database_Set.Add(Systems_ready_to_test[best_index]);
            Console.WriteLine(Pull_of_systems.Count());



//            result.unlaid_protection_fix();
            return(result);
        }