Exemplo n.º 1
0
    def __init__(self, *args):
        unittest.TestCase.__init__(self, *args)
        rules = """
            distance is Far & ammo is Plenty => desire is Desirable
            distance is Far & ammo is Ok => desire is Undesirable
            distance is Far & ammo is Low => desire is Undesirable
            distance is Medium & ammo is Plenty => desire is VeryDesirable
            distance is Medium & ammo is Ok => desire is VeryDesirable
            distance is Medium & ammo is Low => desire is Desirable
            distance is Close & ammo is Plenty => desire is Undesirable
            distance is Close & ammo is Ok => desire is Undesirable
            distance is Close & ammo is Low => desire is Undesirable
        """

        variables = {
            "desire": [
                ("VeryDesirable", sets.shoulder(75, 50)),
                ("Desirable", sets.triangle(25, 50, 75)),
                ("Undesirable", sets.shoulder(25, 50)),
            ],
            "distance": [
                ("Far", sets.shoulder(300, 150)),
                ("Medium", sets.triangle(10, 150, 300)),
                ("Close", sets.shoulder(10, 150)),
            ],
            "ammo": [("Plenty", sets.shoulder(30, 10)),
                     ("Ok", sets.triangle(0, 10, 30)),
                     ("Low", sets.shoulder(0, 10))],
        }

        max_values = {"desire": 100, "distance": 400, "ammo": 40}
        self.kb = KnowledgeBase(rules, variables, max_values, accuracy=1000)
Exemplo n.º 2
0
    def __init__(self, *args):
        unittest.TestCase.__init__(self, *args)
        rules = """
            distance is Far & ammo is Plenty => desire is Desirable
            distance is Far & ammo is Ok => desire is Undesirable
            distance is Far & ammo is Low => desire is Undesirable
            distance is Medium & ammo is Plenty => desire is VeryDesirable
            distance is Medium & ammo is Ok => desire is VeryDesirable
            distance is Medium & ammo is Low => desire is Desirable
            distance is Close & ammo is Plenty => desire is Undesirable
            distance is Close & ammo is Ok => desire is Undesirable
            distance is Close & ammo is Low => desire is Undesirable
        """

        variables = {
            "desire": [
                ("VeryDesirable", sets.shoulder(75, 50)),
                ("Desirable", sets.triangle(25, 50, 75)),
                ("Undesirable", sets.shoulder(25, 50)),
            ],
            "distance": [
                ("Far", sets.shoulder(300, 150)),
                ("Medium", sets.triangle(10, 150, 300)),
                ("Close", sets.shoulder(10, 150)),
            ],
            "ammo": [
                ("Plenty", sets.shoulder(30, 10)),
                ("Ok", sets.triangle(0, 10, 30)),
                ("Low", sets.shoulder(0, 10))
            ],
        }

        max_values = {"desire": 100, "distance": 400, "ammo": 40}
        self.kb = KnowledgeBase(rules, variables, max_values, accuracy=1000)
Exemplo n.º 3
0
class FuzzyLogicTests(unittest.TestCase):
    def __init__(self, *args):
        unittest.TestCase.__init__(self, *args)
        rules = """
            distance is Far & ammo is Plenty => desire is Desirable
            distance is Far & ammo is Ok => desire is Undesirable
            distance is Far & ammo is Low => desire is Undesirable
            distance is Medium & ammo is Plenty => desire is VeryDesirable
            distance is Medium & ammo is Ok => desire is VeryDesirable
            distance is Medium & ammo is Low => desire is Desirable
            distance is Close & ammo is Plenty => desire is Undesirable
            distance is Close & ammo is Ok => desire is Undesirable
            distance is Close & ammo is Low => desire is Undesirable
        """

        variables = {
            "desire": [
                ("VeryDesirable", sets.shoulder(75, 50)),
                ("Desirable", sets.triangle(25, 50, 75)),
                ("Undesirable", sets.shoulder(25, 50)),
            ],
            "distance": [
                ("Far", sets.shoulder(300, 150)),
                ("Medium", sets.triangle(10, 150, 300)),
                ("Close", sets.shoulder(10, 150)),
            ],
            "ammo": [
                ("Plenty", sets.shoulder(30, 10)),
                ("Ok", sets.triangle(0, 10, 30)),
                ("Low", sets.shoulder(0, 10))
            ],
        }

        max_values = {"desire": 100, "distance": 400, "ammo": 40}
        self.kb = KnowledgeBase(rules, variables, max_values, accuracy=1000)

    def test_inference(self):
        result = self.kb.ask(({"distance": 200, "ammo": 8}, "desire"))
        self.assertAlmostEqual(result, 57.49, 2)


    def assert_membership_test(self, var, value, tests):
        for member_set, expected in tests:
            self.assertAlmostEqual(self.kb.vars[var][member_set](value),
                                    expected)

    def test_membership_sets(self):
        distance_tests = [
            ("Far", 1/3),
        ]

        ammo_tests = [
            ("Plenty", 0),
            ("Ok", 0.8),
            ("Low", 0.2)
        ]

        distance, ammo = 200, 8
        self.assert_membership_test("distance", distance, distance_tests)
        self.assert_membership_test("ammo", ammo, ammo_tests)
Exemplo n.º 4
0
class FuzzyLogicTests(unittest.TestCase):
    def __init__(self, *args):
        unittest.TestCase.__init__(self, *args)
        rules = """
            distance is Far & ammo is Plenty => desire is Desirable
            distance is Far & ammo is Ok => desire is Undesirable
            distance is Far & ammo is Low => desire is Undesirable
            distance is Medium & ammo is Plenty => desire is VeryDesirable
            distance is Medium & ammo is Ok => desire is VeryDesirable
            distance is Medium & ammo is Low => desire is Desirable
            distance is Close & ammo is Plenty => desire is Undesirable
            distance is Close & ammo is Ok => desire is Undesirable
            distance is Close & ammo is Low => desire is Undesirable
        """

        variables = {
            "desire": [
                ("VeryDesirable", sets.shoulder(75, 50)),
                ("Desirable", sets.triangle(25, 50, 75)),
                ("Undesirable", sets.shoulder(25, 50)),
            ],
            "distance": [
                ("Far", sets.shoulder(300, 150)),
                ("Medium", sets.triangle(10, 150, 300)),
                ("Close", sets.shoulder(10, 150)),
            ],
            "ammo": [("Plenty", sets.shoulder(30, 10)),
                     ("Ok", sets.triangle(0, 10, 30)),
                     ("Low", sets.shoulder(0, 10))],
        }

        max_values = {"desire": 100, "distance": 400, "ammo": 40}
        self.kb = KnowledgeBase(rules, variables, max_values, accuracy=1000)

    def test_inference(self):
        result = self.kb.ask(({"distance": 200, "ammo": 8}, "desire"))
        self.assertAlmostEqual(result, 57.49, 2)

    def assert_membership_test(self, var, value, tests):
        for member_set, expected in tests:
            self.assertAlmostEqual(self.kb.vars[var][member_set](value),
                                   expected)

    def test_membership_sets(self):
        distance_tests = [
            ("Far", 1 / 3),
        ]

        ammo_tests = [("Plenty", 0), ("Ok", 0.8), ("Low", 0.2)]

        distance, ammo = 200, 8
        self.assert_membership_test("distance", distance, distance_tests)
        self.assert_membership_test("ammo", ammo, ammo_tests)