예제 #1
0
    def test_run(self):
        target = lambda x: x**2
        taf = ExecuteTAFuncDict(ta=target, stats=self.stats)
        rval = taf.run(config=2)
        self.assertFalse(taf._accepts_instance)
        self.assertFalse(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.SUCCESS)
        self.assertEqual(rval[1], 4)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())

        target = lambda x, seed: (x**2, {'key': seed})
        taf = ExecuteTAFuncDict(ta=target, stats=self.stats)
        rval = taf.run(config=2, instance='test')
        self.assertFalse(taf._accepts_instance)
        self.assertTrue(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.SUCCESS)
        self.assertEqual(rval[1], 4)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], {'key': 12345})

        target = lambda x, seed, instance: (x**2, {
            'key': seed,
            'instance': instance
        })
        taf = ExecuteTAFuncDict(ta=target, stats=self.stats)
        rval = taf.run(config=2, instance='test')
        self.assertTrue(taf._accepts_instance)
        self.assertTrue(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.SUCCESS)
        self.assertEqual(rval[1], 4)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], {'key': 12345, 'instance': 'test'})
예제 #2
0
    def test_run_wo_pynisher(self):
        def target(x):
            return x**2

        taf = ExecuteTAFuncDict(ta=target,
                                stats=self.stats,
                                use_pynisher=False)
        rval = taf.run(config=2)
        self.assertFalse(taf._accepts_instance)
        self.assertFalse(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.SUCCESS)
        self.assertEqual(rval[1], 4)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())

        def target(x, seed, instance):
            return x**2, {'key': seed, 'instance': instance}

        taf = ExecuteTAFuncDict(ta=target,
                                stats=self.stats,
                                use_pynisher=False)
        rval = taf.run(config=2, instance='test')
        self.assertTrue(taf._accepts_instance)
        self.assertTrue(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.SUCCESS)
        self.assertEqual(rval[1], 4)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], {'key': 12345, 'instance': 'test'})

        def target(x):
            return None

        taf = ExecuteTAFuncDict(ta=target,
                                stats=self.stats,
                                use_pynisher=False)
        rval = taf.run(config=2)

        self.assertFalse(taf._accepts_instance)
        self.assertFalse(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.CRASHED)
        self.assertEqual(rval[1], 2147483647.0)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())

        def target(x):
            raise Exception(x)

        taf = ExecuteTAFuncDict(ta=target,
                                stats=self.stats,
                                use_pynisher=False)
        rval = taf.run(config=2)
        self.assertFalse(taf._accepts_instance)
        self.assertFalse(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.CRASHED)
        self.assertEqual(rval[1], 2147483647.0)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())
예제 #3
0
    def test_memout(self):
        def fill_memory(*args):
            a = np.random.random_sample((10000, 10000)).astype(np.float64)
            return np.sum(a)

        taf = ExecuteTAFuncDict(ta=fill_memory,
                                stats=self.stats,
                                memory_limit=1024)
        rval = taf.run(config=None)

        platform = os.getenv('TRAVIS_OS_NAME')
        if platform is None:
            platform = {'linux': 'linux', 'darwin': 'osx'}.get(sys.platform)

        print(platform, sys.platform)
        if platform == 'linux':
            self.assertEqual(rval[0], StatusType.MEMOUT)
            self.assertEqual(rval[1], 2147483647.0)
            self.assertGreaterEqual(rval[2], 0.0)
            self.assertEqual(rval[3], dict())
        elif platform == 'osx':
            self.assertEqual(rval[0], StatusType.SUCCESS)
        else:
            raise ValueError('Test cannot be performed on platform %s' %
                             sys.platform)
예제 #4
0
    def test_non_serializable(self):
        # cost non serializable
        def target(x):
            return np.int32(x)

        taf = ExecuteTAFuncDict(ta=target, stats=self.stats)
        msg = "Please ensure all objects returned are JSON serializable."
        with self.assertRaisesRegex(TypeError, msg):
            taf.run(config=2)

        # additional info non serializable
        def target(x):
            return x, {'x': np.int32(x)}

        taf = ExecuteTAFuncDict(ta=target, stats=self.stats)
        msg = "Please ensure all objects returned are JSON serializable."
        with self.assertRaisesRegex(TypeError, msg):
            taf.run(config=2)
