예제 #1
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
    def test_CustomGraphOneTwoCollors(self):
        solver = SAT_solver()
        graph = [[0, 1, 1, 1, 1], [1, 0, 1, 1, 0], [1, 1, 0, 1, 0], [1, 1, 1, 0, 1], [1, 0, 0, 1, 0]]

        colors = 2
        formula = graph_coloring(graph, colors)
        solution = solver.solve(formula)
        self.assertFalse(solution[0])
예제 #2
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
    def test_completeGraphTwoCollors(self):
        solver = SAT_solver()

        graph = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
        colors = 2
        formula = graph_coloring(graph, colors)
        solution = solver.solve(formula)
        self.assertFalse(solution[0])
예제 #3
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
    def test_CustomGraphOneFourCollors(self):
        solver = SAT_solver()
        graph = [[0, 1, 1, 1, 1], [1, 0, 1, 1, 0], [1, 1, 0, 1, 0], [1, 1, 1, 0, 1], [1, 0, 0, 1, 0]]

        colors = 4
        formula = graph_coloring(graph, colors)
        solution = solver.solve(formula)
        self.assertTrue(solution[0])
        self.assertEqual("true", formula.nnf().cnf().evaluate(solution[1]).__class__.__name__)
예제 #4
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
    def test_completeGraphThreeCollors(self):
        solver = SAT_solver()

        graph = [[1, 1, 1], [1, 1, 1], [1, 1, 1]]

        colors = 3
        formula = graph_coloring(graph, colors)
        solution = solver.solve(formula)
        self.assertTrue(solution[0])
        self.assertEqual("true", formula.nnf().cnf().evaluate(solution[1]).__class__.__name__)
예제 #5
0
    def test_OddCicleGraphTwoCollors(self):
        solver = SAT_solver()

        graph = [
            [0, 1, 1],
            [1, 0, 1],
            [1, 1, 0],
        ]

        colors = 2
        formula = graph_coloring(graph, colors)
        solution = solver.solve(FlatCNF(formula))
        self.assertFalse(solution[0])
예제 #6
0
    def test_EvenCicleGraphTwoCollors(self):
        solver = SAT_solver()

        graph = [
            [0, 1, 0, 1],
            [1, 0, 1, 0],
            [0, 1, 0, 1],
            [1, 0, 1, 0],
        ]

        colors = 2
        formula = graph_coloring(graph, colors)
        solution = solver.solve(FlatCNF(formula))
        self.assertTrue(solution[0])
        self.assertEqual("true", formula.nnf().cnf().evaluate(solution[1]).__class__.__name__)
예제 #7
0
    def test_SudokuCustom(self):

        solver = SAT_solver()
        board=[[4, 8, None, 1, 6, None, None, None, 7],
         [1, None, 7, 4, None, 3, 6, None, None],
         [3, None, None, 5, None, None, 4, 2, None],
         [None, 9, None, None, 3, 2, 7, None, 4],
         [None, None, None, None, None, None, None, None, None],
         [2, None, 4, 8, 1, None, None, 6, None],
         [None, 4, 1, None, None, 8, None, None, 6],
         [None, None, 6, 7, None, 1, 9, None, 3],
         [7, None, None, None, 9, 6, None, 4, None]]

        formula = sudoku(board)
        solution = solver.solve(formula,True)

        self.assertTrue(solution[0])
        self.assertEqual("true", formula.nnf().cnf().evaluate(solution[1]).__class__.__name__)
예제 #8
0
    def test_SudokuMedium(self):

        solver = SAT_solver()
        board=[[None, None, 9, None, 6, 4, None, None, 1],
         [None, None, None, None, 5, None, None, None, None],
         [4, 6, None, 1, None, 7, None, None, 8],
         [None, None, None, None, None, None, None, 9, None],
         [None, None, None, None, 3, None, None, 1, None],
         [3, None, None, None, None, None, None, 4, None],
         [None, 4, 8, None, None, None, 2, None, None],
         [2, None, 7, None, 4, 5, None, 8, 6],
         [5, None, None, None, None, None, None, None, None]]

        formula = sudoku(board)
        solution = solver.solve(FlatCNF(formula))

        self.assertTrue(solution[0])
        self.assertEqual("true", formula.nnf().cnf().evaluate(solution[1]).__class__.__name__)
