Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Pierre Delaunay committed Nov 28, 2022
1 parent ea7ae76 commit 146484d
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 16 deletions.
39 changes: 29 additions & 10 deletions src/orion/algo/space/configspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,12 +71,19 @@ def dimension(self, dim: Dimension) -> None:
def real(self, dim: Real) -> FloatHyperparameter:
"""Convert a real dimension into a configspace equivalent"""
if dim.prior_name in ("reciprocal", "uniform"):
a, b = dim._args

# NB: scipy uniform [loc, scale], configspace [min, max] with max = loc + scale, loc = min
if dim.prior_name == "uniform":
loc, scale = dim._args
lower = loc
upper = loc + scale
else:
lower, upper = dim._args

return UniformFloatHyperparameter(
name=dim.name,
lower=a,
upper=b,
lower=lower,
upper=upper,
default_value=dim.default_value,
q=_qantization(dim),
log=dim.prior_name == "reciprocal",
Expand All @@ -102,13 +109,19 @@ def real(self, dim: Real) -> FloatHyperparameter:

def integer(self, dim: Integer) -> IntegerHyperparameter:
"""Convert a integer dimension into a configspace equivalent"""

if dim.prior_name in ("int_uniform", "int_reciprocal"):
a, b = dim._args
if dim.prior_name == "int_uniform":
loc, scale = dim._args
lower = loc
upper = loc + scale
else:
lower, upper = dim._args

return UniformIntegerHyperparameter(
name=dim.name,
lower=a,
upper=b,
lower=lower,
upper=upper,
default_value=dim.default_value,
q=_qantization(dim),
log=dim.prior_name == "int_reciprocal",
Expand Down Expand Up @@ -203,12 +216,18 @@ def _from_uniform(dim: Hyperparameter) -> Integer | Real:
else:
kwargs["precision"] = int(-log10(dim.q)) if dim.q else 4

dist = "uniform"
args.append(dim.lower)
args.append(dim.upper)

if dim.log:
dist = "reciprocal"
args.append(dim.lower)
args.append(dim.upper)
else:
# NB: scipy uniform [loc, scale], configspace [min, max] with max = loc + scale, loc = min
loc = dim.lower
scale = dim.upper - dim.lower

dist = "uniform"
args.append(loc)
args.append(scale)

return klass(dim.name, dist, *args, **kwargs)

Expand Down
18 changes: 12 additions & 6 deletions tests/unittests/algo/test_configspace.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,21 @@
def test_orion_configspace():
space = Space()

# NB: scipy uniform [loc, scale], configspace [min, max] with max = loc + scale, loc = min
def uniform(type, name, low, high, **kwargs):
return type(name, "uniform", low, high - low, **kwargs)

space.register(Integer("r1i", "reciprocal", 1, 6))
space.register(Integer("u1i", "uniform", -3, 6))
space.register(Integer("u2i", "uniform", -3, 6))
space.register(Integer("u3i", "uniform", -3, 6, default_value=2))
space.register(uniform(Integer, "u1i", -3, 6))
space.register(uniform(Integer, "u2i", -3, 6))
space.register(uniform(Integer, "u4i", -4, 0, default_value=-1))
space.register(uniform(Integer, "u3i", -3, 6, default_value=2))

space.register(Real("r1f", "reciprocal", 1, 6))
space.register(Real("u1f", "uniform", -3, 6))
space.register(Real("u2f", "uniform", -3, 6))
space.register(Real("name.u2f", "uniform", -3, 6))
space.register(uniform(Real, "u1f", -3, 6))
space.register(uniform(Real, "u2f", -3, 6))
space.register(uniform(Real, "u4f", -4, 0, default_value=-0.2))
space.register(uniform(Real, "name.u2f", -3, 6))

space.register(Categorical("c1", ("asdfa", 2)))
space.register(Categorical("c2", dict(a=0.2, b=0.8)))
Expand Down

0 comments on commit 146484d

Please sign in to comment.