Esempio n. 1
0
def gpmaprecc(optstate, persist, **para):
    if para['onlyafter'] >= optstate.n or not optstate.n % para['everyn'] == 0:
        return argminrecc(optstate, persist, **para)
        #return [sp.NaN for i in para['lb']],{'didnotrun':True}
    logger.info('gpmap reccomender')
    d = len(para['lb'])
    lb = para['lb']
    ub = para['ub']
    maxf = para['maxf']
    x = sp.vstack(optstate.x)
    y = sp.vstack(optstate.y)
    s = sp.vstack([e['s'] + 10**optstate.condition for e in optstate.ev])
    dx = [e['d'] for e in optstate.ev]
    MAP = GPdc.searchMAPhyp(x, y, s, dx, para['mprior'], para['sprior'],
                            para['kindex'])
    logger.info('MAPHYP {}'.format(MAP))
    G = GPdc.GPcore(x, y, s, dx, GPdc.kernel(para['kindex'], d, MAP))

    def wrap(x):
        xq = copy.copy(x)
        xq.resize([1, d])
        a = G.infer_m_post(xq, [[sp.NaN]])
        return a[0, 0]

    xmin, ymin, ierror = gpbo.core.optutils.twopartopt(wrap, para['lb'],
                                                       para['ub'],
                                                       para['dpara'],
                                                       para['lpara'])
    return [i for i in xmin], persist, {'MAPHYP': MAP, 'ymin': ymin}
Esempio n. 2
0
def gphinrecc(optstate, persist, **para):
    #print( [para['onlyafter'],optstate.n])
    if para['onlyafter'] >= optstate.n or not optstate.n % para['everyn'] == 0:
        #return [sp.NaN for i in para['lb']],{'didnotrun':True}
        return argminrecc(optstate, persist, **para)
    logger.info('gphin reccomender')
    d = len(para['lb'])
    x = sp.vstack(optstate.x)

    y = sp.vstack(optstate.y)
    s = sp.vstack([e['s'] + 10**optstate.condition for e in optstate.ev])
    dx = [e['d'] for e in optstate.ev]
    # print optstate.aux
    G = GPdc.GPcore(x, y, s, dx, [
        GPdc.kernel(optstate.aux['kindex'], d, h)
        for h in optstate.aux['HYPdraws']
    ])
    lb = para['lb']
    ub = para['ub']

    def wrap(x):
        xq = copy.copy(x)
        xq.resize([1, d])
        a = G.infer_m_post(xq, [[sp.NaN]])
        return a[0, 0]

    xmin, ymin, ierror = gpbo.core.optutils.twopartopt(wrap, lb, ub,
                                                       para['dpara'],
                                                       para['lpara'])
    return [i for i in xmin], persist, {'ymin': ymin}
Esempio n. 3
0
def genbiasedmat52ojf(d, lb, ub, xls, sls):
    #s normalised to 0 exact, 1
    from ESutils import gen_dataset
    nt = 30
    [X, Y, S, D] = gen_dataset(nt, d + 1, lb + [0], ub + [1], GPdc.MAT52,
                               sp.array([1.5] + [xls] * d + [sls]))

    G = GPdc.GPcore(
        X, Y, S, D,
        GPdc.kernel(GPdc.MAT52, d + 1, sp.array([1.5] + [0.30] * d + [sls])))

    def ojf(x, **ev):
        #print "\nojfinput: {} : {}".format(x,ev)
        dx = ev['d']
        s = ev['s']
        if ev['s'] > 0:
            noise = sp.random.normal(scale=sp.sqrt(ev['s']))
        else:
            noise = 0
        #print 'noise in ojf {}'.format(noise)
        xa = ev['xa']
        x = sp.array(x)
        xfull = sp.hstack([x, xa])
        return G.infer_m(xfull, [dx])[0, 0] + noise, 1., dict()

    def dirwrap(x, y):
        z = G.infer_m(sp.hstack(sp.array(x) + [0.]), [[sp.NaN]])[0, 0]
        return (z, 0)

    [xmin, ymin, ierror] = DIRECT.solve(dirwrap,
                                        lb,
                                        ub,
                                        user_data=[],
                                        algmethod=1,
                                        maxf=40000,
                                        logfilename='/dev/null')

    #print [xmin, ymin]
    def spowrap(x):
        z = G.infer_m(sp.hstack(sp.array(x) + [0.]), [[sp.NaN]])[0, 0]
        return z

    y = spm(spowrap,
            xmin,
            method='l-bfgs-b',
            bounds=[(-1, 1)] * d,
            options={'ftol': 1e-15})
    xmin = y.x
    ymin = spowrap(y.x)
    #print [xmin,ymin]

    if sp.isnan(ymin):
        logger.warning('generator got nan optimizing objective. retrying...')
        return genbiasedmat52ojf(d, lb, ub, xls, sls)
    logger.info(
        'generated function xmin {} ymin {} globopt:{} locopt:{}'.format(
            xmin, ymin, ierror, y.status))
    return ojf, xmin, ymin
