def test_rosen_de_parallel(): popsize = 8 dim = 2 testfun = Rosen(dim) max_eval = 10000 limit = 0.01 for _ in range(5): wrapper = Wrapper(testfun.fun, dim) ret = de.minimize(wrapper.eval, dim, testfun.bounds, max_evaluations=max_eval, popsize=popsize, workers=popsize) 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 (almost_equal(ret.fun, wrapper.get_best_y(), eps=1E-1)) # wrong best y returned
def optimize(): fprob = single_objective(pg.problem(udp)) print('interferometer optimization') # Python Differential Evolution implementation, uses ask/tell for parallel function evaluation. ret = de.minimize(fprob.fun, bounds=fprob.bounds, workers=16, popsize=32, max_evaluations=50000) # Python CMAES implementation, uses ask/tell for parallel function evaluation. #ret = cmaes.minimize(fprob.fun, bounds=fprob.bounds, workers=16, popsize=32, max_evaluations=50000) # Parallel retry using DE #ret = retry.minimize(fprob.fun, bounds=fprob.bounds, optimizer=De_cpp(20000, popsize=32), workers=16, num_retries=64) # Parallel retry using Bite # ret = retry.minimize(fprob.fun, bounds=fprob.bounds, optimizer=Bite_cpp(20000, M=1), workers=16, num_retries=64) # Parallel retry using CMA-ES #ret = retry.minimize(udp.fitness, bounds=bounds, optimizer=Cma_cpp(20000, popsize=32), workers=16, num_retries=64) # Smart retry using DE #ret = advretry.minimize(fprob.fun, bounds=fprob.bounds, optimizer=De_cpp(1500, popsize=32), workers=16) # Smart retry using CMA-ES #ret = advretry.minimize(fprob.fun, bounds=fprob.bounds, optimizer=Cma_cpp(1500, popsize=32), workers=16) # Smart retry using DE->CMA sequence #ret = advretry.minimize(fprob.fun, bounds=fprob.bounds, optimizer=de_cma(1500, popsize=32), workers=16) print("best result is " + str(ret.fun) + ' x = ' + ", ".join(str(x) for x in ret.x))
def minimize(self, fun, bounds, guess=None, sdevs=None, rg=Generator(MT19937()), store=None): ret = de.minimize(fun, None, bounds, self.popsize, self.max_eval_num(store), workers=None, stop_fitness=self.stop_fitness, keep=self.keep, f=self.f, cr=self.cr, rg=rg) return ret.x, ret.fun, ret.nfev