def test_gclde_parallel_eval(problem): # parallel function evaluation using GCL_DE t0 = time.perf_counter() evals = 0 for i in range(100000): ret = gcldecpp.minimize(problem.fun, problem.bounds, popsize=256, max_evaluations=200000, workers=mp.cpu_count()) evals += ret.nfev print("{0}: time = {1:.1f} fun = {2:.3f} nfev = {3}".format( i + 1, dtime(t0), ret.fun, evals)) return ret
def minimize(self, fun, bounds, guess=None, sdevs=None, rg=Generator(MT19937()), store=None, workers=None): ret = gcldecpp.minimize( fun, bounds, popsize=self.popsize, max_evaluations=self.max_eval_num(store), stop_fitness=self.stop_fitness, pbest=self.pbest, f0=self.f0, cr0=self.cr0, rg=rg, runid=self.get_count_runs(store), workers=self.workers if workers is None else workers) return ret.x, ret.fun, ret.nfev
def test_rosen_gclde_parallel(): popsize = 8 dim = 2 testfun = Rosen(dim) max_eval = 10000 limit = 0.00001 for _ in range(5): wrapper = Wrapper(testfun.fun, dim) ret = gcldecpp.minimize(wrapper.eval, dim, testfun.bounds, max_evaluations=max_eval, popsize=popsize, workers=mp.cpu_count()) if limit > ret.fun: break assert (limit > ret.fun) # optimization target not reached assert (max_eval + popsize >= ret.nfev) # too much function calls assert (max_eval // popsize + 2 > ret.nit) # too much iterations assert (ret.nfev == wrapper.get_count() ) # wrong number of function calls returned assert (almost_equal(ret.x, wrapper.get_best_x())) # wrong best X returned assert (ret.fun == wrapper.get_best_y()) # wrong best y returned