def test_against_MUX(self): scenario = MUXProblem(training_cycles=10000, address_size=3) algorithm = xcs.XCSAlgorithm() algorithm.exploration_probability = .1 algorithm.discount_factor = 0 algorithm.do_ga_subsumption = True algorithm.do_action_set_subsumption = True best = None expected = .6 for _ in range(2): logging.disable(logging.CRITICAL) try: scenario.reset() steps, total_reward, time_passed, population = xcs.test( algorithm, scenario) finally: logging.disable(logging.NOTSET) average_reward = total_reward / steps self.assertGreater(average_reward, .49) self.assertLess(time_passed, 40) if average_reward >= expected: break elif best is None or best < average_reward: best = average_reward else: self.fail("Failed to achieve expected average reward level. " "(Missed by %f.)" % (expected - best))
def test_against_MUX(self): scenario = MUXProblem(training_cycles=10000, address_size=3) algorithm = xcs.XCSAlgorithm() algorithm.exploration_probability = .1 algorithm.discount_factor = 0 algorithm.do_ga_subsumption = True algorithm.do_action_set_subsumption = True best = None expected = .6 for _ in range(2): logging.disable(logging.CRITICAL) try: scenario.reset() steps, total_reward, time_passed, population = xcs.test( algorithm, scenario ) finally: logging.disable(logging.NOTSET) average_reward = total_reward / steps self.assertGreater(average_reward, .49) self.assertLess(time_passed, 40) if average_reward >= expected: break elif best is None or best < average_reward: best = average_reward else: self.fail("Failed to achieve expected average reward level. " "(Missed by %f.)" % (expected - best))
class TestMUXProblem(unittest.TestCase): def setUp(self): self.scenario = MUXProblem(10) def test_get_possible_actions(self): actions = self.scenario.get_possible_actions() self.assertTrue(len(actions) == 2) self.assertTrue(True in actions) self.assertTrue(False in actions) def test_sense(self): situation_size = (self.scenario.address_size + (1 << self.scenario.address_size)) previous = self.scenario.sense() self.assertIsInstance(previous, BitString) self.assertTrue(len(previous) == situation_size) while self.scenario.more(): current = self.scenario.sense() self.assertIsInstance(current, BitString) self.assertTrue(len(current) == situation_size) if current != previous: break else: self.fail("All situations are the same.") def test_execute(self): situation = self.scenario.sense() index = int(situation[:self.scenario.address_size]) value = situation[self.scenario.address_size + index] self.assertEqual(1, self.scenario.execute(value)) self.assertEqual(0, self.scenario.execute(not value)) def test_more(self): self.scenario.reset() for _ in range(self.scenario.initial_training_cycles): self.scenario.sense() self.assertTrue(self.scenario.more()) self.scenario.execute(False) self.assertFalse(self.scenario.more())