Example #1
0
    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
Example #3
0
    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))
Example #5
0
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)]
Example #6
0
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)]
Example #7
0
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)]
Example #8
0
def cnf_to_dimacs(cnf_input):
    clause = expr(cnf_input, False)
    cnf = clause.to_cnf()
    map, dimacs = expr2dimacscnf(cnf)
    return dimacs, map
Example #9
0
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)]
        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)