def test_subreuse(self): mbounds = ((0, 1), (-1, 0)) env = testenvs.RandomEnv(mbounds) reuse_cfg = explorers.SubReuseExplorer.defcfg._deepcopy() reuse_cfg.m_channels = env.m_channels reuse_cfg.reuse.s_channels = env.s_channels reuse_cfg.reuse.algorithm = 'random' reuse_cfg.reuse.res = 10 reuse_cfg._strict(True) dataset = {'m_channels' : [env.m_channels[0]], 's_channels' : env.s_channels, 'explorations': []} orders = [] for _ in range(100): m = tools.random_signal(reuse_cfg.m_channels) m.pop(env.m_channels[1].name) s = tools.random_signal(reuse_cfg.reuse.s_channels) dataset['explorations'].append(({'m_signal': m}, {'s_signal': s})) orders.append(m) reuse_explorer = explorers.SubReuseExplorer(reuse_cfg, [dataset]) for _ in range(100): order = reuse_explorer.explore() order['m_signal'].pop(env.m_channels[1].name) self.assertTrue(order['m_signal'] in orders) self.assertEqual(reuse_explorer.explore(), None)
def test_reuseexp_random2(self): mbounds = ((0, 1), (-1, 0)) env = testenvs.RandomEnv(mbounds) reuse_cfg = explorers.ReuseExplorer.defcfg._deepcopy() reuse_cfg.m_channels = env.m_channels reuse_cfg.reuse.s_channels = env.s_channels reuse_cfg.reuse.algorithm = 'sensor_uniform' reuse_cfg.reuse.res = 10 reuse_cfg._strict(True) dataset = {'m_channels' : env.m_channels, 's_channels' : env.s_channels, 'explorations': []} orders = [] for _ in range(1000): m = tools.random_signal(reuse_cfg.m_channels) s = tools.random_signal(reuse_cfg.reuse.s_channels) dataset['explorations'].append(({'m_signal': m}, {'s_signal': s})) orders.append(m) reuse_explorer = explorers.ReuseExplorer(reuse_cfg, [dataset]) for _ in range(100): order = reuse_explorer.explore() self.assertTrue(order['m_signal'] in orders)
def test_subreuse(self): mbounds = ((0, 1), (-1, 0)) env = testenvs.RandomEnv(mbounds) reuse_cfg = explorers.SubReuseExplorer.defcfg._deepcopy() reuse_cfg.m_channels = env.m_channels reuse_cfg.reuse.s_channels = env.s_channels reuse_cfg.reuse.algorithm = 'random' reuse_cfg.reuse.res = 10 reuse_cfg._strict(True) dataset = { 'm_channels': [env.m_channels[0]], 's_channels': env.s_channels, 'explorations': [] } orders = [] for _ in range(100): m = tools.random_signal(reuse_cfg.m_channels) m.pop(env.m_channels[1].name) s = tools.random_signal(reuse_cfg.reuse.s_channels) dataset['explorations'].append(({'m_signal': m}, {'s_signal': s})) orders.append(m) reuse_explorer = explorers.SubReuseExplorer(reuse_cfg, [dataset]) for _ in range(100): order = reuse_explorer.explore() order['m_signal'].pop(env.m_channels[1].name) self.assertTrue(order['m_signal'] in orders) self.assertEqual(reuse_explorer.explore(), None)
def test_reuse_simple(self): m_channels = (Channel('a', (0, 1)), Channel('b', (-1, 0))) s_channels = (Channel('x', (4, 9)),) dataset = {'m_channels' : m_channels, 's_channels' : s_channels, 'explorations': []} orders = [] for _ in range(1000): m = tools.random_signal(m_channels) s = tools.random_signal(s_channels) dataset['explorations'].append(({'m_signal': m}, {'s_signal': s})) orders.append(m) reuse_cfg = reuse.s_reusegen.RandomReuse.defcfg._deepcopy() rndreuse = reuse.s_reusegen.RandomReuse(reuse_cfg, dataset) self.assertEqual(len(rndreuse), 1000) c = 0 for mc in rndreuse: c += 1 self.assertTrue(mc in orders) self.assertEqual(c, 1000) self.assertEqual(len(rndreuse), 0)
def test_reuseexp_random2(self): mbounds = ((0, 1), (-1, 0)) env = testenvs.RandomEnv(mbounds) reuse_cfg = explorers.ReuseExplorer.defcfg._deepcopy() reuse_cfg.m_channels = env.m_channels reuse_cfg.reuse.s_channels = env.s_channels reuse_cfg.reuse.algorithm = 'sensor_uniform' reuse_cfg.reuse.res = 10 reuse_cfg._strict(True) dataset = { 'm_channels': env.m_channels, 's_channels': env.s_channels, 'explorations': [] } orders = [] for _ in range(1000): m = tools.random_signal(reuse_cfg.m_channels) s = tools.random_signal(reuse_cfg.reuse.s_channels) dataset['explorations'].append(({'m_signal': m}, {'s_signal': s})) orders.append(m) reuse_explorer = explorers.ReuseExplorer(reuse_cfg, [dataset]) for _ in range(100): order = reuse_explorer.explore() self.assertTrue(order['m_signal'] in orders)
def test_im(self): mbounds = ((23, 34), (-3, -2)) sbounds = ((0, 1), (-1, -0), (101, 1001)) env = testenvs.BoundedRandomEnv(mbounds, sbounds) exp_cfg = explorers.IMExplorer.defcfg._deepcopy() exp_cfg.m_channels = env.m_channels exp_cfg.s_channels = env.s_channels exp_cfg.learner = learners.RandomLearner.defcfg._deepcopy() exp_cfg.res = 100 for im_name in ['explorers.LocalInterestModel', 'explorers.PredictiveNoveltyMotivation', 'explorers.IntermediateLevelOfNoveltyMotivation', ]: exp_cfg.lim.classname = im_name exp = explorers.IMExplorer(exp_cfg) for _ in range(10): m_signal = tools.random_signal(env.m_channels) feedback = env.execute(m_signal) exp.receive({'m_signal': m_signal, 'uuid': exp.cfg.uuid}, feedback) for _ in range(100): exploration = exp.explore() self.assertTrue(all(c.bounds[0] <= exploration['m_signal'][c.name] <= c.bounds[1] for c in env.m_channels)) feedback = env.execute(exploration['m_signal']) exp.receive(exploration, feedback)
def test_im(self): mbounds = ((23, 34), (-3, -2)) sbounds = ((0, 1), (-1, -0), (101, 1001)) env = testenvs.BoundedRandomEnv(mbounds, sbounds) exp_cfg = explorers.IMExplorer.defcfg._deepcopy() exp_cfg.m_channels = env.m_channels exp_cfg.s_channels = env.s_channels exp_cfg.learner = learners.RandomLearner.defcfg._deepcopy() exp_cfg.res = 100 for im_name in [ 'explorers.LocalInterestModel', 'explorers.PredictiveNoveltyMotivation', 'explorers.IntermediateLevelOfNoveltyMotivation', ]: exp_cfg.lim.classname = im_name exp = explorers.IMExplorer(exp_cfg) for _ in range(10): m_signal = tools.random_signal(env.m_channels) feedback = env.execute(m_signal) exp.receive({ 'm_signal': m_signal, 'uuid': exp.cfg.uuid }, feedback) for _ in range(100): exploration = exp.explore() self.assertTrue( all(c.bounds[0] <= exploration['m_signal'][c.name] <= c.bounds[1] for c in env.m_channels)) feedback = env.execute(exploration['m_signal']) exp.receive(exploration, feedback)
def test_multi_random(self): mbounds = ((0, 1), (-1, 0)) env = testenvs.RandomEnv(mbounds) reuse_cfg = explorers.MultiReuseExplorer.defcfg._deepcopy() reuse_cfg.m_channels = env.m_channels reuse_cfg.s_channels = env.m_channels reuse_cfg.reuse.s_channels = env.s_channels reuse_cfg.reuse.algorithm = 'random' reuse_cfg.reuse.res = 10 reuse_cfg.pick_algorithm = 'diversity' reuse_cfg.res = 10 reuse_cfg._strict(True) datasets = [] orders = [] for _ in range(5): dataset = { 'm_channels': env.m_channels, 's_channels': env.s_channels, 'explorations': [] } for _ in range(100): m = tools.random_signal(reuse_cfg.m_channels) s = tools.random_signal(reuse_cfg.reuse.s_channels) dataset['explorations'].append(({ 'm_signal': m }, { 's_signal': s })) orders.append(m) datasets.append(dataset) reuse_explorer = explorers.MultiReuseExplorer(reuse_cfg, datasets) for _ in range(500): order = reuse_explorer.explore() self.assertTrue(order['m_signal'] in orders) self.assertEqual(reuse_explorer.explore(), None)
def test_multi_random(self): mbounds = ((0, 1), (-1, 0)) env = testenvs.RandomEnv(mbounds) reuse_cfg = explorers.MultiReuseExplorer.defcfg._deepcopy() reuse_cfg.m_channels = env.m_channels reuse_cfg.s_channels = env.m_channels reuse_cfg.reuse.s_channels = env.s_channels reuse_cfg.reuse.algorithm = 'random' reuse_cfg.reuse.res = 10 reuse_cfg.pick_algorithm = 'diversity' reuse_cfg.res = 10 reuse_cfg._strict(True) datasets = [] orders = [] for _ in range(5): dataset = {'m_channels' : env.m_channels, 's_channels' : env.s_channels, 'explorations': []} for _ in range(100): m = tools.random_signal(reuse_cfg.m_channels) s = tools.random_signal(reuse_cfg.reuse.s_channels) dataset['explorations'].append(({'m_signal': m}, {'s_signal': s})) orders.append(m) datasets.append(dataset) reuse_explorer = explorers.MultiReuseExplorer(reuse_cfg, datasets) for _ in range(500): order = reuse_explorer.explore() self.assertTrue(order['m_signal'] in orders) self.assertEqual(reuse_explorer.explore(), None)
def _execute(self, m_signal, meta=None): return tools.random_signal(self.s_channels)