Three Satisfiability Example

This example uses the convex-concave procedure to solve the 3- Satisfiability problem. That is, find a Boolean assignment such that a set of expressions consisting of three disjunctions and possibly negations evaluate to true. Details can be found in section 5.1 of Variations and Extension of the Convex-Concave Procedure.

This code allows for initialization with an LP relaxation, as well as repeted random initialization.

This example uses CVX, which is available here. You can download the code tsat_example.m, along with the two subroutines generate_3sat.m and boollp_cvxccv.m.

Contents

close all force
clear all

Problem generation parameters

rand('state',0);
n = 40; % number of variables
m = 150; % number of expressions
trials = 5; % number of initializations to use at each size
[A b] = generate_3sat(m,n);

Algorithm Parameters

iterations = 100;% maximum number of iterations to be run, this number will almost never be hit1
tol = 1e-3;% tolerance to use as a stopping criteria
lp_relax = 1; %attempt to solve initializing from the LP relaxation 

Solve 3-SAT using an LP relaxation initialization

if(lp_relax)
    %solve the lp relaxation for initialization
    cvx_begin quiet
    variable x_0(n)
    minimize sum(abs(x_0-.5))
    subject to
    0 <= x_0;
    x_0 <= 1;
    A*x_0 <= b;
    cvx_end
    [x_lp_relax violation_lp] = boollp_cvxccv(x_0,A,b,tol,iterations);
end

Solve 3-SAT using a random initialization

violation = inf;
trial = 0;
while(trial < trials && violation ~=0)
    x_0 = rand(n,1);%generate an initial random starting configuration
    [x_new violation_new] = boollp_cvxccv(x_0,A,b,tol,iterations);
    if(violation_new < violation)
        violation = violation_new;
        x = x_new;
    end
    trial = trial+1;
end

fprintf('The LP relaxation initialization had %d violations.\n',violation_lp);
fprintf('After %d random initializations, a solution with %d violations was found.\n',trial, violation);
The LP relaxation initialization had 0 violations.
After 4 random initializations, a solution with 0 violations was found.