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