コード例 #1
0
    role_constraints = utils.get_role_constraints(roles, instances)
    formulas = get_formulas(args.formula_file)
    domains = get_domains(roles, instances)
    # generates the markov logic network
    mln = MLN(logic="FirstOrderLogic", grammar="PRACGrammar")
    for domain, values in domains.items():  # domains
        for value in values:
            if len(value) > 1:
                const = ''.join(value)
            elif len(value) > 0:
                const = value[0]
            else:
                const = "None"
            mln.update_domain({domain: [const]})
    for role in roles.keys():  # predicates
        mln.predicate(Predicate(
            role, [role + "_d!"]))  # hard-functional constraints only
    for formula in formulas:  # formulas
        formula_str = "0.0 "
        for idx in range(len(formula)):
            role = formula[idx]
            if idx + 1 < len(formula):
                formula_str += role + "(+?" + role[:2] + ")" + " ^ "
            else:
                formula_str += role + "(+?" + role[:2] + ")"
        mln << formula_str
    mln.write()
    mln.tofile(args.output_mln)
    print("The initial MLN has been written to '" + args.output_mln + "'.")
    print("Verify the MLN using the print out above.")
    print("NOTE: Weights of '" + args.output_mln + "' have NOT been learned.")
コード例 #2
0
     "LocInRoom": [["locations", "rooms"], ["IsLocation(?x)",
                                            "IsRoom(?y)"]],
     "ObjOnLoc": [["objects", "locations"],
                  ["IsObject(?x)", "IsLocation(?y)"]],
     "ObjInLoc": [["objects", "locations"],
                  ["IsObject(?x)", "IsLocation(?y)"]],
     "ObjCanBe": [["objects", "actions"], ["IsObject(?x)", "IsAction(?y)"]],
     "ObjUsedTo": [["objects", "actions"], ["IsObject(?x)",
                                            "IsAction(?y)"]],
     "ObjhasState": [["objects", "states"], ["IsObject(?x)",
                                             "IsState(?y)"]],
     "OperatesOn": [["objects", "objects"],
                    ["IsObject(?x)", "IsObject(?y)"]]
 }
 for rel in r2i.keys():
     mln.predicate(Predicate(rel, rel2mln[rel][0]))
 mln.predicate(Predicate("IsRoom", ["rooms"]))
 mln.predicate(Predicate("IsLocation", ["locations"]))
 mln.predicate(Predicate("IsObject", ["objects"]))
 mln.predicate(Predicate("IsAction", ["actions"]))
 mln.predicate(Predicate("IsState", ["states"]))
 # declares the markov logic formulas in the markov logic network
 for pred in mln.iterpreds():
     if "Is" not in pred.name:
         mln << "0.0 " + rel2mln[pred.name][1][0] + " ^ " + rel2mln[
             pred.name][1][1] + " ^ " + pred.name + "(?x, ?y)"
 # loads the 'evidence' to learn markov logic network weights
 db = Database(mln)
 for ent in e2i.keys():
     ent_type = ent.split("-")[-1]
     if ent_type == "r":