示例#1
0
文件: sat_guide.py 项目: ai-se/SPL
def sway(model, order=4, use_bin_instead_of_con=False, applyseed=False, granularity=10):
    global skiptime
    skiptime = 0
    from SAT_Guide.sway import bin_dominate, cont_dominate, sway, evalCount
    cmpr = bin_dominate if use_bin_instead_of_con else cont_dominate
    mins = [0, 0, 0, 0, 0]
    maxs = [model.cnfNum, model.featureNum, model.featureNum, sum(model.defects), sum(model.cost)]

    # generating the random seed
    pop = []
    tx = time.time()
    if applyseed:
        with open('/Users/jianfeng/git/SPL/j_res/seeding/'+model.name+'_SEEDs_10000_1.txt', 'r') as f:
            lines = f.readlines()
            lines = lines[:9500]
            lines = map(lambda x:x.strip(), lines)
            random.shuffle(lines)
    else:
        p = subprocess.Popen(
            ['java', '-jar', 'minisat.jar', model.name, str(model.featureNum), 'positive', str(int(10**order/3))],
            stdout=subprocess.PIPE)
        xs1 = p.communicate()[0].split('\n')[:-1]
        p = subprocess.Popen(
            ['java', '-jar', 'minisat.jar', model.name, str(model.featureNum), 'negative', str(int(10 ** order / 3))],
            stdout=subprocess.PIPE)
        xs2 = p.communicate()[0].split('\n')[:-1]
        p = subprocess.Popen(
            ['java', '-jar', 'minisat.jar', model.name, str(model.featureNum), 'random', str(int(10 ** order / 3))],
            stdout=subprocess.PIPE)
        xs3 = p.communicate()[0].split('\n')[:-1]
        lines = xs1 + xs2 + xs3
        # lines = xs3
        random.shuffle(lines)
    lines = list(set(lines))
    for l in lines:
        pop.append(model.Individual(l))
    # for p in pop:
    #     model.eval(p)
    # return pop, 10000, time.time()-tx
    # final_pop = pop[:1000]
    final_pop, evalC = sway(pop, ms=mins, Ms=maxs, evalfunc=model.eval, better=cmpr,granularity=granularity)
    print evalC,
    # if len(final_pop) > 500:
    #     final_pop = list(final_pop)
    #     random.shuffle(final_pop)
    #     final_pop = final_pop[:500]
    for p in final_pop:
        if not p.fitness.valid:
            model.eval(p)
    return final_pop, evalC
示例#2
0
文件: sat_guide.py 项目: ai-se/SPL
def running(model_name):
    model = DimacsModel(model_name)
    for i in [8, 32, 64, 128]:
        print i
        for repeat in range(1,8):
            t1 = time.time()
            rr, eval_count = sway(model, use_bin_instead_of_con=True, applyseed=True, granularity=i)
            runtime = time.time() - t1
            alg = 'SWAY4_D'

            # with open("../j_res/{1}/{0}_{1}_{2}_{3}.txt".format(model_name, alg, eval_count, i), "w") as f:
            with open("../j_res/e.txt", 'w') as f:
                for r in rr:
                    f.write(r)
                    f.write('\n')
                f.write('~~~\n')
                for r in rr:
                    f.write(' '.join(map(str, r.fitness.values)))
                    f.write('\n')
                f.write('~~~\n')
                f.write(str(runtime+skiptime))
                f.write('\n')

            print get_stats('eshop', '/Users/jianfeng/git/SPL/j_res/e.txt')