Beispiel #1
0
        public virtual double approxLearnSamples(KnowlegeBaseSARules Solution) //attention only for multicore processor optimized
        {
            Requires(Solution != null);
            double sum = LearnSamplesSet.DataRows.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism).Select(x => Math.Pow(x.DoubleOutput - approx_base(x.InputAttributeValue, Solution), 2)).Sum();

            return((double)Math.Sqrt(sum) / (double)LearnSamplesSet.CountSamples);
        }
Beispiel #2
0
        public virtual double approxTestSamples(KnowlegeBaseSARules forTest)
        {
            Requires(forTest != null);

            double sum = TestSamplesSet.DataRows.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism).Select(x => Math.Pow(x.DoubleOutput - approx_base(x.InputAttributeValue, forTest), 2)).Sum();

            return((double)Math.Sqrt(sum) / (double)TestSamplesSet.CountSamples);
        }
Beispiel #3
0
        public virtual double approx_base(double[] object_c, KnowlegeBaseSARules Solution)
        {
            Requires(object_c != null);
            Requires(Solution != null);
            double sum  = 0;
            double sum2 = 0;

            foreach (var rule in Solution.RulesDatabase)
            {
                double mul = rule.ListTermsInRule.Where(x => AcceptedFeatures[x.NumVar]).Select(x => x.LevelOfMembership(object_c)).Aggregate(1.0, (g, h) => g * h);
                sum2 += mul;
                sum  += mul * rule.IndependentConstantConsequent;
            }
            if (sum2 != 0)
            {
                return(sum / (double)sum2);
            }

            return(double.MaxValue);
        }
Beispiel #4
0
 public KnowlegeBaseSARules(KnowlegeBaseSARules source, List <bool> used_rules = null)
 {
     for (int i = 0; i < source.TermsSet.Count; i++)
     {
         Term temp_term = new Term(source.TermsSet[i]);
         TermsSet.Add(temp_term);
     }
     for (int j = 0; j < source.RulesDatabase.Count; j++)
     {
         if ((used_rules == null) || (used_rules[j]))
         {
             int[] order = new int[source.RulesDatabase[j].ListTermsInRule.Count];
             for (int k = 0; k < source.RulesDatabase[j].ListTermsInRule.Count; k++)
             {
                 Term temp_term = source.RulesDatabase[j].ListTermsInRule[k];
                 order[k] = source.TermsSet.FindIndex(x => x == temp_term);
             }
             double temp_DoubleOutputs = source.RulesDatabase[j].IndependentConstantConsequent;
             SARule temp_rule          = new SARule(TermsSet, order, temp_DoubleOutputs);
             RulesDatabase.Add(temp_rule);
         }
     }
 }
Beispiel #5
0
        public override double ErrorLearnSamples(KnowlegeBaseRules Source)
        {
            KnowlegeBaseSARules temp = Source as KnowlegeBaseSARules;

            return(approxLearnSamples(temp));
        }