Пример #1
0
def GPGO_EI_SA(fun, x, maxfunevals, ftarget):
    """samples new points uniformly randomly in [-5,5]^dim and evaluates
    them on fun until maxfunevals or ftarget is reached, or until
    1e8 * dim function evaluations are conducted.

    """
    dim = len(x)
    maxfunevals = min(1e8 * dim, maxfunevals)
    '''
    popsize = min(maxfunevals, 200)
    fbest = np.inf
    
    for iter in range(0, int(np.ceil(maxfunevals / popsize))):
        xpop = 10. * np.random.rand(popsize, dim) - 5.
        fvalues = fun(xpop)
        idx = np.argsort(fvalues)
        if fbest > fvalues[idx[0]]:
            fbest = fvalues[idx[0]]
            xbest = xpop[idx[0]]
        if fbest < ftarget:  # task achieved 
            break
    '''

    xs,ys = gpgo_ei(lambda z: -fun(z), [x], lower=[-5]*dim, upper=[5]*dim, maxeval=maxfunevals, target=-ftarget, l=[1]*(dim), K=K_SE, dim=dim)
    #xs,ys = gpgo_ei(lambda z: -fun(z), [x], lower=[-5]*dim, upper=[5]*dim, maxeval=maxfunevals, target=-ftarget, l=1, K=K_SE)
    #xs,ys = gpgo_ei(lambda z: -fun(z), [x], lower=[-5]*dim, upper=[5]*dim, maxeval=maxfunevals, target=-ftarget, l=1, K=K_Matern)

    idx = np.argmax(ys)
    xbest = xs[idx]
    #print xbest, fun(xbest), ftarget
    return xbest
Пример #2
0
            self.xs.append(x)
            self.ys.append(y)
        return y

for dims in [1,2,5,10,20,50,100]:
    print dims,
    
    maxeval=150
    gpgo_avg = zeros(maxeval)
    anneal_avg = zeros(maxeval)
    
    N = 25
    for _ in xrange(N):
        g = GPmem(dims)
        
        xs,ys = gpgo_ei(g, [[0]*dims,[10]*dims], lower=[0]*dims, upper=[10]*dims, maxeval=maxeval)
        rmax = array(list(maximum.accumulate(ys))[:maxeval] + [max(ys)] * (maxeval-len(ys)))
        plot(rmax, 'b', alpha=0.2)
        gpgo_avg += rmax
        
        f = Fmem(g, [0]*dims, [10]*dims)
        anneal(lambda x: -f(x), [0]*dims, lower=[0]*dims, upper=[10]*dims, maxeval=maxeval)
        rmax = array(list(maximum.accumulate(squeeze(f.ys)))[:maxeval] + [max(f.ys)] * (maxeval-len(f.ys)))
        plot(rmax, 'r', alpha=0.2)
        anneal_avg += rmax
        
        print '.',
    
    print
    
    plot(gpgo_avg / N, 'b', linewidth=2)
Пример #3
0
        return y


for dims in [1, 2, 5, 10, 20, 50, 100]:
    print dims,

    maxeval = 150
    gpgo_avg = zeros(maxeval)
    anneal_avg = zeros(maxeval)

    N = 25
    for _ in xrange(N):
        g = GPmem(dims)

        xs, ys = gpgo_ei(g, [[0] * dims, [10] * dims],
                         lower=[0] * dims,
                         upper=[10] * dims,
                         maxeval=maxeval)
        rmax = array(
            list(maximum.accumulate(ys))[:maxeval] + [max(ys)] *
            (maxeval - len(ys)))
        plot(rmax, 'b', alpha=0.2)
        gpgo_avg += rmax

        f = Fmem(g, [0] * dims, [10] * dims)
        anneal(lambda x: -f(x), [0] * dims,
               lower=[0] * dims,
               upper=[10] * dims,
               maxeval=maxeval)
        rmax = array(
            list(maximum.accumulate(squeeze(f.ys)))[:maxeval] + [max(f.ys)] *
            (maxeval - len(f.ys)))