示例#1
0
 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
示例#2
0
 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"))
示例#3
0
 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"))
示例#4
0
 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")
示例#5
0
 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)
示例#6
0
    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
示例#7
0
 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