Esempio n. 4
0
File: costs.py Progetto: wey-gu/gpbo
def traincfn1dll(x, c):
    #cost modeled in a latent space c=exp(cl)
    n = x.size
    cl = sp.log(c)
    MAP = GPdc.searchMAPhyp(x, cl, sp.array([1e-3] * n), [[sp.NaN]] * n,
                            sp.array([1., 0., -1.]), sp.array([2., 2., 2.]),
                            GPdc.MAT52CS)
    print('MAPhyp in costfn {}'.format(MAP))
    g = GPdc.GPcore(x, cl, sp.array([1e-3] * n), [[sp.NaN]] * n,
                    GPdc.kernel(GPdc.MAT52CS, 1, MAP))

    if gpbo.core.debugoutput['cost1d']:
        print('plotting cost1d...')
        import time
        from matplotlib import pyplot as plt
        f, a = plt.subplots(2)
        low = min(0, min(x))
        high = max(1, max(x))
        xaxis = sp.linspace(low, high, 100)
        y, cy = g.infer_diag_post(xaxis, [[sp.NaN]] * 100)

        s = 2. * sp.sqrt(cy)
        u = sp.empty(100)
        l = sp.empty(100)
        for i in xrange(100):
            s = sp.sqrt(cy[0, i])
            u[i] = y[0, i] + 2. * s
            l[i] = y[0, i] - 2. * s
        a[0].plot(xaxis, y[0, :], 'b')
        a[0].fill_between(xaxis,
                          l,
                          u,
                          facecolor='lightblue',
                          edgecolor='lightblue',
                          alpha=0.5)
        for i in xrange(n):
            a[0].plot(x[i], cl[i], 'r.')
        a[0].set_ylabel('latent')

        a[1].plot(xaxis, sp.exp(y[0, :]), 'b')
        a[1].fill_between(xaxis,
                          sp.exp(l),
                          sp.exp(u),
                          facecolor='lightblue',
                          edgecolor='lightblue',
                          alpha=0.5)
        for i in xrange(n):
            a[1].plot(x[i], c[i], 'r.')
        a[1].set_ylabel('out')

        f.savefig(
            os.path.join(
                gpbo.core.debugoutput['path'],
                'cost1d' + time.strftime('%d_%m_%y_%H:%M:%S') + '.png'))
        f.clf()
        plt.close(f)
        del (f)
    return logcfnobj(g)
