empty search space (#295)

fix the error when an empty dictionary is passed to BlendSearch as the search space.
This commit is contained in:
Chi Wang 2021-11-20 20:05:28 -08:00 committed by GitHub
parent 49f9e9f86b
commit 00da79a90b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 155 additions and 144 deletions

View File

@ -219,7 +219,7 @@ class BlendSearch(Searcher):
else: else:
self._candidate_start_points = None self._candidate_start_points = None
self._time_budget_s, self._num_samples = time_budget_s, num_samples self._time_budget_s, self._num_samples = time_budget_s, num_samples
if space: if space is not None:
self._init_search() self._init_search()
def set_search_properties( def set_search_properties(

View File

@ -5,17 +5,23 @@ try:
assert ray_version >= "1.0.0" assert ray_version >= "1.0.0"
from ray.tune import sample from ray.tune import sample
use_ray = True
except (ImportError, AssertionError): except (ImportError, AssertionError):
from flaml.tune import sample from flaml.tune import sample
from flaml.searcher.suggestion import OptunaSearch, Searcher, ConcurrencyLimiter use_ray = False
from flaml.searcher.blendsearch import BlendSearch, CFO, RandomSearch
def define_search_space(trial): from flaml.searcher.suggestion import OptunaSearch, Searcher, ConcurrencyLimiter
from flaml.searcher.blendsearch import BlendSearch, CFO, RandomSearch
def define_search_space(trial):
trial.suggest_float("a", 6, 8) trial.suggest_float("a", 6, 8)
trial.suggest_float("b", 1e-4, 1e-2, log=True) trial.suggest_float("b", 1e-4, 1e-2, log=True)
def test_searcher():
def test_searcher():
searcher = Searcher() searcher = Searcher()
searcher = Searcher(metric=["m1", "m2"], mode=["max", "min"]) searcher = Searcher(metric=["m1", "m2"], mode=["max", "min"])
searcher.set_search_properties(None, None, None) searcher.set_search_properties(None, None, None)
@ -45,20 +51,20 @@ except (ImportError, AssertionError):
mode="max", mode="max",
) )
config = {"a": sample.uniform(6, 8), "b": sample.loguniform(1e-4, 1e-2)} config = {"a": sample.uniform(6, 8), "b": sample.loguniform(1e-4, 1e-2)}
searcher = OptunaSearch( # searcher = OptunaSearch(
config, # config,
points_to_evaluate=[{"a": 6, "b": 1e-3}], # points_to_evaluate=[{"a": 6, "b": 1e-3}],
evaluated_rewards=[{"m": 2}], # evaluated_rewards=[{"m": 2}],
metric="m", # metric="m",
mode="max", # mode="max",
) # )
searcher = OptunaSearch( searcher = OptunaSearch(
define_search_space, define_search_space,
points_to_evaluate=[{"a": 6, "b": 1e-3}], points_to_evaluate=[{"a": 6, "b": 1e-3}],
# evaluated_rewards=[{'m': 2}], metric='m', mode='max' # evaluated_rewards=[{'m': 2}], metric='m', mode='max'
mode="max", mode="max",
) )
searcher = OptunaSearch() # searcher = OptunaSearch()
# searcher.set_search_properties('m', 'min', define_search_space) # searcher.set_search_properties('m', 'min', define_search_space)
searcher.set_search_properties("m", "min", config) searcher.set_search_properties("m", "min", config)
searcher.suggest("t1") searcher.suggest("t1")
@ -78,9 +84,7 @@ except (ImportError, AssertionError):
c = searcher.suggest("t1") c = searcher.suggest("t1")
searcher.on_trial_complete("t1", {"config": c}, True) searcher.on_trial_complete("t1", {"config": c}, True)
c = searcher.suggest("t2") c = searcher.suggest("t2")
searcher.on_trial_complete( searcher.on_trial_complete("t2", {"config": c, "m2": 1, "c": 2, "time_total_s": 1})
"t2", {"config": c, "m2": 1, "c": 2, "time_total_s": 1}
)
config1 = config.copy() config1 = config.copy()
config1["_choice_"] = 0 config1["_choice_"] = 0
searcher._expand_admissible_region( searcher._expand_admissible_region(
@ -155,3 +159,10 @@ except (ImportError, AssertionError):
print(searcher.suggest("t1")) print(searcher.suggest("t1"))
print(searcher.suggest("t2")) print(searcher.suggest("t2"))
print(searcher.suggest("t3")) print(searcher.suggest("t3"))
searcher = RandomSearch(space={})
print(searcher.suggest("t1"))
searcher = BlendSearch(space={})
print(searcher.suggest("t1"))
from flaml import tune
tune.run(lambda x: 1, config={}, use_ray=use_ray)