SAT Solver Projects

Your task is to create a system that solves a given computational problem using a SAT solver. By default we consider decision problems (answer yes/no), but if it is an optimization problem, consider its decision variant: `Does the given instance have a solution whose objective function has at least/at most a given value?’

Deadlines

Guidelines

Use your chosen programming language (Pyhon, C#, C++, Java, Haskell, Rust and similar) and the Glucose 4.2 SAT solver. Do not use any other libraries that can convert fomulas to CNF or do similar non-trivial things.

Write a script/program that:

In your submission, apart from the script you should include several instances, in particular:

Your submission must include a README file (plain text, markdown, or pdf) with a brief documentation explaining:

Ethical Rules

You have to work completely independently without any external help other than the teacher. You can search for additional information about the given problem (e.g. interesting instances or if you are not clear about the specification of the problem), but it must not refer to its encoding into CNF or using the SAT solver to solve it. You must also not read any code solving the given (or related) problem. In case of confusion how to proceed, contact me and I will provide you with assistance or help.

Sample Solution

For inspiration, you can check the sample solution of the 15 Puzzle, that was kindly prepared by Dr. Jirka Švancara (thanks!).

Problem Selection

Each student in the same class will solve a different problem. You can choose a problem from the list below or you can submit your own suggestions for a different problem that you are interested in. In this case, describe the problem and why you choose it. It must be approved first as it should be reasonably difficult (so please also include your preferences for the problems from the list).

Send me your preferences by email by the deadline above. You should include at least 10 problems (no upper bound) of your choice, each on separate line in the order of your preference. In case of conflict in your first preference with other students, I will assign the problem to a random student, and then proceed further in the list. In case you do not send me your preferences by the deadline, you will be assigned a random problem that is left.

Submissions

Final project can be submitted as a link to a public GitHub or GitLab repository, or in .zip file.

List of Problems