:- module(test_bddem, [test_bddem/0]). :- use_module(library(plunit)). :- use_module(library(bddem)). :- rand_seed(100). test_bddem:- run_tests([ prob,em, sampling, dtprob ]). v1_0(Env,R,BDD):- add_var(Env,[0.4,0.6],R,V),equality(Env,V,0,BDD). v2_0(Env,R,Val,BDD):- add_var(Env,[0.4,0.3,0.3],R,V),equality(Env,V,Val,BDD). prepare_vars(Env,Rainy,Windy,Umbrella,Raincoat):- add_var(Env,[0.3,0.7],0,VRainy), add_var(Env,[0.5,0.5],1,VWindy), add_decision_var(Env,3,VRaincoat), add_decision_var(Env,2,VUmbrella), equality(Env,VRainy,0,Rainy), equality(Env,VWindy,0,Windy), equality(Env,VUmbrella,0,Umbrella), equality(Env,VRaincoat,0,Raincoat). dry(Env,BDDD,Rainy,Windy,Umbrella,Raincoat):- bdd_not(Env,Rainy,BDDNR), and(Env,Rainy,Raincoat,BDDRR), and(Env,Rainy,Umbrella,BDDRU), broken_umbrella(Env,BDDBU,Rainy,Windy,Umbrella), bdd_not(Env,BDDBU,BDDNBU), and(Env,BDDRU,BDDNBU,BDDRUNBU), or(Env,BDDNR,BDDRR,BDDOR), or(Env,BDDOR,BDDRUNBU,BDDD). broken_umbrella(Env,BDDBU,Rainy,Windy,Umbrella):- and(Env,Rainy,Windy,RU), and(Env,RU,Umbrella,BDDBU). :- begin_tests(prob, []). :-ensure_loaded(library(bddem)). test(one):- init(Env), v1_0(Env,0,BDD), ret_prob(Env,BDD,P), end(Env), P=:=0.4. test(and):- init(Env), v1_0(Env,0,BDD1), v1_0(Env,0,BDD2), and(Env,BDD1,BDD2,BDD), ret_prob(Env,BDD,P), end(Env), P=:=0.4*0.4. test(or):- init(Env), v1_0(Env,0,BDD1), v1_0(Env,0,BDD2), or(Env,BDD1,BDD2,BDD), ret_prob(Env,BDD,P), end(Env), P=:=0.4+0.4-0.4*0.4. test(nor):- init(Env), v1_0(Env,0,BDD1), v1_0(Env,0,BDD2), or(Env,BDD1,BDD2,BDDN), bdd_not(Env,BDDN,BDD), ret_prob(Env,BDD,P), end(Env), P=:=1-(0.4+0.4-0.4*0.4). :- end_tests(prob). :- begin_tests(em, []). :-ensure_loaded(library(bddem)). test(one):- init_em(Cont), ex1(Cont,BDD1), ex1(Cont,BDD2), ex2(Cont,BDD3), em(Cont,[2,2],[[BDD1,1.0],[BDD2,1.0],[BDD3,1.0]],0.0001,0.001,100,LL,Par,ExP), writeln(LL), writeln(Par), writeln(ExP), end_em(Cont), abs(LL)< 1e-4. ex1(Cont,BDD):- init_ex(Cont,Env), v1_0(Env,0,B0), v1_0(Env,1,B1), or(Env,B0,B1,BDD), end_ex(Cont). ex2(Cont,BDD):- init_ex(Cont,Env), v1_0(Env,0,B00), v1_0(Env,1,B1), bdd_not(Env,B00,B0), or(Env,B0,B1,BDD), end_ex(Cont). test(one_dir):- init_em(Cont), ex1(Cont,BDD1), ex1(Cont,BDD2), ex2(Cont,BDD3), initial_values(Cont,1.0), em(Cont,[2,2],[[BDD1,1.0],[BDD2,1.0],[BDD3,1.0]],0.0001,0.001,100,LL,Par,ExP), writeln(LL), writeln(Par), writeln(ExP), end_em(Cont), abs(LL)< 1e-3. test(one_dir1):- init_em(Cont), ex1(Cont,BDD1), ex1(Cont,BDD2), ex2(Cont,BDD3), ex3(Cont,BDD4), ex4(Cont,BDD5), initial_values(Cont,1.0), em(Cont,[2,2,3],[[BDD1,1.0],[BDD2,1.0],[BDD3,1.0],[BDD4,1.0],[BDD5,1.0]],0.0001,0.001,100,LL,Par,ExP), writeln(LL), writeln(Par), writeln(ExP), end_em(Cont), abs(LL)< 1e-3. ex3(Cont,BDD):- init_ex(Cont,Env), v2_0(Env,2,1,B00), v2_0(Env,2,2,B1), bdd_not(Env,B00,B0), or(Env,B0,B1,BDD), end_ex(Cont). ex4(Cont,BDD):- init_ex(Cont,Env), v2_0(Env,2,0,B0), v2_0(Env,2,2,B1), or(Env,B0,B1,BDD), end_ex(Cont). :- end_tests(em). :- begin_tests(sampling, []). :-ensure_loaded(library(bddem)). :- use_module(library(apply)). relatively_close_to(V,T,E):- TLow is T*(1-E), THigh is T*(1+E), TLow=