예제 #9
0
    def test_SudokuEasy(self):

        solver = SAT_solver()
        board=[[None, None, None, 4, None, None, None, 5, None],
         [None, None, None, None, 1, None, 3, 6, None],
         [None, None, 8, None, None, 6, 9, 4, 7],
         [1, None, 2, None, None, None, None, 9, 5],
         [None, 9, None, 2, None, 1, None, None, None],
         [None, None, None, 5, 9, 3, None, None, None],
         [4, None, None, None, None, None, 1, 7, 9],
         [7, 2, None, 1, None, None, None, None, None],
         [None, 8, None, None, None, 9, None, 2, None]]

        formula = sudoku(board)
        solution = solver.solve(FlatCNF(formula))

        self.assertTrue(solution[0])
        self.assertEqual("true", formula.nnf().cnf().evaluate(solution[1]).__class__.__name__)
예제 #10
0
#!/usr/bin/env python
import sys

sys.path.append("./src")
from sat import SAT_solver
from sudoku import sudoku, printSudoku, processResult


print "================================================="
print "SUDOKU"
print "================================================="

solver = SAT_solver()

# define board as follows.
# board is array with nine arrays (rows).
# rows are arrays of nine elements.
# elements are None or int in [1,9].
# None - empty square.
board = [
    [None, 8, None, 1, 6, None, None, None, 7],
    [1, None, 7, 4, None, 3, 6, None, None],
    [3, None, None, 5, None, None, 4, 2, None],
    [None, 9, None, None, 3, 2, 7, None, 4],
    [None, None, None, None, None, None, None, None, None],
    [2, None, 4, 8, 1, None, None, 6, None],
    [None, 4, 1, None, None, 8, None, None, 6],
    [None, None, 6, 7, None, 1, 9, None, 3],
    [7, None, None, None, 9, 6, None, 4, None],
]
예제 #11
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
 def test_contradiction(self):
     solver = SAT_solver()
     formula = And([Var("A"), Not(Var("A"))])
     result = solver.solve(formula)
     self.assertFalse(result[0])
예제 #12
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
 def test_Or(self):
     solver = SAT_solver()
     formula = Or([Var("A"), Var("B")])
     result = solver.solve(formula)
     self.assertTrue(result[0])
     self.assertEqual("true", formula.nnf().cnf().evaluate(result[1]).__class__.__name__)
예제 #13
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
 def test_variableNegation(self):
     solver = SAT_solver()
     formula = Not(Var("A"))
     result = solver.solve(formula)
     self.assertTrue(result[0])
     self.assertEqual("true", formula.nnf().cnf().evaluate(result[1]).__class__.__name__)
예제 #14
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
 def test_false(self):
     solver = SAT_solver()
     self.assertFalse(solver.solve(false())[0])
예제 #15
0
파일: test_sat.py 프로젝트: urska19/LVR-sat
 def test_true(self):
     solver = SAT_solver()
     self.assertTrue(solver.solve(true())[0])
예제 #16
0
#!/usr/bin/env python
import sys
sys.path.append("./src")
from graphColoring import graph_coloring, printGraph, processResult
from sat import SAT_solver, FlatCNF


#instance of sat solver
solver = SAT_solver()

#graph represented with adjacency matrix
graph = [
    [1, 1, 1],
    [1, 1, 1],
    [1, 1, 1],
]

#number of colors for graph coloring
colors = 3

#construct formula for certain graph and number of colors
formula = graph_coloring(graph, colors)

#solve formula
solution = solver.solve(formula)

#solve2 formula
solution2 = solver.solve(formula,True)

#flatcnf solution
solution3 = solver.solve(FlatCNF(formula))
예제 #17
0
파일: test.py 프로젝트: urska19/LVR-sat
print "Expression (p->True): " + unicode(newexpr2)
print "Expression (z->True): " + unicode(newexpr3)

