Exemple #1
0
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
Exemple #2
0
 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
Exemple #3
0
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