Beispiel #1
0
 def __init__(self, variables, clauses, verbose=True):
     self.verbose = verbose
     self.variables = variables
     self.clauses = ClauseSet(variables, clauses)
     self.assignment = Assignment(variables)
     self.queue = self.variables[:]
     self.counts = [dict(), dict()]
Beispiel #2
0
 def gather(self, verbose=True):
     os.system("rm -f " + BulkGatherer.BUFFER_FILE)
     for i, part in tqdm.tqdm(list(enumerate(os.scandir(self.folder))),
                              disable=not verbose):
         if i == 0:
             os.system("head -n 1 {path} >> {out}".format(
                 path=os.path.join(part.path, Inputs.ASSIGNMENT_PATH),
                 out=BulkGatherer.BUFFER_FILE))
         os.system("tail -n +2 {path} >> {out}".format(
             path=os.path.join(part.path, Inputs.ASSIGNMENT_PATH),
             out=BulkGatherer.BUFFER_FILE))
     assignment = Assignment([])
     assignment.load(BulkGatherer.BUFFER_FILE)
     os.system("rm -f " + BulkGatherer.BUFFER_FILE)
     return assignment
Beispiel #3
0
 def solve(self, variables_path=None, constraints_path=None):
     open(self.gurobi_log_file, "w").close()
     self.model.params.Threads = 12
     self.model.optimize()
     self.assignment = Assignment(self.variables)
     f_vars, f_cstr = None, None
     if constraints_path is not None:
         f_cstr = open(constraints_path, "w")
         f_cstr.write("\t".join(Ilp.cstr_attrs) + "\n")
     if f_cstr is not None:
         for constraint in self.model.getConstrs():
             for attr in Ilp.cstr_attrs:
                 value = ""
                 try:
                     value = constraint.getAttr(attr)
                 except:
                     pass
                 f_cstr.write(str(value) + "\t")
             f_cstr.write("\n")
         f_cstr.close()
     if variables_path is not None:
         f_vars = open(variables_path, "w")
         f_vars.write("\t".join(Ilp.vars_attrs) + "\n")
     inner_confidence = []
     for gurobi_var in self.model.getVars():
         if gurobi_var.varName[0] not in "PTRS":
             continue
         if gurobi_var.rc == 0:
             up = min(2, gurobi_var.SAObjUp)
             low = max(-2, gurobi_var.SAObjLow)
             inner_confidence.append((gurobi_var.x - .51) * (up - low))
         if len(inner_confidence) == 0:
             a, b = 0, 1
         else:
             a, b = min(inner_confidence), max(inner_confidence)
     for gurobi_var in self.model.getVars():
         if f_vars is not None:
             for attr in Ilp.vars_attrs:
                 value = ""
                 try:
                     value = gurobi_var.getAttr(attr)
                 except:
                     pass
                 f_vars.write(str(value) + "\t")
             f_vars.write("\n")
         letter = gurobi_var.varName[0]
         if letter not in "PTRS":
             continue
         index = int(gurobi_var.varName[2:-1])
         confidence = 0
         if gurobi_var.rc != 0:
             confidence = gurobi_var.rc
         else:
             confidence = gurobi_var.x + gurobi_var.obj + Parameters.EVIDENCE_OFFSET
         self.assignment.assign(
             Variable(index, Dimensions.from_letter(letter)),
             gurobi_var.x >= .5,
             confidence,
         )
     if f_vars is not None:
         f_vars.close()
     return self.assignment
Beispiel #4
0
 def load_assignment(self):
     if os.path.isfile(self.path(self.ASSIGNMENT_PATH)):
         from dice.reason import Assignment
         self._assignment = Assignment([])
         self._assignment.load(self.path(self.ASSIGNMENT_PATH))