Exemplo n.º 1
0
 def test_terms_combination(self):
     limits1 = (-2, -1, 0)
     limits2 = (0, 1, 2)
     fuzzy_var = FuzzyVariable()
     trifunc1 = TriFunc(limits1[0], limits1[1], limits1[2])
     trifunc2 = TriFunc(limits2[0], limits2[1], limits2[2])
     fuzzy_term1 = fuzzy_var.is_(trifunc1)
     fuzzy_term2 = fuzzy_var.is_(trifunc2)
     fuzzy_term = fuzzy_term1 & fuzzy_term2
     self.assertTrue(isinstance(fuzzy_term, FuzzyTerm))
Exemplo n.º 2
0
 def test_COG_one_out(self):
     in_fuzz_var = FuzzyVariable()
     in_fuzz_memb = TriFunc(-1, 0, 1)
     in_fuzz_term = in_fuzz_var.is_(in_fuzz_memb)
     out_fuzz_var = FuzzyVariable()
     out_fuzz_memb = TriFunc(-1, 0, 1)
     fuzz_rule = FuzzyRule(in_fuzz_term, out_fuzz_var, out_fuzz_memb)
     in_fuzz_var.value = 0
     res = apply_defuzzyfy_COG(fuzz_rule)
     self.assertEqual(len(res), 1)
     self.assertAlmostEqual(res[0], 0, delta=0.01)
Exemplo n.º 3
0
 def test_rule_creation_two_anrecedents(self):
     input_fuzzy_var = FuzzyVariable()
     input_membership_func1 = TriFunc(-1, 0, 1)
     input_membership_func2 = TriFunc(1, 2, 3)
     input_fuzzy_term1 = input_fuzzy_var.is_(input_membership_func1)
     input_fuzzy_term2 = input_fuzzy_var.is_(input_membership_func2)
     output_fuzzy_var = FuzzyVariable()
     output_membership_func = TriFunc(100, 200, 300)
     fuzzy_rule = FuzzyRule([input_fuzzy_term1, input_fuzzy_term2],
                            output_fuzzy_var, output_membership_func)
     self.assertEqual(len(fuzzy_rule.antecedents), 2)
Exemplo n.º 4
0
 def test_rule_creation_one_anrecedent(self):
     input_fuzzy_var = FuzzyVariable()
     input_membership_func = TriFunc(-1, 0, 1)
     input_fuzzy_term = input_fuzzy_var.is_(input_membership_func)
     output_fuzzy_var = FuzzyVariable()
     output_membership_func = TriFunc(100, 200, 300)
     fuzzy_rule = FuzzyRule(input_fuzzy_term, output_fuzzy_var,
                            output_membership_func)
     self.assertEqual(len(fuzzy_rule.antecedents), 1)
     self.assertEqual(fuzzy_rule.variable.low_limit, 100)
     self.assertEqual(fuzzy_rule.variable.upp_limit, 300)
Exemplo n.º 5
0
 def test_or_term2(self):
     limits1 = (-1, 0, 1)
     limits2 = (0, 1, 2)
     fuzzy_var = FuzzyVariable()
     trifunc1 = TriFunc(limits1[0], limits1[1], limits1[2])
     trifunc2 = TriFunc(limits2[0], limits2[1], limits2[2])
     fuzzy_term1 = fuzzy_var.is_(trifunc1)
     fuzzy_term2 = fuzzy_var.is_(trifunc2)
     fuzzy_term = fuzzy_term1 | fuzzy_term2
     for x in list(limits1) + list(limits2):
         fuzzy_var.value = x
         self.assertEqual(fuzzy_term(), max(trifunc1(x), trifunc2(x)))
Exemplo n.º 6
0
 def test_and_term1(self):
     limits1 = (-2, -1, 0)
     limits2 = (0, 1, 2)
     fuzzy_var = FuzzyVariable()
     trifunc1 = TriFunc(limits1[0], limits1[1], limits1[2])
     trifunc2 = TriFunc(limits2[0], limits2[1], limits2[2])
     fuzzy_term1 = fuzzy_var.is_(trifunc1)
     fuzzy_term2 = fuzzy_var.is_(trifunc2)
     fuzzy_term = fuzzy_term1 & fuzzy_term2
     for x in list(limits1) + list(limits2):
         fuzzy_var.value = x
         self.assertEqual(fuzzy_term(), 0)