print "================================================="
print "Testing deduplicate method."
print "================================================="
dedupexpr = And([ Or([Var("x1"), Var("x2")]) ])
print "Expession: " + unicode(dedupexpr) + " -> " + unicode(dedupexpr.deduplicate())
dedupexpr = And([ Or([Var("x1"), Var("x1")]) ])
print "Expession: " + unicode(dedupexpr) + " -> " + unicode(dedupexpr.deduplicate())

print "================================================="
print "================================================="
print "SAT Solver Testing"
print "================================================="
solver = SAT_solver()
for i in globals().keys():
    if i[:4] == "expr":
        print i, ":", unicode(globals()[i]), "->", solver.solve(globals()[i])

print unicode(true()), "->", solver.solve(true())
print "================================================="
print "sudoku"

board=[[4, 8, None, 1, 6, None, None, None, 7],
 [1, None, 7, 4, None, 3, 6, None, None],
 [3, None, None, 5, None, None, 4, 2, None],
 [None, 9, None, None, 3, 2, 7, None, 4],
 [None, None, None, None, None, None, None, None, None],
 [2, None, 4, 8, 1, None, None, 6, None],
 [None, 4, 1, None, None, 8, None, None, 6],
예제 #18
0
 def test_variable(self):
     solver = SAT_solver()
     formula = Var("A")
     result = solver.solve(FlatCNF(formula))
     self.assertTrue(result[0])
     self.assertEqual("true", formula.nnf().cnf().evaluate(result[1]).__class__.__name__)
예제 #19
0
 def test_false(self):
     solver = SAT_solver()
     self.assertFalse(solver.solve(FlatCNF(false()))[0],True)
예제 #20
0
 def test_true(self):
     solver = SAT_solver()
     self.assertTrue(solver.solve(FlatCNF(true()))[0],True)
예제 #21
0
print "Expression: " + unicode(expr4)
print "Evaluate (x->False): " + unicode(expr4.nnf().cnf().deduplicate().evaluate({"x": False}))
print "Evaluate (x->True): " + unicode(expr4.nnf().cnf().deduplicate().evaluate({"x": True}))
#
#==========================================
# SAT solver
#==========================================
# argument - formula
# returns - (boolean value, dictionary)
#         - value indicates if formula is satisfiable.
#         - dictionary represents mapping of variables.
#==========================================
print "================================================="
print "SAT Solver"
print "================================================="
solver = SAT_solver()
for i in globals().keys():
    if i[:4] == "expr":
        print i, ":", unicode(globals()[i]), "->", solver.solve(globals()[i])

print "================================================="
print "SAT Solver - mt"
print "================================================="
solver = SAT_solver()
for i in globals().keys():
    if i[:4] == "expr":
        print i, ":", unicode(globals()[i]), "->", solver.solve(globals()[i],True)


print "================================================="
print "SAT Solver - multiprocess"
예제 #22
0
#!/usr/bin/env python
import sys
sys.path.append("./src")
from sat import SAT_solver, FlatCNF
from sudoku import sudoku, printSudoku, processResult


print "================================================="
print "SUDOKU"
print "================================================="

solver = SAT_solver()

# define board as follows.
# board is array with nine arrays (rows).
# rows are arrays of nine elements.
# elements are None or int in [1,9].
# None - empty square.
board = [[None, 8, None, 1, 6, None, None, None, 7],
        [1, None, 7, 4, None, 3, 6, None, None],
        [3, None, None, 5, None, None, 4, 2, None],
        [None, 9, None, None, 3, 2, 7, None, 4],
        [None, None, None, None, None, None, None, None, None],
        [2, None, 4, 8, 1, None, None, 6, None],
        [None, 4, 1, None, None, 8, None, None, 6],
        [None, None, 6, 7, None, 1, 9, None, 3],
        [7, None, None, None, 9, 6, None, 4, None]]

# print sudoku from board definition.
print "Lab exercise:"
print printSudoku(board)