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
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)
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)))