def test_rosen_ask_tell(): popsize = 31 dim = 5 testfun = Rosen(dim) sdevs = [1.0] * dim max_eval = 100000 limit = 0.00001 for _ in range(5): wrapper = Wrapper(testfun.fun, dim) es = cmaes.Cmaes(testfun.bounds, popsize=popsize, input_sigma=sdevs) iters = max_eval // popsize for j in range(iters): xs = es.ask() ys = [wrapper.eval(x) for x in xs] stop = es.tell(ys) if stop != 0: break ret = OptimizeResult(x=es.best_x, fun=es.best_value, nfev=wrapper.get_count(), nit=es.iterations, status=es.stop) 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
def test_rosen_ask_tell_de(): popsize = 8 dim = 2 testfun = Rosen(dim) max_eval = 10000 limit = 0.00001 for _ in range(5): wrapper = Wrapper(testfun.fun, dim) es = de.DE(dim, testfun.bounds, popsize=popsize) iters = max_eval // popsize for j in range(iters): xs = es.ask() ys = [wrapper.eval(x) for x in xs] stop = es.tell(ys, xs) if stop != 0: break ret = OptimizeResult(x=es.best_x, fun=es.best_value, nfev=wrapper.get_count(), nit=es.iterations, status=es.stop) if limit > ret.fun: break assert (limit > ret.fun) # optimization target not reached assert (max_eval + 2 * popsize >= ret.nfev) # too much function calls assert (max_eval / popsize + 2 > ret.nit) # too much iterations # 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