def __init__(self, worker_id, data, response_surface, maxeval, nsamples, exp_design=None, sampling_method=None, extra=None): """Initialize the optimization strategy. :param worker_id: Start ID in a multistart setting :param data: Problem parameter data structure :param response_surface: Surrogate model object :param maxeval: Function evaluation budget :param nsamples: Number of simultaneous fevals allowed :param exp_design: Experimental design :param sampling_method: Sampling method for finding points to evaluate :param extra: Points to be added to the experimental design """ self.worker_id = worker_id self.data = data self.fhat = response_surface if self.fhat is None: self.fhat = RBFInterpolant(surftype=CubicRBFSurface, maxp=maxeval) self.maxeval = maxeval self.nsamples = nsamples self.extra = extra # Default to generate sampling points using Symmetric Latin Hypercube self.design = exp_design if self.design is None: if self.data.dim > 50: self.design = LatinHypercube(data.dim, data.dim + 1) else: self.design = SymmetricLatinHypercube(data.dim, 2 * (data.dim + 1)) self.xrange = np.asarray(data.xup - data.xlow) # algorithm parameters self.sigma_min = 0.005 self.sigma_max = 0.2 self.sigma_init = 0.2 self.failtol = max(5, data.dim) self.succtol = 3 self.numeval = 0 self.status = 0 self.sigma = 0 self.resubmitter = RetryStrategy() self.xbest = None self.fbest = np.inf self.fbest_old = None # Set up search procedures and initialize self.sampling = sampling_method if self.sampling is None: self.sampling = CandidateDYCORS(data) self.check_input() # Start with first experimental design self.sample_initial()