def __init__(self, worker_id, data, response_surface, maxeval, nsamples, exp_design=None, sampling_method=None, extra=None, extra_vals=None): # Check stopping criterion self.start_time = time.time() if maxeval < 0: # Time budget self.maxeval = np.inf self.time_budget = np.abs(maxeval) else: self.maxeval = maxeval self.time_budget = np.inf # Import problem information self.worker_id = worker_id self.data = data self.fhat = response_surface if self.fhat is None: self.fhat = RBFInterpolant(kernel=CubicKernel, tail=LinearTail, maxp=maxeval) self.fhat.reset() # Just to be sure! self.nsamples = nsamples self.extra = extra self.extra_vals = extra_vals # 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()
def __init__(self, max_evals, opt_prob): check_opt_prob(opt_prob) if not isinstance(max_evals, int) and max_evals > 0: raise ValueError("max_evals must be an integer >= exp_des.num_pts") self.opt_prob = opt_prob self.max_evals = max_evals self.retry = RetryStrategy() for _ in range(max_evals): # Generate the random points x = np.random.uniform(low=opt_prob.lb, high=opt_prob.ub) proposal = self.propose_eval(x) self.retry.rput(proposal)
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()
def __init__(self, worker_id, data, response_surface, maxeval, nsamples, exp_design=None, sampling_method=None, archiving_method=None, extra=None, extra_vals=None, store_sim=False): # Check stopping criterion self.start_time = time.time() if maxeval < 0: # Time budget self.maxeval = np.inf self.time_budget = np.abs(maxeval) else: self.maxeval = maxeval self.time_budget = np.inf # Import problem information self.worker_id = worker_id self.data = data self.fhat = [] if response_surface is None: for i in range(self.data.nobj): self.fhat.append( RBFInterpolant(kernel=CubicKernel, tail=LinearTail, maxp=maxeval)) #MOPLS ONLY else: for i in range(self.data.nobj): response_surface.reset() # Just to be sure! self.fhat.append(deepcopy(response_surface)) #MOPLS ONLY self.ncenters = nsamples self.nsamples = 1 self.numinit = None self.extra = extra self.extra_vals = extra_vals self.store_sim = store_sim # 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.failcount = 0 self.contol = 5 self.numeval = 0 self.status = 0 self.sigma = 0 self.resubmitter = RetryStrategy() self.xbest = None self.fbest = None self.fbest_old = None self.improvement_prev = 1 # population of centers and long-term archive self.nd_archives = [] self.new_pop = [] self.sim_res = [] if archiving_method is None: self.memory_archive = NonDominatedArchive(200) else: self.memory_archive = archiving_method self.evals = [] self.maxfit = min(200, 20 * self.data.dim) self.d_thresh = 1.0 # Set up search procedures and initialize self.sampling = sampling_method if self.sampling is None: self.sampling = EvolutionaryAlgorithm(data) self.check_input() # Start with first experimental design self.sample_initial()