Esempio n. 5
0
def gpmap2upperrecc(optstate, persist, **para):
    if para['onlyafter'] >= optstate.n:
        print('{} <= {} : switch to argmin'.format(optstate.n,
                                                   para['onlyafter']))
        return argminrecc(optstate, persist, **para)
        #return [sp.NaN for i in para['lb']],{'didnotrun':True}
    logger.info('gpmapucb2 reccomender')
    d = len(para['lb'])
    x = sp.vstack(optstate.x)
    y = sp.vstack(optstate.y)
    s = sp.vstack([e['s'] + 10**optstate.condition for e in optstate.ev])
    dx = [e['d'] for e in optstate.ev]
    MAP = GPdc.searchMAPhyp(x, y, s, dx, para['mprior'], para['sprior'],
                            para['kindex'])
    logger.info('MAPHYP {}'.format(MAP))
    G = GPdc.GPcore(x, y, s, dx, GPdc.kernel(para['kindex'], d, MAP))
    count = 0

    def wrap(xq):
        xq.resize([1, d])
        a, v = G.infer_diag_post(xq, [[sp.NaN]])
        return a[0, 0] + 2. * sp.sqrt(v[0, 0])

    #print('nevals={}\n\n'.format(count))
    #[xmin,ymin,ierror] = direct(directwrap,para['lb'],para['ub'],user_data=[], algmethod=1, maxf=para['maxf'], logfilename='/dev/null')
    xmin, ymin, ierror = gpbo.core.optutils.twopartopt(wrap, para['lb'],
                                                       para['ub'],
                                                       para['dpara'],
                                                       para['lpara'])
    logger.info('DIRECT found post. min {} at {} {}'.format(
        ymin, xmin, ierror))
    a, v = G.infer_diag_post(sp.array([[xmin]]), [[sp.NaN]])
    print('mean {} std{} '.format(a[0, 0], sp.sqrt(v[0, 0])))

    x, p, di = argminrecc(optstate, persist, **para)
    a, v = G.infer_diag_post(sp.array([[x]]), [[sp.NaN]])
    print('at argmin mean {} std {} wasactually {}'.format(
        a[0, 0], sp.sqrt(v[0, 0]), di['yinc']))
    import sys
    sys.stdout.flush()
    return [i for i in xmin], persist, {'MAPHYP': MAP, 'ymin': ymin}
Esempio n. 6
0
def gphinasargminrecc(optstate, persist, **para):
    if para['onlyafter'] >= optstate.n or not optstate.n % para['everyn'] == 0:
        # return [sp.NaN for i in para['lb']],{'didnotrun':True}
        return argminrecc(optstate, persist, **para)
    logger.info('gpmapas reccomender')
    d = len(para['lb'])

    x = sp.hstack(
        [sp.vstack([e['xa'] for e in optstate.ev]),
         sp.vstack(optstate.x)])

    y = sp.vstack(optstate.y)
    s = sp.vstack([e['s'] + 10**optstate.condition for e in optstate.ev])
    dx = [e['d'] for e in optstate.ev]

    G = GPdc.GPcore(x, y, s, dx, [
        GPdc.kernel(optstate.aux['kindex'], d + 1, h)
        for h in optstate.aux['HYPdraws']
    ])

    def wrap(xq):
        xq.resize([1, d])
        xe = sp.hstack([sp.array([[0.]]), xq])
        # print xe
        a = G.infer_m_post(xe, [[sp.NaN]])
        return a[0, 0]

    best = sp.Inf
    incumbent = None
    for i in xrange(len(optstate.x)):
        thisone = wrap(sp.array(optstate.x[i]))
        if thisone < best:
            best = thisone
            incumbent = optstate.x[i]

    logger.info('reccsearchresult: x {} pred.y {}'.format(incumbent, best))

    return [i for i in incumbent], persist, {'ymin': best}
Esempio n. 7
0
File: costs.py Progetto: wey-gu/gpbo
def traincfn1d(x, c):
    n = x.size
    g = GPdc.GPcore(x, c,
                    sp.ones([n, 1]) * 1e-1, [[sp.NaN]] * n,
                    GPdc.kernel(GPdc.MAT52, 1, [1., 0.2]))

    if gpbo.core.debugoutput['cost1d']:
        print('plotting cost1d...')
        import time
        from matplotlib import pyplot as plt
        f, a = plt.subplots(1)
        low = min(0, min(x))
        high = max(1, max(x))
        xaxis = sp.linspace(low, high, 100)
        y, cy = g.infer_diag_post(xaxis, [[sp.NaN]] * 100)

        a.plot(xaxis, y[0, :], 'b')
        s = 2. * sp.sqrt(cy)
        u = sp.empty(100)
        l = sp.empty(100)
        for i in xrange(100):
            s = sp.sqrt(cy[0, i])
            u[i] = y[0, i] + 2. * s
            l[i] = y[0, i] - 2. * s
        a.fill_between(xaxis,
                       l,
                       u,
                       facecolor='lightblue',
                       edgecolor='lightblue',
                       alpha=0.5)
        for i in xrange(n):
            a.plot(x[i], c[i], 'r.')
        f.savefig(
            os.path.join(
                gpbo.core.debugoutput['path'],
                'cost1d' + time.strftime('%d_%m_%y_%H:%M:%S') + '.png'))
        del (f)
    return cfnobj(g)
