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 b23583d commit bc1370e
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 7 deletions.
11 changes: 7 additions & 4 deletions qulab/scan/optimize.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,11 @@ 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 suggest(self, *suggested):
suggested = [
space.transform(x) for x, space in zip(suggested, self.dimensions)
]
self.opt.suggest(*suggested)

def ask(self):
tmp = self.opt.ask()
Expand All @@ -50,9 +53,9 @@ def ask(self):
def tell(self, suggested: Sequence, value: Any):
self._all_x.append(suggested)
self._all_y.append(value)
suggested = [
suggested = tuple([
space.transform(x) for x, space in zip(suggested, self.dimensions)
]
])
# self.opt.suggest(*suggested)
# x = self.opt.ask()
x = self.instrum.spawn_child(new_value=(suggested, {}))
Expand Down
3 changes: 2 additions & 1 deletion qulab/scan/scan.py
Original file line number Diff line number Diff line change
Expand Up @@ -481,7 +481,8 @@ def search(self,
elif isinstance(space, OptimizeSpace):
space.name = name
space.optimizer.dimensions[name] = space.space
space.optimizer.suggestions[name] = space.suggestions
if space.suggestions:
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
17 changes: 15 additions & 2 deletions qulab/scan/space.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import itertools
from typing import Type

import numpy as np
Expand Down Expand Up @@ -107,6 +108,9 @@ def __init__(self, optimizer: 'Optimizer', space, suggestions=None):
self.optimizer = optimizer
self.space = space
self.name = None
if suggestions is not None and not isinstance(
suggestions, (list, tuple, np.ndarray)):
suggestions = [suggestions]
self.suggestions = suggestions

def __len__(self):
Expand Down Expand Up @@ -135,8 +139,17 @@ def __init__(self,

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

def rvs(space):
while True:
yield space.rvs()[0]

if self.suggestions:
for suggestion in zip(*[
self.suggestions.get(key, rvs(space))
for key, space in self.dimensions.items()
]):
opt.suggest(*suggestion)
return opt

def Categorical(self,
Expand Down

0 comments on commit bc1370e

Please sign in to comment.