class_docstr: Class for the batch method on 'Batch Bayesian optimization via local penalization' (Gonzalez et al., 2016).
  
  :param acquisition: acquisition function to be used to compute the batch.
  :param batch size: the number of elements in the batch.
docstr: Computes the elements of the batch sequentially by penalizing the acquisition.
code: def compute_batch(self, duplicate_manager=None, context_manager=None):
      """
      Computes the elements of the batch sequentially by penalizing the acquisition.
      """
      from ...acquisitions import AcquisitionLP
  
      assert isinstance(self.acquisition, AcquisitionLP)
  
      self.acquisition.update_batches(None, None, None)
  
      # --- GET first element in the batch
      X_batch = self.acquisition.optimize()[0]
      k = 1
  
      if self.batch_size > 1:
          # ---------- Approximate the constants of the the method
          L = estimate_L(
              self.acquisition.model.model,
              self.acquisition.space.get_bounds(),
          )
          Min = self.acquisition.model.model.Y.min()
  
      # --- GET the remaining elements
      while k < self.batch_size:
          self.acquisition.update_batches(X_batch, L, Min)
          new_sample = self.acquisition.optimize()[0]
          X_batch = np.vstack((X_batch, new_sample))
          k += 1
  
      # --- Back to the non-penalized acquisition
      self.acquisition.update_batches(None, None, None)
      return X_batch
  
file_path: GPyOpt/GPyOpt/core/evaluators/batch_local_penalization.py
imports: from .base import EvaluatorBase
  import scipy
  from ...util.general import samples_multidimensional_uniform
  import numpy
label_desc: Use image node_id 2 for calling the LocalPenalization obj's underlying member method code with example usage: obj.compute_batch(duplicate_manager, context_manager) and returns: X_batch