Пример #1
0
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
Пример #2
0
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
Пример #3
0
        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)
Пример #4
0
			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)))
Пример #5
0
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:
Пример #6
0
  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)))
Пример #7
0
                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)))
Пример #8
0
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
Пример #9
0
    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)))