Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
def test_ask_tell(problem, num):    
    best = math.inf
    t0 = time.perf_counter();
    for i in range(num):
        es = cmaes.Cmaes(bounds = problem.bounds)
        iters = 3000
        for _ in range(iters):
            xs = es.ask()
            ys = [problem.fun(x) for x in xs]
            stop = es.tell(ys)
            if stop != 0:
                break 
        best = min(es.best_value, best)
        print("{0}: time = {1:.1f} best = {2:.1f} f(xmin) = {3:.1f}"
              .format(i+1, dtime(t0), best, es.best_value))
Ejemplo n.º 3
0
 def minimize(self,
              fun,
              bounds,
              guess=None,
              sdevs=0.3,
              rg=Generator(MT19937()),
              store=None):
     es = cmaes.Cmaes(bounds,
                      popsize=self.popsize,
                      input_sigma=sdevs,
                      rg=rg)
     iters = self.max_eval_num(store) // self.popsize
     evals = 0
     for j in range(iters):
         xs = es.ask()
         ys = [fun(x) for x in xs]
         evals += len(xs)
         stop = es.tell(ys)
         if stop != 0:
             break
     return es.best_x, es.best_value, evals