def distinguish(x, y): builder = CNFBuilder() xvar = builder.var_for_term(x) yvar = builder.var_for_term(y) cnf = builder.cnf cnf.append((xvar, yvar)) cnf.append((-xvar, -yvar)) solution = minisat(cnf) if solution is None: return None assignment = { k for k, v in builder.vars_to_vars.items() if v in solution } if x.evaluate(assignment): assert xvar in solution if y.evaluate(assignment): assert yvar in solution return assignment
def test_solutions_to_linear_constraints_satisfy_them(ls, m, n): assume(m <= n) builder = DiagramBuilder() bdd = builder.pseudo_boolean_constraint( [(c, builder.variable(i)) for i, c in enumerate(ls)], m, n ) assume(not isinstance(bdd, bool)) mapper = CNFMapper() termvar = mapper.variable_for_term(bdd) cnf = list(mapper.cnf) cnf.append((termvar,)) solution = minisat(cnf) assume(solution is not None) assignment = { v: mapper.remapped_variable(v) in solution for v in bdd.variables() } assert bdd.evaluate(assignment) score = sum( s for i, s in enumerate(ls) if i in bdd.variables() and assignment[i] ) assert m <= score <= n
points.append((int(line.split(' ')[0]), int(line.split(' ')[1]), int(line.split(' ')[2]))) line = file.readline() return size, points if __name__ == "__main__": if len(sys.argv) != 2: default_usage() size, points = read_instance(sys.argv[1]) n_rows = n_columns = n_colors = size expression = get_expression(size, points) nb_vars = n_rows * n_columns * n_colors solution = minisat.minisat(nb_vars, [clause.minisat_str() for clause in expression], './minisatMac') if solution is None: print("The problem is unfeasible") exit(0) grid = [] i = 1 tmp = [] for s in solution: if s % size == 0: tmp.append(size - 1) else: tmp.append(s % size - 1) i += 1 if len(tmp) == size: grid.append(tmp)
clauses.append(isProvided) #clauses.append([ab.index,]) #print(requires) #clauses.append() # TOREPLACE should be the number of different variables present in your list 'clauses' # # For example, if your clauses contain all the equipments proposed by merchant and # all the abilities provided by these equipment, you would have: TOREPLACE = len(merchant.abilities) + len(merchant.equipments) #TOREPLACE = len(merchant.equipments) sol = minisat.minisat(TOREPLACE, clauses) equipment_sol = [eq for eq in sol if eq <= merchant.abi_base_index] if equipment_sol is None: print("No solution") else: print("Equipment needed to beat the level {:s}".format(level_num_str)) for i in equipment_sol: if(i <= merchant.abi_base_index): print(" - " + (merchant[i].name)) print("Total pieces of equipment needed: {:d}".format(len(equipment_sol)))
if __name__ == "__main__": if len(sys.argv) != 3: default_usage() # Read instance k = int(sys.argv[2]) g = graph.Graph(sys.argv[1]) clauses = gc_sol.get_clauses(g, k) nb_vars = g.nb_nodes * k # print(nb_vars) # print(clauses) solution = minisat.minisat(nb_vars, clauses) # print(solution) no_coloring = [] duplicated_coloring = [] violated_adjacent = [] # get coloring from solution colors = [-1 for v in range(0, g.nb_nodes + 1)] if solution: for s in solution: node = int((s + k - 1) / k) color = s - (node - 1) * k if colors[node] == -1:
print("Usage:", sys.argv[0], "MERCHANT_FILE LEVEL_FILE", file=sys.stderr) exit(1) if __name__ == "__main__": if len(sys.argv) != 3: default_usage() merchant = rpg.Merchant(sys.argv[1]) level = rpg.Level(sys.argv[2]) level_num_str = sys.argv[2].split("_")[1].split(".")[0] clauses = studentSol.get_clauses(merchant, level) nb_vars = studentSol.get_nb_vars(merchant, level) sol = minisat.minisat(nb_vars, clauses) equipment_sol = [] if sol: equipment_sol = [eq for eq in sol if eq <= merchant.abi_base_index] missing_abilities = get_missing_abilities(equipment_sol) violated_conflicts = get_violated_conflicts(equipment_sol) if missing_abilities: print("MISSING ABILITIES: " + str(len(missing_abilities))) for abi in missing_abilities: print(abi) if violated_conflicts: print("VIOLATED CONFLICTS: " + str(len(conflicts)))
abM.index, ]) isProvided.append(-abM.index) for eq in abM.provided_by: isProvided.append(eq.index) clauses.append(isProvided) #clauses.append([ab.index,]) #print(requires) #clauses.append() # TOREPLACE should be the number of different variables present in your list 'clauses' # # For example, if your clauses contain all the equipments proposed by merchant and # all the abilities provided by these equipment, you would have: TOREPLACE = len(merchant.abilities) + len(merchant.equipments) #TOREPLACE = len(merchant.equipments) sol = minisat.minisat(TOREPLACE, clauses) equipment_sol = [eq for eq in sol if eq <= merchant.abi_base_index] if equipment_sol is None: print("No solution") else: print("Equipment needed to beat the level {:s}".format(level_num_str)) for i in equipment_sol: if (i <= merchant.abi_base_index): print(" - " + (merchant[i].name)) print("Total pieces of equipment needed: {:d}".format(len(equipment_sol)))
def default_usage(): # The first argument must reference a GRAPH file and the second # argument must represent the number of colors print("Usage:", sys.argv[0], "GRAPH_INSTANCE NB_COLORS", file=sys.stderr) exit(1) if __name__ == "__main__": if len(sys.argv) != 3: default_usage() # Read instance k = int(sys.argv[2]) g = graph.Graph(sys.argv[1]) clauses = get_clauses(g, k) nb_vars = g.nb_nodes * k solution = minisat.minisat(nb_vars, [clause.minisat_str() for clause in clauses]) no_coloring = [] duplicated_coloring = [] violated_adjacent = [] # get coloring from solution colors = [-1 for v in range(0, g.nb_nodes + 1)] if solution: for s in solution: node = int((s + k - 1) / k) color = s - (node - 1) * k if colors[node] == -1: colors[node] = color else: duplicated_coloring.append(node) no_coloring = [ node for node in range(1, g.nb_nodes + 1) if colors[node] == -1
print("Usage:", sys.argv[0], "MERCHANT_FILE LEVEL_FILE", file=sys.stderr) exit(1) if __name__ == "__main__": if len(sys.argv) != 3: default_usage() merchant = rpg.Merchant(sys.argv[1]) level = rpg.Level(sys.argv[2]) level_num_str = sys.argv[2].split("_")[1].split(".")[0] clauses = studentSol.get_clauses(merchant, level) nb_vars = studentSol.get_nb_vars(merchant, level) sol = minisat.minisat(nb_vars, clauses) equipment_sol = [] if sol: equipment_sol = [eq for eq in sol if eq <= merchant.abi_base_index] missing_abilities = get_missing_abilities(equipment_sol) violated_conflicts = get_violated_conflicts(equipment_sol) if missing_abilities: print("MISSING ABILITIES: " + str(len(missing_abilities))) for abi in missing_abilities: print(abi) if violated_conflicts: print("VIOLATED CONFLICTS: " + str(len(violated_conflicts)))