Skip to content

Commit

Permalink
add suggestions for optimizer
Browse files Browse the repository at this point in the history
  • Loading branch information
feihoo87 committed Jun 14, 2024
1 parent 3796e79 commit b23583d
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 11 deletions.
10 changes: 7 additions & 3 deletions qulab/scan/optimize.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,9 @@ def __init__(self, variables, **kwds):
self.config['method'])(self.instrum,
budget=self.config['budget'])

def suggest(self, *args, **kwds):
self.opt.suggest(*args, **kwds)

def ask(self):
tmp = self.opt.ask()
return [
Expand All @@ -50,12 +53,13 @@ def tell(self, suggested: Sequence, value: Any):
suggested = [
space.transform(x) for x, space in zip(suggested, self.dimensions)
]
self.opt.suggest(*suggested)
x = self.opt.ask()
# self.opt.suggest(*suggested)
# x = self.opt.ask()
x = self.instrum.spawn_child(new_value=(suggested, {}))
self.opt.tell(x, value)

def get_result(self, history: bool = False) -> OptimizeResult:
recommendation = self.opt.recommend()
recommendation = self.opt.provide_recommendation()
ret = OptimizeResult({
'x': [
space.inverse_transform(x)
Expand Down
1 change: 1 addition & 0 deletions qulab/scan/scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,6 +481,7 @@ def search(self,
elif isinstance(space, OptimizeSpace):
space.name = name
space.optimizer.dimensions[name] = space.space
space.optimizer.suggestions[name] = space.suggestions
self._add_search_space(name, space.optimizer.level, space)
self.add_depends(space.optimizer.name, [name])
else:
Expand Down
27 changes: 19 additions & 8 deletions qulab/scan/space.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,10 +103,11 @@ def geomspace(start, stop, num=50, endpoint=True):

class OptimizeSpace():

def __init__(self, optimizer: 'Optimizer', space):
def __init__(self, optimizer: 'Optimizer', space, suggestions=None):
self.optimizer = optimizer
self.space = space
self.name = None
self.suggestions = suggestions

def __len__(self):
return self.optimizer.maxiter
Expand All @@ -130,17 +131,23 @@ def __init__(self,
self.level = level
self.kwds = kwds
self.minimize = minimize
self.suggestions = {}

def create(self):
return self.method(list(self.dimensions.values()), **self.kwds)
opt = self.method(list(self.dimensions.values()), **self.kwds)
for suggestion in zip([self.suggestions[key] for key in self.dimensions]):
opt.suggest(*suggestion)
return opt

def Categorical(self,
categories,
prior=None,
transform=None,
name=None) -> OptimizeSpace:
name=None,
suggestions=None) -> OptimizeSpace:
return OptimizeSpace(self,
Categorical(categories, prior, transform, name))
Categorical(categories, prior, transform, name),
suggestions)

def Integer(self,
low,
Expand All @@ -149,9 +156,11 @@ def Integer(self,
base=10,
transform="normalize",
name=None,
dtype=np.int64) -> OptimizeSpace:
dtype=np.int64,
suggestions=None) -> OptimizeSpace:
return OptimizeSpace(
self, Integer(low, high, prior, base, transform, name, dtype))
self, Integer(low, high, prior, base, transform, name, dtype),
suggestions)

def Real(self,
low,
Expand All @@ -160,9 +169,11 @@ def Real(self,
base=10,
transform="normalize",
name=None,
dtype=float) -> OptimizeSpace:
dtype=float,
suggestions=None) -> OptimizeSpace:
return OptimizeSpace(
self, Real(low, high, prior, base, transform, name, dtype))
self, Real(low, high, prior, base, transform, name, dtype),
suggestions)

def __getstate__(self) -> dict:
state = self.__dict__.copy()
Expand Down

0 comments on commit b23583d

Please sign in to comment.