def GetBestHerustic(cnf, assignment):
    BestAssign = GST.DeepCopy(assignment)
    BestC = GST.testAssignments(cnf,assignment)
    for i in range(len(assignment)):
        #node change
        assignment[i] *= -1
        tempC = GST.testAssignments(cnf,assignment)
        if(tempC > BestC):
            BestC = tempC
            BestAssign = GST.DeepCopy(assignment)
        assignment[i] *= -1 #reverse node change and continue loop with next node

    return BestAssign, BestC
def GetBestAssignment(cnf, assignment):
    BestAssign = GST.DeepCopy(assignment)
    BestC = GST.testAssignments(cnf, assignment)
    for i in range(len(assignment)):
        # change node
        assignment[i] *= -1
        tempC = GST.testAssignments(cnf, assignment)
        if tempC > BestC:
            BestC = tempC
            BestAssign = GST.DeepCopy(assignment)
        # reverse node change, continue loop through with next node
        assignment[i] *= -1

    return BestAssign, BestC
def HillClimbing(cnf, assignment):
    CurrentEval = GST.testAssignments(cnf, assignment)
    NextAssignment, NextEval = GetBestHerustic(cnf, assignment)
    if(NextEval<=CurrentEval):
        return CurrentEval
    else:
        return HillClimbing(cnf, NextAssignment)
def HillClimbing(cnf, assignment):
    CurrentEval = GST.testAssignments(cnf, assignment)
    NextAssignment, NextEval = GetBestAssignment(cnf, assignment)
    if NextEval <= CurrentEval:
        # print(CurrentEval)
        return CurrentEval
    else:
        # print("dig")
        return HillClimbing(cnf, NextAssignment)
def Solve(cnf, s):
    AveC=[]
    HighC = -1
    for i in range(s):
        Best = -1
        MyAssignment = GST.GenerateRandomAssignment(len(cnf[0]))
        newC = HillClimbing(cnf, MyAssignment)
        if newC > Best:
            Best = newC
            if Best > HighC:
                HighC = Best
            if(Best == len(cnf)):
                print("It is Satisfiable")
                AveC.append(Best)
                return sum(AveC)/len(AveC), HighC
            else:
                print("It is Unsatisfiable")
        AveC.append(Best)
    return sum(AveC)/len(AveC), HighC
Beispiel #6
0
def Check(cnf, model, Tracker):
    CurrentUnit = createAssignments(len(cnf[0]), model)
    newC = GST.testAssignments(cnf, CurrentUnit)
    Tracker.compare(newC)
    return newC
Beispiel #7
0
def testAssignments(cnf, myAssign):
    fitness = []
    for assignment in myAssign:
        fitness.append(GST.testAssignments(cnf,assignment))
    return fitness