def _test_optimizer(opt, problem, num_retries=32, num=1): log = logger() log.info(problem.name + ' ' + opt.name) for _ in range(num): minimize(problem.fun, problem.bounds, math.inf, num_retries, log, optimizer=opt)
def test_retry_cpp(problem, num): ret = retry.minimize(problem.fun, bounds=problem.bounds, num_retries=num, max_evaluations=50000, logger=logger(), useCpp=True)
def test_retry_cma_python(problem, num): best = math.inf t0 = time.perf_counter(); for i in range(num): ret = retry.minimize(problem.fun, bounds = problem.bounds, num_retries = 2000, optimizer = Cma_python(100000)) best = min(ret.fun, best) print("{0}: time = {1:.1f} best = {2:.1f} f(xmin) = {3:.1f}" .format(i+1, dtime(t0), best, ret.fun))
def test_retry(problem, num, log=None): best = math.inf t0 = time.perf_counter(); for i in range(num): ret = retry.minimize(problem.fun, bounds = problem.bounds, num_retries = 2000, max_evaluations = 100000, logger=log) best = min(ret.fun, best) print("{0}: time = {1:.1f} best = {2:.1f} f(xmin) = {3:.1f}" .format(i+1, dtime(t0), best, ret.fun))
def messengerFullLoop(): while True: problem = MessFull() logger().info(problem.name + ' cmaes c++') ret = minimize(problem.fun, bounds=problem.bounds, num_retries=40000, max_evaluations=50000, logger=logger(), useCpp=True)
def test_optimizer(fun, n): best = math.inf t0 = time.perf_counter() for i in range(n): max_x = i + 12 bounds = Bounds(lowerbound, [max_x + 0.99] * 4) ret = retry.minimize(fun, bounds, max_evaluations=10000, num_retries=100) best = print_result(ret, best, t0, max_x)
def _test_problem(problem, max_evals=50000, num_retries=2000, num=20, log=logger(), useCpp=False): log.info(problem.name + ' cmaes ' + ('c++' if useCpp else 'python')) for i in range(num): ret = minimize(problem.fun, bounds=problem.bounds, num_retries=num_retries, max_evaluations=max_evals, useCpp=useCpp, logger=log)
def test_de_cma_parallel_retry(problem): # parallel optimization retry using a DE -> CMA-ES sequence t0 = time.perf_counter() evals = 0 for i in range(1000): ret = retry.minimize(problem.fun, problem.bounds, logger=logger(), optimizer=de_cma(50000), value_limit=10) evals += ret.nfev print("{0}: time = {1:.1f} fun = {2:.3f} nfev = {3}".format( i + 1, dtime(t0), ret.fun, evals)) return ret
def test_eggholder_retry(): dim = 2 testfun = Eggholder() limit = -956 for _ in range(5): wrapper = Wrapper(testfun.fun, dim) ret = retry.minimize(wrapper.eval, testfun.bounds, num_retries=100) if limit > ret.fun: break assert (limit > ret.fun) # optimization target not reached 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
def optimize(): solo_mgar = solo_mgar_udp([7000, 8000]) prob = pg.problem(solo_mgar) fprob = single_objective(prob) # logger().info('solar orbiter' + ' de -> cmaes c++ smart retry') # ret = advretry.minimize(fprob.fun, bounds=fprob.bounds, num_retries = 60000, # logger = logger(), optimizer=de_cma(1500)) logger().info('solar orbiter' + ' BiteOpt parallel retry') ret = retry.minimize(fprob.fun, bounds=fprob.bounds, num_retries=32000, logger=logger(), optimizer=Bite_cpp(120000, M=6)) return ret
def test_eggholder_retry(): #windows cannot pickle function objects if sys.platform.startswith('windows'): return dim = 2 testfun = Eggholder() limit = -956 for i in range(5): wrapper = Wrapper(testfun.func, dim) ret = retry.minimize(wrapper.eval, testfun.bounds, num_retries=100, useCpp=False, logger=None) if limit > ret.fun: break assert (limit > ret.fun) # optimization target not reached 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
def parallel_improve(opt): return retry.minimize(fitness(), bounds, optimizer=opt)
def parallel_retry(opt=Bite_cpp(100000, M=8)): return retry.minimize(fitness(), bounds, optimizer=opt)
def test_retry_python(problem, num): ret = retry.minimize(problem.fun, bounds=problem.bounds, num_retries=num, max_evaluations=50000, logger=logger())