def fan_wrapper(fold='None', n=10, dens=.2, sst=.9):
    scipy.random.seed()
    msl_time = None
    sat_time = None
    s = None
    c = None
    k = bfutils.dens2edgenum(dens, n=nodes)
    output = {}
    while True:
        try:
            output['gt'] = gk.ringmore(n, k)
            gdens = traversal.density(output['gt'])
            gu = bfutils.increment(output['gt'])
            output['transition'] = lm.transitionMatrix4(output['gt'],
                                                        minstrength=.9)
            if estimate_gu:
                data = lm.drawsamplesLG(output['transition'],
                                        nstd=np.double(NOISE_STD),
                                        samples=BURNIN + NSAMPLES * URATE)
                data = data[:, BURNIN:]
                if np.max(data) > 1000.:
                    raise NameError()
                gu_est, gu_time = gu_estimate(data[:, ::URATE], ALG)
            else:
                gu_est = None
                gu_time = None
            if estimate_g1:
                try:
                    s, msl_time = msl_caller(gu_est)
                except TimeoutError:
                    s = None
                    msl_time = None
                try:
                    c, sat_time = sat_caller(gu_est, fold)
                except TimeoutError:
                    c = None
                    sat_time = None
                if msl_time is not None:
                    print "msl: {:2}: {:8} : {:4}  {:10} seconds".\
                        format(fold, round(sst,3), len(s),
                           round(msl_time/1000.,3))
                if sat_time is not None:
                    print "sat: {:2}: {:8} : {:4}  {:10} seconds".\
                        format(fold, round(sst,3), len(c),
                           round(sat_time/1000.,3))
            else:
                s = None
                c = None
                msl_time = None
                sat_time = None
            output['gu'] = {'est': gu_est, 'truth': gu, 'ms': gu_time}
            output['MSL'] = {'eq': s, 'ms': msl_time}
            output['SAT'] = {'eq': c, 'ms': sat_time}
        except MemoryError:
            print 'memory error... retrying'
            continue
        break
    return output
def fan_wrapper(fold='None', n=10, dens=.2, sst=.9, card=2):
    scipy.random.seed()
    msl_time = None
    sat_time = None
    s = None
    c = None
    k = bfutils.dens2edgenum(dens, n=nodes)
    output = {}
    while True:
        try:
            output['gt'] = gk.ringmore(n, k)
            gdens = traversal.density(output['gt'])
            gu = bfutils.increment(output['gt'])
            if estimate_gu:
                data = dg.ConstructDynBN(output['gt'], [card] * n, sst,
                                         BURNIN + NSAMPLES * URATE)
                data = data[:, BURNIN:]
                gu_est, gu_time = gu_estimate(data[:, ::URATE], ALG)
            else:
                gu_est = None
                gu_time = None
            if estimate_g1:
                try:
                    s, msl_time = msl_caller(gu_est)
                except TimeoutError:
                    s = None
                    msl_time = None
                try:
                    c, sat_time = sat_caller(gu_est, fold)
                except TimeoutError:
                    c = None
                    sat_time = None
                if msl_time is not None:
                    print "msl: {:2}: {:8} : {:4}  {:10} seconds".\
                        format(fold, round(sst,3), len(s),
                           round(msl_time/1000.,3))
                if sat_time is not None:
                    print "sat: {:2}: {:8} : {:4}  {:10} seconds".\
                        format(fold, round(sst,3), len(c),
                           round(sat_time/1000.,3))
            else:
                s = None
                c = None
                msl_time = None
                sat_time = None
            output['gu'] = {'est': gu_est, 'truth': gu, 'ms': gu_time}
            output['MSL'] = {'eq': s, 'ms': msl_time}
            output['SAT'] = {'eq': c, 'ms': sat_time}
        except MemoryError:
            print 'memory error... retrying'
            continue
        break
    return output
Пример #3
0
def fan_wrapper(fold, n=10, k=10):
    scipy.random.seed()
    curr_proc = current_process()
    curr_proc.daemon = False
    output = Queue()
    while True:
        try:
            g = gk.ringmore(n, k)
            gdens = traversal.density(g)
            g2 = bfutils.increment_u(g, g)
            # g2 = bfutils.undersample(g,2)

            def inside_wrapper():
                scipy.random.seed()
                try:
                    startTime = int(round(time.time() * 1000))
                    s = traversal.v2g22g1(g2, capsize=CAPSIZE)
                    # s = traversal.backtrack_more2(g2, rate=2, capsize=CAPSIZE)
                    endTime = int(round(time.time() * 1000))
                    print "{:2}: {:8} : {:4}  {:10} seconds".\
                        format(fold, round(gdens, 3), len(s),
                               round((endTime - startTime) / 1000., 3))
                    output.put({'gt': g, 'eq': s, 'ms': endTime - startTime})
                except MemoryError:
                    print 'memory error...'
                    raise
            pl = [Process(target=inside_wrapper) for x in range(INPNUM)]
            for e in pl:
                e.start()
            while True:
                if killall(pl):
                    break
            r = output.get()
        except MemoryError:
            print 'memory error... retrying'
            for p in pl:
                p.terminate()
                p.join()
            continue
        break
    for p in pl:
        p.join()
    return r
