def test_hyperband_iteration_config(self): config = { 'iteration': 1, 'bracket_iteration': 0, 'experiment_ids': [1, 2, 3], 'experiments_metrics': [[1, 0.5], [2, 0.8], [3, 0.8]], } assert HyperbandIterationConfig.from_dict(config).to_dict() == config
def create_iteration(self, num_suggestions=0): """Create an iteration for the experiment group.""" from db.models.experiment_groups import ExperimentGroupIteration search_manager = self.experiment_group.search_manager iteration_config = self.experiment_group.iteration_config if iteration_config is None: iteration = 0 bracket_iteration = 0 else: should_reschedule = search_manager.should_reschedule( iteration=iteration_config.iteration, bracket_iteration=iteration_config.bracket_iteration) should_reduce_configs = search_manager.should_reduce_configs( iteration=iteration_config.iteration, bracket_iteration=iteration_config.bracket_iteration) if should_reschedule: iteration = iteration_config.iteration + 1 bracket_iteration = 0 elif should_reduce_configs: iteration = iteration_config.iteration bracket_iteration = iteration_config.bracket_iteration + 1 else: raise ValueError( 'Hyperband create iteration failed for `{}`, ' 'could not reschedule ot reduce configs'.format( self.experiment_group.id)) # Create a new iteration config iteration_config = HyperbandIterationConfig( iteration=iteration, num_suggestions=num_suggestions, bracket_iteration=bracket_iteration) iteration_config.experiment_ids = [] return ExperimentGroupIteration.objects.create( experiment_group=self.experiment_group, data=iteration_config.to_dict())