code: def get_config(self, budget):
          
          self.lock.acquire()
          if not self.is_trained:
              c = self.config_space.sample_configuration().get_array()
          else:
              candidates = np.array([self.config_space.sample_configuration().get_array()
                                     for _ in range(self.n_candidates)])
  
              # We are only interested on the asymptotic value
              projected_candidates = np.concatenate((candidates, np.ones([self.n_candidates, 1])), axis=1)
  
              # Compute the upper confidence bound of the function at the asymptote
              m, v = self.model.predict(projected_candidates)
  
              ucb_values = m + self.delta * np.sqrt(v)
              print(ucb_values)
              # Sample a configuration based on the ucb values
              p = np.ones(self.n_candidates) * (ucb_values / np.sum(ucb_values))
              idx = np.random.choice(self.n_candidates, 1, False, p)
  
              c = candidates[idx][0]
  
          config = ConfigSpace.Configuration(self.config_space, vector=c)
  
          self.lock.release()
          return config.get_dictionary(), {}
docs: function to sample a new configuration
  
              This function is called inside Hyperband to query a new configuration
  
  
              Parameters:
              -----------
              budget: float
                  the budget for which this configuration is scheduled
  
              returns: config
                  should return a valid configuration