Пример #4
0
def wrapper_rate_agnostic(fold, n=10, k=10):
    scipy.random.seed()
    l = {}
    while True:
        try:
            g = gk.ringmore(n, k)  # random ring of given density
            gs = bfutils.call_undersamples(g)
            for u in range(1, min([len(gs), UMAX])):
                g2 = bfutils.undersample(g, u)
                print fold, ': ', traversal.density(g), ':',
                startTime = int(round(time.time() * 1000))
                s = ur.iteqclass(g2, verbose=False)
                endTime = int(round(time.time() * 1000))
                print len(s)
                l[u] = {'eq': s, 'ms': endTime - startTime}
        except MemoryError:
            print 'memory error... retrying'
            continue
        break
    return {'gt': g, 'solutions': l}
def ra_wrapper_preset(fold, glist=[]):
    scipy.random.seed()
    l = {}
    while True:
        try:
            g = glist[fold]
            gs = bfutils.call_undersamples(g)
            for u in range(1, min([len(gs), UMAX])):
                g2 = bfutils.undersample(g, u)
                print fold, ': ', traversal.density(g), ':',
                startTime = int(round(time.time() * 1000))
                s = ur.liteqclass(g2, verbose=False, capsize=CAPSIZE)
                endTime = int(round(time.time() * 1000))
                print len(s), u
                l[u] = {'eq': s, 'ms': endTime - startTime}
        except MemoryError:
            print 'memory error... retrying'
            continue
        break
    return {'gt': g, 'solutions': l}
Пример #6
0
def wrapper(fold, n=10, dens=0.1):
    scipy.random.seed()
    rate = 2

    r = None
    s = set()
    counter = 0
    while not s:
        scipy.random.seed()
        sst = 0.9
        r = None
        while not r:
            r = lm.getAring(n, dens, sst, False, dist=DIST)
            print sst,
            sys.stdout.flush()
            if sst < 0.03:
                sst -= 0.001
            else:
                sst -= 0.01
            if sst < 0:
                sst = 0.02
        # pprint.pprint(r['transition'].round(2),width=200)
        # d = zkl.load('leibnitz_nodes_'+str(n)+'_OCE_model_.zkl')
        # r = d[dens][fold]
        g = r['graph']
        true_g2 = bfu.undersample(g, rate - 1)
        data = lm.drawsamplesLG(r['transition'], samples=BURNIN + SAMPLESIZE * 2,
                                nstd=np.double(NOISE_STD))
        data = data[:, BURNIN:]
        if np.max(data) > 1000.:
            pprint.pprint(r['transition'].round(2), width=200)
            # raise ValueError
        startTime = int(round(time.time() * 1000))
        if EST == 'pc':
            g2 = pc.dpc(data[:, ::2], pval=0.0001)
        elif EST == 'svar':
            g2 = lm.data2graph(data[:, ::2])
        if trv.density(g2) < 0.7:
            print gk.OCE(g2, true_g2)
            # s = examine_bidirected_flips(g2, depth=DEPTH)
            s = find_nearest_reachable(g2, max_depth=1)
            # s = trv.v2g22g1(g2, capsize=CAPSIZE, verbose=False)
            # s = trv.edge_backtrack2g1_directed(g2, capsize=CAPSIZE)
            # s = timeout(trv.v2g22g1,
            # s = timeout(trv.edge_backtrack2g1_directed,
            #            args=(g2,CAPSIZE),
            #            timeout_duration=1000, default=set())
            print 'o',
            sys.stdout.flush()
            if -1 in s:
                s = set()
        endTime = int(round(time.time() * 1000))
        # if counter > 3:
        #    print 'not found'
        #    return None
        counter += 1
    print ''
    oce = [gk.OCE(num2CG(x, n), g) for x in s]
    cum_oce = [sum(x['directed']) + sum(x['bidirected']) for x in oce]
    idx = np.argmin(cum_oce)
    print "{:2}: {:8} : {:4}  {:10} seconds".\
          format(fold, round(dens, 3), cum_oce[idx],
                 round((endTime - startTime) / 1000., 3))
    # np.set_printoptions(formatter={'float': lambda x: format(x, '6.3f')+", "})
    # pprint.pprint(r['transition'].round(2))
    # np.set_printoptions()

    return {'gt': r,
            'eq': s,
            'OCE': oce[idx],
            'tries_till_found': counter,
            'estimate': g2,
            'graphs_tried': counter,
            'strength': sst + 0.01,
            'ms': endTime - startTime}