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
def Check(cnf, model, Tracker): CurrentUnit = createAssignments(len(cnf[0]), model) newC = GST.testAssignments(cnf, CurrentUnit) Tracker.compare(newC) return newC
def testAssignments(cnf, myAssign): fitness = [] for assignment in myAssign: fitness.append(GST.testAssignments(cnf,assignment)) return fitness