Esempio n. 8
0
def prob(G, x, tol=1e-3, dropdims=[]):
    nsam = 10 * int(1. / tol) + 1
    Gr, varG, H, Hvec, varHvec, M, varM = gpbo.core.optutils.gpGH(G, x)
    d = G.D
    vHdraws = GPdc.draw(Hvec.flatten(), varHvec, nsam)
    pvecount = 0
    count = sp.zeros(d)
    count2 = sp.zeros(d)
    for i in xrange(nsam):
        Hdraw = gpbo.core.optutils.Hvec2H(vHdraws[i, :], d)
        g, v = sp.linalg.eigh(Hdraw)
        count += g > 0

    logger.debug('eigenvector probs {}'.format((count + 1.) / (nsam + 2.)))
    return
Esempio n. 9
0
def gpfixrecc(optstate, persist, **para):
    if para['onlyafter'] >= optstate.n or not optstate.n % para['everyn'] == 0:
        return argminrecc(optstate, persist, **para)
        #return [sp.NaN for i in para['lb']],{'didnotrun':True}
    logger.info('gpmap reccomender')
    d = len(para['lb'])
    lb = para['lb']
    ub = para['ub']
    maxf = para['maxf']
    x = sp.vstack(optstate.x)
    y = sp.vstack(optstate.y)
    s = sp.vstack([e['s'] + 10**optstate.condition for e in optstate.ev])
    dx = [e['d'] for e in optstate.ev]
    G = GPdc.GPcore(x, y, s, dx, GPdc.kernel(para['kindex'], d, para['hyper']))

    def wrap(x, null):
        xq = copy.copy(x)
        xq.resize([1, d])
        a = G.infer_m_post(xq, [[sp.NaN]])
        return a[0, 0], 0

    xmin, ymin, ierror = gpbo.core.optutils.silentdirect(
        wrap, para['lb'], para['ub'], **para['dpara'])
    return [i for i in xmin], persist, {'ymin': ymin}
