class_docstr: Runner of Bayesian optimization loop. This class wraps the optimization loop around the different handlers.
  :param model: GPyOpt model class.
  :param space: GPyOpt space class.
  :param objective: GPyOpt objective class.
  :param acquisition: GPyOpt acquisition class.
  :param evaluator: GPyOpt evaluator class.
  :param X_init: 2d numpy array containing the initial inputs (one per row) of the model.
  :param Y_init: 2d numpy array containing the initial outputs (one per row) of the model.
  :param cost: GPyOpt cost class (default, none).
  :param normalize_Y: whether to normalize the outputs before performing any optimization (default, True).
  :param model_update_interval: interval of collected observations after which the model is updated (default, 1).
  :param de_duplication: GPyOpt DuplicateManager class. Avoids re-evaluating the objective at previous, pending or infeasible locations (default, False).
class_docstr_tok: ["Runner","of","Bayesian","optimization","loop",".","This","class","wraps","the","optimization","loop","around","the","different","handlers",".",":","param","model",":","GPyOpt","model","class",".",":","param","space",":","GPyOpt","space","class",".",":","param","objective",":","GPyOpt","objective","class",".",":","param","acquisition",":","GPyOpt","acquisition","class",".",":","param","evaluator",":","GPyOpt","evaluator","class",".",":","param","X_init",":","2d","numpy","array","containing","the","initial","inputs","(","one","per","row",")","of","the","model",".",":","param","Y_init",":","2d","numpy","array","containing","the","initial","outputs","(","one","per","row",")","of","the","model",".",":","param","cost",":","GPyOpt","cost","class","(","default",",","none",")",".",":","param","normalize_Y",":","whether","to","normalize","the","outputs","before","performing","any","optimization","(","default",",","True",")",".",":","param","model_update_interval",":","interval","of","collected","observations","after","which","the","model","is","updated","(","default",",","1",")",".",":","param","de_duplication",":","GPyOpt","DuplicateManager","class",".","Avoids","re-evaluating","the","objective","at","previous",",","pending","or","infeasible","locations","(","default",",","False",")","."]
docstr: Updates the model (when more than one observation is available) and saves the parameters (if available).
docstr_tok: ["Updates","the","model","(","when","more","than","one","observation","is","available",")","and","saves","the","parameters","(","if","available",")","."]
code: def _update_model(self, normalization_type="stats"):
      """
      Updates the model (when more than one observation is available) and saves the parameters (if available).
      """
      if self.num_acquisitions % self.model_update_interval == 0:
          # input that goes into the model (is unziped in case there are categorical variables)
          X_inmodel = self.space.unzip_inputs(self.X)
  
          # Y_inmodel is the output that goes into the model
          if self.normalize_Y:
              Y_inmodel = normalize(self.Y, normalization_type)
          else:
              Y_inmodel = self.Y
  
          self.model.updateModel(X_inmodel, Y_inmodel, None, None)
  
      # Save parameters of the model
      self._save_model_parameter_values()
  
imports: import GPyOpt
  import collections
  import numpy
  import time
  import csv
  import logging
  from ..util.general import best_value, normalize
  from ..util.duplicate_manager import DuplicateManager
  from ..core.errors import InvalidConfigError
  from ..core.task.cost import CostModel
  from ..optimization.acquisition_optimizer import ContextManager
label_desc: Use image node_id 9 for calling the BO obj's underlying member method code with example usage: obj._update_model(normalization_type) without return types