Daniel@0: % Same as cg1, except we call stab_cond_gauss_inf_engine Daniel@0: Daniel@0: bnet = mk_incinerator_bnet; Daniel@0: Daniel@0: engines = {}; Daniel@0: engines{end+1} = stab_cond_gauss_inf_engine(bnet); Daniel@0: engines{end+1} = jtree_inf_engine(bnet); Daniel@0: engines{end+1} = cond_gauss_inf_engine(bnet); Daniel@0: nengines = length(engines); Daniel@0: Daniel@0: F = 1; W = 2; E = 3; B = 4; C = 5; D = 6; Min = 7; Mout = 8; L = 9; Daniel@0: n = 9; Daniel@0: dnodes = [B F W]; Daniel@0: cnodes = mysetdiff(1:n, dnodes); Daniel@0: Daniel@0: evidence = cell(1,n); % no evidence Daniel@0: ll = zeros(1, nengines); Daniel@0: for e=1:nengines Daniel@0: [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence); Daniel@0: end Daniel@0: %assert(approxeq(ll(1), ll))) Daniel@0: ll Daniel@0: Daniel@0: % Compare to the results in table on p1107. Daniel@0: % These results are printed to 3dp in Cowell p150 Daniel@0: Daniel@0: mu = zeros(1,n); Daniel@0: sigma = zeros(1,n); Daniel@0: dprob = zeros(1,n); Daniel@0: addev = 1; Daniel@0: tol = 1e-2; Daniel@0: for e=1:nengines Daniel@0: for i=cnodes(:)' Daniel@0: m = marginal_nodes(engines{e}, i, addev); Daniel@0: mu(i) = m.mu; Daniel@0: sigma(i) = sqrt(m.Sigma); Daniel@0: end Daniel@0: for i=dnodes(:)' Daniel@0: m = marginal_nodes(engines{e}, i, addev); Daniel@0: dprob(i) = m.T(1); Daniel@0: end Daniel@0: assert(approxeq(mu([E D C L Min Mout]), [-3.25 3.04 -1.85 1.48 -0.214 2.83], tol)) Daniel@0: assert(approxeq(sigma([E D C L Min Mout]), [0.709 0.770 0.507 0.631 0.459 0.860], tol)) Daniel@0: assert(approxeq(dprob([B F W]), [0.85 0.95 0.29], tol)) Daniel@0: %m = marginal_nodes(engines{e}, bnet.names('E'), addev); Daniel@0: %assert(approxeq(m.mu, -3.25, tol)) Daniel@0: %assert(approxeq(sqrt(m.Sigma), 0.709, tol)) Daniel@0: end Daniel@0: Daniel@0: % Add evidence (p 1105, top right) Daniel@0: evidence = cell(1,n); Daniel@0: evidence{W} = 1; % industrial Daniel@0: evidence{L} = 1.1; Daniel@0: evidence{C} = -0.9; Daniel@0: Daniel@0: ll = zeros(1, nengines); Daniel@0: for e=1:nengines Daniel@0: [engines{e}, ll(e)] = enter_evidence(engines{e}, evidence); Daniel@0: end Daniel@0: %assert(all(approxeq(ll(1), ll))) Daniel@0: ll Daniel@0: Daniel@0: for e=1:nengines Daniel@0: for i=cnodes(:)' Daniel@0: m = marginal_nodes(engines{e}, i, addev); Daniel@0: mu(i) = m.mu; Daniel@0: sigma(i) = sqrt(m.Sigma); Daniel@0: end Daniel@0: for i=dnodes(:)' Daniel@0: m = marginal_nodes(engines{e}, i, addev); Daniel@0: dprob(i) = m.T(1); Daniel@0: end Daniel@0: assert(approxeq(mu([E D C L Min Mout]), [-3.90 3.61 -0.9 1.1 0.5 4.11], tol)) Daniel@0: assert(approxeq(sigma([E D C L Min Mout]), [0.076 0.326 0 0 0.1 0.344], tol)) Daniel@0: assert(approxeq(dprob([B F W]), [0.0122 0.9995 1], tol)) Daniel@0: end Daniel@0: