in bayesmark/builtin_opt/nevergrad_optimizer.py [0:0]
def get_nvg_dimensions(api_config):
"""Help routine to setup nevergrad search space in constructor.
Take api_config as argument so this can be static.
"""
# The ordering of iteration prob makes no difference, but just to be
# safe and consistnent with space.py, I will make sorted.
param_list = sorted(api_config.keys())
all_args = {}
all_prewarp = {}
for param_name in param_list:
param_config = api_config[param_name]
param_type = param_config["type"]
param_space = param_config.get("space", None)
param_range = param_config.get("range", None)
param_values = param_config.get("values", None)
prewarp = None
if param_type == "cat":
assert param_space is None
assert param_range is None
arg = inst.var.SoftmaxCategorical(param_values)
elif param_type == "bool":
assert param_space is None
assert param_range is None
assert param_values is None
arg = inst.var.OrderedDiscrete([False, True])
elif param_values is not None:
assert param_type in ("int", "ordinal", "real")
arg = inst.var.OrderedDiscrete(param_values)
# We are throwing away information here, but OrderedDiscrete
# appears to be invariant to monotonic transformation anyway.
elif param_type == "int":
assert param_values is None
# Need +1 since API in inclusive
choices = range(int(param_range[0]), int(param_range[-1]) + 1)
arg = inst.var.OrderedDiscrete(choices)
# We are throwing away information here, but OrderedDiscrete
# appears to be invariant to monotonic transformation anyway.
elif param_type == "real":
assert param_values is None
assert param_range is not None
# Will need to warp to this space sep.
arg = inst.var.Gaussian(mean=0, std=1)
prewarp = Real(warp=param_space, range_=param_range)
else:
assert False, "type %s not handled in API" % param_type
all_args[param_name] = arg
all_prewarp[param_name] = prewarp
instrum = inst.Instrumentation(**all_args)
return instrum, all_prewarp