don't tell the optimizer "out of bounds" scores

This commit is contained in:
orehunt 2020-03-07 11:17:39 +01:00
parent 3f8ee76b24
commit 15749d3427

View File

@ -117,9 +117,9 @@ class Hyperopt:
self.opts: List[Optimizer] = []
self.opt: Optimizer = None
backend.manager = Manager()
if 'multi_opt' in self.config and self.config['multi_opt']:
self.multi = True
backend.manager = Manager()
backend.optimizers = backend.manager.Queue()
backend.results_board = backend.manager.Queue(maxsize=1)
backend.results_board.put([])
@ -127,9 +127,8 @@ class Hyperopt:
self.opt_acq_optimizer = 'sampling'
default_n_points = 2
else:
backend.manager = Manager()
backend.results = backend.manager.Queue()
self.multi = False
backend.results = backend.manager.Queue()
self.opt_base_estimator = 'GP'
self.opt_acq_optimizer = 'lbfgs'
default_n_points = 1
@ -604,6 +603,10 @@ class Hyperopt:
while not backend.results.empty():
vals.append(backend.results.get())
if vals:
# values with improbable loss scores should not be told to the optimizer
# to reduce noise
vals = list(filter(lambda v: v['loss'] != MAX_LOSS, vals))
if vals: # again if all are filtered
self.opt.tell([list(v['params_dict'].values()) for v in vals],
[v['loss'] for v in vals],
fit=fit)