def main_mpe_maxsat(args): inputfile = args.inputfile if args.web: result_handler = print_result_json else: result_handler = print_result if args.output is not None: outf = open(args.output, 'w') else: outf = sys.stdout with Timer("Total"): try: pl = PrologFile(inputfile) dag = LogicDAG.createFrom(pl, avoid_name_clash=True, label_all=True, labels=[('output', 1)]) prob, output_facts = mpe_maxsat(dag, verbose=args.verbose, solver=args.solver) result_handler((True, (prob, output_facts)), outf) except Exception as err: trace = traceback.format_exc() err.trace = trace result_handler((False, err), outf) if args.output is not None: outf.close()
def main_mpe_maxsat(args): inputfile = args.inputfile if args.web: result_handler = print_result_json else: result_handler = print_result if args.output is not None: outf = open(args.output, "w") else: outf = sys.stdout with Timer("Total"): try: pl = PrologFile(inputfile) # filtered_pl = SimpleProgram() # has_queries = False # for statement in pl: # if 'query/1' in statement.predicates: # has_queries = True # else: # filtered_pl += statement # if has_queries: # print('%% WARNING: ignoring queries in file', file=sys.stderr) dag = LogicDAG.createFrom( pl, avoid_name_clash=True, label_all=True, labels=[("output", 1)] ) prob, output_facts = mpe_maxsat( dag, verbose=args.verbose, solver=args.solver, minpe=args.minpe ) result_handler((True, (prob, output_facts)), outf) except Exception as err: trace = traceback.format_exc() err.trace = trace result_handler((False, err), outf) if args.output is not None: outf.close()
def main(filename, output): model = PrologFile(filename) engine = DefaultEngine(label_all=True) with Timer("parsing"): db = engine.prepare(model) print("\n=== Database ===") print(db) print("\n=== Queries ===") queries = engine.query(db, Term("query", None)) print("Queries:", ", ".join([str(q[0]) for q in queries])) print("\n=== Evidence ===") evidence = engine.query(db, Term("evidence", None, None)) print("Evidence:", ", ".join(["%s=%s" % ev for ev in evidence])) print("\n=== Ground Program ===") with Timer("ground"): gp = engine.ground_all(db) print(gp) print("\n=== Acyclic Ground Program ===") with Timer("acyclic"): gp = LogicDAG.createFrom(gp) print(gp) print("\n=== Conversion to CNF ===") with Timer("convert to CNF"): cnf = CNF.createFrom(gp) with open(output, "w") as f: f.write(cnf.to_dimacs(weighted=False, names=True))
def main(filename, with_dot, knowledge): dotprefix = None if with_dot: dotprefix = os.path.splitext(filename)[0] + "_" model = PrologFile(filename) engine = DefaultEngine(label_all=True) with Timer("parsing"): db = engine.prepare(model) print("\n=== Database ===") print(db) print("\n=== Queries ===") queries = engine.query(db, Term("query", None)) print("Queries:", ", ".join([str(q[0]) for q in queries])) print("\n=== Evidence ===") evidence = engine.query(db, Term("evidence", None, None)) print("Evidence:", ", ".join(["%s=%s" % ev for ev in evidence])) print("\n=== Ground Program ===") with Timer("ground"): gp = engine.ground_all(db) print(gp) if dotprefix != None: with open(dotprefix + "gp.dot", "w") as f: print(gp.toDot(), file=f) print("\n=== Acyclic Ground Program ===") with Timer("acyclic"): gp = LogicDAG.createFrom(gp) print(gp) if dotprefix != None: with open(dotprefix + "agp.dot", "w") as f: print(gp.toDot(), file=f) if knowledge == "sdd": print("\n=== SDD compilation ===") with Timer("compile"): nnf = SDD.createFrom(gp) if dotprefix != None: nnf.saveSDDToDot(dotprefix + "sdd.dot") else: print("\n=== Conversion to CNF ===") with Timer("convert to CNF"): cnf = CNF.createFrom(gp) print("\n=== Compile to d-DNNF ===") with Timer("compile"): nnf = DDNNF.createFrom(cnf) if dotprefix != None: with open(dotprefix + "nnf.dot", "w") as f: print(nnf.toDot(), file=f) print("\n=== Evaluation result ===") with Timer("evaluate"): result = nnf.evaluate() for it in result.items(): print("%s : %s" % (it))