def standard_get_models(self, desired_number_of_models): result = [] count = 0 self.clock.tick("first model") while True: self.clock.tick("unsat") if (Options.MODE != Common.DEBUG and not(Options.PRODUCE_UNSAT_CORE)and count != desired_number_of_models and self.solver.check() == Common.SAT ) or \ (Options.MODE != Common.DEBUG and Options.PRODUCE_UNSAT_CORE and count != desired_number_of_models and self.solver.check(self.unsat_core_trackers) == Common.SAT ) or \ (Options.MODE == Common.DEBUG and count != desired_number_of_models and self.solver.check(self.unsat_core_trackers) == Common.SAT ): if count == 0: self.clock.tock("first model") m = self.solver.model() result.append(m) # Create a new constraint that blocks the current model if not Options.SUPPRESS_MODELS: self.printVars(m) preventSameModel(self, self.solver, m) count += 1 else: if count == 0 and Options.PRODUCE_UNSAT_CORE: self.clock.tock("unsat") debug_print("UNSAT") core = self.solver.unsat_core() debug_print(str(len(core)) + " constraints in unsat core: \n") for i in core: print(Constraints.interpretUnsatCore(self, str(i))) print() return result elif count == 0: standard_print("UNSAT") return result
def printConstraints(self): standard_print(self.converter.parens("set-info", ":status", "unknown")) for i in self.converter.variables: standard_print(i) for i in self.constraints: standard_print(self.converter.parens("assert", i)) standard_print(self.converter.parens("check-sat")) standard_print(self.converter.parens("get-model"))
def printVars(self, model): self.clock.tick("printing") self.printStartDelimeter() ph = PrintHierarchy.PrintHierarchy(self, model) Visitor.visit(ph, self.module) ph.printTree() standard_print("") self.printEndDelimeter() standard_print("") self.clock.tack("printing")
def printStartDelimeter(self): if Options.DELIMETER == Common.STANDARD_DELIMETER: standard_print("=== Instance " + str(self.delimeter_count+1) + " Begin ===") standard_print("") else: standard_print(Options.DELIMETER)
def GIA(self, desired_number_of_models): metrics_objective_direction = [] metrics_variables = [] for i in self.objectives: (pol, var) = i metrics_objective_direction.append(pol) metrics_variables.append(var) # Non-Parallel GIAOptionsNP = GuidedImprovementAlgorithmOptions(verbosity=0, \ incrementallyWriteLog=False, \ writeTotalTimeFilename="timefile.csv", \ writeRandomSeedsFilename="randomseed.csv", useCallLogs=False, num_models=desired_number_of_models, magnifying_glass=Options.MAGNIFYING_GLASS) if Options.CORES == 1: GIAAlgorithmNP = GuidedImprovementAlgorithm(self, self.solver, metrics_variables, \ metrics_objective_direction, [], options=GIAOptionsNP) '''featurevars instead of []''' outfilename = str("giaoutput").strip() ParetoFront = GIAAlgorithmNP.ExecuteGuidedImprovementAlgorithm(outfilename) if not Options.SUPPRESS_MODELS: if not ParetoFront: standard_print("UNSAT") for i in ParetoFront: self.printVars(i) return ParetoFront else: parSolver = ParSolver.ParSolver(self, self.module, self.solver, metrics_variables, metrics_objective_direction) ParetoFront = parSolver.run() for i in ParetoFront: self.printStartDelimeter() standard_print(i) standard_print("") self.printEndDelimeter() return ParetoFront
def printEndDelimeter(self): if Options.DELIMETER == Common.STANDARD_DELIMETER: standard_print("--- Instance " + str(self.delimeter_count+1) + " End ---") self.delimeter_count = self.delimeter_count + 1