Esempio n. 10
0
def gendecayingpositiveojf(d, lb, ub, sim):

    # s normalised to 0 exact, 1
    from ESutils import gen_dataset
    nt = 20
    cl = 2.

    [X, Y, S, D] = gen_dataset(nt, d, lb, ub, GPdc.MAT52,
                               sp.array([1] + [0.30] * d))
    G0 = GPdc.GPcore(X, Y, S, D,
                     GPdc.kernel(GPdc.MAT52, d, sp.array([1] + [0.30] * d)))

    [X, Y, S, D] = gen_dataset(nt, d, lb, ub, GPdc.MAT52,
                               sp.array([1] + [0.30] * d))
    G1 = GPdc.GPcore(X, Y, S, D,
                     GPdc.kernel(GPdc.MAT52, d, sp.array([1] + [0.30] * d)))

    [X, Y, S, D] = gen_dataset(nt, d, lb, ub, GPdc.MAT52,
                               sp.array([1] + [0.30] * d))
    G2 = GPdc.GPcore(X, Y, S, D,
                     GPdc.kernel(GPdc.MAT52, d, sp.array([1] + [0.30] * d)))

    def p0(x):
        v = G0.infer_m(x, [[sp.NaN]])[0, 0]
        y = v + 1 if v > 0 else sp.exp(v)
        return y

    def p1(x):
        v = G1.infer_m(x, [[sp.NaN]])[0, 0]
        y = v + 1 if v > 0 else sp.exp(v)
        return y

    def p2(x):
        v = G2.infer_m(x, [[sp.NaN]])[0, 0]
        y = v + 1 if v > 0 else sp.exp(v)
        return y

    def ojf(x, **ev):
        #print "ex: {} {}".format(x,ev['xa'])
        # print "\nojfinput: {} : {}".format(x,ev)
        dx = ev['d']
        s = ev['s']
        if ev['s'] > 0:
            noise = sp.random.normal(scale=sp.sqrt(ev['s']))
        else:
            noise = 0
        # print 'noise in ojf {}'.format(noise)
        xa = ev['xa']
        x = sp.array(x)

        y0 = p0(x)
        y1 = sim * p1(x) + y0
        l = p2(x)

        A = (y1 - y0) / (sp.exp(l) - 1)
        B = y0 - A
        y = A * sp.exp(l * xa) + B

        c = sp.exp(-cl * xa)
        return y + noise, c, dict()

    def dirwrap(x, y):
        z = ojf(x, **{'d': [sp.NaN], 's': 0, 'xa': 0})[0]
        return (z, 0)

    [xmin, ymin, ierror] = DIRECT.solve(dirwrap,
                                        lb,
                                        ub,
                                        user_data=[],
                                        algmethod=1,
                                        maxf=20000,
                                        logfilename='/dev/null')

    # print [xmin, ymin]
    def spowrap(x):
        z = ojf(x, **{'d': [sp.NaN], 's': 0, 'xa': 0})[0]
        return z

    y = spm(spowrap, xmin, method='nelder-mead', options={'fatol': 1e-12})
    xmin = y.x
    ymin = spowrap(y.x)
    # print [xmin,ymin]
    logger.info(
        'generated function xmin {} ymin {} yminisnan{} globopt:{} locopt:{}'.
        format(xmin, ymin, sp.isnan(ymin), ierror, y.status))
    if sp.isnan(ymin):
        logger.warning('generator got nan optimizing objective. retrying...')
        return gendecayingpositiveojf(d, lb, ub)
    return ojf, xmin, ymin
Esempio n. 11
0
def genmat52ojf(d, lb, ub, A=1., ls=0.3, fixs=-1, ki=GPdc.MAT52):
    from ESutils import gen_dataset
    if isinstance(ls, float):
        ls = [ls] * d
    #nt=sp.maximum(250,sp.minimum(int(d*100./sp.product(ls)),3000))
    nt = sp.maximum(150, sp.minimum(int(d * 20. / sp.product(ls)), 2500))
    #print(nt)
    #nt=500

    s = 1e-9

    for s in sp.logspace(-9, 0, 20):
        try:
            [X, Y, S, D] = gen_dataset(nt,
                                       d,
                                       lb,
                                       ub,
                                       ki,
                                       sp.array([A] + ls),
                                       s=1e-9)
            break
        except:
            raise

# from matplotlib import pyplot as plt
# plt.figure()
# plt.plot(sp.array(X),sp.array(Y),'b.')
# plt.show(block=True)
    print('training GP')
    G = GPdc.GPcore(X, Y, S, D, GPdc.kernel(ki, d, sp.array([A] + ls)))

    def wrap(x):
        xq = sp.copy(x)
        xq.resize([1, d])
        a = G.infer_m_post(xq, [[sp.NaN]])
        return a[0, 0]

    dpara = {
        'user_data': [],
        'algmethod': 1,
        'maxf': 40000,
        'logfilename': '/dev/null'
    }
    lpara = {'ftol': 1e-20, 'maxfun': 1200}
    xmin, ymin, ierror = gpbo.core.optutils.twopartopt(wrap, lb, ub, dpara,
                                                       lpara)

    print('init {} {}'.format(xmin, ymin))
    for i in xrange(250):
        p = sp.random.normal(size=d) * 1e-2
        res = spm(wrap,
                  xmin + p,
                  method='L-BFGS-B',
                  bounds=tuple([(lb[j], ub[j]) for j in xrange(d)]),
                  options={'gtol': 1e-30})
        # print(res)
        #print(xmin,res.x,wrap(xmin),wrap(res.x)<wrap(xmin))
        if wrap(res.x) < wrap(xmin):
            xmin = res.x
            #    ymin = ymin+res.fun
            print('change: {} {}'.format(xmin, wrap(res.x) - ymin))
    ymin = wrap(xmin)

    def ojf(x, **ev):
        dx = ev['d']
        s = ev['s']
        if fixs < 0:
            if ev['s'] > 0 and not 'cheattrue' in list(ev.keys()):
                noise = sp.random.normal(scale=sp.sqrt(ev['s']))
            else:
                noise = 0
        else:
            if not 'cheattrue' in list(ev.keys()):
                noise = sp.random.normal(scale=sp.sqrt(fixs))
            else:
                noise = 0.
        y = wrap(x) + noise  #G.infer_m(sp.array(x),[dx])[0,0]+noise
        if not 'silent' in list(ev.keys()):
            print('ojf at {} {} returned {} noise {}'.format([i for i in x],
                                                             ev, y, noise))
        return y - ymin, 1., dict()

    logger.info(
        'generated function xmin {} ymin {}(shifted to 0.) opt:{}'.format(
            xmin, ymin, ierror))
    return ojf, xmin, 0.