예제 #5
0
    def test_fail_silent(self):
        def function(*args):
            return

        taf = ExecuteTAFuncDict(ta=function, stats=self.stats)
        rval = taf.run(config=None, cutoff=1)
        self.assertEqual(rval[0], StatusType.CRASHED)
        self.assertEqual(rval[1], 2147483647.0)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())
예제 #6
0
    def test_timeout(self):
        def run_over_time(*args):
            time.sleep(5)

        taf = ExecuteTAFuncDict(ta=run_over_time, stats=self.stats)
        rval = taf.run(config=None, cutoff=1)
        self.assertEqual(rval[0], StatusType.TIMEOUT)
        self.assertEqual(rval[1], 2147483647.0)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())
예제 #7
0
    def test_timeout_runtime(self):
        def run_over_time(*args):
            time.sleep(5)

        taf = ExecuteTAFuncDict(ta=run_over_time,
                                stats=self.stats,
                                run_obj='runtime',
                                par_factor=11)
        rval = taf.run(config=None, cutoff=1)
        self.assertEqual(rval[0], StatusType.TIMEOUT)
        self.assertGreaterEqual(rval[1], 11)
        self.assertGreaterEqual(rval[2], 1)
        self.assertEqual(rval[3], dict())
예제 #8
0
    def test_run_wo_pynisher(self):
        target = lambda x: x**2
        taf = ExecuteTAFuncDict(ta=target,
                                stats=self.stats,
                                use_pynisher=False)
        rval = taf.run(config=2)
        self.assertFalse(taf._accepts_instance)
        self.assertFalse(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.SUCCESS)
        self.assertEqual(rval[1], 4)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())

        target = lambda x: None
        taf = ExecuteTAFuncDict(ta=target,
                                stats=self.stats,
                                use_pynisher=False)
        rval = taf.run(config=2)
        self.assertFalse(taf._accepts_instance)
        self.assertFalse(taf._accepts_seed)
        self.assertEqual(rval[0], StatusType.CRASHED)
        self.assertEqual(rval[1], 2147483647.0)
        self.assertGreaterEqual(rval[2], 0.0)
        self.assertEqual(rval[3], dict())
예제 #9
0
        cond = InCondition(child=p, parent=previous_param, values=[1])
        cs.add_condition(cond)

    previous_param = p

# SMAC scenario object
scenario = Scenario({
    "run_obj": "quality",  # we optimize quality (alternative runtime)
    "runcount-limit": n_params * 2,  # at most 200 function evaluations
    "cs": cs,  # configuration space
    "deterministic": "true"
})

# register function to be optimize
taf = ExecuteTAFuncDict(leading_ones)

# example call of the function
# it returns: Status, Cost, Runtime, Additional Infos
def_value = taf.run(cs.get_default_configuration())[1]
print("Default Value: %.2f" % (def_value))

# Optimize
smac = SMAC(scenario=scenario, rng=np.random.RandomState(42), tae_runner=taf)
try:
    incumbent = smac.optimize()
finally:
    incumbent = smac.solver.incumbent

inc_value = taf.run(incumbent)[1]
print("Optimized Value: %.2f" % (inc_value))
예제 #10
0
logging.basicConfig(level=logging.DEBUG)

# Get Configuration Space
cs = logReg.get_configuration_space()

# Prepare TA
ta_call = functools.partial(mini_wrapper, bench=logReg)
taf = ExecuteTAFuncDict(ta_call)

# SMAC scenario object
scenario = Scenario({
    "run_obj": "quality",
    "runcount-limit": 5,
    "cs": cs,
    "deterministic": "true",
    "instances": list([str(i) for i in range(10)]),
    "test_instances": ["10"]
})

# Use SMAC to optimize function
smac = SMAC(scenario=scenario, rng=1, tae_runner=taf)
try:
    incumbent = smac.optimize()
finally:
    incumbent = smac.solver.incumbent

# Evaluate final configuration
inc_value = taf.run(incumbent, instance=10)[1]
print("Optimized Value: %.2f" % inc_value)