Example #1
0
def solve(num_vars, clauses, maxflips):
    
    UpdateUnsatWeights = localsearch.incrementUnsatWeights
    RndInterpretationGenerator = localsearch.randomInterpretation    
    InitializeClausesData = localsearch.initializeWeightedClausesData
    ChoseAndFlipVar = localsearch.weightedChoseAndFlipVar
    
    num_clauses = len(clauses)
    var_range = xrange(1, num_vars+1)
    flip_range = xrange(maxflips)
    litclauses = datautil.classifyClausesByVariable(num_vars, clauses)
    
    csatlits = { c: 0 for c in clauses }
    cweight = { c : 1 for c in clauses }
    
    
    while True:
        rintp = RndInterpretationGenerator(num_vars)
        num_satclauses = InitializeClausesData(clauses, rintp, csatlits,
                                               cweight)
        
        if num_satclauses == num_clauses:
            return rintp
        
        for i in flip_range:
            num_satclauses = ChoseAndFlipVar(litclauses, rintp, csatlits,
                                             cweight, num_satclauses,
                                             var_range)
                                    
            if num_satclauses == num_clauses:
                return rintp
                
            UpdateUnsatWeights(clauses, rintp, cweight)    
Example #2
0
def solve(num_vars, clauses, maxflips):

    UpdateUnsatWeights = localsearch.incrementUnsatWeights
    RndInterpretationGenerator = localsearch.randomInterpretation
    InitializeClausesData = localsearch.initializeWeightedClausesData
    ChoseAndFlipVar = localsearch.weightedChoseAndFlipVar

    num_clauses = len(clauses)
    var_range = xrange(1, num_vars + 1)
    flip_range = xrange(maxflips)
    litclauses = datautil.classifyClausesByVariable(num_vars, clauses)

    csatlits = {c: 0 for c in clauses}
    cweight = {c: 1 for c in clauses}

    while True:
        rintp = RndInterpretationGenerator(num_vars)
        num_satclauses = InitializeClausesData(clauses, rintp, csatlits,
                                               cweight)

        if num_satclauses == num_clauses:
            return rintp

        for i in flip_range:
            num_satclauses = ChoseAndFlipVar(litclauses, rintp, csatlits,
                                             cweight, num_satclauses,
                                             var_range)

            if num_satclauses == num_clauses:
                return rintp

            UpdateUnsatWeights(clauses, rintp, cweight)
Example #3
0
def solve(num_vars, clauses, maxflips, wprob):
    """
    Solve(num_vars, clauses, litclauses, maxflips, wprob) -> [None,bool,...]

    Try to find an interpretation that satisfies the given formula.

    The solution is composed by list of boolean values, but the first element
    (index 0) should be None. Otherwise an error has happened.

    Note: there can't be repeated clauses or literals into a clause in the 
    formula

    """

    UpdateUnsatWeights = localsearch.incrementUnsatWeights
    RndInterpretationGenerator = localsearch.randomInterpretation    
    InitializeClausesData = localsearch.initializeWeightedClausesData
    ChoseAndFlipVar = localsearch.weightedChoseAndFlipVar
    
    num_clauses = len(clauses)
    var_range = xrange(1, num_vars+1)
    flip_range = xrange(maxflips)
    litclauses = datautil.classifyClausesByVariable(num_vars, clauses)    
    
    csatlits = { c: 0 for c in clauses }
    cweight = { c : 1 for c in clauses }
      
    while True:
        rintp = RndInterpretationGenerator(num_vars)
        num_satclauses = InitializeClausesData(clauses, rintp, csatlits, 
                                               cweight)     
        
        if num_satclauses == num_clauses:
            return rintp
        
        for i in flip_range:
            prob = random.random()
                        
            if prob < wprob:
                num_satclauses = randomWalk(clauses, litclauses, rintp,
                                            csatlits, num_satclauses)
                                            
            else:
                num_satclauses = ChoseAndFlipVar(litclauses, rintp, csatlits,
                                                 cweight, num_satclauses,
                                                 var_range)

            if num_satclauses == num_clauses:
                return rintp

            UpdateUnsatWeights(clauses, rintp, cweight)