Example #1
0
 def _should_do_rule_discovery_in_action_set(self, action_set):
     mean_time_stamp_in_action_set = calc_summary_stat(
         action_set, "mean", "time_stamp")
     time_since_last_rule_discovery = self._time_step - \
         mean_time_stamp_in_action_set
     return time_since_last_rule_discovery > \
         get_hyperparam("theta_ga") and self._did_explore
Example #2
0
 def __call__(self, action_set, payoff, situation):
     niche_min_error = calc_summary_stat(action_set, "min", "error")
     for classifier in action_set:
         classifier.experience += 1
         payoff_diff = payoff - classifier.get_prediction(situation)
         self._update_weight_vec(classifier, payoff_diff, situation)
         self._update_niche_min_error(classifier, niche_min_error)
         self._update_prediction_error(classifier, payoff_diff)
         update_action_set_size(classifier, action_set)
Example #3
0
    def _select_for_deletion(self, population):
        """First loop (selecting classifier to delete) of
        DELETE FROM POPULATION function from 'An Algorithmic Description of
        XCS' (Butz and Wilson, 2002). 
        This method should only ever be called if the population
        is past its microclassifier capacity."""
        mean_fitness_in_pop = calc_summary_stat(population, "mean", "fitness")
        votes = [
            self._calc_deletion_vote(classifier, mean_fitness_in_pop)
            for classifier in population
        ]
        vote_sum = sum(votes)
        choice_point = get_rng().rand() * vote_sum

        vote_sum = 0
        for (classifier, vote) in zip(population, votes):
            vote_sum += vote
            if vote_sum > choice_point:
                return classifier
    def test_sample_training_run(self):
        # 6-mux
        env = make_discrete_mux_env(num_address_bits=2,
                                    shuffle_dataset=True,
                                    reward_correct=1000,
                                    reward_incorrect=0)

        rule_repr = DiscreteRuleRepr()

        alg_hyperparams = {
            "N": 400,
            "beta": 0.2,
            "alpha": 0.1,
            "epsilon_nought": 0.01,
            "nu": 5,
            "gamma": 0.71,
            "theta_ga": 12,
            "chi": 0.8,
            "mu": 0.04,
            "theta_del": 20,
            "delta": 0.1,
            "theta_sub": 20,
            "p_wildcard": 0.33,
            "prediction_I": 1e-3,
            "epsilon_I": 1e-3,
            "fitness_I": 1e-3,
            "p_explore": 0.5,
            "theta_mna": len(env.action_set),
            "do_ga_subsumption": True,
            "do_as_subsumption": True,
            "seed": 0
        }

        alg = make_canonical_xcs(env, rule_repr, alg_hyperparams)

        monitor_items = [
            MonitorItem("num_micros",
                        lambda experiment: experiment.population.num_micros),
            MonitorItem("num_macros",
                        lambda experiment: experiment.population.num_macros),
            MonitorItem(
                "performance", lambda experiment: experiment.calc_performance(
                    strat="accuracy")),
            MonitorItem(
                "mean_error", lambda experiment: calc_summary_stat(
                    experiment.population, "mean", "error")),
            MonitorItem(
                "max_fitness", lambda experiment: calc_summary_stat(
                    experiment.population, "max", "fitness")),
            MonitorItem(
                "deletion", lambda experiment: experiment.population.
                operations_record["deletion"]),
            MonitorItem(
                "covering", lambda experiment: experiment.population.
                operations_record["covering"]),
            MonitorItem(
                "as_subsumption", lambda experiment: experiment.population.
                operations_record["as_subsumption"]),
            MonitorItem(
                "ga_subsumption", lambda experiment: experiment.population.
                operations_record["ga_subsumption"]),
            MonitorItem(
                "discovery", lambda experiment: experiment.population.
                operations_record["discovery"]),
            MonitorItem(
                "absorption", lambda experiment: experiment.population.
                operations_record["absorption"])
        ]

        experiment = Experiment(env,
                                alg,
                                num_training_epochs=10,
                                monitor_items=monitor_items)
        experiment.run()
        print(experiment._monitor.query())