Exemplo n.º 7
0
 def test_COG_two_rules_one_var(self):
     in_fuzz_var = FuzzyVariable()
     in_fuzz_memb1 = TriFunc(-1, 0, 1)
     in_fuzz_memb2 = TriFunc(-1, 0, 1)
     in_fuzz_term1 = in_fuzz_var.is_(in_fuzz_memb1)
     in_fuzz_term2 = in_fuzz_var.is_(in_fuzz_memb2)
     out_fuzz_var = FuzzyVariable()
     out_fuzz_memb1 = TriFunc(-1, 0, 1)
     out_fuzz_memb2 = TriFunc(-1, 0, 1)
     fuzz_rule1 = FuzzyRule(in_fuzz_term1, out_fuzz_var, out_fuzz_memb1)
     fuzz_rule2 = FuzzyRule(in_fuzz_term2, out_fuzz_var, out_fuzz_memb2)
     in_fuzz_var.value = 0
     res = apply_defuzzyfy_COG([fuzz_rule1, fuzz_rule2])
     self.assertEqual(len(res), 1)
     self.assertAlmostEqual(res[0], 0, delta=0.01)
Exemplo n.º 8
0
 def test_term_is_callable(self):
     limits = (-1, 0, 1)
     fuzzy_var = FuzzyVariable()
     trifunc = TriFunc(limits[0], limits[1], limits[2])
     fuzzy_term = fuzzy_var.is_(trifunc)
     fuzzy_var.value = limits[0]
     self.assertEqual(fuzzy_term(), 0)
     fuzzy_var.value = limits[1]
     self.assertEqual(fuzzy_term(), 1)
     fuzzy_var.value = limits[2]
     self.assertEqual(fuzzy_term(), 0)
Exemplo n.º 9
0
 def test_term_generation(self):
     limits1 = (-2, -1, 0)
     limits2 = (0, 1, 2)
     fuzzy_var = FuzzyVariable()
     trifunc1 = TriFunc(limits1[0], limits1[1], limits1[2])
     trifunc2 = TriFunc(limits2[0], limits2[1], limits2[2])
     fuzzy_var.is_(trifunc1)
     self.assertEqual(fuzzy_var.low_limit, limits1[0])
     self.assertEqual(fuzzy_var.upp_limit, limits1[2])
     fuzzy_var.is_(trifunc2)
     self.assertEqual(fuzzy_var.low_limit, min(limits1[0], limits2[0]))
     self.assertEqual(fuzzy_var.upp_limit, max(limits1[2], limits2[2]))
Exemplo n.º 10
0
    def test_rule_call(self):
        input_fuzzy_var = FuzzyVariable()
        input_membership_func = TriFunc(-1, 0, 1)
        input_fuzzy_term = input_fuzzy_var.is_(input_membership_func)
        output_fuzzy_var = FuzzyVariable()
        output_membership_func = TriFunc(100, 200, 300)
        fuzzy_rule = FuzzyRule(input_fuzzy_term, output_fuzzy_var,
                               output_membership_func)

        input_fuzzy_var.value = 0
        self.assertEqual(fuzzy_rule(200), 1)
        self.assertEqual(fuzzy_rule(100), 0)
        self.assertEqual(fuzzy_rule(150), 0.5)
        self.assertEqual(fuzzy_rule(250), 0.5)
        self.assertEqual(fuzzy_rule(300), 0)

        input_fuzzy_var.value = -1
        self.assertEqual(fuzzy_rule(200), 0)
        self.assertEqual(fuzzy_rule(100), 0)
        self.assertEqual(fuzzy_rule(150), 0)
        self.assertEqual(fuzzy_rule(250), 0)
        self.assertEqual(fuzzy_rule(300), 0)

        input_fuzzy_var.value = 1
        self.assertEqual(fuzzy_rule(200), 0)
        self.assertEqual(fuzzy_rule(100), 0)
        self.assertEqual(fuzzy_rule(150), 0)
        self.assertEqual(fuzzy_rule(250), 0)
        self.assertEqual(fuzzy_rule(300), 0)

        input_fuzzy_var.value = 0.5
        self.assertEqual(fuzzy_rule(200), 0.5)
        self.assertEqual(fuzzy_rule(100), 0)
        self.assertEqual(fuzzy_rule(150), 0.25)
        self.assertEqual(fuzzy_rule(250), 0.25)
        self.assertEqual(fuzzy_rule(300), 0)