Esempio n. 12
0
def gphinasrecc(optstate, persist, **para):
    if para['onlyafter'] >= optstate.n or not optstate.n % para['everyn'] == 0:
        #return [sp.NaN for i in para['lb']],{'didnotrun':True}
        return argminrecc(optstate, persist, **para)
    logger.info('gpmapas reccomender')
    d = len(para['lb'])

    x = sp.hstack(
        [sp.vstack([e['xa'] for e in optstate.ev]),
         sp.vstack(optstate.x)])
    y = sp.vstack(optstate.y)
    s = sp.vstack([e['s'] + 10**optstate.condition for e in optstate.ev])
    dx = [e['d'] for e in optstate.ev]

    G = GPdc.GPcore(x, y, s, dx, [
        GPdc.kernel(optstate.aux['kindex'], d + 1, h)
        for h in optstate.aux['HYPdraws']
    ])

    #    def directwrap(xq,y):
    #        xq.resize([1,d])
    #        xe = sp.hstack([sp.array([[0.]]),xq])
    #        #print xe
    #        a = G.infer_m_post(xe,[[sp.NaN]])
    #        return (a[0,0],0)
    #    [xmin,ymin,ierror] = direct(directwrap,para['lb'],para['ub'],user_data=[], algmethod=1, maxf=para['maxf'], logfilename='/dev/null')

    def wrap(x):
        xq = copy.copy(x)
        xq.resize([1, d])
        xe = sp.hstack([sp.array([[0.]]), xq])
        a = G.infer_m_post(xe, [[sp.NaN]])
        return a[0, 0]

    xmin, ymin, ierror = gpbo.core.optutils.twopartopt(wrap, para['lb'],
                                                       para['ub'],
                                                       para['dpara'],
                                                       para['lpara'])
    logger.info('reccsearchresult: {}'.format([xmin, ymin, ierror]))
    from gpbo.core import debugoutput
    if debugoutput['datavis']:
        if not os.path.exists(debugoutput['path']):
            os.mkdir(debugoutput['path'])

        l = sp.mean([h[3] for h in optstate.aux['HYPdraws']])
        from matplotlib import pyplot as plt
        fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(10, 30))

        n = 200
        x_ = sp.linspace(-1, 1, n)
        y_ = sp.linspace(-1, 1, n)
        z_ = sp.empty([n, n])
        s_ = sp.empty([n, n])
        for i in xrange(n):
            for j in xrange(n):
                m_, v_ = G.infer_diag_post(sp.array([0., y_[j], x_[i]]),
                                           [[sp.NaN]])
                z_[i, j] = m_[0, 0]
                s_[i, j] = sp.sqrt(v_[0, 0])
        CS = ax[1].contour(x_, y_, z_, 20)
        ax[1].clabel(CS, inline=1, fontsize=10)
        CS = ax[2].contour(x_, y_, s_, 20)
        ax[2].clabel(CS, inline=1, fontsize=10)
        for i in xrange(x.shape[0] - 1):
            ax[0].plot(x[i, 1], x[i, 2], 'b.')
            circle = plt.Circle([x[i, 1], x[i, 2]],
                                radius=0.5 * x[i, 0] * l,
                                edgecolor="none",
                                color='lightblue',
                                alpha=0.8 - 0.6 * x[i, 2])
            ax[0].add_patch(circle)
        ax[0].plot(x[i + 1, 1], x[i + 1, 2], 'r.')
        circle = plt.Circle([x[i + 1, 1], x[i + 1, 2]],
                            radius=0.5 * x[i, 0] * l,
                            edgecolor="none",
                            color='lightblue',
                            alpha=0.8 - 0.6 * x[i, 2])
        ax[0].add_patch(circle)
        ax[0].axis([-1., 1., -1., 1.])
        ax[1].plot(xmin[0], xmin[1], 'ro')
        fig.savefig(
            os.path.join(
                debugoutput['path'],
                'datavis' + time.strftime('%d_%m_%y_%H:%M:%S') + '.png'))
        fig.clf()
        plt.close(fig)
        del (fig)

    return [i for i in xmin], persist, {'ymin': ymin}
