def __init__(self): self.X = exprvars('x', (1, 10), (1, 10), (1, 10)) V = And(*[ And(*[ OneHot(*[self.X[r, c, v] for v in range(1, 10)]) for c in range(1, 10) ]) for r in range(1, 10) ]) R = And(*[ And(*[ OneHot(*[self.X[r, c, v] for c in range(1, 10)]) for v in range(1, 10) ]) for r in range(1, 10) ]) C = And(*[ And(*[ OneHot(*[self.X[r, c, v] for r in range(1, 10)]) for v in range(1, 10) ]) for c in range(1, 10) ]) B = And(*[ And(*[ OneHot(*[ self.X[3 * br + r, 3 * bc + c, v] for r in range(1, 4) for c in range(1, 4) ]) for v in range(1, 10) ]) for br in range(3) for bc in range(3) ]) self.litmap, self.S = expr2dimacscnf(And(V, R, C, B))
def redistribute_SAT_sols_allDimesions(cnf_input_file, cnf_output_file): with open(cnf_input_file, 'r') as f: cnf_as_string = f.read() cnf_abstract_syntax_tree = parse_cnf(cnf_as_string) cnf_expression = ast2expr(cnf_abstract_syntax_tree) print(cnf_expression) print() litmap, nvars, clauses = cnf_expression.encode_cnf() # for var in range(1, nvars + 1): for var in range(1, 10): output_cnf = redistribute_SAT_sols_oneDimesion(input_cnf=cnf_expression, split_var=1) litmap, nvars, clauses = output_cnf.encode_cnf() print('split on var', var, 'now we have', len(clauses), 'clauses') # for clause in clauses: # for var in clause: # print(var, end=' ') # print() # print() cnf_expression = output_cnf cnf_string = expr2dimacscnf(output_cnf) # print(cnf_string[1]) # print(type(cnf_string[1])) with open(cnf_output_file, 'w') as ofile: ofile.write(str(cnf_string[1])) return output_cnf
def __init__(self): self.X = exprvars('x', (1, 10), (1, 10), (1, 10)) V = And(*[And(*[OneHot(*[self.X[r, c, v] for v in range(1, 10)]) for c in range(1, 10)]) for r in range(1, 10)]) R = And(*[And(*[OneHot(*[self.X[r, c, v] for c in range(1, 10)]) for v in range(1, 10)]) for r in range(1, 10)]) C = And(*[And(*[OneHot(*[self.X[r, c, v] for r in range(1, 10)]) for v in range(1, 10)]) for c in range(1, 10)]) B = And(*[And(*[OneHot(*[self.X[3*br+r, 3*bc+c, v] for r in range(1, 4) for c in range(1, 4)]) for v in range(1, 10)]) for br in range(3) for bc in range(3)]) self.litmap, self.S = expr2dimacscnf(And(V, R, C, B))
def __init__(self, varname='x'): self.X = bitvec(varname, (1, 10), (1, 10), (1, 10)) V = And(*[ And(*[OneHot(*[self.X[r][c][v] for v in range(1, 10)]) for c in range(1, 10)]) for r in range(1, 10)]) R = And(*[ And(*[OneHot(*[self.X[r][c][v] for c in range(1, 10)]) for v in range(1, 10)]) for r in range(1, 10)]) C = And(*[ And(*[OneHot(*[self.X[r][c][v] for r in range(1, 10)]) for v in range(1, 10)]) for c in range(1, 10)]) B = And(*[ And(*[OneHot(*[self.X[3*br+r][3*bc+c][v] for r in range(1, 4) for c in range(1, 4)]) for v in range(1, 10)]) for br in range(3) for bc in range(3)]) self.S = expr2dimacscnf(And(V, R, C, B))
def test_satisfy_one(): a, b, c = map(expr, 'abc') _, cnf = expr2dimacscnf(a & b & c) assert picosat.satisfy_one(cnf.nvars, cnf.clauses) == (1, 1, 1) assert list(picosat.satisfy_all(cnf.nvars, cnf.clauses)) == [(1, 1, 1)]
def test_satisfy_one(): _, cnf = expr2dimacscnf(expr("And(a, b, c)")) assert picosat.satisfy_one(cnf.nvars, cnf.clauses) == (1, 1, 1) assert list(picosat.satisfy_all(cnf.nvars, cnf.clauses)) == [(1, 1, 1)]
def cnf_to_dimacs(cnf_input): clause = expr(cnf_input, False) cnf = clause.to_cnf() map, dimacs = expr2dimacscnf(cnf) return dimacs, map
cur_or = pyeda.boolalg.expr.Or(*cur_vars) print("cur_or:", cur_or) if half1_orig_cnf_as_expr is None: half1_orig_cnf_as_expr = cur_or else: half1_orig_cnf_as_expr = pyeda.boolalg.expr.And(*[half1_orig_cnf_as_expr, cur_or]) print("half1_orig_cnf_as_expr:", half1_orig_cnf_as_expr) print() print() print("half1_orig_cnf_as_expr:", half1_orig_cnf_as_expr) exit(-1) for clause in expression.iter_dfs(): if clause == litmap[1]: print('HI!!') # if litmap[1] in clause: # print('HI2!!') print(clause) print(type(clause)) print(isinstance(clause, pyeda.boolalg.expr.AndOp)) print() exit(0) print(expr2dimacscnf(expression)) print(clauses)