Пример #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
Пример #2
0
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