예제 #1
0
    def test_find_old_classifier_similar_and_subsumer_subsumer_returned(self):
        # given
        cfg = acs2.Configuration(
            classifier_length=8, number_of_possible_actions=4)

        subsumer = acs2.Classifier(
            condition='1#######',
            action=1,
            experience=21,
            quality=0.95,
            cfg=cfg)

        similar = acs2.Classifier(
            condition='10######',
            action=1,
            cfg=cfg)

        population = acs2.ClassifiersList(*[similar, subsumer])

        cl = acs2.Classifier(
            condition='10######',
            action=1,
            cfg=cfg)

        # when
        old_cls = ga._find_old_classifier(population, cl, True, cfg.theta_exp)

        # then
        assert similar == cl
        assert subsumer == old_cls
예제 #2
0
    def test_should_not_find_old_classifier(self):
        # given
        cfg = acs2.Configuration(
            classifier_length=4, number_of_possible_actions=2)
        cl = acs2.Classifier(cfg=cfg)
        population = acs2.ClassifiersList()

        # when
        old_cl = ga._find_old_classifier(population, cl, True, cfg.theta_exp)

        # then
        assert old_cl is None
예제 #3
0
    def test_should_find_old_classifier_only_subsumer(self):
        # given
        cfg = acs2.Configuration(
            classifier_length=8, number_of_possible_actions=4)

        subsumer1 = acs2.Classifier(
            condition='1##0####',
            action=3,
            effect='##1#####',
            quality=0.93,
            reward=1.35,
            experience=23,
            cfg=cfg)

        subsumer2 = acs2.Classifier(
            condition='#1#0####',
            action=3,
            effect='##1#####',
            quality=0.93,
            reward=1.35,
            experience=23,
            cfg=cfg)

        most_general = acs2.Classifier(
            condition='###0####',
            action=3,
            effect='##1#####',
            quality=0.93,
            reward=1.35,
            experience=23,
            cfg=cfg)

        nonsubsumer = acs2.Classifier(cfg=cfg)

        cl = acs2.Classifier(
            condition='11#0####',
            action=3,
            effect='##1#####',
            quality=0.5,
            reward=0.35,
            experience=1,
            cfg=cfg)

        population = acs2.ClassifiersList(
            *[nonsubsumer, subsumer1, nonsubsumer, most_general,
              subsumer2, nonsubsumer])

        # when
        old_cl = ga._find_old_classifier(population, cl, True, cfg.theta_exp)

        # then
        assert old_cl == most_general
예제 #4
0
    def test_find_old_classifier_only_similar(self):
        # given
        cfg = acs2.Configuration(
            classifier_length=4, number_of_possible_actions=2)

        cl_1 = acs2.Classifier(action=1, experience=32, cfg=cfg)
        cl_2 = acs2.Classifier(action=1, cfg=cfg)
        population = acs2.ClassifiersList(
            *[cl_1,
              acs2.Classifier(action=2, cfg=cfg),
              acs2.Classifier(action=3, cfg=cfg),
              cl_2])

        # when
        cl = acs2.Classifier(action=1, cfg=cfg)
        old_cl = ga._find_old_classifier(population, cl, True, cfg.theta_exp)

        # then
        assert old_cl == cl_1