def main(): p = PrologString(""" increaseOsteoblasts :- calcium. 0.5::\+increaseOsteoblasts :- calcium, bispho. reduceOsteoclasts :- bispho. 1.0::\+reduceOsteoclasts :- calcium , bispho. osteoprosis :- initialOsteoprosis. 0.85::\+osteoprosis :- reduceOsteoclasts. % Bisphosphonates 0.15::\+osteoprosis :- increaseOsteoblasts. % Calcium % Prior probabilities 0.5::calcium. 0.5::bispho. 0.5::initialOsteoprosis. % Query probability of effect evidence(initialOsteoprosis, true). evidence(calcium, true). evidence(bispho, false). query(osteoprosis). """) #1.3: Create the CNF of the problog lf = LogicFormula.create_from(p,avoid_name_clash=True, keep_order=True, label_all=True) # ground the program print("Ground program") print(LogicFormula.to_prolog(lf)) dag = LogicDAG.create_from(lf,avoid_name_clash=True, keep_order=True, label_all=True) # break cycles in the ground program cnf = CNF.create_from(dag) # convert to CNF print(CNF.to_dimacs(cnf)) ddnnf = DDNNF.create_from(cnf) # compile CNF to ddnnf test = DDNNF.get_weights(ddnnf) print(test) print(ddnnf.evaluate()) #3.1: Create 4 interpretations print("--Create 4 interpretations--") interpretations = create_interpretations(p_without_evidence, 4) for i in interpretations: print(i) #3.2: Create 100, 1000, 10000 interpretations and estimate p_n print("--Estimate parameters--") estimate_parameters(100) estimate_parameters(1000) estimate_parameters(10000)
person(b). person(c). 0.2::stress(X) :- person(X). 0.1::friends(X,Y) :- person(X), person(Y). 0.3::smokes(X) :- stress(X). 0.4::smokes(X) :- friends(X,Y), smokes(Y). query(smokes(a)). """) lf2 = LogicFormula.create_from(p2, avoid_name_clash=True, keep_order=True, label_all=True) # print(LogicFormula.to_prolog(lf2)) dag2 = LogicDAG.create_from(lf2, avoid_name_clash=True, keep_order=True, label_all=True) print(dag2) print(LogicFormula.to_prolog(dag2)) cnf2 = CNF.create_from(dag2) # for clause in cnf2._clauses: # print(clause) ddnnf2 = DDNNF.create_from(cnf2) print(ddnnf2.evaluate()) import PyBool_public_interface as Bool expr = Bool.parse_std("input.txt") expr = expr["main_expr"] expr = Bool.exp_cnf(expr) print(Bool.print_expr(Bool.simplify(expr)))