Esempio n. 13
0
File: costs.py Progetto: wey-gu/gpbo
def traincfnfull(x, c):
    #cost modeled in a latent space c=exp(cl)
    n, d = x.shape
    c_ = sp.log(c)
    off = sp.mean(c_)
    cl = c_ - off
    MAP = GPdc.searchMAPhyp(x, cl, sp.array([1e-6] * n), [[sp.NaN]] * n,
                            sp.array([1.] + [-0.] * d),
                            sp.array([2.] * (d + 1)), GPdc.MAT52)
    print('MAPhyp in costfn {}'.format(MAP))
    g = GPdc.GPcore(x, cl, sp.array([1e-3] * n), [[sp.NaN]] * n,
                    GPdc.kernel(GPdc.MAT52, 1, MAP))
    if gpbo.core.debugoutput['cost1d']:
        print('plotting cost...')
        import time
        from matplotlib import pyplot as plt
        f, a = plt.subplots(d, 2)

        n = 60
        x = sp.linspace(-1, 1, n)
        xa = sp.linspace(0, 1, n)
        z = sp.empty([n, n])
        vz = sp.empty([n, n])
        for D in xrange(d - 1):
            for i in xrange(n):
                for j in xrange(n):
                    q = sp.zeros([1, d])
                    q[0, 0] = xa[j]
                    q[0, D + 1] = x[i]
                    m, v = g.infer_diag(q, [[sp.NaN]])
                    z[i, j] = m[0, 0]
                    vz[i, j] = v[0, 0]
            try:
                CS = a[D, 0].contour(xa, x, z, 30)
                a[D, 0].clabel(CS, inline=1, fontsize=8)
            except ValueError:
                pass
            try:
                CS = a[D, 1].contour(xa, x, vz, 30)
                a[D, 1].clabel(CS, inline=1, fontsize=8)
            except ValueError:
                pass

        for i in xrange(n):
            for j in xrange(n):
                q = sp.zeros([1, d])
                q[0, 0] = 0.
                q[0, 1] = x[j]
                q[0, 2] = x[i]
                m, v = g.infer_diag(q, [[sp.NaN]])
                z[i, j] = m[0, 0]
                vz[i, j] = v[0, 0]
        try:
            CS = a[d - 1, 0].contour(x, x, z, 30)
            a[d - 1, 0].clabel(CS, inline=1, fontsize=8)
        except ValueError:
            pass
        try:
            CS = a[d - 1, 1].contour(x, x, vz, 30)
            a[d - 1, 1].clabel(CS, inline=1, fontsize=8)
        except ValueError:
            pass

        f.savefig(
            os.path.join(
                debugoutput['path'],
                'cost1d' + time.strftime('%d_%m_%y_%H:%M:%S') + '.png'))
        f.clf()
        plt.close(f)
        del (f)
    return logcfnobjfull(g, offset=off)