DPLL algorithm definition

后端 未结 2 1584
醉酒成梦
醉酒成梦 2021-02-01 11:16

I am having some problems understanding the DPLL algorithm and I was wondering if anyone could explain it to me because I think my understanding is incorrect.

The way I

2条回答
  •  挽巷
    挽巷 (楼主)
    2021-02-01 12:01

    DPLL requires a problem to be stated in disjunctive normal form, that is, as a set of clauses, each of which must be satisfied.

    Each clause is a set of literals {l1, l2, ..., ln}, representing the disjunction of those literals (i.e., at least one literal must be true for the clause to be satisfied).

    Each literal l asserts that some variable is true (x) or that it is false (~x).

    If any literal is true in a clause, then the clause is satisfied.

    If all literals in a clause are false, then the clause is unsatisfiable and hence the problem is unsatisfiable.

    A solution is an assignment of true/false values to the variables such that every clause is satisfied. The DPLL algorithm is an optimised search for such a solution.

    DPLL is essentially a depth first search that alternates between three tactics. At any stage in the search there is a partial assignment (i.e., an assignment of values to some subset of the variables) and a set of undecided clauses (i.e., those clauses that have not yet been satisfied).

    (1) The first tactic is Pure Literal Elimination: if an unassigned variable x only appears in its positive form in the set of undecided clauses (i.e., the literal ~x doesn't appear anywhere) then we can just add x = true to our assignment and satisfy all the clauses containing the literal x (similarly if x only appears in its negative form, ~x, we can just add x = false to our assignment).

    (2) The second tactic is Unit Propagation: if all but one of the literals in an undecided clause are false, then the remaining one must be true. If the remaining literal is x, we add x = true to our assignment; if the remaining literal is ~x, we add x = false to our assignment. This assignment can lead to further opportunities for unit propagation.

    (3) The third tactic is to simply choose an unassigned variable x and branch the search: one side trying x = true, the other trying x = false.

    If at any point we end up with an unsatisfiable clause then we have reached a dead end and have to backtrack.

    There are all sorts of clever further optimisations, but this is the core of almost all SAT solvers.

    Hope this helps.

提交回复
热议问题