예제 #1
0
def test_instantiate_consequent():
    # Correctly create a minimal Consequent
    universe = np.linspace(0, 5, 7)
    label = 'test-Consequent Labeling ??$%&dwlkj234!"'
    con = Consequent(universe, label)

    # Assure expected behavior
    tst.assert_equal(universe, con.universe)
    assert con.label == label
    assert con._id == id(con)
    assert_empty_ordereddict(con.terms)
    assert con.__name__ == 'Consequent'
    assert con.__repr__() == 'Consequent: {0}'.format(label)
예제 #2
0
def test_instantiate_consequent():
    # Correctly create a minimal Consequent
    universe = np.linspace(0, 5, 7)
    label = 'test-Consequent Labeling ??$%&dwlkj234!"'
    con = Consequent(universe, label)

    # Assure expected behavior
    tst.assert_equal(universe, con.universe)
    assert con.label == label
    assert con._id == id(con)
    assert_empty_ordereddict(con.terms)
    assert con.__name__ == 'Consequent'
    assert con.__repr__() == 'Consequent: {0}'.format(label)
예제 #3
0
def test_add_mf():
    universe = np.linspace(0, 7, 21)
    ant_label = 'service'
    con_label = 'TIP'

    ant = Antecedent(universe, ant_label)
    con = Consequent(universe, con_label)

    mf0 = np.sin(universe / 7. * 4 * np.pi) / 2. + 0.5
    mf1 = np.arange(ant.universe.size) / ant.universe.size

    # Assign mfs to Antecedent
    ant['wavy'] = mf0
    ant['high'] = mf1

    # Ensure they were added correctly
    assert list(ant.terms.keys()) == ['wavy', 'high']
    tst.assert_equal(ant.terms['wavy'].mf, mf0)
    tst.assert_equal(ant.terms['high'].mf, mf1)

    # Assign mfs to Consequent
    con['wavy'] = mf0
    con['high'] = mf1

    # Ensure they were added correctly
    assert list(con.terms.keys()) == ['wavy', 'high']
    tst.assert_equal(con.terms['wavy'].mf, mf0)
    tst.assert_equal(con.terms['high'].mf, mf1)
예제 #4
0
def setup():
    global ant
    global con
    global universe

    universe0 = np.linspace(0, 5, 6)
    universe1 = np.linspace(0, 9, 10)
    ant_label = 'service'
    con_label = 'TIP'

    ant = Antecedent(universe0, ant_label)
    con = Consequent(universe1, con_label)
예제 #5
0
def test_tipping_problem():
    # The full tipping problem uses many of these methods
    food = Antecedent(np.linspace(0, 10, 11), 'quality')
    service = Antecedent(np.linspace(0, 10, 11), 'service')
    tip = Consequent(np.linspace(0, 25, 26), 'tip')

    food.automf(3)
    service.automf(3)

    # Manual membership function definition
    tip['bad'] = trimf(tip.universe, [0, 0, 13])
    tip['middling'] = trimf(tip.universe, [0, 13, 25])
    tip['lots'] = trimf(tip.universe, [13, 25, 25])

    # Define fuzzy rules
    rule1 = Rule(food['poor'] | service['poor'], tip['bad'])
    rule2 = Rule(service['average'], tip['middling'])
    rule3 = Rule(service['good'] | food['good'], tip['lots'])

    # The control system - defined both possible ways
    tipping = ControlSystem([rule1, rule2, rule3])

    tipping2 = ControlSystem()
    tipping2.addrule(rule2)
    tipping2.addrule(rule3)
    tipping2.addrule(rule1)

    tip_sim = ControlSystemSimulation(tipping)
    tip_sim2 = ControlSystemSimulation(tipping2)

    # Inputs added both possible ways
    inputs = {'quality': 6.5, 'service': 9.8}
    for key, value in inputs.items():
        tip_sim.input[key] = value

    tip_sim2.inputs(inputs)

    # Compute the system
    tip_sim.compute()
    tip_sim2.compute()

    assert tip_sim.output == tip_sim2.output
    tst.assert_allclose(tip_sim.output['tip'], 19.8578, atol=1e-2, rtol=1e-2)