def simplify(cnf_file, output_file, num_var_not_fixed, rng): sol = solve_weighted_max_sat_file(cnf_file, [], 1) int_sol = [] for i, val in enumerate(sol[0]): if val: int_sol.append(i + 1) else: int_sol.append(-(i + 1)) sol = rng.choice(int_sol, size=len(int_sol) - num_var_not_fixed, replace=False) output_file += ".wcnf" fix_var(cnf_file, output_file, sol) wcnf = WCNF(output_file) wcnf.to_file(output_file) return cnf_to_model(output_file, rng)
def generate_wcnfs(path, models_and_contexts): for i, elem in enumerate(models_and_contexts): model = elem["model"] contexts = elem["contexts"] wcnf = WCNF() for weight_clause in model: if weight_clause[0] == None: wcnf.append(tuple(weight_clause[1])) else: wcnf.append(tuple(weight_clause[1]), weight=weight_clause[0]) wcnf.to_file(path + f"_{i}.wcnf") for j, context in enumerate(contexts): wcnf_context = wcnf.copy() # print(context) for literals in context: wcnf_context.append((literals,)) wcnf_context.to_file(path + f"_{i}_context_{j}.wcnf")